Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorcbrun2015-04-24 09:33:33 +0000
committercbrun2015-04-24 09:33:49 +0000
commit7212f6912f5d24e26b072fa0cb0f95ed907d2e21 (patch)
treec200b804696ec944828621a7fad047135628f3f2
parentc4d0f60c12d04e1c5c7bef9b1a772e8aa24d6dde (diff)
downloadorg.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.java67
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()) {

Back to the top