diff options
| author | cbrun | 2015-04-24 09:33:33 +0000 |
|---|---|---|
| committer | cbrun | 2015-04-24 09:33:49 +0000 |
| commit | 7212f6912f5d24e26b072fa0cb0f95ed907d2e21 (patch) | |
| tree | c200b804696ec944828621a7fad047135628f3f2 | |
| parent | c4d0f60c12d04e1c5c7bef9b1a772e8aa24d6dde (diff) | |
| download | org.eclipse.sirius-7212f6912f5d24e26b072fa0cb0f95ed907d2e21.tar.gz org.eclipse.sirius-7212f6912f5d24e26b072fa0cb0f95ed907d2e21.tar.xz org.eclipse.sirius-7212f6912f5d24e26b072fa0cb0f95ed907d2e21.zip | |
[465303] Infer types for lineSemantic and columnSemantic
Bug: 465303
Change-Id: I4b6702525689ef816b156fdaae54651d44b93b56
Signed-off-by: Cedric Brun <cedric.brun@obeo.fr>
| -rw-r--r-- | plugins/org.eclipse.sirius.table/src/org/eclipse/sirius/table/business/internal/dialect/description/TableInterpretedExpressionQuery.java | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/plugins/org.eclipse.sirius.table/src/org/eclipse/sirius/table/business/internal/dialect/description/TableInterpretedExpressionQuery.java b/plugins/org.eclipse.sirius.table/src/org/eclipse/sirius/table/business/internal/dialect/description/TableInterpretedExpressionQuery.java index 84079e5010..36be466aec 100644 --- a/plugins/org.eclipse.sirius.table/src/org/eclipse/sirius/table/business/internal/dialect/description/TableInterpretedExpressionQuery.java +++ b/plugins/org.eclipse.sirius.table/src/org/eclipse/sirius/table/business/internal/dialect/description/TableInterpretedExpressionQuery.java @@ -21,12 +21,19 @@ import org.eclipse.sirius.business.api.dialect.description.DefaultInterpretedExp import org.eclipse.sirius.business.api.dialect.description.IInterpretedExpressionTargetSwitch; import org.eclipse.sirius.business.api.query.EObjectQuery; import org.eclipse.sirius.common.tools.api.interpreter.VariableType; +import org.eclipse.sirius.common.tools.api.util.StringUtil; import org.eclipse.sirius.ext.base.Option; import org.eclipse.sirius.ext.base.Options; import org.eclipse.sirius.table.metamodel.table.TablePackage; +import org.eclipse.sirius.table.metamodel.table.description.ColumnMapping; import org.eclipse.sirius.table.metamodel.table.description.CreateCellTool; import org.eclipse.sirius.table.metamodel.table.description.DescriptionPackage; +import org.eclipse.sirius.table.metamodel.table.description.ElementColumnMapping; +import org.eclipse.sirius.table.metamodel.table.description.FeatureColumnMapping; +import org.eclipse.sirius.table.metamodel.table.description.IntersectionMapping; import org.eclipse.sirius.table.metamodel.table.description.LabelEditTool; +import org.eclipse.sirius.table.metamodel.table.description.LineMapping; +import org.eclipse.sirius.table.tools.api.interpreter.IInterpreterSiriusTableVariables; import org.eclipse.sirius.viewpoint.description.tool.AbstractVariable; import org.eclipse.sirius.viewpoint.description.tool.EditMaskVariables; @@ -90,6 +97,66 @@ public class TableInterpretedExpressionQuery extends AbstractInterpretedExpressi } @Override + public Map<String, VariableType> getAvailableVariables() { + Map<String, VariableType> availableVariables = super.getAvailableVariables(); + + if (getToolContext().some()) { + EObject operationContext = getToolContext().get(); + if (operationContext instanceof CreateCellTool) { + CreateCellTool tool = (CreateCellTool) operationContext; + IntersectionMapping interMapping = tool.getMapping(); + if (interMapping != null) { + declareLineAndColumnSemantic(availableVariables, interMapping); + } + } else if (operationContext instanceof LabelEditTool) { + LabelEditTool tool = (LabelEditTool) operationContext; + if (tool.eContainer() instanceof IntersectionMapping) { + IntersectionMapping interMapping = (IntersectionMapping) tool.eContainer(); + declareLineAndColumnSemantic(availableVariables, interMapping); + } + } + + } + return availableVariables; + } + + private void declareLineAndColumnSemantic(Map<String, VariableType> availableVariables, IntersectionMapping interMapping) { + ColumnMapping cMapping = interMapping.getColumnMapping(); + Collection<String> possibleLineTypes = Sets.newLinkedHashSet(); + + for (LineMapping lineMapping : interMapping.getLineMapping()) { + if (!StringUtil.isEmpty(lineMapping.getDomainClass())) { + possibleLineTypes.add(lineMapping.getDomainClass()); + } + } + + Collection<String> possibleColumnTypes = Sets.newLinkedHashSet(); + if (cMapping instanceof ElementColumnMapping) { + String columnDomain = ((ElementColumnMapping) cMapping).getDomainClass(); + if (!StringUtil.isEmpty(columnDomain)) { + possibleColumnTypes.add(columnDomain); + } + } else if (cMapping instanceof FeatureColumnMapping) { + /* + * if the column mapping is a feature column, then the possible + * types for columnSemantic are actually the possible types for the + * lines. + */ + possibleColumnTypes.addAll(possibleLineTypes); + } + if (possibleLineTypes.size() > 0) { + availableVariables.put(IInterpreterSiriusTableVariables.LINE_SEMANTIC, VariableType.fromStrings(possibleLineTypes)); + } else { + availableVariables.put(IInterpreterSiriusTableVariables.LINE_SEMANTIC, VariableType.ANY_EOBJECT); + } + if (possibleColumnTypes.size() > 0) { + availableVariables.put(IInterpreterSiriusTableVariables.COLUMN_SEMANTIC, VariableType.fromStrings(possibleColumnTypes)); + } else { + availableVariables.put(IInterpreterSiriusTableVariables.LINE_SEMANTIC, VariableType.ANY_EOBJECT); + } + } + + @Override protected Option<EObject> getToolContext() { Option<EObject> result = super.getToolContext(); if (!result.some()) { |
