public static void addDecisiontTableRuleToRuleset(
      RuleDictionary dict, BucketSet ageBucketSet, RuleSet ruleset) throws Exception {

    RuleSheetTable sheetTable = ruleset.getRuleSheetTable();
    RuleSheet dt = sheetTable.getByName("Proposal");

    if (dt != null) {
      System.out.println("Proposal already exists, skipping add");
    } else {
      // Add a new Rulesheet aka DecisionTable
      dt = ruleset.getRuleSheetTable().add();
      dt.setName("Proposal");

      // Add two dimensions aka condition rows to table
      Dimension[] conditions = new Dimension[2];

      // First Row
      conditions[0] = dt.getDimensionTable().add();
      conditions[0].setValue("Person.age");
      conditions[0].setSharedBucketSet(ageBucketSet);

      // Second Row
      conditions[1] = dt.getDimensionTable().add();
      conditions[1].setValue("Person.policy_type");
      conditions[1].setSharedBucketSetByAlias("Person$PolicyType");

      System.out.println("RuleTable size is " + dt.getDTRuleTable().size());

      DTAction dtAction = dt.getDTActionTable().add();
      dtAction.setForm(Action.FORM_ASSERT_NEW);
      dtAction.setTarget("Product");
      dtAction.setAlwaysSelected(true);

      Expression assertExp = dtAction.getExpressionByParameterAlias("name");
      assertExp.setDTActionParameterName("name");
      assertExp.setValue("\"PROD_TYPE1\"");

      System.out.println("1. Rules can be added? " + dt.getDTRuleTable().canAdd());
      DTRule dtRuleDef = dt.getDTRuleTable().get(0);

      dtRuleDef.getDimensionNode(0).setValues("Minor");
      dtRuleDef.getDimensionNode(1).setValues("INDIVIDUAL");

      if (!RuleUtil.updateRuleDictionary(dict)) {
        System.out.println("Dictionary update failed.");
      } else {
        System.out.println("Updated dictionary");
      }

      // 2 ---------------------------------------------
      System.out.println("2. Rules can be added? " + dt.getDTRuleTable().canAdd());
      DTRule dtRuleDef1 = dt.getDTRuleTable().add();
      dtRuleDef1.getDimensionNode(0).setValues("Junior");
      dtRuleDef1.getDimensionNode(1).setValues("GROUP");

      if (!RuleUtil.updateRuleDictionary(dict)) {
        System.out.println("Dictionary update failed.");
      } else {
        System.out.println("Updated dictionary");
      }

      Expression expr = dtRuleDef1.getDTActionNode(0).getExpressionByDTActionParameterName("name");
      dtRuleDef1.getDTActionNode(0).setActionSelected(true);
      if (expr != null) {
        expr.setValue("\"PROD_TYPE2\"");
      }

      // 3 ---------------------------------------------
      System.out.println("3. Rules can be added? " + dt.getDTRuleTable().canAdd());
      DTRule dtRuleDef3 = dt.getDTRuleTable().add();
      dtRuleDef3.getDimensionNode(0).setValues("Middle");
      dtRuleDef3.getDimensionNode(1).setValues("INDIVIDUAL");

      if (!RuleUtil.updateRuleDictionary(dict)) {
        System.out.println("UNABLE to update dictionary.");
      } else {
        System.out.println("Updated dictionary");
      }

      Expression expr3 = dtRuleDef3.getDTActionNode(0).getExpressionByDTActionParameterName("name");
      dtRuleDef3.getDTActionNode(0).setActionSelected(true);
      if (expr3 != null) {
        expr3.setValue("\"PROD_TYPE3\"");
      }

      // 4 ---------------------------------------------
      System.out.println("4. Rules can be added? " + dt.getDTRuleTable().canAdd());
      DTRule dtRuleDef4 = dt.getDTRuleTable().add();
      dtRuleDef4.getDimensionNode(0).setValues("Senior");
      dtRuleDef4.getDimensionNode(1).setValues("GROUP");

      if (!RuleUtil.updateRuleDictionary(dict)) {
        System.out.println("Dictionary update failed.");
      } else {
        System.out.println("Updated dictionary");
      }

      Expression expr4 = dtRuleDef4.getDTActionNode(0).getExpressionByDTActionParameterName("name");
      dtRuleDef4.getDTActionNode(0).setActionSelected(true);
      if (expr4 != null) {
        expr4.setValue("\"PROD_TYPE4\"");
      }

      // 5 ---------------------------------------------
      System.out.println("5. Rules can be added? " + dt.getDTRuleTable().canAdd());
      DTRule dtRuleDef5 = dt.getDTRuleTable().add();
      dtRuleDef5.getDimensionNode(0).setValues("Senior");
      dtRuleDef5.getDimensionNode(1).setValues("UNKNOWN");

      if (!RuleUtil.updateRuleDictionary(dict)) {
        System.out.println("Dictionary update failed.");
      } else {
        System.out.println("Updated dictionary");
      }

      Expression expr5 = dtRuleDef5.getDTActionNode(0).getExpressionByDTActionParameterName("name");
      dtRuleDef5.getDTActionNode(0).setActionSelected(true);
      if (expr5 != null) {
        expr5.setValue("\"PROD_TYPE0\"");
      }

      System.out.println("Rule table now contains " + dt.getDTRuleTable().size() + " rules");
    }
  }