/******************************************************************************* * Copyright (c) 2006-2012 * Software Technology Group, Dresden University of Technology * DevBoost GmbH, Berlin, Amtsgericht Charlottenburg, HRB 140026 * * 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: * Software Technology Group - TU Dresden, Germany; * DevBoost GmbH - Berlin, Germany * - initial API and implementation ******************************************************************************/ package org.reuseware.coconut.compositionprogram.diagram.part; import java.util.Collection; import java.util.Collections; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.Map; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.EStructuralFeature; import org.eclipse.emf.ecore.util.EcoreUtil; import org.eclipse.gmf.runtime.notation.View; import org.reuseware.coconut.compositionprogram.CompositionLink; import org.reuseware.coconut.compositionprogram.CompositionProgram; import org.reuseware.coconut.compositionprogram.CompositionprogramPackage; import org.reuseware.coconut.compositionprogram.FragmentInstance; import org.reuseware.coconut.compositionprogram.PortInstance; import org.reuseware.coconut.compositionprogram.diagram.edit.parts.CompositionLinkEditPart; import org.reuseware.coconut.compositionprogram.diagram.edit.parts.CompositionProgramEditPart; import org.reuseware.coconut.compositionprogram.diagram.edit.parts.FragmentInstanceEditPart; import org.reuseware.coconut.compositionprogram.diagram.edit.parts.PortInstanceEditPart; import org.reuseware.coconut.compositionprogram.diagram.providers.CompositionprogramElementTypes; /** * @generated */ public class CompositionprogramDiagramUpdater { /** * @generated */ public static List<CompositionprogramNodeDescriptor> getSemanticChildren( View view) { switch (CompositionprogramVisualIDRegistry.getVisualID(view)) { case CompositionProgramEditPart.VISUAL_ID: return getCompositionProgram_1000SemanticChildren(view); case FragmentInstanceEditPart.VISUAL_ID: return getFragmentInstance_2001SemanticChildren(view); } return Collections.emptyList(); } /** * @generated */ public static List<CompositionprogramNodeDescriptor> getCompositionProgram_1000SemanticChildren( View view) { if (!view.isSetElement()) { return Collections.emptyList(); } CompositionProgram modelElement = (CompositionProgram) view .getElement(); LinkedList<CompositionprogramNodeDescriptor> result = new LinkedList<CompositionprogramNodeDescriptor>(); for (Iterator<?> it = modelElement.getFragmentInstances().iterator(); it .hasNext();) { FragmentInstance childElement = (FragmentInstance) it.next(); int visualID = CompositionprogramVisualIDRegistry.getNodeVisualID( view, childElement); if (visualID == FragmentInstanceEditPart.VISUAL_ID) { result.add(new CompositionprogramNodeDescriptor(childElement, visualID)); continue; } } return result; } /** * @generated */ public static List<CompositionprogramNodeDescriptor> getFragmentInstance_2001SemanticChildren( View view) { if (!view.isSetElement()) { return Collections.emptyList(); } FragmentInstance modelElement = (FragmentInstance) view.getElement(); LinkedList<CompositionprogramNodeDescriptor> result = new LinkedList<CompositionprogramNodeDescriptor>(); for (Iterator<?> it = modelElement.getPortInstances().iterator(); it .hasNext();) { PortInstance childElement = (PortInstance) it.next(); int visualID = CompositionprogramVisualIDRegistry.getNodeVisualID( view, childElement); if (visualID == PortInstanceEditPart.VISUAL_ID) { result.add(new CompositionprogramNodeDescriptor(childElement, visualID)); continue; } } return result; } /** * @generated */ public static List<CompositionprogramLinkDescriptor> getContainedLinks( View view) { switch (CompositionprogramVisualIDRegistry.getVisualID(view)) { case CompositionProgramEditPart.VISUAL_ID: return getCompositionProgram_1000ContainedLinks(view); case FragmentInstanceEditPart.VISUAL_ID: return getFragmentInstance_2001ContainedLinks(view); case PortInstanceEditPart.VISUAL_ID: return getPortInstance_3001ContainedLinks(view); case CompositionLinkEditPart.VISUAL_ID: return getCompositionLink_4001ContainedLinks(view); } return Collections.emptyList(); } /** * @generated */ public static List<CompositionprogramLinkDescriptor> getIncomingLinks( View view) { switch (CompositionprogramVisualIDRegistry.getVisualID(view)) { case FragmentInstanceEditPart.VISUAL_ID: return getFragmentInstance_2001IncomingLinks(view); case PortInstanceEditPart.VISUAL_ID: return getPortInstance_3001IncomingLinks(view); case CompositionLinkEditPart.VISUAL_ID: return getCompositionLink_4001IncomingLinks(view); } return Collections.emptyList(); } /** * @generated */ public static List<CompositionprogramLinkDescriptor> getOutgoingLinks( View view) { switch (CompositionprogramVisualIDRegistry.getVisualID(view)) { case FragmentInstanceEditPart.VISUAL_ID: return getFragmentInstance_2001OutgoingLinks(view); case PortInstanceEditPart.VISUAL_ID: return getPortInstance_3001OutgoingLinks(view); case CompositionLinkEditPart.VISUAL_ID: return getCompositionLink_4001OutgoingLinks(view); } return Collections.emptyList(); } /** * @generated */ public static List<CompositionprogramLinkDescriptor> getCompositionProgram_1000ContainedLinks( View view) { CompositionProgram modelElement = (CompositionProgram) view .getElement(); LinkedList<CompositionprogramLinkDescriptor> result = new LinkedList<CompositionprogramLinkDescriptor>(); result.addAll(getContainedTypeModelFacetLinks_CompositionLink_4001(modelElement)); return result; } /** * @generated */ public static List<CompositionprogramLinkDescriptor> getFragmentInstance_2001ContainedLinks( View view) { return Collections.emptyList(); } /** * @generated */ public static List<CompositionprogramLinkDescriptor> getPortInstance_3001ContainedLinks( View view) { return Collections.emptyList(); } /** * @generated */ public static List<CompositionprogramLinkDescriptor> getCompositionLink_4001ContainedLinks( View view) { return Collections.emptyList(); } /** * @generated */ public static List<CompositionprogramLinkDescriptor> getFragmentInstance_2001IncomingLinks( View view) { return Collections.emptyList(); } /** * @generated */ public static List<CompositionprogramLinkDescriptor> getPortInstance_3001IncomingLinks( View view) { PortInstance modelElement = (PortInstance) view.getElement(); Map<EObject, Collection<EStructuralFeature.Setting>> crossReferences = EcoreUtil.CrossReferencer .find(view.eResource().getResourceSet().getResources()); LinkedList<CompositionprogramLinkDescriptor> result = new LinkedList<CompositionprogramLinkDescriptor>(); result.addAll(getIncomingTypeModelFacetLinks_CompositionLink_4001( modelElement, crossReferences)); return result; } /** * @generated */ public static List<CompositionprogramLinkDescriptor> getCompositionLink_4001IncomingLinks( View view) { return Collections.emptyList(); } /** * @generated */ public static List<CompositionprogramLinkDescriptor> getFragmentInstance_2001OutgoingLinks( View view) { return Collections.emptyList(); } /** * @generated */ public static List<CompositionprogramLinkDescriptor> getPortInstance_3001OutgoingLinks( View view) { PortInstance modelElement = (PortInstance) view.getElement(); LinkedList<CompositionprogramLinkDescriptor> result = new LinkedList<CompositionprogramLinkDescriptor>(); result.addAll(getOutgoingTypeModelFacetLinks_CompositionLink_4001(modelElement)); return result; } /** * @generated */ public static List<CompositionprogramLinkDescriptor> getCompositionLink_4001OutgoingLinks( View view) { return Collections.emptyList(); } /** * @generated */ private static Collection<CompositionprogramLinkDescriptor> getContainedTypeModelFacetLinks_CompositionLink_4001( CompositionProgram container) { LinkedList<CompositionprogramLinkDescriptor> result = new LinkedList<CompositionprogramLinkDescriptor>(); for (Iterator<?> links = container.getCompositionLinks().iterator(); links .hasNext();) { EObject linkObject = (EObject) links.next(); if (false == linkObject instanceof CompositionLink) { continue; } CompositionLink link = (CompositionLink) linkObject; if (CompositionLinkEditPart.VISUAL_ID != CompositionprogramVisualIDRegistry .getLinkWithClassVisualID(link)) { continue; } PortInstance dst = link.getTarget(); PortInstance src = link.getSource(); result.add(new CompositionprogramLinkDescriptor(src, dst, link, CompositionprogramElementTypes.CompositionLink_4001, CompositionLinkEditPart.VISUAL_ID)); } return result; } /** * @generated */ private static Collection<CompositionprogramLinkDescriptor> getIncomingTypeModelFacetLinks_CompositionLink_4001( PortInstance target, Map<EObject, Collection<EStructuralFeature.Setting>> crossReferences) { LinkedList<CompositionprogramLinkDescriptor> result = new LinkedList<CompositionprogramLinkDescriptor>(); Collection<EStructuralFeature.Setting> settings = crossReferences .get(target); for (EStructuralFeature.Setting setting : settings) { if (setting.getEStructuralFeature() != CompositionprogramPackage.eINSTANCE .getCompositionLink_Target() || false == setting.getEObject() instanceof CompositionLink) { continue; } CompositionLink link = (CompositionLink) setting.getEObject(); if (CompositionLinkEditPart.VISUAL_ID != CompositionprogramVisualIDRegistry .getLinkWithClassVisualID(link)) { continue; } PortInstance src = link.getSource(); result.add(new CompositionprogramLinkDescriptor(src, target, link, CompositionprogramElementTypes.CompositionLink_4001, CompositionLinkEditPart.VISUAL_ID)); } return result; } /** * @generated */ private static Collection<CompositionprogramLinkDescriptor> getOutgoingTypeModelFacetLinks_CompositionLink_4001( PortInstance source) { CompositionProgram container = null; // Find container element for the link. // Climb up by containment hierarchy starting from the source // and return the first element that is instance of the container class. for (EObject element = source; element != null && container == null; element = element .eContainer()) { if (element instanceof CompositionProgram) { container = (CompositionProgram) element; } } if (container == null) { return Collections.emptyList(); } LinkedList<CompositionprogramLinkDescriptor> result = new LinkedList<CompositionprogramLinkDescriptor>(); for (Iterator<?> links = container.getCompositionLinks().iterator(); links .hasNext();) { EObject linkObject = (EObject) links.next(); if (false == linkObject instanceof CompositionLink) { continue; } CompositionLink link = (CompositionLink) linkObject; if (CompositionLinkEditPart.VISUAL_ID != CompositionprogramVisualIDRegistry .getLinkWithClassVisualID(link)) { continue; } PortInstance dst = link.getTarget(); PortInstance src = link.getSource(); if (src != source) { continue; } result.add(new CompositionprogramLinkDescriptor(src, dst, link, CompositionprogramElementTypes.CompositionLink_4001, CompositionLinkEditPart.VISUAL_ID)); } return result; } }