public Map<String, String> getCurrentValueMap( Context context ) {
Map<String, String> currentValueMap = new HashMap<String, String>();
final int iBaseRowIndex = context.getIndex();
final int iBaseColIndex = context.getColumn();
final DynamicDataRow rowData = this.data.get( iBaseRowIndex );
//Get the column for the cell being edited
List<BaseColumn> allColumns = this.model.getExpandedColumns();
BaseColumn baseColumn = allColumns.get( iBaseColIndex );
//Get values for all Constraints or Actions on the same pattern as the baseColumn
if ( baseColumn instanceof BRLConditionVariableColumn ) {
final BRLConditionVariableColumn baseBRLConditionColumn = (BRLConditionVariableColumn) baseColumn;
final BRLConditionColumn brl = model.getBRLColumn( baseBRLConditionColumn );
final RuleModel rm = new RuleModel();
IPattern[] lhs = new IPattern[ brl.getDefinition().size() ];
brl.getDefinition().toArray( lhs );
rm.lhs = lhs;
final RuleModelPeerVariableVisitor peerVariableVisitor = new RuleModelPeerVariableVisitor( rm,
baseBRLConditionColumn.getVarName() );
List<RuleModelPeerVariableVisitor.ValueHolder> peerVariables = peerVariableVisitor.getPeerVariables();
//Add other variables values
for ( ValueHolder valueHolder : peerVariables ) {
switch ( valueHolder.getType() ) {
case TEMPLATE_KEY:
final BRLConditionVariableColumn vc = getConditionVariableColumnIndex( brl.getChildColumns(),
valueHolder.getValue() );
final int iCol = model.getExpandedColumns().indexOf( vc );
final CellValue<?> cv = this.data.get( iBaseRowIndex ).get( iCol );
final String field = vc.getFactField();
final String value = getValue( vc,
cv );
currentValueMap.put( field,
value );
break;
case VALUE:
currentValueMap.put( valueHolder.getFieldName(),
valueHolder.getValue() );
}
}
} else if ( baseColumn instanceof BRLActionVariableColumn ) {
final BRLActionVariableColumn baseBRLActionColumn = (BRLActionVariableColumn) baseColumn;
final BRLActionColumn brl = model.getBRLColumn( baseBRLActionColumn );
final RuleModel rm = new RuleModel();
IAction[] rhs = new IAction[ brl.getDefinition().size() ];
brl.getDefinition().toArray( rhs );
rm.rhs = rhs;
final RuleModelPeerVariableVisitor peerVariableVisitor = new RuleModelPeerVariableVisitor( rm,
baseBRLActionColumn.getVarName() );
List<ValueHolder> peerVariables = peerVariableVisitor.getPeerVariables();
//Add other variables values
for ( ValueHolder valueHolder : peerVariables ) {
switch ( valueHolder.getType() ) {
case TEMPLATE_KEY:
final BRLActionVariableColumn vc = getActionVariableColumnIndex( brl.getChildColumns(),
valueHolder.getValue() );
final int iCol = model.getExpandedColumns().indexOf( vc );
final CellValue<?> cv = this.data.get( iBaseRowIndex ).get( iCol );
final String field = vc.getFactField();
final String value = getValue( vc,
cv );
currentValueMap.put( field,
value );
break;
case VALUE:
currentValueMap.put( valueHolder.getFieldName(),
valueHolder.getValue() );
}
}
} else if ( baseColumn instanceof ConditionCol52 ) {
final ConditionCol52 baseConditionColumn = (ConditionCol52) baseColumn;
final Pattern52 basePattern = this.model.getPattern( baseConditionColumn );
for ( ConditionCol52 cc : basePattern.getChildColumns() ) {
final int iCol = allColumns.indexOf( cc );
currentValueMap.put( cc.getFactField(),
getValue( cc,
rowData.get( iCol ) ) );
}
} else if ( baseColumn instanceof ActionSetFieldCol52 ) {
ActionSetFieldCol52 baseActionColumn = (ActionSetFieldCol52) baseColumn;
final String binding = baseActionColumn.getBoundName();
for ( ActionCol52 ac : this.model.getActionCols() ) {
if ( ac instanceof ActionSetFieldCol52 ) {
final ActionSetFieldCol52 asf = (ActionSetFieldCol52) ac;
if ( asf.getBoundName().equals( binding ) ) {
final int iCol = allColumns.indexOf( asf );
currentValueMap.put( asf.getFactField(),
getValue( asf,
rowData.get( iCol ) ) );
}
}
}
} else if ( baseColumn instanceof ActionInsertFactCol52 ) {
ActionInsertFactCol52 baseActionColumn = (ActionInsertFactCol52) baseColumn;
final String binding = baseActionColumn.getBoundName();
for ( ActionCol52 ac : this.model.getActionCols() ) {
if ( ac instanceof ActionInsertFactCol52 ) {
final ActionInsertFactCol52 aif = (ActionInsertFactCol52) ac;
if ( aif.getBoundName().equals( binding ) ) {
final int iCol = allColumns.indexOf( aif );
currentValueMap.put( aif.getFactField(),
getValue( aif,
rowData.get( iCol ) ) );
}
}
}
}