Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/toolsmiths/gmf-tooling/org.eclipse.papyrus.gmf.bridge/src/org/eclipse/papyrus/gmf/internal/bridge/genmodel/DiagramGenModelTransformer.java')
-rw-r--r--plugins/toolsmiths/gmf-tooling/org.eclipse.papyrus.gmf.bridge/src/org/eclipse/papyrus/gmf/internal/bridge/genmodel/DiagramGenModelTransformer.java1606
1 files changed, 0 insertions, 1606 deletions
diff --git a/plugins/toolsmiths/gmf-tooling/org.eclipse.papyrus.gmf.bridge/src/org/eclipse/papyrus/gmf/internal/bridge/genmodel/DiagramGenModelTransformer.java b/plugins/toolsmiths/gmf-tooling/org.eclipse.papyrus.gmf.bridge/src/org/eclipse/papyrus/gmf/internal/bridge/genmodel/DiagramGenModelTransformer.java
deleted file mode 100644
index 386cf29ad79..00000000000
--- a/plugins/toolsmiths/gmf-tooling/org.eclipse.papyrus.gmf.bridge/src/org/eclipse/papyrus/gmf/internal/bridge/genmodel/DiagramGenModelTransformer.java
+++ /dev/null
@@ -1,1606 +0,0 @@
-/******************************************************************************
- * Copyright (c) 2005, 2020 Borland Software Corporation, CEA LIST, Artal and others
- *
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- * Artem Tikhomirov (Borland) - initial API and implementation
- * Aurelien Didier (ARTAL) - aurelien.didier51@gmail.com - Bug 569174
- *****************************************************************************/
-package org.eclipse.papyrus.gmf.internal.bridge.genmodel;
-
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.IdentityHashMap;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-
-import org.eclipse.emf.codegen.ecore.genmodel.GenClass;
-import org.eclipse.emf.codegen.ecore.genmodel.GenClassifier;
-import org.eclipse.emf.codegen.ecore.genmodel.GenDataType;
-import org.eclipse.emf.codegen.ecore.genmodel.GenFeature;
-import org.eclipse.emf.codegen.ecore.genmodel.GenModel;
-import org.eclipse.emf.codegen.ecore.genmodel.GenPackage;
-import org.eclipse.emf.codegen.util.CodeGenUtil;
-import org.eclipse.emf.common.util.EList;
-import org.eclipse.emf.ecore.EAttribute;
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.EEnum;
-import org.eclipse.emf.ecore.EModelElement;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.EPackage;
-import org.eclipse.emf.ecore.EStructuralFeature;
-import org.eclipse.emf.ecore.EcorePackage;
-import org.eclipse.papyrus.gmf.codegen.gmfgen.DesignLabelModelFacet;
-import org.eclipse.papyrus.gmf.codegen.gmfgen.ElementType;
-import org.eclipse.papyrus.gmf.codegen.gmfgen.ExpressionLabelModelFacet;
-import org.eclipse.papyrus.gmf.codegen.gmfgen.ExpressionLabelParser;
-import org.eclipse.papyrus.gmf.codegen.gmfgen.ExternalParser;
-import org.eclipse.papyrus.gmf.codegen.gmfgen.FeatureLabelModelFacet;
-import org.eclipse.papyrus.gmf.codegen.gmfgen.FeatureLinkModelFacet;
-import org.eclipse.papyrus.gmf.codegen.gmfgen.GMFGenFactory;
-import org.eclipse.papyrus.gmf.codegen.gmfgen.GenActionFactoryContributionItem;
-import org.eclipse.papyrus.gmf.codegen.gmfgen.GenApplication;
-import org.eclipse.papyrus.gmf.codegen.gmfgen.GenAuditContainer;
-import org.eclipse.papyrus.gmf.codegen.gmfgen.GenAuditContext;
-import org.eclipse.papyrus.gmf.codegen.gmfgen.GenAuditRoot;
-import org.eclipse.papyrus.gmf.codegen.gmfgen.GenAuditRule;
-import org.eclipse.papyrus.gmf.codegen.gmfgen.GenAuditable;
-import org.eclipse.papyrus.gmf.codegen.gmfgen.GenAuditedMetricTarget;
-import org.eclipse.papyrus.gmf.codegen.gmfgen.GenChildContainer;
-import org.eclipse.papyrus.gmf.codegen.gmfgen.GenChildLabelNode;
-import org.eclipse.papyrus.gmf.codegen.gmfgen.GenChildNode;
-import org.eclipse.papyrus.gmf.codegen.gmfgen.GenChildSideAffixedNode;
-import org.eclipse.papyrus.gmf.codegen.gmfgen.GenCommonBase;
-import org.eclipse.papyrus.gmf.codegen.gmfgen.GenCompartment;
-import org.eclipse.papyrus.gmf.codegen.gmfgen.GenConstraint;
-import org.eclipse.papyrus.gmf.codegen.gmfgen.GenContextMenu;
-import org.eclipse.papyrus.gmf.codegen.gmfgen.GenContributionItem;
-import org.eclipse.papyrus.gmf.codegen.gmfgen.GenDiagram;
-import org.eclipse.papyrus.gmf.codegen.gmfgen.GenDiagramElementTarget;
-import org.eclipse.papyrus.gmf.codegen.gmfgen.GenDomainAttributeTarget;
-import org.eclipse.papyrus.gmf.codegen.gmfgen.GenDomainElementTarget;
-import org.eclipse.papyrus.gmf.codegen.gmfgen.GenEditorGenerator;
-import org.eclipse.papyrus.gmf.codegen.gmfgen.GenElementInitializer;
-import org.eclipse.papyrus.gmf.codegen.gmfgen.GenExpressionInterpreter;
-import org.eclipse.papyrus.gmf.codegen.gmfgen.GenExpressionProviderBase;
-import org.eclipse.papyrus.gmf.codegen.gmfgen.GenExpressionProviderContainer;
-import org.eclipse.papyrus.gmf.codegen.gmfgen.GenFeatureInitializer;
-import org.eclipse.papyrus.gmf.codegen.gmfgen.GenFeatureSeqInitializer;
-import org.eclipse.papyrus.gmf.codegen.gmfgen.GenFeatureValueSpec;
-import org.eclipse.papyrus.gmf.codegen.gmfgen.GenGroupMarker;
-import org.eclipse.papyrus.gmf.codegen.gmfgen.GenLanguage;
-import org.eclipse.papyrus.gmf.codegen.gmfgen.GenLink;
-import org.eclipse.papyrus.gmf.codegen.gmfgen.GenLinkConstraints;
-import org.eclipse.papyrus.gmf.codegen.gmfgen.GenLinkLabel;
-import org.eclipse.papyrus.gmf.codegen.gmfgen.GenMeasurable;
-import org.eclipse.papyrus.gmf.codegen.gmfgen.GenMenuManager;
-import org.eclipse.papyrus.gmf.codegen.gmfgen.GenMetricContainer;
-import org.eclipse.papyrus.gmf.codegen.gmfgen.GenMetricRule;
-import org.eclipse.papyrus.gmf.codegen.gmfgen.GenNavigator;
-import org.eclipse.papyrus.gmf.codegen.gmfgen.GenNode;
-import org.eclipse.papyrus.gmf.codegen.gmfgen.GenNodeLabel;
-import org.eclipse.papyrus.gmf.codegen.gmfgen.GenNotationElementTarget;
-import org.eclipse.papyrus.gmf.codegen.gmfgen.GenParserImplementation;
-import org.eclipse.papyrus.gmf.codegen.gmfgen.GenParsers;
-import org.eclipse.papyrus.gmf.codegen.gmfgen.GenPreferencePage;
-import org.eclipse.papyrus.gmf.codegen.gmfgen.GenPropertySheet;
-import org.eclipse.papyrus.gmf.codegen.gmfgen.GenReferenceNewElementSpec;
-import org.eclipse.papyrus.gmf.codegen.gmfgen.GenRuleTarget;
-import org.eclipse.papyrus.gmf.codegen.gmfgen.GenSeparator;
-import org.eclipse.papyrus.gmf.codegen.gmfgen.GenSeverity;
-import org.eclipse.papyrus.gmf.codegen.gmfgen.GenSharedContributionItem;
-import org.eclipse.papyrus.gmf.codegen.gmfgen.GenStandardPreferencePage;
-import org.eclipse.papyrus.gmf.codegen.gmfgen.GenToolBarManager;
-import org.eclipse.papyrus.gmf.codegen.gmfgen.GenTopLevelNode;
-import org.eclipse.papyrus.gmf.codegen.gmfgen.GenVisualEffect;
-import org.eclipse.papyrus.gmf.codegen.gmfgen.LabelModelFacet;
-import org.eclipse.papyrus.gmf.codegen.gmfgen.LabelOffsetAttributes;
-import org.eclipse.papyrus.gmf.codegen.gmfgen.LabelTextAccessMethod;
-import org.eclipse.papyrus.gmf.codegen.gmfgen.LinkLabelAlignment;
-import org.eclipse.papyrus.gmf.codegen.gmfgen.LinkModelFacet;
-import org.eclipse.papyrus.gmf.codegen.gmfgen.MetamodelType;
-import org.eclipse.papyrus.gmf.codegen.gmfgen.OclChoiceParser;
-import org.eclipse.papyrus.gmf.codegen.gmfgen.OpenDiagramBehaviour;
-import org.eclipse.papyrus.gmf.codegen.gmfgen.Palette;
-import org.eclipse.papyrus.gmf.codegen.gmfgen.PredefinedEnumParser;
-import org.eclipse.papyrus.gmf.codegen.gmfgen.PredefinedParser;
-import org.eclipse.papyrus.gmf.codegen.gmfgen.ProviderPriority;
-import org.eclipse.papyrus.gmf.codegen.gmfgen.SpecializationType;
-import org.eclipse.papyrus.gmf.codegen.gmfgen.StandardPreferencePages;
-import org.eclipse.papyrus.gmf.codegen.gmfgen.TypeLinkModelFacet;
-import org.eclipse.papyrus.gmf.codegen.gmfgen.TypeModelFacet;
-import org.eclipse.papyrus.gmf.codegen.gmfgen.ValueExpression;
-import org.eclipse.papyrus.gmf.gmfgraph.Alignment;
-import org.eclipse.papyrus.gmf.gmfgraph.AlignmentFacet;
-import org.eclipse.papyrus.gmf.gmfgraph.ChildAccess;
-import org.eclipse.papyrus.gmf.gmfgraph.Compartment;
-import org.eclipse.papyrus.gmf.gmfgraph.DiagramElement;
-import org.eclipse.papyrus.gmf.gmfgraph.Direction;
-import org.eclipse.papyrus.gmf.gmfgraph.Figure;
-import org.eclipse.papyrus.gmf.gmfgraph.FigureDescriptor;
-import org.eclipse.papyrus.gmf.gmfgraph.FigureRef;
-import org.eclipse.papyrus.gmf.gmfgraph.LabelOffsetFacet;
-import org.eclipse.papyrus.gmf.gmfgraph.Node;
-import org.eclipse.papyrus.gmf.gmfgraph.Pin;
-import org.eclipse.papyrus.gmf.gmfgraph.RealFigure;
-import org.eclipse.papyrus.gmf.gmfgraph.VisualFacet;
-import org.eclipse.papyrus.gmf.internal.bridge.History;
-import org.eclipse.papyrus.gmf.internal.bridge.Knowledge;
-import org.eclipse.papyrus.gmf.internal.bridge.NaiveIdentifierDispenser;
-import org.eclipse.papyrus.gmf.internal.bridge.VisualIdentifierDispenser;
-import org.eclipse.papyrus.gmf.internal.bridge.genmodel.navigator.NavigatorHandler;
-import org.eclipse.papyrus.gmf.internal.bridge.tooldef.PaletteHandler;
-import org.eclipse.papyrus.gmf.internal.codegen.util.Extras;
-import org.eclipse.papyrus.gmf.mappings.AuditContainer;
-import org.eclipse.papyrus.gmf.mappings.AuditRule;
-import org.eclipse.papyrus.gmf.mappings.AuditedMetricTarget;
-import org.eclipse.papyrus.gmf.mappings.CanvasMapping;
-import org.eclipse.papyrus.gmf.mappings.ChildReference;
-import org.eclipse.papyrus.gmf.mappings.CompartmentMapping;
-import org.eclipse.papyrus.gmf.mappings.Constraint;
-import org.eclipse.papyrus.gmf.mappings.DesignLabelMapping;
-import org.eclipse.papyrus.gmf.mappings.DiagramElementTarget;
-import org.eclipse.papyrus.gmf.mappings.DomainAttributeTarget;
-import org.eclipse.papyrus.gmf.mappings.DomainElementTarget;
-import org.eclipse.papyrus.gmf.mappings.ElementInitializer;
-import org.eclipse.papyrus.gmf.mappings.ExpressionLabelMapping;
-import org.eclipse.papyrus.gmf.mappings.FeatureInitializer;
-import org.eclipse.papyrus.gmf.mappings.FeatureLabelMapping;
-import org.eclipse.papyrus.gmf.mappings.FeatureSeqInitializer;
-import org.eclipse.papyrus.gmf.mappings.FeatureValueSpec;
-import org.eclipse.papyrus.gmf.mappings.GMFMapPackage;
-import org.eclipse.papyrus.gmf.mappings.LabelMapping;
-import org.eclipse.papyrus.gmf.mappings.Language;
-import org.eclipse.papyrus.gmf.mappings.LinkConstraints;
-import org.eclipse.papyrus.gmf.mappings.LinkMapping;
-import org.eclipse.papyrus.gmf.mappings.Mapping;
-import org.eclipse.papyrus.gmf.mappings.MappingEntry;
-import org.eclipse.papyrus.gmf.mappings.MetricContainer;
-import org.eclipse.papyrus.gmf.mappings.MetricRule;
-import org.eclipse.papyrus.gmf.mappings.NodeMapping;
-import org.eclipse.papyrus.gmf.mappings.NodeReference;
-import org.eclipse.papyrus.gmf.mappings.NotationElementTarget;
-import org.eclipse.papyrus.gmf.mappings.OclChoiceLabelMapping;
-import org.eclipse.papyrus.gmf.mappings.ReferenceNewElementSpec;
-import org.eclipse.papyrus.gmf.mappings.Severity;
-import org.eclipse.papyrus.gmf.mappings.TopNodeReference;
-import org.eclipse.papyrus.gmf.mappings.VisualEffectMapping;
-
-/**
- * Creates generation model from diagram definition.
- *
- * @author artem
- */
-public class DiagramGenModelTransformer extends MappingTransformer {
-
- private GenEditorGenerator myGenModel;
-
- protected GenModelMatcher myGenModelMatch;
-
- private final DiagramRunTimeModelHelper myDRTHelper;
-
- private final ViewmapProducer myViewmaps;
-
- private final VisualIdentifierDispenser myVisualIDs;
-
- private final boolean rcp;
-
- private final History myHistory;
-
- private final Map<GenClass, ElementType> myProcessedTypes = new IdentityHashMap<GenClass, ElementType>(); // GenClass -> MetamodelType
-
- private final Map<org.eclipse.papyrus.gmf.mappings.ValueExpression, ValueExpression> myProcessedExpressions;
-
- private final PaletteHandler myPaletteProcessor;
-
- private final NavigatorHandler myNavigatorProcessor;
-
- private final PropertySheetHandler myPropertySheetProcessor;
-
- private final EcoreGenModelMatcher myEcoreGenModelMatch;
-
- private ExternalParser myDesignLabelParser;
-
- private ExternalParser myAuxParser;
-
- private GenContextMenu myDiagramContextMenu;
-
- private GenAuditContext myDefaultAuditContext;
-
- public static class Parameters {
-
- public final DiagramRunTimeModelHelper diagramModelHelper;
-
- public final ViewmapProducer viewmaps;
-
- public final VisualIdentifierDispenser vidDispenser;
-
- public final boolean rcp;
-
- public Parameters(DiagramRunTimeModelHelper drtHelper, ViewmapProducer viewmaps, VisualIdentifierDispenser vidDispenser, boolean rcp) {
- diagramModelHelper = drtHelper;
- this.viewmaps = viewmaps;
- this.vidDispenser = vidDispenser;
- this.rcp = rcp;
- }
- }
-
- public DiagramGenModelTransformer() {
- this(new BasicDiagramRunTimeModelHelper());
- }
-
- public DiagramGenModelTransformer(DiagramRunTimeModelHelper drtHelper) {
- this(new Parameters(drtHelper, new InnerClassViewmapProducer(), new NaiveIdentifierDispenser(), false));
- }
-
- public DiagramGenModelTransformer(Parameters opts) {
- this(opts.diagramModelHelper, opts.viewmaps, opts.vidDispenser, opts.rcp);
- }
-
- private DiagramGenModelTransformer(DiagramRunTimeModelHelper drtHelper, ViewmapProducer viewmaps, VisualIdentifierDispenser visualIdD, boolean rcp) {
- assert drtHelper != null && viewmaps != null;
- myDRTHelper = drtHelper;
- myViewmaps = viewmaps;
- myVisualIDs = visualIdD;
- this.rcp = rcp;
- myHistory = new History();
- myPaletteProcessor = new PaletteHandler();
- myNavigatorProcessor = new NavigatorHandler();
- myPropertySheetProcessor = new PropertySheetHandler();
- myEcoreGenModelMatch = new EcoreGenModelMatcher();
- myProcessedExpressions = new HashMap<org.eclipse.papyrus.gmf.mappings.ValueExpression, ValueExpression>();
- }
-
- /**
- * Optionally set GenModel to match ECore elements against. Should be
- * invoked prior to {@link MappingTransformer#transform(Mapping)}, otherwise
- * has no effect. Useful for tests (and other cases) when GenModel is not
- * known to EMF (and thus can't be obtained using EMF techniques).
- *
- * @param emfGenModel
- * EMF GenModel for domain model
- */
- public void setEMFGenModel(GenModel emfGenModel) {
- myGenModelMatch = new GenModelMatcher(emfGenModel);
- }
-
- public GenEditorGenerator getResult() {
- return getGenEssence();
- }
-
- public History getTrace() {
- return myHistory;
- }
-
- private GenEditorGenerator getGenEssence() {
- if (myGenModel == null) {
- myGenModel = GMFGenFactory.eINSTANCE.createGenEditorGenerator();
- }
- // init editor as well - transformer does not set any property to it, just make sure it's not null
- if (myGenModel.getEditor() == null) {
- myGenModel.setEditor(GMFGenFactory.eINSTANCE.createGenEditorView());
- }
- return myGenModel;
- }
-
- private GenDiagram getGenDiagram() {
- if (getGenEssence().getDiagram() == null) {
- getGenEssence().setDiagram(GMFGenFactory.eINSTANCE.createGenDiagram());
- }
- return getGenEssence().getDiagram();
- }
-
- private void initGenPlugin() {
- if (getGenEssence().getPlugin() == null) {
- getGenEssence().setPlugin(GMFGenFactory.eINSTANCE.createGenPlugin());
- }
- }
-
- private void initGenUpdater() {
- if (getGenEssence().getDiagramUpdater() == null) {
- getGenEssence().setDiagramUpdater(GMFGenFactory.eINSTANCE.createGenDiagramUpdater());
- }
-
- }
-
- private GenNavigator genGenNavigator() {
- if (getGenEssence().getNavigator() == null) {
- getGenEssence().setNavigator(GMFGenFactory.eINSTANCE.createGenNavigator());
- }
- return getGenEssence().getNavigator();
- }
-
- private Palette getGenPalette() {
- Palette p = getGenDiagram().getPalette();
- if (p == null) {
- p = GMFGenFactory.eINSTANCE.createPalette();
- getGenDiagram().setPalette(p);
- }
- return p;
- }
-
- private GenPropertySheet getPropertySheet() {
- if (getGenEssence().getPropertySheet() == null) {
- getGenEssence().setPropertySheet(GMFGenFactory.eINSTANCE.createGenPropertySheet());
- }
- return getGenEssence().getPropertySheet();
- }
-
- private GenParsers getGenParsers() {
- // XXX meanwhile, we don't set any attributes to GenParsers (rather delegating to old, deprecated)
- if (getGenEssence().getLabelParsers() == null) {
- getGenEssence().setLabelParsers(GMFGenFactory.eINSTANCE.createGenParsers());
- // unless bug #235113 is fixed, always do ParserService
- getGenEssence().getLabelParsers().setExtensibleViaService(true);
- }
- return getGenEssence().getLabelParsers();
- }
-
- private GenContextMenu getDiagramContextMenu() {
- if (myDiagramContextMenu == null) {
- myDiagramContextMenu = GMFGenFactory.eINSTANCE.createGenContextMenu();
- myDiagramContextMenu.getContext().add(getGenDiagram());
- getGenEssence().getContextMenus().add(myDiagramContextMenu);
- }
- return myDiagramContextMenu;
- }
-
- protected void process(CanvasMapping mapping) {
- if (myGenModelMatch == null && mapping.getDomainModel() != null) {
- myGenModelMatch = new GenModelMatcher(mapping.getDomainModel());
- }
- myHistory.purge();
- if (mapping.getPalette() != null) {
- myPaletteProcessor.initialize(getGenPalette());
- myPaletteProcessor.process(mapping.getPalette());
- }
- if (!rcp) {
- myNavigatorProcessor.initialize(getGenDiagram(), genGenNavigator());
- }
- GenPackage primaryPackage = findGenPackage(mapping.getDomainModel());
- getGenEssence().setDomainGenModel(primaryPackage == null ? null : primaryPackage.getGenModel());
- getGenDiagram().setDomainDiagramElement(findGenClass(mapping.getDomainMetaElement()));
- getGenDiagram().setDiagramRunTimeClass(findRunTimeClass(mapping));
- getGenDiagram().setVisualID(myVisualIDs.get(getGenDiagram()));
- getGenDiagram().setViewmap(myViewmaps.create(mapping.getDiagramCanvas()));
- getGenDiagram().setIconProviderPriority(ProviderPriority.LOW_LITERAL); // override ElementTypeIconProvider
- getGenDiagram().setValidationProviderPriority(ProviderPriority.LOW_LITERAL); // otherwise it's not available
- if (getGenDiagram().getDomainDiagramElement() != null) {
- // since diagram is the first entity to process consider it defines metamodel type
- getGenDiagram().setElementType(GMFGenFactory.eINSTANCE.createMetamodelType());
- myProcessedTypes.put(getGenDiagram().getDomainDiagramElement(), getGenDiagram().getElementType());
- } else {
- getGenDiagram().setElementType(GMFGenFactory.eINSTANCE.createNotationType());
- }
-
- initGenPlugin();
- initGenUpdater();
-
- myPropertySheetProcessor.initialize(getPropertySheet());
- myPropertySheetProcessor.process(mapping);
- addPreferencePages(getGenDiagram());
-
- if (rcp) {
- if (getGenEssence().getApplication() == null) {
- GenApplication app = GMFGenFactory.eINSTANCE.createGenApplication();
- addContributions(app);
- getGenEssence().setApplication(app);
- }
- }
- // XXX actually, better do it once whole transformation is complete
- if (getGenDiagram().generateCreateShortcutAction()) {
- getDiagramContextMenu().getItems().add(GMFGenFactory.eINSTANCE.createCreateShortcutAction());
- }
- // XXX ask Vano, if it's reasonable to generate LoadResourceAction only when there are shortcuts?
- getDiagramContextMenu().getItems().add(GMFGenFactory.eINSTANCE.createLoadResourceAction());
- }
-
- protected void process(TopNodeReference topNode) {
- final NodeMapping nme = topNode.getChild();
- assert nme != null;
- assertNodeMapping(nme);
-
- GenTopLevelNode genNode = GMFGenFactory.eINSTANCE.createGenTopLevelNode();
- getGenDiagram().getTopLevelNodes().add(genNode);
- genNode.setDiagramRunTimeClass(findRunTimeClass(nme));
- genNode.setModelFacet(createModelFacet(topNode));
- genNode.setVisualID(myVisualIDs.get(genNode));
- genNode.setViewmap(myViewmaps.create(nme.getDiagramNode()));
- setupElementType(genNode);
- myPaletteProcessor.process(nme, genNode);
-
- processAbstractNode(nme, genNode);
- myHistory.log(nme, genNode);
-
- if (!rcp) {
- myNavigatorProcessor.process(genNode);
- }
- }
-
- protected void process(AuditContainer audits) {
- if (audits != null) {
- getGenEssence().setAudits(createGenAuditRoot(audits));
- }
- }
-
- protected void process(MetricContainer metrics) {
- if (metrics != null) {
- GenMetricContainer genMetricContainer = GMFGenFactory.eINSTANCE.createGenMetricContainer();
- for (MetricRule next : metrics.getMetrics()) {
- genMetricContainer.getMetrics().add(createGenMetric(next));
- }
- getGenEssence().setMetrics(genMetricContainer);
- }
- }
-
- private void process(ChildReference childNodeRef, GenChildContainer container) {
- final NodeMapping childNodeMapping = childNodeRef.getChild();
- assert childNodeMapping != null;
- assertNodeMapping(childNodeMapping);
-
- GenChildNode childNode;
- if (!myHistory.isKnownChildNode(childNodeMapping)) {
- childNode = createGenChildNode(childNodeRef);
- } else {
- GenChildNode[] alreadyKnownChildren = myHistory.findChildNodes(childNodeMapping);
-
- childNode = null;
- for (int i = 0; i < alreadyKnownChildren.length; i++) {
- if (matchChildReferenceFeatures(childNodeRef, alreadyKnownChildren[i])) {
- childNode = alreadyKnownChildren[i];
- break;
- }
- }
- if (childNode == null) { // no match
- childNode = createGenChildNode(childNodeRef);
- }
- }
- if (container instanceof GenCompartment && childNodeMapping.getChildren().size() > 0) {
- // TODO just layout from childNodeMapping.getDiagramNode()
- ((GenCompartment) container).setListLayout(false);
- }
- container.getChildNodes().add(childNode);
- if (!rcp) {
- myNavigatorProcessor.process(childNode, container);
- }
- }
-
- /**
- * Handle case when second-level ChildReference references existing
- * nodemapping, but with different containment/children reference.
- *
- * @see https://bugs.eclipse.org/bugs/show_bug.cgi?id=129552
- */
- private static boolean matchChildReferenceFeatures(ChildReference childNodeRef, GenChildNode childNode) {
- final boolean containmentFeatureMatch;
- final boolean childrenFeatureMatch;
- if (childNode.getModelFacet() == null || childNode.getModelFacet().getContainmentMetaFeature() == null) {
- containmentFeatureMatch = (null == childNodeRef.getContainmentFeature());
- } else {
- // seems legal to use '==' because features should came from the same model
- containmentFeatureMatch = childNodeRef.getContainmentFeature() == childNode.getModelFacet().getContainmentMetaFeature().getEcoreFeature();
- }
- if (childNode.getModelFacet() == null || childNode.getModelFacet().getChildMetaFeature() == null) {
- childrenFeatureMatch = (null == childNodeRef.getChildrenFeature());
- } else {
- if (childNodeRef.getChildrenFeature() == null) {
- // likely, childMetaFeature in model facet was derived from containment feature
- childrenFeatureMatch = childNode.getModelFacet().getChildMetaFeature() == childNode.getModelFacet().getContainmentMetaFeature();
- } else {
- // honest check
- childrenFeatureMatch = childNode.getModelFacet().getChildMetaFeature().getEcoreFeature() == childNodeRef.getChildrenFeature();
- }
- }
- return containmentFeatureMatch && childrenFeatureMatch;
- }
-
- private GenChildNode createGenChildNode(ChildReference childNodeRef) {
- final NodeMapping childNodeMapping = childNodeRef.getChild();
- final GenChildNode childNode;
- final boolean needCompartmentChildrenLabelProcessing;
- if (Knowledge.isPureLabelNode(childNodeMapping)) {
- LabelMapping soleLabel = childNodeMapping.getLabelMappings().get(0);
- GenChildLabelNode childLabelNode = GMFGenFactory.eINSTANCE.createGenChildLabelNode();
- childLabelNode.setViewmap(myViewmaps.create(soleLabel.getDiagramLabel()));
- childLabelNode.setLabelModelFacet(createLabelModelFacet(soleLabel));
- childLabelNode.setLabelReadOnly(soleLabel.isReadOnly());
- childLabelNode.setLabelElementIcon(soleLabel.getDiagramLabel().isElementIcon());
- childNode = childLabelNode;
- needCompartmentChildrenLabelProcessing = false;
- } else if (childNodeMapping.getDiagramNode().getAffixedParentSide() != Direction.NONE_LITERAL) {
- GenChildSideAffixedNode sideAffixedNode = GMFGenFactory.eINSTANCE.createGenChildSideAffixedNode();
- sideAffixedNode.setViewmap(myViewmaps.create(childNodeMapping.getDiagramNode()));
- String positionConstantName = getAffixedSideAsPositionConstantsName(childNodeMapping.getDiagramNode());
- sideAffixedNode.setPreferredSideName(positionConstantName);
- childNode = sideAffixedNode;
- needCompartmentChildrenLabelProcessing = true;
- } else {
- childNode = GMFGenFactory.eINSTANCE.createGenChildNode();
- childNode.setViewmap(myViewmaps.create(childNodeMapping.getDiagramNode()));
- needCompartmentChildrenLabelProcessing = true;
- }
- myHistory.log(childNodeMapping, childNode);
- getGenDiagram().getChildNodes().add(childNode);
-
- childNode.setModelFacet(createModelFacet(childNodeRef));
-
- childNode.setDiagramRunTimeClass(findRunTimeClass(childNodeMapping));
- childNode.setVisualID(myVisualIDs.get(childNode));
- setupElementType(childNode);
-
- myPaletteProcessor.process(childNodeMapping, childNode);
- if (needCompartmentChildrenLabelProcessing) {
- processAbstractNode(childNodeMapping, childNode);
- }
- return childNode;
- }
-
- private String getAffixedSideAsPositionConstantsName(Node diagramNode) {
- Direction affixedSide = diagramNode.getAffixedParentSide();
- final String ANY_SIDE = "NONE";
- switch (affixedSide.getValue()) {
- case Direction.NONE:
- throw new IllegalStateException("DiagramNode: " + diagramNode + " is not side-affixed");
- case Direction.EAST:
- case Direction.NORTH:
- case Direction.WEST:
- case Direction.SOUTH:
- return affixedSide.getName();
-
- case Direction.NSEW:
- return ANY_SIDE;
-
- default:
- //Runtime does not support this
- return ANY_SIDE;
- }
- }
-
- private void processAbstractNode(NodeMapping mapping, GenNode genNode) {
- HashMap<CompartmentMapping, GenCompartment> compartments2GenCompartmentsMap = new HashMap<CompartmentMapping, GenCompartment>();
- for (CompartmentMapping compartmentMapping : mapping.getCompartments()) {
- GenCompartment compartmentGen = createGenCompartment(compartmentMapping, genNode);
- compartments2GenCompartmentsMap.put(compartmentMapping, compartmentGen);
- }
-
- for (ChildReference childNodeRef : mapping.getChildren()) {
- // Currently childNodeMapping should has compartment but we plan to make this reference optional
- CompartmentMapping compartmentMapping = childNodeRef.getCompartment();
- GenChildContainer genChildContainer;
- if (compartmentMapping != null && compartments2GenCompartmentsMap.containsKey(compartmentMapping)) {
- genChildContainer = compartments2GenCompartmentsMap.get(compartmentMapping);
- } else {
- genChildContainer = genNode;
- }
- process(childNodeRef, genChildContainer);
- }
- for (LabelMapping labelMapping : mapping.getLabelMappings()) {
- createNodeLabel(genNode, labelMapping);
- }
- for (CanvasMapping nextRelatedCanvas : mapping.getRelatedDiagrams()) {
- OpenDiagramBehaviour openDiagramPolicy = GMFGenFactory.eINSTANCE.createOpenDiagramBehaviour();
- // ugly check that nodeMapping is related to owning canvasMapping, iow mapping.getCanvasMapping() == nextRelatedCanvas
- if (nextRelatedCanvas.eResource() != mapping.eResource()) {
- // unless we would like to ask user where to take appropriate .gmfgen...
- openDiagramPolicy.setDiagramKind("FIXME put GenEditorGenerator.modelID value here");
- openDiagramPolicy.setEditorID("FIXME put GenEditorView.id value here");
- }
- genNode.getBehaviour().add(openDiagramPolicy);
- }
-
- createVisualEffects(mapping, genNode, mapping.getDiagramNode());
- }
-
- private void createVisualEffects(MappingEntry mapping, GenCommonBase genCommon, DiagramElement diagramElement) {
- for (VisualEffectMapping visualEffectMapping : mapping.getVisualEffects()) {
- createVisualEffect(genCommon, visualEffectMapping, diagramElement);
- }
- }
-
- private GenCompartment createGenCompartment(CompartmentMapping mapping, GenNode genNode) {
- Compartment compartment = mapping.getCompartment();
- assert compartment != null;
- GenCompartment childCompartment = GMFGenFactory.eINSTANCE.createGenCompartment();
- getGenDiagram().getCompartments().add(childCompartment);
- genNode.getCompartments().add(childCompartment);
- childCompartment.setVisualID(myVisualIDs.get(childCompartment));
- childCompartment.setDiagramRunTimeClass(getChildContainerRunTimeClass());
- childCompartment.setViewmap(myViewmaps.create(mapping.getCompartment()));
- childCompartment.setCanCollapse(compartment.isCollapsible());
- childCompartment.setNeedsTitle(compartment.isNeedsTitle());
- childCompartment.setTitle(compartment.getName());
-
- return childCompartment;
- }
-
- protected void process(LinkMapping lme) {
- assertLinkMapping(lme);
- GenLink gl = GMFGenFactory.eINSTANCE.createGenLink();
- getGenDiagram().getLinks().add(gl);
- gl.setModelFacet(createModelFacet(lme));
- gl.setVisualID(myVisualIDs.get(gl));
- myPaletteProcessor.process(lme, gl);
- for (LabelMapping labelMapping : lme.getLabelMappings()) {
- createLinkLabel(gl, labelMapping);
- }
- gl.setDiagramRunTimeClass(findRunTimeClass(lme));
-
- setupElementType(gl);
-
- gl.setViewmap(myViewmaps.create(lme.getDiagramLink()));
-
- if (lme.getCreationConstraints() != null) {
- gl.setCreationConstraints(createLinkCreationConstraints(lme.getCreationConstraints()));
- }
-
- myHistory.log(lme, gl);
- if (!rcp) {
- myNavigatorProcessor.process(gl);
- }
-
- createVisualEffects(lme, gl, lme.getDiagramLink());
- }
-
- @Override
- protected void complete() {
- List<String> requiredPlugins = getGenEssence().getPlugin().getRequiredPlugins();
- final String GMF_TOOLING_RUNTIME = "org.eclipse.gmf.tooling.runtime"; //$NON-NLS-1$
- requiredPlugins.add(GMF_TOOLING_RUNTIME);
- requiredPlugins.addAll(Arrays.asList(myViewmaps.dependencies()));
- }
-
- // private void process(AppearanceSteward appSteward) {
- // if (appSteward.getAppearanceStyle() == null) {
- // return;
- // }
- //
- // }
-
- private GenNodeLabel createNodeLabel(GenNode node, LabelMapping mapping) {
- GenNodeLabel label;
- if (mapping.getDiagramLabel().isExternal()) {
- label = GMFGenFactory.eINSTANCE.createGenExternalNodeLabel();
- } else {
- label = GMFGenFactory.eINSTANCE.createGenNodeLabel();
- }
- node.getLabels().add(label);
- label.setVisualID(myVisualIDs.get(label));
- label.setDiagramRunTimeClass(findRunTimeClass(mapping));
- label.setViewmap(myViewmaps.create(mapping.getDiagramLabel()));
- label.setModelFacet(createLabelModelFacet(mapping));
- label.setReadOnly(mapping.isReadOnly());
- label.setElementIcon(mapping.getDiagramLabel().isElementIcon());
- return label;
- }
-
- private void createVisualEffect(GenCommonBase parent, VisualEffectMapping mapping, DiagramElement parentDiagramElement) {
- GenVisualEffect visualEffect = GMFGenFactory.eINSTANCE.createGenVisualEffect();
- parent.getBehaviour().add(visualEffect);
-
- Pin graphPin = mapping.getDiagramPin();
-
- String name = graphPin.getName();
-
- visualEffect.setName(name);
- visualEffect.setPinKind(graphPin.eClass().getName());
-
- String operationName = graphPin.getOperationName();
-
- FigureDescriptor graphFigureDescriptor = parentDiagramElement.getFigure();
-
- if (!hasFigurePin(graphFigureDescriptor.getActualFigure(), graphPin)) {
- for (ChildAccess graphChildAccess : graphFigureDescriptor.getAccessors()) {
- if (hasFigurePin(graphChildAccess.getFigure(), graphPin)) {
- operationName = graphChildAccess.getAccessor() + "()." + operationName;
- break;
- }
- }
- }
-
- visualEffect.setOperationName(operationName);
- visualEffect.setOperationType(graphPin.getOperationType());
- visualEffect.setOclExpression(mapping.getOclExpression());
-
- String editPolicyQualifiedClassName = parent.getDiagram().getEditPoliciesPackageName() + '.'//
- + CodeGenUtil.capName(CodeGenUtil.validJavaIdentifier(name)) + parent.getVisualID() //
- + "Policy";
-
- visualEffect.setEditPolicyQualifiedClassName(editPolicyQualifiedClassName);
- visualEffect.setKey(editPolicyQualifiedClassName + ".KEY");
- }
-
- private boolean hasFigurePin(Figure figure, Pin pin) {
- RealFigure realFigure = (figure instanceof FigureRef) //
- ? ((FigureRef) figure).getFigure() //
- : (RealFigure) figure;
- return realFigure.getPins().contains(pin);
- }
-
- private GenLinkLabel createLinkLabel(GenLink link, LabelMapping mapping) {
- GenLinkLabel label = GMFGenFactory.eINSTANCE.createGenLinkLabel();
- link.getLabels().add(label);
- label.setVisualID(myVisualIDs.get(label));
- label.setDiagramRunTimeClass(findRunTimeClass(mapping));
- label.setViewmap(myViewmaps.create(mapping.getDiagramLabel()));
- label.setModelFacet(createLabelModelFacet(mapping));
- label.setReadOnly(mapping.isReadOnly());
- label.setElementIcon(mapping.getDiagramLabel().isElementIcon());
- if (findVF(mapping.getDiagramLabel(), AlignmentFacet.class) != null) {
- AlignmentFacet af = findVF(mapping.getDiagramLabel(), AlignmentFacet.class);
- label.setAlignment(getLinkLabelAlignment(af.getAlignment()));
- }
- LabelOffsetAttributes loa = GMFGenFactory.eINSTANCE.createLabelOffsetAttributes();
- LabelOffsetFacet lof = findVF(mapping.getDiagramLabel(), LabelOffsetFacet.class);
- if (lof != null) {
- loa.setX(lof.getX());
- loa.setY(lof.getY());
- } else {
- // stack labels under link by default
- int weight = link.getLabels().size() + 1;
- loa.setY(weight * 20);
- }
- label.getViewmap().getAttributes().add(loa);
- return label;
- }
-
- private static <T extends VisualFacet> T findVF(DiagramElement element, Class<T> facetClass) {
- for (VisualFacet vf : element.getFacets()) {
- if (facetClass.isInstance(vf)) {
- return facetClass.cast(vf);
- }
- }
- return null;
- }
-
- private LinkLabelAlignment getLinkLabelAlignment(Alignment alignment) {
- switch (alignment.getValue()) {
- case Alignment.BEGINNING:
- return LinkLabelAlignment.SOURCE_LITERAL;
- case Alignment.CENTER:
- return LinkLabelAlignment.MIDDLE_LITERAL;
- case Alignment.END:
- return LinkLabelAlignment.TARGET_LITERAL;
- default:
- throw new IllegalArgumentException("Link doesn't support alignment:" + alignment.getName());
- }
- }
-
- private LabelModelFacet createLabelModelFacet(LabelMapping mapping) {
- if (mapping instanceof FeatureLabelMapping) {
- FeatureLabelMapping flMapping = (FeatureLabelMapping) mapping;
- FeatureLabelModelFacet modelFacet = GMFGenFactory.eINSTANCE.createFeatureLabelModelFacet();
- for (EAttribute attr : flMapping.getFeatures()) {
- modelFacet.getMetaFeatures().add(findGenFeature(attr));
- }
- for (EAttribute attr : flMapping.getEditableFeatures()) {
- modelFacet.getEditableMetaFeatures().add(findGenFeature(attr));
- }
- modelFacet.setViewPattern(flMapping.getViewPattern());
- modelFacet.setEditorPattern(flMapping.getEditorPattern());
- modelFacet.setEditPattern(flMapping.getEditPattern());
- if (flMapping.eIsSet(GMFMapPackage.eINSTANCE.getFeatureLabelMapping_ViewMethod())) {
- modelFacet.setViewMethod(LabelTextAccessMethod.get(flMapping.getViewMethod().getValue()));
- }
- if (flMapping.eIsSet(GMFMapPackage.eINSTANCE.getFeatureLabelMapping_EditMethod())) {
- modelFacet.setEditMethod(LabelTextAccessMethod.get(flMapping.getEditMethod().getValue()));
- }
- // XXX temp code
- modelFacet.setParser(getOrCreateParser(flMapping));
- // XXX
- return modelFacet;
- }
- if (mapping instanceof OclChoiceLabelMapping) {
- OclChoiceLabelMapping oclMapping = (OclChoiceLabelMapping) mapping;
- FeatureLabelModelFacet modelFacet = GMFGenFactory.eINSTANCE.createFeatureLabelModelFacet();
- GenFeature feature = findGenFeature(oclMapping.getFeature());
- modelFacet.getMetaFeatures().add(feature);
- modelFacet.getEditableMetaFeatures().add(feature);
- modelFacet.setParser(createOclChoiceParser(oclMapping));
- return modelFacet;
- }
- if (mapping instanceof DesignLabelMapping) {
- DesignLabelModelFacet modelFacet = GMFGenFactory.eINSTANCE.createDesignLabelModelFacet();
- modelFacet.setParser(getOrCreateParser((DesignLabelMapping) mapping));
- return modelFacet;
- }
- if (mapping instanceof ExpressionLabelMapping) {
- ExpressionLabelModelFacet modelFacet = GMFGenFactory.eINSTANCE.createExpressionLabelModelFacet();
- ExpressionLabelParser parser = GMFGenFactory.eINSTANCE.createExpressionLabelParser();
- ExpressionLabelMapping elm = (ExpressionLabelMapping) mapping;
- parser.setExpressionContext(findGenClass(elm.getMapEntry().getDomainContext()));
- if (elm.getViewExpression() != null) {
- parser.setViewExpression(createValueExpression(elm.getViewExpression()));
- }
- if (elm.getEditExpression() != null) {
- parser.setEditExpression(createValueExpression(elm.getEditExpression()));
- }
- if (elm.getValidateExpression() != null) {
- parser.setValidateExpression(createGenConstraint(elm.getValidateExpression()));
- }
- modelFacet.setParser(parser);
- getGenParsers().getImplementations().add(parser);
- return modelFacet;
- }
- // create bare instance that points to a ExternalParser
- // this is modification of old contract (though, not breaking change, I believe)
- // that says null modelFacet means use of external parser
- LabelModelFacet modelFacet = GMFGenFactory.eINSTANCE.createLabelModelFacet();
- modelFacet.setParser(getOrCreateParser(mapping));
- return modelFacet;
- }
-
- private void setupElementType(GenNode genNode) {
- if (genNode.getModelFacet() != null) {
- MetamodelType metamodelType = (MetamodelType) myProcessedTypes.get(genNode.getModelFacet().getMetaClass());
- if (metamodelType == null) {
- // this is the first metaclass encounter; consider metamodel type definition
- genNode.setElementType(GMFGenFactory.eINSTANCE.createMetamodelType());
- myProcessedTypes.put(genNode.getModelFacet().getMetaClass(), genNode.getElementType());
- } else {
- // all subsequent encounters lead to specialization definitions
- SpecializationType specializationType = GMFGenFactory.eINSTANCE.createSpecializationType();
- specializationType.setMetamodelType(metamodelType);
- genNode.setElementType(specializationType);
- }
- } else {
- genNode.setElementType(GMFGenFactory.eINSTANCE.createNotationType());
- }
- }
-
- private void setupElementType(GenLink gl) {
- if (gl.getModelFacet() != null) {
- if (gl.getModelFacet() instanceof TypeModelFacet) {
- GenClass metaClass = ((TypeModelFacet) gl.getModelFacet()).getMetaClass();
- MetamodelType metamodelType = (MetamodelType) myProcessedTypes.get(metaClass);
- if (metamodelType == null) {
- // this is the first metaclass encounter; consider metamodel type definition
- gl.setElementType(GMFGenFactory.eINSTANCE.createMetamodelType());
- myProcessedTypes.put(metaClass, gl.getElementType());
- } else {
- // all subsequent encounters lead to specialization definitions
- SpecializationType specializationType = GMFGenFactory.eINSTANCE.createSpecializationType();
- specializationType.setMetamodelType(metamodelType);
- gl.setElementType(specializationType);
- }
- } else {
- // ref-based link; specialize null
- SpecializationType specializationType = GMFGenFactory.eINSTANCE.createSpecializationType();
- gl.setElementType(specializationType);
- }
- } else {
- gl.setElementType(GMFGenFactory.eINSTANCE.createNotationType());
- }
- }
-
- private GenClass findRunTimeClass(NodeMapping nme) {
- return myDRTHelper.get(nme);
- }
-
- private GenClass findRunTimeClass(LinkMapping lme) {
- return myDRTHelper.get(lme);
- }
-
- private GenClass findRunTimeClass(CanvasMapping mapping) {
- return myDRTHelper.get(mapping);
- }
-
- private GenClass getChildContainerRunTimeClass() {
- return myDRTHelper.getChildContainerDefault();
- }
-
- private GenClass findRunTimeClass(LabelMapping mapping) {
- return myDRTHelper.get(mapping);
- }
-
- private void assertNodeMapping(NodeMapping mapping) {
- assert mapping.getDiagramNode() != null;
- assert checkLabelMappings(mapping);
- }
-
- private void assertLinkMapping(LinkMapping linkMapping) {
- assert linkMapping.getDiagramLink() != null;
- if (linkMapping.getDomainMetaElement() != null) {
- assert linkMapping.getLinkMetaFeature() != null;
- }
- assert checkLabelMappings(linkMapping);
- }
-
- private static boolean checkLabelMappings(MappingEntry entry) {
- for (LabelMapping labelMapping : (Collection<? extends LabelMapping>) entry.getLabelMappings()) {
- if (labelMapping instanceof FeatureLabelMapping) {
- final EClass domainElement = labelMapping.getMapEntry().getDomainContext();
- for (EAttribute attr : (Collection<? extends EAttribute>) ((FeatureLabelMapping) labelMapping).getFeatures()) {
- if (!Extras.isSuperTypeOf(attr.getEContainingClass(), domainElement)) {
- return false;
- }
- }
- }
- }
- return true;
- }
-
- private GenPackage findGenPackage(EPackage ePackage) {
- if (myGenModelMatch == null) {
- warnNoGenModelMatcher(ePackage);
- return null;
- }
- return myGenModelMatch.findGenPackage(ePackage);
- }
-
- private GenClass findGenClass(EClass eClass) {
- if (myGenModelMatch == null) {
- warnNoGenModelMatcher(eClass);
- return null;
- }
- return myGenModelMatch.findGenClass(eClass);
- }
-
- private GenFeature findGenFeature(EStructuralFeature feature) {
- if (myGenModelMatch == null) {
- warnNoGenModelMatcher(feature);
- return null;
- }
- return myGenModelMatch.findGenFeature(feature);
- }
-
- private void warnNoGenModelMatcher(EModelElement element) {
- // TODO : emit warning
- }
-
- private TypeModelFacet createModelFacet(NodeReference anm) {
- final NodeMapping nodeMapping = anm.getChild();
- if (nodeMapping.getDomainContext() == null) {
- return null;
- }
- TypeModelFacet typeModelFacet = setupModelFacet(nodeMapping.getDomainContext(), anm.getContainmentFeature(), anm.getChildrenFeature());
- return setupAux(typeModelFacet, nodeMapping.getDomainSpecialization(), nodeMapping.getDomainInitializer());
- }
-
- private LinkModelFacet createModelFacet(LinkMapping lme) {
- if (lme.getDomainMetaElement() != null) {
- TypeLinkModelFacet mf = GMFGenFactory.eINSTANCE.createTypeLinkModelFacet();
- mf.setMetaClass(findGenClass(lme.getDomainMetaElement()));
- mf.setContainmentMetaFeature(findGenFeature(lme.getContainmentFeature()));
- mf.setChildMetaFeature(mf.getContainmentMetaFeature());
- mf.setSourceMetaFeature(findGenFeature(lme.getSourceMetaFeature()));
- mf.setTargetMetaFeature(findGenFeature(lme.getLinkMetaFeature()));
- setupAux(mf, lme.getDomainSpecialization(), lme.getDomainInitializer());
- return mf;
- } else if (lme.getLinkMetaFeature() != null) {
- FeatureLinkModelFacet mf = GMFGenFactory.eINSTANCE.createFeatureLinkModelFacet();
- mf.setMetaFeature(findGenFeature(lme.getLinkMetaFeature()));
- return mf;
- }
- return null; // notation link
- }
-
- private GenLinkConstraints createLinkCreationConstraints(LinkConstraints constraints) {
- LinkMapping lme = constraints.getLinkMapping();
- if (lme == null) {
- return null;
- }
- GenLinkConstraints genConstraints = GMFGenFactory.eINSTANCE.createGenLinkConstraints();
- Constraint sourceConstraint = constraints.getSourceEnd();
- if (sourceConstraint != null) {
- genConstraints.setSourceEnd(createGenConstraint(sourceConstraint));
- }
- Constraint targetConstraint = constraints.getTargetEnd();
- if (targetConstraint != null) {
- genConstraints.setTargetEnd(createGenConstraint(targetConstraint));
- }
- return genConstraints;
- }
-
- private TypeModelFacet setupModelFacet(EClass domainMetaElement, EStructuralFeature containmentFeature, EStructuralFeature childFeature) {
- TypeModelFacet mf = GMFGenFactory.eINSTANCE.createTypeModelFacet();
- mf.setMetaClass(findGenClass(domainMetaElement));
- mf.setContainmentMetaFeature(findGenFeature(containmentFeature));
- mf.setChildMetaFeature(childFeature == null ? mf.getContainmentMetaFeature() : findGenFeature(childFeature));
- return mf;
- }
-
- /**
- * @return typeModelFacet argument for convenience
- */
- private TypeModelFacet setupAux(TypeModelFacet typeModelFacet, Constraint spec, ElementInitializer init) {
- // construct model element selector for domain EClass specializations if any exist
- if (spec != null) {
- typeModelFacet.setModelElementSelector(createGenConstraint(spec));
- }
- if (init != null) {
- typeModelFacet.setModelElementInitializer(createElementInitializer(init));
- }
- return typeModelFacet;
- }
-
- private GenElementInitializer createElementInitializer(ElementInitializer elementInitializer) {
- if (elementInitializer instanceof FeatureSeqInitializer) {
- FeatureSeqInitializer fsInitializer = (FeatureSeqInitializer) elementInitializer;
- GenFeatureSeqInitializer genFsInitializer = GMFGenFactory.eINSTANCE.createGenFeatureSeqInitializer();
- for (FeatureInitializer next : fsInitializer.getInitializers()) {
- genFsInitializer.getInitializers().add(createGenFeatureInitializer(next));
- }
- if (fsInitializer.eIsSet(GMFMapPackage.eINSTANCE.getFeatureSeqInitializer_ElementClass())) {
- genFsInitializer.setElementClass(findGenClass(fsInitializer.getElementClass()));
- }
- return genFsInitializer;
- }
- return null;
- }
-
- private GenFeatureInitializer createGenFeatureInitializer(FeatureInitializer featureInitializer) {
- if (featureInitializer instanceof FeatureValueSpec) {
- FeatureValueSpec featureValSpec = (FeatureValueSpec) featureInitializer;
- GenFeatureValueSpec genFeatureValSpec = GMFGenFactory.eINSTANCE.createGenFeatureValueSpec();
- genFeatureValSpec.setFeature(findGenFeature(featureValSpec.getFeature()));
- genFeatureValSpec.setValue(createValueExpression(featureValSpec.getValue()));
-
- return genFeatureValSpec;
- } else if (featureInitializer instanceof ReferenceNewElementSpec) {
- ReferenceNewElementSpec newElementSpec = (ReferenceNewElementSpec) featureInitializer;
- GenReferenceNewElementSpec genNewElementSpec = GMFGenFactory.eINSTANCE.createGenReferenceNewElementSpec();
- genNewElementSpec.setFeature(findGenFeature(newElementSpec.getFeature()));
- for (FeatureSeqInitializer next : newElementSpec.getNewElementInitializers()) {
- GenFeatureSeqInitializer nextGenFeatureSeqInitializer = (GenFeatureSeqInitializer) createElementInitializer(next);
- genNewElementSpec.getNewElementInitializers().add(nextGenFeatureSeqInitializer);
- }
- return genNewElementSpec;
- }
- assert false : "Unrecognized FeatureInitializer type"; //$NON-NLS-1$
- return null;
- }
-
- private static GenLanguage detectGenLanguage(Language mapLang) {
- switch (mapLang.getValue()) {
- case Language.OCL:
- return GenLanguage.OCL_LITERAL;
- case Language.JAVA:
- return GenLanguage.JAVA_LITERAL;
- case Language.REGEXP:
- return GenLanguage.REGEXP_LITERAL;
- case Language.NREGEXP:
- return GenLanguage.NREGEXP_LITERAL;
- case Language.LITERAL:
- return GenLanguage.LITERAL_LITERAL;
- default:
- assert false : mapLang;
- }
- return GenLanguage.OCL_LITERAL;
- }
-
- // may return GenConstraint, based on original expression type
- // XXX perhaps, combining #createValueExpression and #createGenConstraint into a single method makes sense?
- private ValueExpression createValueExpression(org.eclipse.papyrus.gmf.mappings.ValueExpression valueExpression) {
- if (valueExpression instanceof Constraint) {
- return createGenConstraint((Constraint) valueExpression);
- }
- ValueExpression result = GMFGenFactory.eINSTANCE.createValueExpression();
- result.setBody(valueExpression.getBody());
- return bindToProvider(valueExpression, result);
- }
-
- private GenConstraint createGenConstraint(Constraint constraint) {
- if (constraint.getBody() == null) {
- return null;
- }
- GenConstraint genConstraint = GMFGenFactory.eINSTANCE.createGenConstraint();
- genConstraint.setBody(constraint.getBody());
- return bindToProvider(constraint, genConstraint);
- }
-
- private GenAuditRoot createGenAuditRoot(AuditContainer ac) {
- GenAuditRoot root = GMFGenFactory.eINSTANCE.createGenAuditRoot();
- LinkedList<AuditContainer> containers = new LinkedList<AuditContainer>();
- containers.add(ac);
- // parent container to it's path
- final HashMap<AuditContainer, LinkedList<GenAuditContainer>> pathMap = new HashMap<AuditContainer, LinkedList<GenAuditContainer>>();
- do {
- AuditContainer nextChild = containers.removeFirst();
- GenAuditContainer gac = GMFGenFactory.eINSTANCE.createGenAuditContainer();
- gac.setId(nextChild.getId());
- gac.setName(nextChild.getName());
- gac.setDescription(nextChild.getDescription());
- // FIXME setPath
- if (pathMap.containsKey(nextChild.getParentContainer())) {
- gac.getPath().addAll(pathMap.get(nextChild.getParentContainer()));
- }
- gac.getPath().add(gac);
- // collect next level
- if (nextChild.getChildContainers().size() > 0) {
- containers.addAll(nextChild.getChildContainers());
- pathMap.put(nextChild, new LinkedList<GenAuditContainer>(gac.getPath()));
- }
- root.getCategories().add(gac);
- for (AuditRule next : nextChild.getAudits()) {
- final GenAuditRule auditRule = createGenAudit(next);
- auditRule.setCategory(gac);
- root.getRules().add(auditRule);
- // Here's the logic used to be in GMFGen. Basically, all rules with targets != null
- // get a context (emf.validation), which is a scope or set of elements audit is evaluated against.
- // For certain cases, e.g. diagram elements as audit targets, special logic to select these
- // elements should get generated - to filter diagram views by visualID, and hence
- // there's another implementation of IClientSelector and dedicated context.
- if (auditRule.getTarget() instanceof GenDiagramElementTarget) {
- GenDiagramElementTarget gdet = (GenDiagramElementTarget) auditRule.getTarget();
- // Next used to live in GenDiagramElementTargetImpl#getClientContextID()
- //
- // Present approach relies on id matching not to create duplicating contexts,
- // however, smarter way is to match context's target and its elements.
- StringBuilder buf = new StringBuilder("Ctx"); //$NON-NLS-1$
- for (GenCommonBase nextElement : gdet.getElement()) {
- buf.append('_');
- int id = nextElement.getVisualID();
- if (id < 0) {
- buf.append('n');
- }
- buf.append(id);
- }
- String clientContextID = buf.toString();
- GenAuditContext ctx = null;
- for (GenAuditContext x : root.getClientContexts()) {
- if (clientContextID.equals(x.getId())) {
- ctx = x;
- break;
- }
- }
- if (ctx == null) {
- ctx = GMFGenFactory.eINSTANCE.createGenAuditContext();
- ctx.setId(clientContextID);
- root.getClientContexts().add(ctx);
- }
- gdet.setContextSelector(ctx);
- } else if (auditRule.getTarget() != null) {
- if (myDefaultAuditContext == null) {
- myDefaultAuditContext = GMFGenFactory.eINSTANCE.createGenAuditContext();
- root.getClientContexts().add(myDefaultAuditContext);
- }
- auditRule.getTarget().setContextSelector(myDefaultAuditContext);
- }
- }
- } while (!containers.isEmpty());
- return root;
- }
-
- private GenAuditRule createGenAudit(AuditRule audit) {
- GenAuditRule genAudit = GMFGenFactory.eINSTANCE.createGenAuditRule();
- genAudit.setId(audit.getId());
- genAudit.setName(audit.getName());
- genAudit.setMessage(audit.getMessage());
- genAudit.setDescription(audit.getDescription());
- genAudit.setUseInLiveMode(audit.isUseInLiveMode());
-
- if (audit.getTarget() != null) {
- GenRuleTarget genTarget = createRuleTarget(audit.getTarget());
- assert genTarget instanceof GenAuditable;
- if (genTarget instanceof GenAuditable) {
- genAudit.setTarget((GenAuditable) genTarget);
- }
- }
- Constraint rule = audit.getRule();
- if (rule != null) {
- genAudit.setRule(createGenConstraint(rule));
- }
-
- Severity severity = audit.getSeverity();
- GenSeverity genSeverity = null;
- if (severity == Severity.INFO_LITERAL) {
- genSeverity = GenSeverity.INFO_LITERAL;
- } else if (severity == Severity.WARNING_LITERAL) {
- genSeverity = GenSeverity.WARNING_LITERAL;
- } else if (severity == Severity.ERROR_LITERAL) {
- genSeverity = GenSeverity.ERROR_LITERAL;
- }
- if (genSeverity != null) {
- genAudit.setSeverity(genSeverity);
- }
- return genAudit;
- }
-
- private GenRuleTarget createRuleTarget(EObject ruleTarget) {
- if (ruleTarget instanceof DomainElementTarget) {
- DomainElementTarget domainTarget = (DomainElementTarget) ruleTarget;
- GenDomainElementTarget genDomainTarget = GMFGenFactory.eINSTANCE.createGenDomainElementTarget();
- genDomainTarget.setElement(domainTarget.getElement() != null ? findGenClass(domainTarget.getElement()) : null);
- return genDomainTarget;
- } else if (ruleTarget instanceof NotationElementTarget) {
- NotationElementTarget notationTarget = (NotationElementTarget) ruleTarget;
- GenNotationElementTarget genNotationTarget = GMFGenFactory.eINSTANCE.createGenNotationElementTarget();
- // XXX findGenClass gives GenClass from domain model, is that what's expected here (NotationTarget)?
- genNotationTarget.setElement(notationTarget.getElement() != null ? findGenClass(notationTarget.getElement()) : null);
- return genNotationTarget;
-
- } else if (ruleTarget instanceof DiagramElementTarget) {
- GenDiagramElementTarget diagramTarget = GMFGenFactory.eINSTANCE.createGenDiagramElementTarget();
- MappingEntry mappingEntry = ((DiagramElementTarget) ruleTarget).getElement();
- if (mappingEntry != null) {
- LinkMapping lm = mappingEntry instanceof LinkMapping ? (LinkMapping) mappingEntry : null;
- GenCommonBase genBase = null;
- if (lm != null) {
- genBase = myHistory.find(lm);
- assert genBase != null;
- boolean isGenBaseNull = genBase == null;
- if (!isGenBaseNull) {
- diagramTarget.getElement().add(genBase);
- }
- } else {
- NodeMapping nm = mappingEntry instanceof NodeMapping ? (NodeMapping) mappingEntry : null;
- // There may be few GenChildNodes corresponding to same mapping entry.
- // @see https://bugs.eclipse.org/bugs/show_bug.cgi?id=136701
- genBase = myHistory.findTopNode(nm);
- if (genBase != null) {
- diagramTarget.getElement().add(genBase);
- }
- diagramTarget.getElement().addAll(Arrays.asList(myHistory.findChildNodes(nm)));
- }
- }
- return diagramTarget;
- } else if (ruleTarget instanceof AuditedMetricTarget) {
- GenAuditedMetricTarget genMetricTarget = GMFGenFactory.eINSTANCE.createGenAuditedMetricTarget();
- AuditedMetricTarget metricTarget = (AuditedMetricTarget) ruleTarget;
- if (metricTarget.getMetric() != null) {
- genMetricTarget.setMetric(myHistory.find(metricTarget.getMetric()));
- }
- GenClassifier resultClassifier = myEcoreGenModelMatch.findGenClassifier(EcorePackage.eINSTANCE.getEDoubleObject());
- assert resultClassifier instanceof GenDataType;
- if (resultClassifier instanceof GenDataType) {
- genMetricTarget.setMetricValueContext((GenDataType) resultClassifier);
- }
- return genMetricTarget;
- } else if (ruleTarget instanceof DomainAttributeTarget) {
- DomainAttributeTarget attrTarget = (DomainAttributeTarget) ruleTarget;
- GenDomainAttributeTarget genAttrTarget = GMFGenFactory.eINSTANCE.createGenDomainAttributeTarget();
- if (attrTarget.getAttribute() != null) {
- genAttrTarget.setAttribute(findGenFeature(attrTarget.getAttribute()));
- }
- genAttrTarget.setNullAsError(attrTarget.isNullAsError());
- return genAttrTarget;
- } else {
- assert false : "Unknown rule target type"; //$NON-NLS-1$
- }
- return null;
- }
-
- private GenMetricRule createGenMetric(MetricRule metric) {
- GenMetricRule genMetric = GMFGenFactory.eINSTANCE.createGenMetricRule();
- genMetric.setKey(metric.getKey());
- genMetric.setName(metric.getName());
- genMetric.setDescription(metric.getDescription());
- genMetric.setLowLimit(metric.getLowLimit());
- genMetric.setHighLimit(metric.getHighLimit());
-
- if (metric.getRule() != null) {
- genMetric.setRule(createValueExpression(metric.getRule()));
- }
-
- if (metric.getTarget() != null) {
- GenRuleTarget genTarget = createRuleTarget(metric.getTarget());
- assert genTarget instanceof GenMeasurable;
- if (genTarget instanceof GenMeasurable) {
- genMetric.setTarget((GenMeasurable) genTarget);
- }
- }
- myHistory.log(metric, genMetric);
- return genMetric;
- }
-
- /**
- * ValueExpressions may be reused, as such clients should treat second
- * argument as template and record return value as actual expression.
- *
- * FIXME when ValueExpression in Java language and non-empty body, create
- * JavaProvider with injectBody set to true. Also respect this condition in
- * search for existing provider
- *
- * @return actual gmfgen::ValueExpression to reference
- */
- private <T extends ValueExpression> T bindToProvider(org.eclipse.papyrus.gmf.mappings.ValueExpression expression, T genExpression) {
- if (myProcessedExpressions.containsKey(expression)) {
- // Note: may have already been bound during transformation of reused node mapping
- @SuppressWarnings("unchecked")
- T reuse = (T) myProcessedExpressions.get(expression);
- return reuse;
- }
- GenLanguage language = detectGenLanguage(expression.getLanguage());
- if (language == null) {
- return genExpression;
- }
- GenExpressionProviderContainer providerContainer = getGenEssence().getExpressionProviders();
- if (providerContainer == null) {
- providerContainer = GMFGenFactory.eINSTANCE.createGenExpressionProviderContainer();
- getGenEssence().setExpressionProviders(providerContainer);
- }
- GenExpressionProviderBase provider = null;
- for (GenExpressionProviderBase nextProvider : providerContainer.getProviders()) {
- if (language.equals(nextProvider.getLanguage())) {
- provider = nextProvider;
- break;
- }
- }
- if (provider == null) {
- provider = createExpressionProvider(language);
- providerContainer.getProviders().add(provider);
- }
- provider.getExpressions().add(genExpression);
- myProcessedExpressions.put(expression, genExpression);
- return genExpression;
- }
-
- private GenExpressionProviderBase createExpressionProvider(GenLanguage language) {
- switch (language.getValue()) {
- case GenLanguage.JAVA:
- return GMFGenFactory.eINSTANCE.createGenJavaExpressionProvider();
- case GenLanguage.OCL:
- case GenLanguage.REGEXP:
- case GenLanguage.NREGEXP: {
- GenExpressionInterpreter regexpProvider = GMFGenFactory.eINSTANCE.createGenExpressionInterpreter();
- regexpProvider.setLanguage(language);
- return regexpProvider;
- }
- case GenLanguage.LITERAL:
- return GMFGenFactory.eINSTANCE.createGenLiteralExpressionProvider();
- default: {
- assert false : language;
- return GMFGenFactory.eINSTANCE.createGenExpressionInterpreter();
- // fake provider with no language set to fail validation (XXX perhaps, makes sense to add 'unrecognized' language?)
- }
- }
- }
-
- private void addPreferencePages(GenDiagram diagram) {
- GenPreferencePage general = createStandardPreferencePage(diagram, "general", diagram.getEditorGen().getModelID() + " Diagram", StandardPreferencePages.GENERAL_LITERAL);
- diagram.getPreferencePages().add(general);
- general.getChildren().add(createStandardPreferencePage(diagram, "appearance", "Appearance", StandardPreferencePages.APPEARANCE_LITERAL));
- general.getChildren().add(createStandardPreferencePage(diagram, "connections", "Connections", StandardPreferencePages.CONNECTIONS_LITERAL));
- general.getChildren().add(createStandardPreferencePage(diagram, "printing", "Printing", StandardPreferencePages.PRINTING_LITERAL));
- general.getChildren().add(createStandardPreferencePage(diagram, "rulersAndGrid", "Rulers And Grid", StandardPreferencePages.RULERS_AND_GRID_LITERAL));
- }
-
- private GenPreferencePage createStandardPreferencePage(GenDiagram diagram, String id, String name, StandardPreferencePages kind) {
- GenStandardPreferencePage page = GMFGenFactory.eINSTANCE.createGenStandardPreferencePage();
- page.setID(diagram.getEditorGen().getPlugin().getID() + '.' + id);
- page.setName(name);
- page.setKind(kind);
- return page;
- }
-
- private void addContributions(GenApplication application) {
- GenMenuManager mainMenu = GMFGenFactory.eINSTANCE.createGenMenuManager();
- mainMenu.getItems().add(createFileMenu(application.getSharedContributionItems()));
- mainMenu.getItems().add(createEditMenu(application.getSharedContributionItems()));
- mainMenu.getItems().add(createGroupMarker("org.eclipse.ui.IWorkbenchActionConstants.MB_ADDITIONS")); //$NON-NLS-1$
- mainMenu.getItems().add(createWindowMenu(application.getSharedContributionItems()));
- mainMenu.getItems().add(createHelpMenu(application.getSharedContributionItems()));
- application.setMainMenu(mainMenu);
-
- GenToolBarManager mainToolBar = GMFGenFactory.eINSTANCE.createGenToolBarManager();
- mainToolBar.getItems().add(createGroupMarker("\"group.file\"")); //$NON-NLS-1$
- mainToolBar.getItems().add(createFileToolBar(application.getSharedContributionItems()));
- mainToolBar.getItems().add(createGroupMarker("org.eclipse.ui.IWorkbenchActionConstants.MB_ADDITIONS")); //$NON-NLS-1$
- mainToolBar.getItems().add(createGroupMarker("\"group.nav\"")); //$NON-NLS-1$
- mainToolBar.getItems().add(createGroupMarker("org.eclipse.ui.IWorkbenchActionConstants.GROUP_EDITOR")); //$NON-NLS-1$
- mainToolBar.getItems().add(createGroupMarker("org.eclipse.ui.IWorkbenchActionConstants.GROUP_HELP")); //$NON-NLS-1$
- mainToolBar.getItems().add(createHelpToolBar(application.getSharedContributionItems()));
- application.setMainToolBar(mainToolBar);
- }
-
- private GenGroupMarker createGroupMarker(String groupName) {
- GenGroupMarker gm = GMFGenFactory.eINSTANCE.createGenGroupMarker();
- gm.setGroupName(groupName);
- return gm;
- }
-
- private GenSeparator createSeparator(String groupName) {
- GenSeparator s = GMFGenFactory.eINSTANCE.createGenSeparator();
- s.setGroupName(groupName);
- return s;
- }
-
- private GenActionFactoryContributionItem createActionFactoryItem(String name) {
- GenActionFactoryContributionItem item = GMFGenFactory.eINSTANCE.createGenActionFactoryContributionItem();
- item.setName(name);
- return item;
- }
-
- private GenSharedContributionItem createSharedItem(List<GenContributionItem> sharedItems, GenContributionItem actualItem) {
- GenSharedContributionItem sitem = GMFGenFactory.eINSTANCE.createGenSharedContributionItem();
- if (actualItem instanceof GenActionFactoryContributionItem) {
- GenActionFactoryContributionItem afActualItem = (GenActionFactoryContributionItem) actualItem;
- for (GenContributionItem item : sharedItems) {
- if (item instanceof GenActionFactoryContributionItem) {
- GenActionFactoryContributionItem afItem = (GenActionFactoryContributionItem) item;
- if (afItem.getName().equals(afActualItem.getName())) {
- // shared action factory item is already contributed
- sitem.setActualItem(afItem);
- actualItem = null;
- break;
- }
- }
- }
- }
- if (actualItem != null) {
- sitem.setActualItem(actualItem);
- sharedItems.add(actualItem);
- }
- return sitem;
- }
-
- private GenMenuManager createFileMenu(List<GenContributionItem> sharedItems) {
- GenMenuManager menu = GMFGenFactory.eINSTANCE.createGenMenuManager();
- menu.setID("org.eclipse.ui.IWorkbenchActionConstants.M_FILE"); //$NON-NLS-1$
- menu.setName("&File"); //$NON-NLS-1$
- menu.getItems().add(createGroupMarker("org.eclipse.ui.IWorkbenchActionConstants.FILE_START")); //$NON-NLS-1$
- GenMenuManager newMenu = GMFGenFactory.eINSTANCE.createGenMenuManager();
- newMenu.setID("\"new\""); //$NON-NLS-1$
- newMenu.setName("&New"); //$NON-NLS-1$
- newMenu.getItems().add(createGroupMarker("org.eclipse.ui.IWorkbenchActionConstants.MB_ADDITIONS")); //$NON-NLS-1$
- menu.getItems().add(newMenu);
- menu.getItems().add(GMFGenFactory.eINSTANCE.createGenSeparator());
- menu.getItems().add(createGroupMarker("org.eclipse.ui.IWorkbenchActionConstants.MB_ADDITIONS")); //$NON-NLS-1$
- menu.getItems().add(GMFGenFactory.eINSTANCE.createGenSeparator());
- menu.getItems().add(createSharedItem(sharedItems, createActionFactoryItem("CLOSE"))); //$NON-NLS-1$
- menu.getItems().add(createSharedItem(sharedItems, createActionFactoryItem("CLOSE_ALL"))); //$NON-NLS-1$
- menu.getItems().add(GMFGenFactory.eINSTANCE.createGenSeparator());
- menu.getItems().add(createSharedItem(sharedItems, createActionFactoryItem("SAVE"))); //$NON-NLS-1$
- menu.getItems().add(createSharedItem(sharedItems, createActionFactoryItem("SAVE_AS"))); //$NON-NLS-1$
- menu.getItems().add(createSharedItem(sharedItems, createActionFactoryItem("SAVE_ALL"))); //$NON-NLS-1$
- menu.getItems().add(GMFGenFactory.eINSTANCE.createGenSeparator());
- menu.getItems().add(createSharedItem(sharedItems, createActionFactoryItem("QUIT"))); //$NON-NLS-1$
- menu.getItems().add(createGroupMarker("org.eclipse.ui.IWorkbenchActionConstants.FILE_END")); //$NON-NLS-1$
- return menu;
- }
-
- private GenMenuManager createEditMenu(List<GenContributionItem> sharedItems) {
- GenMenuManager menu = GMFGenFactory.eINSTANCE.createGenMenuManager();
- menu.setID("org.eclipse.ui.IWorkbenchActionConstants.M_EDIT"); //$NON-NLS-1$
- menu.setName("&Edit"); //$NON-NLS-1$
- menu.getItems().add(createGroupMarker("org.eclipse.ui.IWorkbenchActionConstants.EDIT_START")); //$NON-NLS-1$
- menu.getItems().add(createSharedItem(sharedItems, createActionFactoryItem("UNDO"))); //$NON-NLS-1$
- menu.getItems().add(createSharedItem(sharedItems, createActionFactoryItem("REDO"))); //$NON-NLS-1$
- menu.getItems().add(createGroupMarker("org.eclipse.ui.IWorkbenchActionConstants.UNDO_EXT")); //$NON-NLS-1$
- menu.getItems().add(GMFGenFactory.eINSTANCE.createGenSeparator());
- menu.getItems().add(createSharedItem(sharedItems, createActionFactoryItem("CUT"))); //$NON-NLS-1$
- menu.getItems().add(createSharedItem(sharedItems, createActionFactoryItem("COPY"))); //$NON-NLS-1$
- menu.getItems().add(createSharedItem(sharedItems, createActionFactoryItem("PASTE"))); //$NON-NLS-1$
- menu.getItems().add(createGroupMarker("org.eclipse.ui.IWorkbenchActionConstants.CUT_EXT")); //$NON-NLS-1$
- menu.getItems().add(GMFGenFactory.eINSTANCE.createGenSeparator());
- menu.getItems().add(createSharedItem(sharedItems, createActionFactoryItem("DELETE"))); //$NON-NLS-1$
- menu.getItems().add(createSharedItem(sharedItems, createActionFactoryItem("SELECT_ALL"))); //$NON-NLS-1$
- menu.getItems().add(GMFGenFactory.eINSTANCE.createGenSeparator());
- menu.getItems().add(createGroupMarker("org.eclipse.ui.IWorkbenchActionConstants.ADD_EXT")); //$NON-NLS-1$
- menu.getItems().add(createGroupMarker("org.eclipse.ui.IWorkbenchActionConstants.EDIT_END")); //$NON-NLS-1$
- menu.getItems().add(createSeparator("org.eclipse.ui.IWorkbenchActionConstants.MB_ADDITIONS")); //$NON-NLS-1$
- return menu;
- }
-
- private GenMenuManager createWindowMenu(List<GenContributionItem> sharedItems) {
- GenMenuManager menu = GMFGenFactory.eINSTANCE.createGenMenuManager();
- menu.setID("org.eclipse.ui.IWorkbenchActionConstants.M_WINDOW"); //$NON-NLS-1$
- menu.setName("&Window"); //$NON-NLS-1$
- menu.getItems().add(createSharedItem(sharedItems, createActionFactoryItem("OPEN_NEW_WINDOW"))); //$NON-NLS-1$
- menu.getItems().add(createGroupMarker("org.eclipse.ui.IWorkbenchActionConstants.MB_ADDITIONS")); //$NON-NLS-1$
- // TODO : menu.add(ContributionItemFactory.OPEN_WINDOWS.create(window));
- return menu;
- }
-
- private GenMenuManager createHelpMenu(List<GenContributionItem> sharedItems) {
- GenMenuManager menu = GMFGenFactory.eINSTANCE.createGenMenuManager();
- menu.setID("org.eclipse.ui.IWorkbenchActionConstants.M_HELP"); //$NON-NLS-1$
- menu.setName("&Help"); //$NON-NLS-1$
- menu.getItems().add(createGroupMarker("org.eclipse.ui.IWorkbenchActionConstants.HELP_START")); //$NON-NLS-1$
- menu.getItems().add(createGroupMarker("org.eclipse.ui.IWorkbenchActionConstants.HELP_END")); //$NON-NLS-1$
- menu.getItems().add(createGroupMarker("org.eclipse.ui.IWorkbenchActionConstants.MB_ADDITIONS")); //$NON-NLS-1$
- return menu;
- }
-
- private GenToolBarManager createFileToolBar(List<GenContributionItem> sharedItems) {
- GenToolBarManager toolBar = GMFGenFactory.eINSTANCE.createGenToolBarManager();
- toolBar.setID("org.eclipse.ui.IWorkbenchActionConstants.TOOLBAR_FILE"); //$NON-NLS-1$
- toolBar.getItems().add(createSeparator("org.eclipse.ui.IWorkbenchActionConstants.NEW_GROUP")); //$NON-NLS-1$
- toolBar.getItems().add(createGroupMarker("org.eclipse.ui.IWorkbenchActionConstants.NEW_EXT")); //$NON-NLS-1$
- toolBar.getItems().add(createGroupMarker("org.eclipse.ui.IWorkbenchActionConstants.SAVE_GROUP")); //$NON-NLS-1$
- toolBar.getItems().add(createSharedItem(sharedItems, createActionFactoryItem("SAVE"))); //$NON-NLS-1$
- toolBar.getItems().add(createGroupMarker("org.eclipse.ui.IWorkbenchActionConstants.SAVE_EXT")); //$NON-NLS-1$
- toolBar.getItems().add(createSharedItem(sharedItems, createActionFactoryItem("PRINT"))); //$NON-NLS-1$
- toolBar.getItems().add(createGroupMarker("org.eclipse.ui.IWorkbenchActionConstants.PRINT_EXT")); //$NON-NLS-1$
- toolBar.getItems().add(createSeparator("org.eclipse.ui.IWorkbenchActionConstants.MB_ADDITIONS")); //$NON-NLS-1$
- return toolBar;
- }
-
- private GenToolBarManager createHelpToolBar(List<GenContributionItem> sharedItems) {
- GenToolBarManager toolBar = GMFGenFactory.eINSTANCE.createGenToolBarManager();
- toolBar.setID("org.eclipse.ui.IWorkbenchActionConstants.TOOLBAR_HELP"); //$NON-NLS-1$
- toolBar.getItems().add(createSeparator("org.eclipse.ui.IWorkbenchActionConstants.GROUP_HELP")); //$NON-NLS-1$
- toolBar.getItems().add(createGroupMarker("org.eclipse.ui.IWorkbenchActionConstants.GROUP_APP")); //$NON-NLS-1$
- return toolBar;
- }
-
- private GenParserImplementation getOrCreateParser(FeatureLabelMapping flMapping) {
- if (isEnumLabelMapping(flMapping)) {
- return getOrCreateEnumParser(flMapping);
- } else {
- return getOrCreatePredefinedParser(flMapping);
- }
- }
-
- private boolean isEnumLabelMapping(FeatureLabelMapping flMapping) {
- EList<EAttribute> features = flMapping.getFeatures();
- EList<EAttribute> editFeatures = flMapping.getEditableFeatures();
- if (features.size() != 1){
- return false;
- }
- if (editFeatures.size() > features.size()){
- return false;
- }
- if (!editFeatures.isEmpty() && editFeatures.get(0) != features.get(0)) {
- return false;
- }
- return features.get(0).getEType() instanceof EEnum;
- }
-
- private GenParserImplementation getOrCreateEnumParser(FeatureLabelMapping flMapping) {
- for (GenParserImplementation pi : getGenParsers().getImplementations()) {
- if (pi instanceof PredefinedEnumParser) {
- return (PredefinedEnumParser) pi;
- }
- }
- PredefinedEnumParser result = GMFGenFactory.eINSTANCE.createPredefinedEnumParser();
- getGenParsers().getImplementations().add(result);
- return result;
- }
-
- private GenParserImplementation createOclChoiceParser(OclChoiceLabelMapping oclMapping) {
- OclChoiceParser result = GMFGenFactory.eINSTANCE.createOclChoiceParser();
- if (oclMapping.getItemsExpression() != null) {
- result.setItemsExpression(createValueExpression(oclMapping.getItemsExpression()));
- }
- if (oclMapping.getShowExpression() != null) {
- result.setShowExpression(createValueExpression(oclMapping.getShowExpression()));
- }
- getGenParsers().getImplementations().add(result);
- return result;
- }
-
- private GenParserImplementation getOrCreatePredefinedParser(FeatureLabelMapping flMapping) {
- final LabelTextAccessMethod editMethod = LabelTextAccessMethod.get(flMapping.getEditMethod().getValue());
- final LabelTextAccessMethod viewMethod = LabelTextAccessMethod.get(flMapping.getViewMethod().getValue());
- for (GenParserImplementation pi : getGenParsers().getImplementations()) {
- if (pi instanceof PredefinedParser) {
- PredefinedParser pp = (PredefinedParser) pi;
- boolean same = pp.getEditMethod() == editMethod;
- same &= pp.getViewMethod() == viewMethod;
- if (same) {
- return pp;
- }
- }
- }
- PredefinedParser result = GMFGenFactory.eINSTANCE.createPredefinedParser();
- result.setEditMethod(editMethod);
- result.setViewMethod(viewMethod);
- getGenParsers().getImplementations().add(result);
- return result;
- }
-
- private GenParserImplementation getOrCreateParser(DesignLabelMapping flMapping) {
- if (myDesignLabelParser == null) {
- myDesignLabelParser = GMFGenFactory.eINSTANCE.createExternalParser();
- getGenParsers().getImplementations().add(myDesignLabelParser);
- }
- return myDesignLabelParser;
- }
-
- private GenParserImplementation getOrCreateParser(LabelMapping flMapping) {
- if (myAuxParser == null) {
- myAuxParser = GMFGenFactory.eINSTANCE.createExternalParser();
- getGenParsers().getImplementations().add(myAuxParser);
- }
- return myAuxParser;
- }
-}

Back to the top