https://bugzilla.redhat.com/show_bug.cgi?id=1235689 - Custom Service
Task is losing information after round-tripping from Web Designer to
JBDS
diff --git a/features/org.eclipse.bpmn2.modeler/.project b/features/org.eclipse.bpmn2.modeler/.project
index 615b7ab..8c9a281 100644
--- a/features/org.eclipse.bpmn2.modeler/.project
+++ b/features/org.eclipse.bpmn2.modeler/.project
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <projectDescription>
-	<name>org.eclipse.bpmn2.modeler</name>
+	<name>org.eclipse.bpmn2-modeler.git</name>
 	<comment></comment>
 	<projects>
 	</projects>
diff --git a/plugins/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/adapters/ObjectPropertyProvider.java b/plugins/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/adapters/ObjectPropertyProvider.java
index 7334a19..89789bd 100644
--- a/plugins/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/adapters/ObjectPropertyProvider.java
+++ b/plugins/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/adapters/ObjectPropertyProvider.java
@@ -172,7 +172,7 @@
 				if (rs!=null) {
 					for (Resource r : rs.getResources()) {
 						if (r instanceof Bpmn2Resource) {
-							return resource;
+							return r;
 						}
 					}
 				}
diff --git a/plugins/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/model/Bpmn2ModelerResourceImpl.java b/plugins/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/model/Bpmn2ModelerResourceImpl.java
index 801119e..e2ea293 100644
--- a/plugins/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/model/Bpmn2ModelerResourceImpl.java
+++ b/plugins/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/model/Bpmn2ModelerResourceImpl.java
@@ -437,25 +437,16 @@
 	 */
 	protected static class Bpmn2ModelerXmlHandler extends BpmnXmlHandler {
 
-		Bpmn2Preferences preferences = null;
-		ImportUtil importHandler = new ImportUtil();
-		String targetNamespace = null;
+		protected Bpmn2Preferences preferences = null;
+		protected ImportUtil importHandler = new ImportUtil();
+		protected String targetNamespace = null;
 
 		public Bpmn2ModelerXmlHandler(XMLResource xmiResource, XMLHelper helper, Map<?, ?> options) {
 			super(xmiResource, helper, options);
 		}
-
-		@Override
-		public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
-			// read the targetNamespace as early as possible
-			if ("bpmn2:definitions".equals(qName)) { //$NON-NLS-1$
-				targetNamespace = attributes.getValue("targetNamespace"); //$NON-NLS-1$
-				if (targetNamespace != null) {
-					((Bpmn2ModelerXmlHelper)helper).initializeTargetRuntime(targetNamespace);
-				}
-			}
-
-			super.startElement(uri, localName, qName, attributes);
+		
+		protected String getTargetNamespace(Definitions defs) {
+			return defs.getTargetNamespace();
 		}
 		
 		@Override
@@ -758,7 +749,11 @@
 			}
             else if (obj instanceof Definitions) {
             	// fetch the targetNamespace from Definitions object
-            	targetNamespace = ((Definitions)obj).getTargetNamespace();
+            	// NO! This is already handled in startElement()
+//            	targetNamespace = ((Definitions)obj).getTargetNamespace();
+				targetNamespace = getTargetNamespace((Definitions)obj);
+				((Bpmn2ModelerXmlHelper)helper).initializeTargetRuntime(targetNamespace);
+
             }
 
 		}
diff --git a/plugins/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/preferences/Bpmn2Preferences.java b/plugins/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/preferences/Bpmn2Preferences.java
index 7a01986..d097b43 100644
--- a/plugins/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/preferences/Bpmn2Preferences.java
+++ b/plugins/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/preferences/Bpmn2Preferences.java
@@ -75,6 +75,7 @@
 import org.eclipse.jface.preference.IPreferenceStore;
 import org.eclipse.jface.util.IPropertyChangeListener;
 import org.eclipse.jface.util.PropertyChangeEvent;
+import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jface.viewers.StructuredSelection;
 import org.eclipse.osgi.util.NLS;
 import org.eclipse.swt.widgets.Display;
