/******************************************************************************* * Copyright (c) 2006, 2007 g-Eclipse Consortium * 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 * * Initial development of the original code was made for the g-Eclipse project * funded by European Union project number: FP6-IST-034327 * http://www.geclipse.eu/ * * Contributors: * RUR (http://acet.rdg.ac.uk/) * - Ashish Thandavan - initial API and implementation ******************************************************************************/ package eu.geclipse.workflow.ui.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 eu.geclipse.workflow.model.IInputPort; import eu.geclipse.workflow.model.ILink; import eu.geclipse.workflow.model.IOutputPort; import eu.geclipse.workflow.model.IWorkflow; import eu.geclipse.workflow.model.IWorkflowJob; import eu.geclipse.workflow.model.IWorkflowNode; import eu.geclipse.workflow.model.IWorkflowPackage; import eu.geclipse.workflow.ui.edit.parts.InputPortEditPart; import eu.geclipse.workflow.ui.edit.parts.LinkEditPart; import eu.geclipse.workflow.ui.edit.parts.OutputPortEditPart; import eu.geclipse.workflow.ui.edit.parts.WorkflowEditPart; import eu.geclipse.workflow.ui.edit.parts.WorkflowJobEditPart; import eu.geclipse.workflow.ui.providers.WorkflowElementTypes; /** * @generated */ public class WorkflowDiagramUpdater { /** * @generated */ public static List getSemanticChildren( View view ) { switch( WorkflowVisualIDRegistry.getVisualID( view ) ) { case WorkflowJobEditPart.VISUAL_ID: return getIWorkflowJob_1001SemanticChildren( view ); case WorkflowEditPart.VISUAL_ID: return getIWorkflow_79SemanticChildren( view ); } return Collections.EMPTY_LIST; } /** * @generated */ public static List getIWorkflowJob_1001SemanticChildren( View view ) { if( !view.isSetElement() ) { return Collections.EMPTY_LIST; } IWorkflowJob modelElement = ( IWorkflowJob )view.getElement(); List result = new LinkedList(); for( Iterator it = modelElement.getOutputs().iterator(); it.hasNext(); ) { IOutputPort childElement = ( IOutputPort )it.next(); int visualID = WorkflowVisualIDRegistry.getNodeVisualID( view, childElement ); if( visualID == OutputPortEditPart.VISUAL_ID ) { result.add( new WorkflowNodeDescriptor( childElement, visualID ) ); continue; } } for( Iterator it = modelElement.getInputs().iterator(); it.hasNext(); ) { IInputPort childElement = ( IInputPort )it.next(); int visualID = WorkflowVisualIDRegistry.getNodeVisualID( view, childElement ); if( visualID == InputPortEditPart.VISUAL_ID ) { result.add( new WorkflowNodeDescriptor( childElement, visualID ) ); continue; } } return result; } /** * @generated */ public static List getIWorkflow_79SemanticChildren( View view ) { if( !view.isSetElement() ) { return Collections.EMPTY_LIST; } IWorkflow modelElement = ( IWorkflow )view.getElement(); List result = new LinkedList(); for( Iterator it = modelElement.getNodes().iterator(); it.hasNext(); ) { IWorkflowNode childElement = ( IWorkflowNode )it.next(); int visualID = WorkflowVisualIDRegistry.getNodeVisualID( view, childElement ); if( visualID == WorkflowJobEditPart.VISUAL_ID ) { result.add( new WorkflowNodeDescriptor( childElement, visualID ) ); continue; } } return result; } /** * @generated */ public static List getContainedLinks( View view ) { switch( WorkflowVisualIDRegistry.getVisualID( view ) ) { case WorkflowEditPart.VISUAL_ID: return getIWorkflow_79ContainedLinks( view ); case WorkflowJobEditPart.VISUAL_ID: return getIWorkflowJob_1001ContainedLinks( view ); case OutputPortEditPart.VISUAL_ID: return getIOutputPort_2001ContainedLinks( view ); case InputPortEditPart.VISUAL_ID: return getIInputPort_2002ContainedLinks( view ); case LinkEditPart.VISUAL_ID: return getILink_3001ContainedLinks( view ); } return Collections.EMPTY_LIST; } /** * @generated */ public static List getIncomingLinks( View view ) { switch( WorkflowVisualIDRegistry.getVisualID( view ) ) { case WorkflowJobEditPart.VISUAL_ID: return getIWorkflowJob_1001IncomingLinks( view ); case OutputPortEditPart.VISUAL_ID: return getIOutputPort_2001IncomingLinks( view ); case InputPortEditPart.VISUAL_ID: return getIInputPort_2002IncomingLinks( view ); case LinkEditPart.VISUAL_ID: return getILink_3001IncomingLinks( view ); } return Collections.EMPTY_LIST; } /** * @generated */ public static List getOutgoingLinks( View view ) { switch( WorkflowVisualIDRegistry.getVisualID( view ) ) { case WorkflowJobEditPart.VISUAL_ID: return getIWorkflowJob_1001OutgoingLinks( view ); case OutputPortEditPart.VISUAL_ID: return getIOutputPort_2001OutgoingLinks( view ); case InputPortEditPart.VISUAL_ID: return getIInputPort_2002OutgoingLinks( view ); case LinkEditPart.VISUAL_ID: return getILink_3001OutgoingLinks( view ); } return Collections.EMPTY_LIST; } /** * @generated */ public static List getIWorkflow_79ContainedLinks( View view ) { IWorkflow modelElement = ( IWorkflow )view.getElement(); List result = new LinkedList(); result.addAll( getContainedTypeModelFacetLinks_ILink_3001( modelElement ) ); return result; } /** * @generated */ public static List getIWorkflowJob_1001ContainedLinks( View view ) { return Collections.EMPTY_LIST; } /** * @generated */ public static List getIOutputPort_2001ContainedLinks( View view ) { return Collections.EMPTY_LIST; } /** * @generated */ public static List getIInputPort_2002ContainedLinks( View view ) { return Collections.EMPTY_LIST; } /** * @generated */ public static List getILink_3001ContainedLinks( View view ) { return Collections.EMPTY_LIST; } /** * @generated */ public static List getIWorkflowJob_1001IncomingLinks( View view ) { return Collections.EMPTY_LIST; } /** * @generated */ public static List getIOutputPort_2001IncomingLinks( View view ) { return Collections.EMPTY_LIST; } /** * @generated */ public static List getIInputPort_2002IncomingLinks( View view ) { IInputPort modelElement = ( IInputPort )view.getElement(); Map crossReferences = EcoreUtil.CrossReferencer.find( view.eResource() .getResourceSet() .getResources() ); List result = new LinkedList(); result.addAll( getIncomingTypeModelFacetLinks_ILink_3001( modelElement, crossReferences ) ); return result; } /** * @generated */ public static List getILink_3001IncomingLinks( View view ) { return Collections.EMPTY_LIST; } /** * @generated */ public static List getIWorkflowJob_1001OutgoingLinks( View view ) { return Collections.EMPTY_LIST; } /** * @generated */ public static List getIOutputPort_2001OutgoingLinks( View view ) { IOutputPort modelElement = ( IOutputPort )view.getElement(); List result = new LinkedList(); result.addAll( getOutgoingTypeModelFacetLinks_ILink_3001( modelElement ) ); return result; } /** * @generated */ public static List getIInputPort_2002OutgoingLinks( View view ) { return Collections.EMPTY_LIST; } /** * @generated */ public static List getILink_3001OutgoingLinks( View view ) { return Collections.EMPTY_LIST; } /** * @generated */ private static Collection getContainedTypeModelFacetLinks_ILink_3001( IWorkflow container ) { Collection result = new LinkedList(); for( Iterator links = container.getLinks().iterator(); links.hasNext(); ) { Object linkObject = links.next(); if( false == linkObject instanceof ILink ) { continue; } ILink link = ( ILink )linkObject; if( LinkEditPart.VISUAL_ID != WorkflowVisualIDRegistry.getLinkWithClassVisualID( link ) ) { continue; } IInputPort dst = link.getTarget(); IOutputPort src = link.getSource(); result.add( new WorkflowLinkDescriptor( src, dst, link, WorkflowElementTypes.ILink_3001, LinkEditPart.VISUAL_ID ) ); } return result; } /** * @generated */ private static Collection getIncomingTypeModelFacetLinks_ILink_3001( IInputPort target, Map crossReferences ) { Collection result = new LinkedList(); Collection settings = ( Collection )crossReferences.get( target ); for( Iterator it = settings.iterator(); it.hasNext(); ) { EStructuralFeature.Setting setting = ( EStructuralFeature.Setting )it.next(); if( setting.getEStructuralFeature() != IWorkflowPackage.eINSTANCE.getILink_Target() || false == setting.getEObject() instanceof ILink ) { continue; } ILink link = ( ILink )setting.getEObject(); if( LinkEditPart.VISUAL_ID != WorkflowVisualIDRegistry.getLinkWithClassVisualID( link ) ) { continue; } IOutputPort src = link.getSource(); result.add( new WorkflowLinkDescriptor( src, target, link, WorkflowElementTypes.ILink_3001, LinkEditPart.VISUAL_ID ) ); } return result; } /** * @generated */ private static Collection getOutgoingTypeModelFacetLinks_ILink_3001( IOutputPort source ) { IWorkflow 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 IWorkflow ) { container = ( IWorkflow )element; } } if( container == null ) { return Collections.EMPTY_LIST; } Collection result = new LinkedList(); for( Iterator links = container.getLinks().iterator(); links.hasNext(); ) { Object linkObject = links.next(); if( false == linkObject instanceof ILink ) { continue; } ILink link = ( ILink )linkObject; if( LinkEditPart.VISUAL_ID != WorkflowVisualIDRegistry.getLinkWithClassVisualID( link ) ) { continue; } IInputPort dst = link.getTarget(); IOutputPort src = link.getSource(); if( src != source ) { continue; } result.add( new WorkflowLinkDescriptor( src, dst, link, WorkflowElementTypes.ILink_3001, LinkEditPart.VISUAL_ID ) ); } return result; } }