blob: 9d7e9c6951b6dff877fb5382bddea8c9106ede90 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2011, 2012 Red Hat, Inc.
* All rights reserved.
* This program is 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:
* Red Hat, Inc. - initial API and implementation
*
* @author Bob Brodt
******************************************************************************/
package org.eclipse.bpmn2.modeler.ui.adapters.properties;
import java.util.List;
import org.eclipse.bpmn2.Bpmn2Package;
import org.eclipse.bpmn2.Definitions;
import org.eclipse.bpmn2.Interface;
import org.eclipse.bpmn2.Operation;
import org.eclipse.bpmn2.modeler.core.adapters.ExtendedPropertiesAdapter;
import org.eclipse.bpmn2.modeler.core.adapters.ObjectDescriptor;
import org.eclipse.bpmn2.modeler.core.model.Bpmn2ModelerFactory;
import org.eclipse.bpmn2.modeler.core.utils.ModelUtil;
import org.eclipse.bpmn2.modeler.ui.adapters.properties.InterfacePropertiesAdapter.ImplementationRefFeatureDescriptor;
import org.eclipse.emf.common.notify.AdapterFactory;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.window.Window;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.dialogs.ListDialog;
/**
* @author Bob Brodt
*
*/
public class OperationPropertiesAdapter extends ExtendedPropertiesAdapter<Operation> {
/**
* @param adapterFactory
* @param object
*/
public OperationPropertiesAdapter(AdapterFactory adapterFactory, Operation object) {
super(adapterFactory, object);
EStructuralFeature ref = Bpmn2Package.eINSTANCE.getOperation_ImplementationRef();
setFeatureDescriptor(ref, new ImplementationRefFeatureDescriptor<Operation>(this, adapterFactory, object, ref));
ref = Bpmn2Package.eINSTANCE.getOperation_InMessageRef();
setFeatureDescriptor(ref, new RootElementRefFeatureDescriptor<Operation>(this,object,ref));
setProperty(ref, UI_IS_MULTI_CHOICE, Boolean.TRUE);
ref = Bpmn2Package.eINSTANCE.getOperation_OutMessageRef();
setFeatureDescriptor(ref, new RootElementRefFeatureDescriptor<Operation>(this,object,ref));
setProperty(ref, UI_IS_MULTI_CHOICE, Boolean.TRUE);
setObjectDescriptor( new ObjectDescriptor<Operation>(this,object) {
@Override
public Operation createObject(Resource resource, EClass eclass) {
Operation operation = super.createObject(resource, eclass);
// find an Interface to which we can add this new Operation
// Ask user which Interface if there are more than one.
Definitions definitions = ModelUtil.getDefinitions(resource);
Interface intf = null;
final List<Interface> interfaces = ModelUtil.getAllRootElements(definitions, Interface.class);
if (interfaces.size()>1) {
ListDialog dialog = new ListDialog(Display.getCurrent().getActiveShell());
dialog.setContentProvider(new IStructuredContentProvider() {
@Override
public void dispose() {
}
@Override
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
}
@Override
public Object[] getElements(Object inputElement) {
return interfaces.toArray();
}
});
dialog.setLabelProvider(new ILabelProvider() {
@Override
public void addListener(ILabelProviderListener listener) {
}
@Override
public void dispose() {
}
@Override
public boolean isLabelProperty(Object element, String property) {
return false;
}
@Override
public void removeListener(ILabelProviderListener listener) {
}
@Override
public Image getImage(Object element) {
return null;
}
@Override
public String getText(Object element) {
return ModelUtil.toCanonicalString( ((Interface)element).getName() );
}
});
dialog.setTitle(Messages.OperationPropertiesAdapter_Title);
dialog.setAddCancelButton(true);
dialog.setHelpAvailable(false);
dialog.setInput(new Object());
if (dialog.open()==Window.OK){
intf = (Interface)dialog.getResult()[0];
}
else {
intf = interfaces.get(0);
}
}
else if (interfaces.size()==1) {
intf = interfaces.get(0);
}
else if (definitions != null) {
intf = Bpmn2ModelerFactory.create(resource, Interface.class);
// InsertionAdapter.add(definitions, Bpmn2Package.eINSTANCE.getDefinitions_RootElements(), intf);
definitions.getRootElements().add(intf);
}
// InsertionAdapter.add(intf, Bpmn2Package.eINSTANCE.getInterface_Operations(), operation);
if (intf!=null) {
intf.getOperations().add(operation);
}
return operation;
}
});
}
}