@@ -84,7 +85,6 @@
 import org.eclipse.ui.IWorkbenchPage;
 import org.eclipse.ui.IWorkbenchWindow;
 import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.views.navigator.ResourceNavigator;
 import org.osgi.service.prefs.BackingStoreException;
 import org.osgi.service.prefs.Preferences;
 
@@ -1646,13 +1646,17 @@
 				IViewPart[] parts = page.getViews();
 		
 				for (int i = 0; i < parts.length; i++) {
-					if (parts[i] instanceof ResourceNavigator) {
-						ResourceNavigator navigator = (ResourceNavigator) parts[i];
-						StructuredSelection sel = (StructuredSelection) navigator.getTreeViewer().getSelection();
-						IResource resource = (IResource) sel.getFirstElement();
-						if (resource!=null) {
-							activeProject = resource.getProject();
-							break;
+					if (parts[i].getViewSite().getSelectionProvider()!=null) {
+						ISelection s = parts[i].getViewSite().getSelectionProvider().getSelection();
+						if (s instanceof StructuredSelection) {
+							StructuredSelection ss = (StructuredSelection) s;
+							Object o = ss.getFirstElement();
+							if (o instanceof IResource) {
+								IResource r = (IResource) o;
+								activeProject = r.getProject();
+								if (activeProject!=null)
+									break;
+							}
 						}
 					}
 				}
diff --git a/plugins/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/runtime/ModelExtensionDescriptor.java b/plugins/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/runtime/ModelExtensionDescriptor.java
index fff6ea2..53c3316 100644
--- a/plugins/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/runtime/ModelExtensionDescriptor.java
+++ b/plugins/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/runtime/ModelExtensionDescriptor.java
@@ -404,7 +404,9 @@
      */
     public EObject basicCreateObject(EClass eClass) {
         EPackage pkg = eClass.getEPackage();
-        return pkg.getEFactoryInstance().create(eClass);
+        EObject object = pkg.getEFactoryInstance().create(eClass);
+        TargetRuntimeAdapter.adapt(object, targetRuntime);
+        return object;
     }
     
 	/**
diff --git a/plugins/org.eclipse.bpmn2.modeler.runtime.jboss.jbpm5/src/org/eclipse/bpmn2/modeler/runtime/jboss/jbpm5/JBPM5RuntimeExtension.java b/plugins/org.eclipse.bpmn2.modeler.runtime.jboss.jbpm5/src/org/eclipse/bpmn2/modeler/runtime/jboss/jbpm5/JBPM5RuntimeExtension.java
index 146fb91..26af075 100644
--- a/plugins/org.eclipse.bpmn2.modeler.runtime.jboss.jbpm5/src/org/eclipse/bpmn2/modeler/runtime/jboss/jbpm5/JBPM5RuntimeExtension.java
+++ b/plugins/org.eclipse.bpmn2.modeler.runtime.jboss.jbpm5/src/org/eclipse/bpmn2/modeler/runtime/jboss/jbpm5/JBPM5RuntimeExtension.java
@@ -95,8 +95,8 @@
 public class JBPM5RuntimeExtension implements IBpmn2RuntimeExtension {
 	
 	public final static String JBPM5_RUNTIME_ID = "org.jboss.runtime.jbpm5"; //$NON-NLS-1$
-	
-	private static final String DROOLS_NAMESPACE = "http://www.jboss.org/drools"; //$NON-NLS-1$
+	public final static String DROOLS_NAMESPACE = "http://www.jboss.org/drools"; //$NON-NLS-1$
+
 	private List<WorkItemDefinition> workItemDefinitions;
 	
 	/* (non-Javadoc)
@@ -194,7 +194,7 @@
 						java.util.Iterator<WorkItemDefinition> widIterator = workItemDefinitions.iterator();
 						while(widIterator.hasNext()) {
 							final WorkItemDefinition wid = widIterator.next();
-							final CustomTaskDescriptor ctd = convertWIDtoCT(wid);
+							final CustomTaskDescriptor ctd = convertWIDtoCT(inputFile.getProject(),wid);
 							if (ctd != null) {
 								if (targetRuntime.customTaskExists(ctd.getId())) {
 									Display.getDefault().asyncExec( new Runnable() {
@@ -240,7 +240,7 @@
 	 * @param wid
 	 * @return
 	 */
-	private CustomTaskDescriptor convertWIDtoCT ( WorkItemDefinition wid ) {
+	private CustomTaskDescriptor convertWIDtoCT(IProject project, WorkItemDefinition wid) {
 		if (wid != null) {
 			String id = wid.getName();
 			String name = wid.getDisplayName();
@@ -256,7 +256,6 @@
 			setBasicProps ( ct, wid);
 			
 			// push the icon into the image registry
-			IProject project = Bpmn2Preferences.getActiveProject();
 			String iconPath = getWIDPropertyValue("icon", wid); //$NON-NLS-1$
 			if (iconPath != null) {
 				Path tempPath = new Path(iconPath);
@@ -271,10 +270,8 @@
 						ImageDescriptor image = ImageDescriptor.createFromURL(url);
 						CustomTaskImageProvider.registerImage(iconPath, image);
 					}
-				} catch (CoreException e1) {
+				} catch (Exception e1) {
 					e1.printStackTrace();
-				} catch (MalformedURLException e) {
-					e.printStackTrace();
 				}
 			}
 			
@@ -441,7 +438,8 @@
 		String[] basicProps = new String[] { "taskName", "displayName", "icon" }; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 		for (int i = 0; i < basicProps.length; i++) {
 			Property prop = getPropertyFromWID(basicProps[i], wid);
-			ct.getProperties().add(prop);
+			if (prop!=null)
+				ct.getProperties().add(prop);
 		}
 	}
 
diff --git a/plugins/org.eclipse.bpmn2.modeler.runtime.jboss.jbpm5/src/org/eclipse/bpmn2/modeler/runtime/jboss/jbpm5/model/drools/util/DroolsResourceImpl.java b/plugins/org.eclipse.bpmn2.modeler.runtime.jboss.jbpm5/src/org/eclipse/bpmn2/modeler/runtime/jboss/jbpm5/model/drools/util/DroolsResourceImpl.java
index 21c2e44..4992ad0 100644
--- a/plugins/org.eclipse.bpmn2.modeler.runtime.jboss.jbpm5/src/org/eclipse/bpmn2/modeler/runtime/jboss/jbpm5/model/drools/util/DroolsResourceImpl.java
+++ b/plugins/org.eclipse.bpmn2.modeler.runtime.jboss.jbpm5/src/org/eclipse/bpmn2/modeler/runtime/jboss/jbpm5/model/drools/util/DroolsResourceImpl.java
@@ -13,7 +13,6 @@
 package org.eclipse.bpmn2.modeler.runtime.jboss.jbpm5.model.drools.util;
 
 import java.util.ArrayList;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
@@ -32,7 +31,6 @@
 import org.eclipse.bpmn2.DataStore;
 import org.eclipse.bpmn2.Definitions;
 import org.eclipse.bpmn2.Event;
-import org.eclipse.bpmn2.ExtensionAttributeValue;
 import org.eclipse.bpmn2.InputSet;
 import org.eclipse.bpmn2.Interface;
 import org.eclipse.bpmn2.ItemAwareElement;
@@ -46,7 +44,10 @@
 import org.eclipse.bpmn2.ThrowEvent;
 import org.eclipse.bpmn2.modeler.core.model.Bpmn2ModelerResourceImpl;
 import org.eclipse.bpmn2.modeler.core.model.ModelDecorator;
+import org.eclipse.bpmn2.modeler.core.model.Bpmn2ModelerResourceImpl.Bpmn2ModelerXmlHelper;
+import org.eclipse.bpmn2.modeler.core.runtime.TargetRuntimeAdapter;
 import org.eclipse.bpmn2.modeler.core.utils.ModelUtil;
+import org.eclipse.bpmn2.modeler.runtime.jboss.jbpm5.JBPM5RuntimeExtension;
 import org.eclipse.bpmn2.modeler.runtime.jboss.jbpm5.ProcessVariableNameChangeAdapter;
 import org.eclipse.bpmn2.modeler.runtime.jboss.jbpm5.model.drools.DroolsFactory;
 import org.eclipse.bpmn2.modeler.runtime.jboss.jbpm5.model.drools.DroolsPackage;
@@ -68,13 +69,14 @@
 import org.eclipse.emf.ecore.util.BasicFeatureMap;
 import org.eclipse.emf.ecore.util.BasicInternalEList;
 import org.eclipse.emf.ecore.util.ExtendedMetaData;
-import org.eclipse.emf.ecore.util.FeatureMap;
 import org.eclipse.emf.ecore.xmi.XMLHelper;
 import org.eclipse.emf.ecore.xmi.XMLLoad;
 import org.eclipse.emf.ecore.xmi.XMLResource;
 import org.eclipse.emf.ecore.xmi.XMLSave;
 import org.eclipse.emf.ecore.xmi.impl.XMLLoadImpl;
 import org.eclipse.emf.ecore.xmi.impl.XMLString;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
 import org.xml.sax.helpers.DefaultHandler;
 
 /**
@@ -456,7 +458,12 @@
         public DroolsXmlHandler(XMLResource xmiResource, XMLHelper helper, Map<?, ?> options) {
             super(xmiResource, helper, options);
         }
-
+        
+		@Override
+		protected String getTargetNamespace(Definitions defs) {
+			return JBPM5RuntimeExtension.DROOLS_NAMESPACE;
+		}
+		
         @Override
         protected EStructuralFeature getFeature(EObject object, String prefix, String name, boolean isElement)
         {
diff --git a/plugins/org.eclipse.bpmn2.modeler.runtime.jboss.jbpm5/src/org/eclipse/bpmn2/modeler/runtime/jboss/jbpm5/property/JbpmCustomTaskPropertySection.java b/plugins/org.eclipse.bpmn2.modeler.runtime.jboss.jbpm5/src/org/eclipse/bpmn2/modeler/runtime/jboss/jbpm5/property/JbpmCustomTaskPropertySection.java
index ea57875..d63a8fc 100644
--- a/plugins/org.eclipse.bpmn2.modeler.runtime.jboss.jbpm5/src/org/eclipse/bpmn2/modeler/runtime/jboss/jbpm5/property/JbpmCustomTaskPropertySection.java
+++ b/plugins/org.eclipse.bpmn2.modeler.runtime.jboss.jbpm5/src/org/eclipse/bpmn2/modeler/runtime/jboss/jbpm5/property/JbpmCustomTaskPropertySection.java
@@ -40,9 +40,9 @@
 	public boolean appliesTo(IWorkbenchPart part, ISelection selection) {
 		if (super.appliesTo(part, selection)) {
 			// only show this property section if the selected Task is a "custom task"
-			// that is, it has a "displayName" extension attribute
+			// that is, it has a "taskName" extension attribute
 			EObject be = getBusinessObjectForSelection(selection);
-			return ModelDecorator.getAnyAttribute(be, "displayName") != null; //$NON-NLS-1$
+			return ModelDecorator.getAnyAttribute(be, "taskName") != null; //$NON-NLS-1$
 		}
 		return false;
 	}
diff --git a/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/adapters/Bpmn2EditorItemProviderAdapterFactory.java b/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/adapters/Bpmn2EditorItemProviderAdapterFactory.java
index 33e170a..5120a30 100644
--- a/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/adapters/Bpmn2EditorItemProviderAdapterFactory.java
+++ b/plugins/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/adapters/Bpmn2EditorItemProviderAdapterFactory.java
@@ -329,7 +329,10 @@
         }
 
         private ExtendedPropertiesAdapter getTargetRuntimeAdapter(EObject object) {
-        	TargetRuntime rt = TargetRuntime.getRuntime(object);
+    		ObjectPropertyProvider factoryAdapter = ObjectPropertyProvider.getAdapter(object.eClass().getEPackage().getEFactoryInstance());
+    		TargetRuntime rt = TargetRuntime.getRuntime(factoryAdapter.getResource());
+    		if (rt==null)
+    			rt = TargetRuntime.getRuntime(object);
 			PropertyExtensionDescriptor ped = rt.getPropertyExtension(object.getClass());
             if (ped==null && rt != TargetRuntime.getDefaultRuntime())
                 ped = TargetRuntime.getDefaultRuntime().getPropertyExtension(object.getClass());