//------------------------------------------------------------------------------ // Copyright (c) 2005, 2007 IBM Corporation and others. // 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: // IBM Corporation - initial implementation //------------------------------------------------------------------------------ package org.eclipse.epf.migration.diagram.ad.map; import java.util.HashMap; import java.util.List; import java.util.Map; import org.eclipse.epf.diagram.model.ModelPackage; import org.eclipse.epf.diagram.model.Node; import org.eclipse.epf.diagram.model.TypedNode; import org.eclipse.epf.uma.Activity; import org.eclipse.epf.uma.Milestone; import org.eclipse.epf.uma.TaskDescriptor; /** * @author Shashidhar Kannoori * @author Shilpa Toraskar * @since 1.2 */ public class MapFactory { Map map = new HashMap(); static MapFactory factory = null; public static MapFactory getInstance() { if (factory == null) { factory = new MapFactory(); } return factory; } /** * Crete map node * @param node * @return */ public MapNode create(Node node) { int classifier = node.eClass().getClassifierID(); switch (classifier) { case ModelPackage.WORK_BREAKDOWN_ELEMENT_NODE: return createWorkBreakDownElementNode(node); case ModelPackage.TYPED_NODE: TypedNode typedNode = (TypedNode) node; if (typedNode.getType() == TypedNode.DECISION) { List incomingConnections = typedNode.getIncomingConnections(); if (incomingConnections.size() > 1) return createMergeNode(node); else return createDecisionNode(node); // List outgoingConnections = typedNode.getOutgoingConnections(); // if (incomingConnections.size() > 1 && outgoingConnections.size() == 1) // return createMergeNode(node); // if (incomingConnections.size() == 1 && outgoingConnections.size() > 1) // return createDecisionNode(node); // if (incomingConnections.size() > 1 // && outgoingConnections.size() > 1) { // createMergeNode(node); // return createDecisionNode(node); // } } else if (typedNode.getType() == TypedNode.START) return createInitialNode(node); else if (typedNode.getType() == TypedNode.END) return createFinalNode(node); else if (typedNode.getType() == TypedNode.SYNCH_BAR) { List incomingConnections = typedNode.getIncomingConnections(); if (incomingConnections.size() > 1) return createJoinNode(node); else return createForkNode(node); // List outgoingConnections = typedNode.getOutgoingConnections(); // if (incomingConnections.size() > 1 && outgoingConnections.size() == 1) // return createJoinNode(node); // if (incomingConnections.size() == 1 && outgoingConnections.size() > 1) // return createForkNode(node); // if (incomingConnections.size() > 1 // && outgoingConnections.size() > 1) { // createJoinNode(node); // return createForkNode(node); // } } else if (typedNode.getType() == TypedNode.FREE_TEXT) { return createFreeTextNode(node); } case ModelPackage.LINK: return createControlFlow(node); default: throw new IllegalArgumentException("The class '" //$NON-NLS-1$ + node.eClass().getName() + "' is not a valid classifier"); //$NON-NLS-1$ } } private MapNode createWorkBreakDownElementNode(Node node) { Object obj = node.getObject(); if (obj instanceof Activity) return new ActivityMapNode(node); else if (obj instanceof TaskDescriptor || obj instanceof Milestone) return new ActivityParameterMapeNode(node); return null; } private MapNode createFreeTextNode(Node node) { return null; } private MapNode createFinalNode(Node node) { return new FinalNodeMap(node); } private MapNode createInitialNode(Node node) { return new InitialNodeMap(node); } private MapNode createControlFlow(Node node) { return null; } private MapNode createMergeNode(Node node) { return new MergeNodeMap(node); } private MapNode createJoinNode(Node node) { return new JoinNodeMap(node); } private MapNode createDecisionNode(Node node) { return new DecisionNodeMap(node); } private MapNode createForkNode(Node node) { return new ForkNodeMap(node); } }