/******************************************************************************* * Copyright (c) 2005, 2012 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 API and implementation *******************************************************************************/ package org.eclipse.bpel.ui.factories; import org.eclipse.bpel.model.Assign; import org.eclipse.bpel.model.BPELFactory; import org.eclipse.bpel.model.BPELPackage; import org.eclipse.bpel.model.Catch; import org.eclipse.bpel.model.CatchAll; import org.eclipse.bpel.model.CompensationHandler; import org.eclipse.bpel.model.Copy; import org.eclipse.bpel.model.ForEach; import org.eclipse.bpel.model.OnAlarm; import org.eclipse.bpel.model.OnEvent; import org.eclipse.bpel.model.OnMessage; import org.eclipse.bpel.model.Pick; import org.eclipse.bpel.model.Scope; import org.eclipse.bpel.model.Sequence; import org.eclipse.bpel.model.TerminationHandler; import org.eclipse.bpel.model.Variable; import org.eclipse.bpel.ui.BPELUIPlugin; import org.eclipse.bpel.ui.Policy; import org.eclipse.bpel.ui.util.XSDUtils; import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.EObject; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.swt.graphics.Image; import org.eclipse.xsd.XSDTypeDefinition; /** * Factory which knows how to create a BPEL model object (and knows where to * find the associated icons, etc). * * Each instance is constructed with one specific BPEL model object type and * represents the way to get general UI info about (and create instances of) * that model object type. */ public class BPELUIObjectFactory extends AbstractUIObjectFactory { protected static final String OBJ16 = "obj16/"; //$NON-NLS-1$ protected static final String OBJ20 = "obj20/"; //$NON-NLS-1$ protected static final String GIF = ".gif"; //$NON-NLS-1$ protected static final String PNG = ".png"; //$NON-NLS-1$ /** The counter variable type used in ForEach */ public static final String FOR_EACH_COUNTER_VARIABLE_TYPE = "unsignedInt"; //$NON-NLS-1$ /** The counter variable name used in ForEach */ public static final String FOR_EACH_COUNTER_VARIABLE_NAME = "Counter"; //$NON-NLS-1$ /** we should not include actions here (invoke, etc...) */ public static EClass[] classArray = { // BPELPackage.eINSTANCE.getProcess(), BPELPackage.eINSTANCE.getOpaqueActivity(), BPELPackage.eINSTANCE.getVariable(), BPELPackage.eINSTANCE.getCorrelationSet(), BPELPackage.eINSTANCE.getPartnerLink(), BPELPackage.eINSTANCE.getSequence(), BPELPackage.eINSTANCE.getFlow(), BPELPackage.eINSTANCE.getPick(), BPELPackage.eINSTANCE.getScope(), BPELPackage.eINSTANCE.getIf(), BPELPackage.eINSTANCE.getExit(), BPELPackage.eINSTANCE.getThrow(), BPELPackage.eINSTANCE.getRethrow(), BPELPackage.eINSTANCE.getCompensate(), BPELPackage.eINSTANCE.getCompensateScope(), BPELPackage.eINSTANCE.getWait(), BPELPackage.eINSTANCE.getWhile(), BPELPackage.eINSTANCE.getForEach(), BPELPackage.eINSTANCE.getRepeatUntil(), BPELPackage.eINSTANCE.getLink(), BPELPackage.eINSTANCE.getElseIf(), BPELPackage.eINSTANCE.getElse(), BPELPackage.eINSTANCE.getOnMessage(), BPELPackage.eINSTANCE.getOnAlarm(), BPELPackage.eINSTANCE.getFaultHandler(), BPELPackage.eINSTANCE.getCatch(), BPELPackage.eINSTANCE.getCatchAll(), BPELPackage.eINSTANCE.getCompensationHandler(), BPELPackage.eINSTANCE.getTerminationHandler(), BPELPackage.eINSTANCE.getEventHandler(), BPELPackage.eINSTANCE.getOnEvent(), BPELPackage.eINSTANCE.getMessageExchange(), BPELPackage.eINSTANCE.getValidate(), // Bugzilla 324115 BPELPackage.eINSTANCE.getExtensionActivity() }; protected EClass modelType; /** * Brand new shiny BPELUIObjectFactory. * * @param aModelType * the model type. */ public BPELUIObjectFactory(EClass aModelType) { super(); this.modelType = aModelType; if (modelType.getEPackage() != BPELPackage.eINSTANCE) { if (Policy.DEBUG) System.out .println("WARNING: constructing BPELUIObjectFactory(" + modelType.getName() + ") with non-BPELPackage EClass"); //$NON-NLS-1$ //$NON-NLS-2$ } } /** * * @see org.eclipse.bpel.ui.factories.AbstractUIObjectFactory#getModelType() */ @Override public EClass getModelType() { return modelType; } protected static String baseImageName(EClass modelObject) { // TODO: this is a hack and shouldn't be necessary if (modelObject == BPELPackage.eINSTANCE.getVariable()) { return "variable"; //$NON-NLS-1$ } if (modelObject == BPELPackage.eINSTANCE.getPartnerLink()) { return "partner"; //$NON-NLS-1$ } return modelObject.getName().toLowerCase(); } /** * @see org.eclipse.bpel.ui.factories.AbstractUIObjectFactory#getSmallImageDescriptor() */ @Override public ImageDescriptor getSmallImageDescriptor() { return getSmallImageDescriptor(getModelType()); } /** * @see org.eclipse.bpel.ui.factories.AbstractUIObjectFactory#getLargeImageDescriptor() */ @Override public ImageDescriptor getLargeImageDescriptor() { return getLargeImageDescriptor(getModelType()); } /** * Return the small image descriptor for the modelObject class passed. * @param modelObject * @return the small image descriptor */ public static ImageDescriptor getSmallImageDescriptor (EClass modelObject) { return BPELUIPlugin.INSTANCE.getImageDescriptor( OBJ16 + baseImageName(modelObject) + GIF); } /** * Return the large image descriptor for the modelObject class passed. * @param modelObject * @return the large image descriptor */ public static ImageDescriptor getLargeImageDescriptor(EClass modelObject) { return BPELUIPlugin.INSTANCE.getImageDescriptor( OBJ20 + baseImageName(modelObject) + PNG); } /** * @see org.eclipse.bpel.ui.factories.AbstractUIObjectFactory#getSmallImage() */ @Override public Image getSmallImage() { return BPELUIPlugin.INSTANCE.getImage( OBJ16 + baseImageName(getModelType()) + GIF); } /** * @see org.eclipse.bpel.ui.factories.AbstractUIObjectFactory#getLargeImage() */ @Override public Image getLargeImage() { return BPELUIPlugin.INSTANCE.getImage( OBJ20 + baseImageName(getModelType()) + PNG); } /** * @see org.eclipse.bpel.ui.factories.AbstractUIObjectFactory#getTypeLabel() */ @Override public String getTypeLabel() { // TODO: new story for externalizing this ? We used to use // BPELCreateFactory.ClassNiceName.* keys return getModelType().getName(); } /** * @see org.eclipse.bpel.ui.factories.AbstractUIObjectFactory#createInstance() */ @Override public EObject createInstance() { EObject result = super.createInstance(); if (result instanceof Scope) { // we need to have the variables model object in order to have the // variables // category appear on the tray // MRC: That's true, but it will not pass validation with the // default skeleton like this ... Scope scope = (Scope) result; scope.setVariables(BPELFactory.eINSTANCE.createVariables()); scope.setPartnerLinks(BPELFactory.eINSTANCE.createPartnerLinks()); scope.setCorrelationSets(BPELFactory.eINSTANCE.createCorrelationSets()); scope.setMessageExchanges(BPELFactory.eINSTANCE.createMessageExchanges()); } else if (result instanceof Pick) { Pick pick = (Pick) result; // create a free OnMessage inside the Pick. OnMessage onMessage = UIObjectFactoryProvider.getInstance() .getFactoryFor(BPELPackage.eINSTANCE.getOnMessage()) .createInstance(); pick.getMessages().add(onMessage); } else if (result instanceof Assign) { Assign assign = (Assign) result; // create a free Copy inside the Assign. Copy copy = BPELFactory.eINSTANCE.createCopy(); assign.getCopy().add(copy); } else if (result instanceof ForEach) { ForEach forEach = (ForEach) result; // create a default counter variable inside the ForEach Variable variable = BPELFactory.eINSTANCE.createVariable(); XSDTypeDefinition varType = XSDUtils .getPrimitive(FOR_EACH_COUNTER_VARIABLE_TYPE); variable.setType(varType); variable.setName(FOR_EACH_COUNTER_VARIABLE_NAME); forEach.setCounterName(variable); // create an empty scope inside the ForEach Scope scope = BPELFactory.eINSTANCE.createScope(); forEach.setActivity(scope); } else if (result instanceof CatchAll || result instanceof Catch || result instanceof CompensationHandler) { /** * This is per bug#132153 and bug#132154. * */ // create an empty scope inside the Catch Sequence sequence = BPELFactory.eINSTANCE.createSequence(); sequence.getActivities().add( BPELFactory.eINSTANCE.createCompensate()); if (result instanceof CatchAll || result instanceof Catch) sequence.getActivities().add(BPELFactory.eINSTANCE.createRethrow()); if (result instanceof Catch) { Catch _catch = (Catch) result; _catch.setActivity(sequence); } else if (result instanceof CatchAll) { CatchAll _catchAll = (CatchAll) result; _catchAll.setActivity(sequence); } else if (result instanceof CompensationHandler) { CompensationHandler _compensationHandler = (CompensationHandler) result; _compensationHandler.setActivity(sequence); } } else if (result instanceof TerminationHandler) { /** * Per bug# 132155 */ TerminationHandler terminationHandler = (TerminationHandler) result; terminationHandler.setActivity(BPELFactory.eINSTANCE .createCompensate()); } else if (result instanceof OnEvent) { /** Per bug# 133170 */ OnEvent onEvent = (OnEvent) result; onEvent.setActivity( BPELFactory.eINSTANCE.createScope()); } else if (result instanceof OnAlarm) { /** Per bug# 133170 */ OnAlarm onAlarm = (OnAlarm) result; onAlarm.setActivity( BPELFactory.eINSTANCE.createScope()); } return result; } }