diff options
Diffstat (limited to 'plugins/org.eclipse.etrice.ui.behavior.fsm/src/org/eclipse/etrice/ui/behavior/fsm/provider/BaseDiagramProvider.xtend')
-rw-r--r-- | plugins/org.eclipse.etrice.ui.behavior.fsm/src/org/eclipse/etrice/ui/behavior/fsm/provider/BaseDiagramProvider.xtend | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/plugins/org.eclipse.etrice.ui.behavior.fsm/src/org/eclipse/etrice/ui/behavior/fsm/provider/BaseDiagramProvider.xtend b/plugins/org.eclipse.etrice.ui.behavior.fsm/src/org/eclipse/etrice/ui/behavior/fsm/provider/BaseDiagramProvider.xtend new file mode 100644 index 000000000..cb62d9e4a --- /dev/null +++ b/plugins/org.eclipse.etrice.ui.behavior.fsm/src/org/eclipse/etrice/ui/behavior/fsm/provider/BaseDiagramProvider.xtend @@ -0,0 +1,61 @@ +/******************************************************************************* + * Copyright (c) 2011 protos software gmbh (http://www.protos.de). + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * CONTRIBUTORS: + * Juergen Haug (initial contribution) + * + *******************************************************************************/ + +package org.eclipse.etrice.ui.behavior.fsm.provider + +import com.google.common.collect.ArrayListMultimap +import com.google.common.collect.Multimap +import java.util.Collection +import org.eclipse.emf.ecore.EObject +import org.eclipse.emf.ecore.util.EcoreUtil +import org.eclipse.etrice.core.fsm.fSM.ModelComponent +import org.eclipse.etrice.ui.behavior.fsm.editor.AbstractFSMDiagramTypeProvider +import org.eclipse.etrice.ui.common.base.support.DiagramAccessBase +import org.eclipse.graphiti.mm.pictograms.Diagram +import org.eclipse.graphiti.mm.pictograms.PictogramElement +import org.eclipse.graphiti.mm.pictograms.PictogramLink +import org.eclipse.graphiti.services.Graphiti + +/** + * Provides the {@linkplain PictogramElement} objects of the base class diagram. + * This is a reverse mapping from room business objects to linked base diagram pictograms. + */ +class BaseDiagramProvider { + + val Diagram baseDiagram + val Multimap<EObject, PictogramElement> baseDiagramBusinessObjs = ArrayListMultimap.create + + new(AbstractFSMDiagramTypeProvider diagramTypeProvider) { + val diagramAccess = diagramTypeProvider.injector.getInstance(DiagramAccessBase) + val mc = Graphiti.linkService.getBusinessObjectForLinkedPictogramElement(diagramTypeProvider.diagram) as ModelComponent + val rs = diagramTypeProvider.diagram.eResource.resourceSet + + // open base diagram => causes full recursive update or creation of all base diagrams + baseDiagram = if(mc.base != null) diagramAccess.getDiagram(mc.base, rs) + if(baseDiagram != null) { + // create mapping from business object to pictogram elements + EcoreUtil.ExternalCrossReferencer.find(baseDiagram).forEach [ targetEObj, eFeatureSetting | + eFeatureSetting.map[getEObject].filter(PictogramLink).map[pictogramElement].forEach [ pe | + baseDiagramBusinessObjs.put(targetEObj, pe) + ] + ] + + // base diagram resource not needed anymore + rs.resources.remove(baseDiagram.eResource) + } + } + + def Collection<PictogramElement> getPictograms(EObject roomObj) { + if(roomObj == null) emptyList else baseDiagramBusinessObjs.get(roomObj) + } + +} |