Editor.saveAs: create Bpmn2XmiResourceImpl

If the filename ends with xmi (e.g. bpmn2xmi), create a Bpmn2XmiResourceImpl
(instead of XmiResourceImpl).

Fix NullPointerException in basicSetResourceSet.
diff --git a/org.eclipse.bpmn2.editor/src/org/eclipse/bpmn2/presentation/Bpmn2Editor.java b/org.eclipse.bpmn2.editor/src/org/eclipse/bpmn2/presentation/Bpmn2Editor.java
index dc89583..0c449e6 100644
--- a/org.eclipse.bpmn2.editor/src/org/eclipse/bpmn2/presentation/Bpmn2Editor.java
+++ b/org.eclipse.bpmn2.editor/src/org/eclipse/bpmn2/presentation/Bpmn2Editor.java
@@ -29,6 +29,7 @@
 

 import org.eclipse.bpmn2.di.provider.BpmnDiItemProviderAdapterFactory;

 import org.eclipse.bpmn2.provider.Bpmn2ItemProviderAdapterFactory;

+import org.eclipse.bpmn2.util.Bpmn2XMIResourceImpl;

 import org.eclipse.core.resources.IFile;

 import org.eclipse.core.resources.IMarker;

 import org.eclipse.core.resources.IResource;

@@ -1259,9 +1260,8 @@
     protected void doSaveAs(URI uri, IEditorInput editorInput) {

         if (uri.toString().endsWith("xmi")) {

             Resource oldResource = editingDomain.getResourceSet().getResources().get(0);

-            XMIResource newResource = new XMIResourceImpl();

+            XMIResource newResource = new Bpmn2XMIResourceImpl(uri);

             editingDomain.getResourceSet().getResources().add(newResource);

-            newResource.setURI(uri);

             List<EObject> content = new ArrayList<EObject>(oldResource.getContents());

             for (EObject eObject : content) {

                 if (eObject.eClass().getName().equals("DocumentRoot")) {

diff --git a/org.eclipse.bpmn2/src/org/eclipse/bpmn2/util/Bpmn2ResourceImpl.java b/org.eclipse.bpmn2/src/org/eclipse/bpmn2/util/Bpmn2ResourceImpl.java
index 7cb661a..5a2b694 100644
--- a/org.eclipse.bpmn2/src/org/eclipse/bpmn2/util/Bpmn2ResourceImpl.java
+++ b/org.eclipse.bpmn2/src/org/eclipse/bpmn2/util/Bpmn2ResourceImpl.java
@@ -81,7 +81,8 @@
     @Override

     public NotificationChain basicSetResourceSet(ResourceSet resourceSet,

             NotificationChain notifications) {

-        resourceSet.eAdapters().add(oppositeReferenceAdapter);

+        if (resourceSet != null)

+            resourceSet.eAdapters().add(oppositeReferenceAdapter);

         return super.basicSetResourceSet(resourceSet, notifications);

     }

 

diff --git a/org.eclipse.bpmn2/src/org/eclipse/bpmn2/util/Bpmn2XMIResourceImpl.java b/org.eclipse.bpmn2/src/org/eclipse/bpmn2/util/Bpmn2XMIResourceImpl.java
index 4c1121b..ffcd77f 100644
--- a/org.eclipse.bpmn2/src/org/eclipse/bpmn2/util/Bpmn2XMIResourceImpl.java
+++ b/org.eclipse.bpmn2/src/org/eclipse/bpmn2/util/Bpmn2XMIResourceImpl.java
@@ -51,7 +51,8 @@
     @Override
     public NotificationChain basicSetResourceSet(ResourceSet resourceSet,
             NotificationChain notifications) {
-        resourceSet.eAdapters().add(oppositeReferenceAdapter);
+        if (resourceSet != null)
+            resourceSet.eAdapters().add(oppositeReferenceAdapter);
         return super.basicSetResourceSet(resourceSet, notifications);
     }