/******************************************************************************* * 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 *******************************************************************************/ package org.eclipse.bpmn2.modeler.ui.property.diagrams; import org.eclipse.bpmn2.Definitions; import org.eclipse.bpmn2.Import; import org.eclipse.bpmn2.ItemDefinition; import org.eclipse.bpmn2.ItemKind; import org.eclipse.bpmn2.modeler.core.adapters.ExtendedPropertiesProvider; import org.eclipse.bpmn2.modeler.core.merrimac.clad.AbstractBpmn2PropertySection; 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.dialogs.ComboObjectEditor; import org.eclipse.bpmn2.modeler.core.merrimac.dialogs.ObjectEditor; import org.eclipse.bpmn2.modeler.core.merrimac.dialogs.TextObjectEditor; import org.eclipse.bpmn2.modeler.core.utils.ModelUtil; import org.eclipse.bpmn2.modeler.core.utils.NamespaceUtil; import org.eclipse.bpmn2.modeler.ui.property.editors.ItemDefinitionStructureEditor; import org.eclipse.emf.ecore.EAttribute; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.EReference; import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; public class ItemDefinitionDetailComposite extends DefaultDetailComposite { public ItemDefinitionDetailComposite(Composite parent, int style) { super(parent, style); } /** * @param section */ public ItemDefinitionDetailComposite(AbstractBpmn2PropertySection section) { super(section); } @Override public AbstractPropertiesProvider getPropertiesProvider(EObject object) { if (propertiesProvider==null) { propertiesProvider = new AbstractPropertiesProvider(object) { String[] properties = new String[] { "itemKind", //$NON-NLS-1$ "isCollection", //$NON-NLS-1$ "structureRef", //$NON-NLS-1$ "documentation", //$NON-NLS-1$ // this thing is transient so it won't be serialized; no point in allowing user to set it // "import" }; @Override public String[] getProperties() { return properties; } }; } return propertiesProvider; } protected void bindAttribute(Composite parent, EObject object, EAttribute attribute, String label) { if ("itemKind".equals(attribute.getName())) { //$NON-NLS-1$ if (isModelObjectEnabled(object.eClass(), attribute)) { if (parent==null) parent = getAttributesParent(); if (label==null) label = ExtendedPropertiesProvider.getLabel(object, attribute); ObjectEditor editor = new ComboObjectEditor(this,object,attribute) { public boolean setValue(final Object result) { super.setValue(result); Display.getCurrent().syncExec( new Runnable() { @Override public void run() { setBusinessObject(getBusinessObject()); } }); return true; } }; editor.createControl(parent,label); } } else super.bindAttribute(parent, object, attribute, label); } @Override protected void bindReference(Composite parent, EObject object, EReference reference) { if ("structureRef".equals(reference.getName()) && //$NON-NLS-1$ isModelObjectEnabled(object.eClass(), reference)) { if (parent==null) parent = getAttributesParent(); final ItemDefinition itemDefinition = (ItemDefinition)object; String displayName = ExtendedPropertiesProvider.getLabel(object, reference); if (itemDefinition.getItemKind().equals(ItemKind.INFORMATION)) { // This is an Information item: enforce constraints on this thing ItemDefinitionStructureEditor editor = new ItemDefinitionStructureEditor(this,itemDefinition); editor.createControl(parent,displayName); } else { // This is a Physical item: anything goes ObjectEditor editor = new TextObjectEditor(this,object,reference) { @Override public boolean setValue(Object result) { return super.setValue(ModelUtil.createStringWrapper((String)result)); } }; editor.createControl(parent,displayName); } // create a Twistie Section for read-only information about this ItemDefinition Composite container = createSectionComposite(this, Messages.ItemDefinitionDetailComposite_DefinedIn_Title); Object structureRef = itemDefinition.getStructureRef(); Import imp = itemDefinition.getImport(); if (imp!=null) { // the thing is defined in an Import: display Import location, type and namespace createText(container, Messages.ItemDefinitionDetailComposite_Import_Label, imp.getLocation()); createText(container, Messages.ItemDefinitionDetailComposite_Type_Label, imp.getImportType()); createText(container, Messages.ItemDefinitionDetailComposite_Namespace_Label, imp.getNamespace()); } else if (ModelUtil.isStringWrapper(structureRef)) { // the thing is defined within the namespace of the type language, // or some other namespace defined within the document: display // the namespace information String string = ModelUtil.getStringWrapperTextValue(structureRef); String prefix = ""; //$NON-NLS-1$ int index = string.indexOf(":"); //$NON-NLS-1$ if (index>0) prefix = string.substring(0,index); Resource resource = ModelUtil.getResource(object); String namespace = NamespaceUtil.getNamespaceForPrefix(resource, prefix); if (namespace!=null) createText(container, Messages.ItemDefinitionDetailComposite_Namespace_Label, namespace); else { Definitions definitions = ModelUtil.getDefinitions(resource); createText(container, Messages.ItemDefinitionDetailComposite_TypeLanguage_Label, definitions.getTypeLanguage()); } } } else super.bindReference(parent, object, reference); } }