/* * Copyright 2012 Red Hat, Inc. and/or its affiliates. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. */ package org.drools.workbench.screens.guided.dtable.client.widget.table.utilities; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; import org.drools.workbench.models.guided.dtable.shared.model.ActionCol52; import org.drools.workbench.models.guided.dtable.shared.model.ActionInsertFactCol52; import org.drools.workbench.models.guided.dtable.shared.model.ActionSetFieldCol52; import org.drools.workbench.models.guided.dtable.shared.model.BaseColumn; import org.drools.workbench.models.guided.dtable.shared.model.ConditionCol52; import org.drools.workbench.models.guided.dtable.shared.model.DTCellValue52; import org.drools.workbench.models.guided.dtable.shared.model.GuidedDecisionTable52; import org.drools.workbench.models.guided.dtable.shared.model.LimitedEntryCol; import org.drools.workbench.models.guided.dtable.shared.model.Pattern52; import org.kie.workbench.common.widgets.client.datamodel.AsyncPackageDataModelOracle; import org.kie.workbench.common.widgets.decoratedgrid.client.widget.DropDownDataValueMapProvider; import org.uberfire.commons.validation.PortablePreconditions; /** * Specific implementation for Limited Entry Decision Table definition (i.e. for * use with NewGuidedDecisionTableWizard or GuidedDecisionTableWidget) */ public class LimitedEntryDropDownManager implements DropDownDataValueMapProvider<LimitedEntryDropDownManager.Context> { protected final GuidedDecisionTable52 model; protected final AsyncPackageDataModelOracle oracle; protected final CellUtilities utilities; public LimitedEntryDropDownManager( final GuidedDecisionTable52 model, final AsyncPackageDataModelOracle oracle ) { this.model = PortablePreconditions.checkNotNull( "model", model ); this.oracle = PortablePreconditions.checkNotNull( "oracle", oracle ); this.utilities = new CellUtilities(); } /** * The Context contains the Pattern and Column for which the enumerations * need to be ascertained. It is not possible to lookup the Pattern from the * Model as, when editing column definitions in GuidedDecisionTableWidget * the column is cloned (for editing) and hence is not the same * (identity-wise) as that held in the model */ public static class Context { private final Pattern52 basePattern; private final BaseColumn baseColumn; public Context( final Pattern52 basePattern, final ConditionCol52 baseColumn ) { this.basePattern = basePattern; this.baseColumn = baseColumn; } public Context( final Pattern52 basePattern, final ActionSetFieldCol52 baseColumn ) { this.basePattern = basePattern; this.baseColumn = baseColumn; } public Context( final ActionInsertFactCol52 baseColumn ) { this.basePattern = null; this.baseColumn = baseColumn; } public Pattern52 getBasePattern() { return basePattern; } public BaseColumn getBaseColumn() { return baseColumn; } } @Override public Map<String, String> getCurrentValueMap( Context context ) { Map<String, String> currentValueMap = new HashMap<String, String>(); final Pattern52 basePattern = context.getBasePattern(); final BaseColumn baseColumn = context.getBaseColumn(); //Get values for all Constraints or Actions on the same pattern as the baseColumn if ( baseColumn instanceof ConditionCol52 ) { for ( ConditionCol52 cc : basePattern.getChildColumns() ) { if ( cc instanceof LimitedEntryCol ) { currentValueMap.put( cc.getFactField(), getValue( (LimitedEntryCol) cc ) ); } } } 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 ) ) { if ( asf instanceof LimitedEntryCol ) { currentValueMap.put( asf.getFactField(), getValue( (LimitedEntryCol) asf ) ); } } } } } 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 ) ) { if ( aif instanceof LimitedEntryCol ) { currentValueMap.put( aif.getFactField(), getValue( (LimitedEntryCol) aif ) ); } } } } } return currentValueMap; } private String getValue( LimitedEntryCol lec ) { if ( lec == null || lec.getValue() == null ) { return ""; } final DTCellValue52 lev = lec.getValue(); return utilities.asString( lev ); } @Override public Set<Integer> getDependentColumnIndexes( Context context ) { final Set<Integer> dependentColumnIndexes = new HashSet<Integer>(); final Pattern52 basePattern = context.getBasePattern(); final BaseColumn baseColumn = context.getBaseColumn(); //Get values for all Constraints or Actions on the same pattern as the baseColumn if ( baseColumn instanceof ConditionCol52 ) { final ConditionCol52 baseConditionColumn = (ConditionCol52) baseColumn; for ( ConditionCol52 cc : basePattern.getChildColumns() ) { if ( oracle.isDependentEnum( basePattern.getFactType(), baseConditionColumn.getFactField(), cc.getFactField() ) ) { dependentColumnIndexes.add( model.getExpandedColumns().indexOf( cc ) ); } } } else if ( baseColumn instanceof ActionSetFieldCol52 ) { final 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 ) ) { if ( oracle.isDependentEnum( basePattern.getFactType(), baseActionColumn.getFactField(), asf.getFactField() ) ) { dependentColumnIndexes.add( model.getExpandedColumns().indexOf( ac ) ); } } } } } else if ( baseColumn instanceof ActionInsertFactCol52 ) { final 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 ) ) { if ( oracle.isDependentEnum( baseActionColumn.getFactType(), baseActionColumn.getFactField(), aif.getFactField() ) ) { dependentColumnIndexes.add( model.getExpandedColumns().indexOf( ac ) ); } } } } } return dependentColumnIndexes; } }