// Copy values from one (transient) model column into another
 private void populateModelColumn(
     final ActionSetFieldCol col, final ActionSetFieldCol editingCol) {
   col.setBoundName(editingCol.getBoundName());
   col.setType(editingCol.getType());
   col.setFactField(editingCol.getFactField());
   col.setHeader(editingCol.getHeader());
   col.setValueList(editingCol.getValueList());
   col.setDefaultValue(editingCol.getDefaultValue());
   col.setHideColumn(editingCol.isHideColumn());
   col.setUpdate(editingCol.isUpdate());
 }
  // public void testGetCol() {
  // GuidedDecisionTable dt = new GuidedDecisionTable();
  // AttributeCol at1 = new AttributeCol();
  // ConditionCol condition1 = new ConditionCol();
  // ActionCol action1 = new ActionInsertFactCol();
  // dt.attributeCols.add(at1);
  // dt.conditionCols.add(condition1);
  // dt.actionCols.add(action1);
  //
  // assertEquals(at1, dt.getColumnConfiguration(0));
  // assertEquals(condition1, dt.getColumnConfiguration(1));
  // assertEquals(action1, dt.getColumnConfiguration(2));
  //
  //
  // AttributeCol at2 = new AttributeCol();
  // dt.attributeCols.add(at2);
  // assertEquals(at1, dt.getColumnConfiguration(0));
  // assertEquals(at2, dt.getColumnConfiguration(1));
  // assertEquals(condition1, dt.getColumnConfiguration(2));
  // assertEquals(action1, dt.getColumnConfiguration(3));
  //
  // ConditionCol condition2 = new ConditionCol();
  // dt.conditionCols.add(condition2);
  //
  // assertEquals(at1, dt.getColumnConfiguration(0));
  // assertEquals(at2, dt.getColumnConfiguration(1));
  // assertEquals(condition1, dt.getColumnConfiguration(2));
  // assertEquals(condition2, dt.getColumnConfiguration(3));
  // assertEquals(action1, dt.getColumnConfiguration(4));
  //
  // ActionCol action2 = new ActionInsertFactCol();
  // dt.actionCols.add(action2);
  // assertEquals(at1, dt.getColumnConfiguration(0));
  // assertEquals(at2, dt.getColumnConfiguration(1));
  // assertEquals(condition1, dt.getColumnConfiguration(2));
  // assertEquals(condition2, dt.getColumnConfiguration(3));
  // assertEquals(action1, dt.getColumnConfiguration(4));
  // assertEquals(action2, dt.getColumnConfiguration(5));
  //
  //
  //
  // dt.attributeCols = new ArrayList();
  // assertEquals(condition1, dt.getColumnConfiguration(0));
  // assertEquals(condition2, dt.getColumnConfiguration(1));
  // assertEquals(action1, dt.getColumnConfiguration(2));
  // assertEquals(action2, dt.getColumnConfiguration(3));
  //
  // dt.conditionCols = new ArrayList();
  // assertEquals(action1, dt.getColumnConfiguration(0));
  // assertEquals(action2, dt.getColumnConfiguration(1));
  //
  //
  //
  //
  //
  //
  // }
  @Test
  public void testValueLists() {
    TypeSafeGuidedDecisionTable dt = new TypeSafeGuidedDecisionTable();

    // add cols for LHS
    ConditionCol c1 = new ConditionCol();
    c1.setBoundName("c1");
    c1.setFactType("Driver");
    c1.setFactField("name");
    c1.setConstraintValueType(BaseSingleFieldConstraint.TYPE_LITERAL);
    dt.getConditionCols().add(c1);

    ConditionCol c1_ = new ConditionCol();
    c1_.setBoundName("c1");
    c1_.setFactType("Driver");
    c1_.setFactField("name");
    c1_.setConstraintValueType(BaseSingleFieldConstraint.TYPE_RET_VALUE);

    dt.getConditionCols().add(c1_);

    ConditionCol c1__ = new ConditionCol();
    c1__.setBoundName("c1");
    c1__.setFactType("Driver");
    c1__.setFactField("name");
    c1__.setConstraintValueType(BaseSingleFieldConstraint.TYPE_LITERAL);
    c1__.setValueList("one,two,three");
    dt.getConditionCols().add(c1__);

    ConditionCol c2 = new ConditionCol();
    c2.setBoundName("c2");
    c2.setFactType("Driver");
    c2.setFactField("nothing");
    c2.setConstraintValueType(BaseSingleFieldConstraint.TYPE_LITERAL);
    dt.getConditionCols().add(c2);

    ActionSetFieldCol asf = new ActionSetFieldCol();
    asf.setBoundName("c1");
    asf.setFactField("name");
    dt.getActionCols().add(asf);

    ActionInsertFactCol ins = new ActionInsertFactCol();
    ins.setBoundName("x");
    ins.setFactField("rating");
    ins.setFactType("Person");
    dt.getActionCols().add(ins);

    ActionInsertFactCol ins_ = new ActionInsertFactCol();
    ins_.setBoundName("x");
    ins_.setFactField("rating");
    ins_.setFactType("Person");
    ins_.setValueList("one,two,three");
    dt.getActionCols().add(ins_);

    ActionSetFieldCol asf_ = new ActionSetFieldCol();
    asf_.setBoundName("c1");
    asf_.setFactField("goo");
    dt.getActionCols().add(asf_);

    ActionSetFieldCol asf__ = new ActionSetFieldCol();
    asf__.setBoundName("c1");
    asf__.setFactField("goo");
    asf__.setValueList("one,two,three");
    dt.getActionCols().add(asf__);

    SuggestionCompletionEngine sce = new SuggestionCompletionEngine();
    sce.putDataEnumList("Driver.name", new String[] {"bob", "michael"});
    sce.putDataEnumList("Person.rating", new String[] {"1", "2"});

    String[] r = dt.getValueList(c1, sce);
    assertEquals(2, r.length);
    assertEquals("bob", r[0]);
    assertEquals("michael", r[1]);

    assertEquals(0, dt.getValueList(c1_, sce).length);

    r = dt.getValueList(c1__, sce);
    assertEquals(3, r.length);
    assertEquals("one", r[0]);
    assertEquals("two", r[1]);
    assertEquals("three", r[2]);

    assertEquals(0, dt.getValueList(c2, sce).length);

    r = dt.getValueList(asf, sce);
    assertEquals(2, r.length);
    assertEquals("bob", r[0]);
    assertEquals("michael", r[1]);

    r = dt.getValueList(ins, sce);
    assertEquals(2, r.length);
    assertEquals("1", r[0]);
    assertEquals("2", r[1]);

    r = dt.getValueList(ins_, sce);
    assertEquals(3, r.length);
    assertEquals("one", r[0]);
    assertEquals("two", r[1]);
    assertEquals("three", r[2]);

    assertEquals(0, dt.getValueList(asf_, sce).length);

    r = dt.getValueList(asf__, sce);
    assertEquals(3, r.length);
    assertEquals("one", r[0]);
    assertEquals("two", r[1]);
    assertEquals("three", r[2]);

    AttributeCol at = new AttributeCol();
    at.setAttribute("no-loop");
    dt.getAttributeCols().add(at);

    r = dt.getValueList(at, sce);
    assertEquals(2, r.length);
    assertEquals("true", r[0]);
    assertEquals("false", r[1]);

    at.setAttribute("enabled");
    assertEquals(2, dt.getValueList(at, sce).length);

    at.setAttribute("salience");
    assertEquals(0, dt.getValueList(at, sce).length);
  }