/*******************************************************************************
* 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.property.data;
import org.eclipse.bpmn2.DataObject;
import org.eclipse.bpmn2.DataObjectReference;
import org.eclipse.bpmn2.DataState;
import org.eclipse.bpmn2.modeler.core.merrimac.clad.AbstractBpmn2PropertySection;
import org.eclipse.bpmn2.modeler.core.merrimac.clad.AbstractDetailComposite;
import org.eclipse.bpmn2.modeler.core.merrimac.clad.AbstractPropertiesProvider;
import org.eclipse.bpmn2.modeler.core.merrimac.clad.DefaultDetailComposite;
import org.eclipse.bpmn2.modeler.core.merrimac.clad.DefaultPropertySection;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.swt.widgets.Composite;
/**
* @author Bob Brodt
* From section 10.3.1 of the BPMN 2.0 specification:
* "The Data Object class is an item-aware parameter. Data Object elements MUST be contained within Process or Sub-
* Process elements. Data Object elements are visually displayed on a Process diagram. Data Object References are
* a way to reuse Data Objects in the same diagram. They can specify different states of the same Data Object at
* different points in a Process. Data Object Reference cannot specify item definitions, and Data Objects cannot
* specify states. The names of Data Object References are derived by concatenating the name of the referenced Data
* Data Object the state of the Data Object Reference in square brackets as follows: <Data Object Name> [ <Data
* Object Reference State> ]."
*/
public class DataObjectPropertySection extends DefaultPropertySection {
/* (non-Javadoc)
* @see org.eclipse.bpmn2.modeler.ui.property.AbstractBpmn2PropertySection#createSectionRoot()
*/
@Override
protected AbstractDetailComposite createSectionRoot() {
return new DataObjectDetailComposite(this);
}
@Override
public AbstractDetailComposite createSectionRoot(Composite parent, int style) {
return new DataObjectDetailComposite(parent,style);
}
@Override
public EObject getBusinessObjectForSelection(ISelection selection) {
EObject bo = super.getBusinessObjectForSelection(selection);
if (bo instanceof DataObject) {
return bo;
}
if (bo instanceof DataObjectReference) {
return ((DataObjectReference)bo).getDataObjectRef();
}
return null;
}
public class DataObjectDetailComposite extends DefaultDetailComposite {
private AbstractPropertiesProvider dataObjectReferencePropertiesProvider;
private AbstractPropertiesProvider dataStatePropertiesProvider;
public DataObjectDetailComposite(Composite parent, int style) {
super(parent, style);
}
/**
* @param section
*/
public DataObjectDetailComposite(AbstractBpmn2PropertySection section) {
super(section);
}
@Override
public AbstractPropertiesProvider getPropertiesProvider(EObject object) {
if (object instanceof DataState) {
if (dataStatePropertiesProvider == null) {
dataStatePropertiesProvider = new AbstractPropertiesProvider(object) {
String[] properties = new String[] { "id", "name" }; //$NON-NLS-1$ //$NON-NLS-2$
@Override
public String[] getProperties() {
return properties;
}
};
}
return dataStatePropertiesProvider;
}
else if (object instanceof DataObject) {
if (propertiesProvider == null) {
propertiesProvider = new AbstractPropertiesProvider(object) {
String[] properties = new String[] { "id", "isCollection", "itemSubjectRef", "dataState" }; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
@Override
public String[] getProperties() {
return properties;
}
};
}
return propertiesProvider;
}
else if (object instanceof DataObjectReference) {
if (dataObjectReferencePropertiesProvider == null) {
dataObjectReferencePropertiesProvider = new AbstractPropertiesProvider(object) {
String[] properties = new String[] { "id", "dataObjectRef" , "dataState" }; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
@Override
public String[] getProperties() {
return properties;
}
};
}
return dataObjectReferencePropertiesProvider;
}
return null;
}
}
}