blob: a56f0f17620da23895d1f42c8aa01b61223e6a96 [file] [log] [blame]
/*******************************************************************************
* 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.adapters;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.bpel.model.BPELPackage;
import org.eclipse.bpel.model.CompensationHandler;
import org.eclipse.bpel.model.CorrelationSets;
import org.eclipse.bpel.model.EventHandler;
import org.eclipse.bpel.model.BPELExtensibleElement;
import org.eclipse.bpel.model.FaultHandler;
import org.eclipse.bpel.model.MessageExchanges;
import org.eclipse.bpel.model.PartnerLinks;
import org.eclipse.bpel.model.Scope;
import org.eclipse.bpel.model.TerminationHandler;
import org.eclipse.bpel.model.Variables;
import org.eclipse.bpel.ui.actions.CreateCorrelationSetAction;
import org.eclipse.bpel.ui.actions.CreateMessageExchangeAction;
import org.eclipse.bpel.ui.actions.CreatePartnerLinkAction;
import org.eclipse.bpel.ui.actions.CreateVariableAction;
import org.eclipse.bpel.ui.actions.editpart.AbstractAction;
import org.eclipse.bpel.ui.adapters.delegates.ActivityContainer;
import org.eclipse.bpel.ui.adapters.delegates.MultiContainer;
import org.eclipse.bpel.ui.adapters.delegates.OptionalIndirectContainer;
import org.eclipse.bpel.ui.adapters.delegates.ReferenceContainer;
import org.eclipse.bpel.ui.editparts.OutlineTreeEditPart;
import org.eclipse.bpel.ui.editparts.ScopeEditPart;
import org.eclipse.gef.EditPart;
public class ScopeAdapter extends ContainerActivityAdapter implements IFaultHandlerHolder,
ICompensationHandlerHolder, ITerminationHandlerHolder, IEventHandlerHolder
{
/* IContainer delegate */
@Override
public IContainer createContainerDelegate() {
MultiContainer omc = new MultiContainer();
omc.add(new ActivityContainer(BPELPackage.eINSTANCE.getScope_Activity()));
// TODO: Support scoped partner links, correlation sets, variables and message exchanges
omc.add(new OptionalIndirectContainer(BPELPackage.eINSTANCE.getScope_PartnerLinks(),
new ReferenceContainer(BPELPackage.eINSTANCE.getPartnerLinks_Children())));
omc.add(new OptionalIndirectContainer(BPELPackage.eINSTANCE.getScope_CorrelationSets(),
new ReferenceContainer(BPELPackage.eINSTANCE.getCorrelationSets_Children())));
omc.add(new OptionalIndirectContainer(BPELPackage.eINSTANCE.getScope_Variables(),
new ReferenceContainer(BPELPackage.eINSTANCE.getVariables_Children())));
omc.add(new OptionalIndirectContainer(BPELPackage.eINSTANCE.getScope_MessageExchanges(),
new ReferenceContainer(BPELPackage.eINSTANCE.getMessageExchanges_Children())));
omc.add(new ReferenceContainer(BPELPackage.eINSTANCE.getScope_FaultHandlers()));
omc.add(new ReferenceContainer(BPELPackage.eINSTANCE.getScope_CompensationHandler()));
omc.add(new ReferenceContainer(BPELPackage.eINSTANCE.getScope_TerminationHandler()));
omc.add(new ReferenceContainer(BPELPackage.eINSTANCE.getScope_EventHandlers()));
return omc;
}
/* IFaultHandlerHolder */
public FaultHandler getFaultHandler(Object object) {
return ((Scope)object).getFaultHandlers();
}
public void setFaultHandler(Object object, FaultHandler faultHandler) {
((Scope)object).setFaultHandlers(faultHandler);
}
/* IEventHandlerHolder */
public EventHandler getEventHandler(Object object) {
return ((Scope)object).getEventHandlers();
}
public void setEventHandler(Object object, EventHandler eventHandler) {
((Scope)object).setEventHandlers(eventHandler);
}
/* ICompensationHandlerHolder */
public CompensationHandler getCompensationHandler(Object object) {
return ((Scope)object).getCompensationHandler();
}
public void setCompensationHandler(Object object, CompensationHandler compensationHandler) {
((Scope)object).setCompensationHandler(compensationHandler);
}
/* ITerminationHandlerHolder */
public TerminationHandler getTerminationHandler(Object object) {
return ((Scope)object).getTerminationHandler();
}
public void setTerminationHandler(Object object, TerminationHandler terminationHandler) {
((Scope)object).setTerminationHandler(terminationHandler);
}
/* EditPartFactory */
@Override
public EditPart createEditPart(EditPart context, Object model) {
EditPart result = new ScopeEditPart();
result.setModel(model);
return result;
}
/* IOutlineEditPartFactory */
@Override
public EditPart createOutlineEditPart(EditPart context, final Object model) {
EditPart result = new OutlineTreeEditPart(){
// add the getModelChildren() method by Grid.Qian to refresh the scope when
// these partner, varaible, and so on change
@SuppressWarnings("unchecked")
@Override
protected List<BPELExtensibleElement> getModelChildren() {
Scope scope = (Scope)model;
List<BPELExtensibleElement> list = new ArrayList<BPELExtensibleElement>();
PartnerLinks links = scope.getPartnerLinks();
if (links != null) {
list.add(links);
}
Variables variables = scope.getVariables();
if (variables != null) {
list.add(variables);
}
CorrelationSets sets = scope.getCorrelationSets();
if (sets != null) {
list.add(sets);
}
MessageExchanges exchanges = scope.getMessageExchanges();
if (exchanges != null) {
list.add(exchanges);
}
IContainer container = new ActivityContainer(BPELPackage.eINSTANCE.getScope_Activity());
List<BPELExtensibleElement> list2 = container.getChildren(scope);
list.addAll(list2);
return list;
}
};
result.setModel(model);
return result;
}
/*
* Overrides the base class actions and appends the declaration actions
* @see https://issues.jboss.org/browse/JBIDE-7953
*/
@Override
public List<AbstractAction> getEditPartActions(final EditPart editPart) {
List<AbstractAction> actions = super.getEditPartActions(editPart);
actions.add(new CreatePartnerLinkAction(editPart));
actions.add(new CreateVariableAction(editPart));
actions.add(new CreateCorrelationSetAction(editPart));
actions.add(new CreateMessageExchangeAction(editPart));
return actions;
}
}