Bug 478063 - Add further customization possibilities to TMD

* allow to influence resource set creation
* Add after method in CreateElementCallback

Change-Id: I93e9272028847f88757862b03bb9f3b66a016f67
Signed-off-by: Johannes Faltermeier <jfaltermeier@eclipsesource.com>
diff --git a/bundles/org.eclipse.emfforms.editor/src/org/eclipse/emfforms/spi/editor/GenericEditor.java b/bundles/org.eclipse.emfforms.editor/src/org/eclipse/emfforms/spi/editor/GenericEditor.java
index e05d59a..41e35a2 100644
--- a/bundles/org.eclipse.emfforms.editor/src/org/eclipse/emfforms/spi/editor/GenericEditor.java
+++ b/bundles/org.eclipse.emfforms.editor/src/org/eclipse/emfforms/spi/editor/GenericEditor.java
@@ -256,7 +256,7 @@
 	@Override
 	public void createPartControl(Composite parent) {
 		// Load the resource from the provided input and display the editor
-		loadResource();
+		resourceSet = loadResource(getEditorInput());
 		parent.setBackground(new Color(Display.getCurrent(), 255, 255, 255));
 		parent.setBackgroundMode(SWT.INHERIT_FORCE);
 
@@ -328,16 +328,16 @@
 	}
 
 	/**
-	 * Loads the Resource from the EditorInput and sets the EcoreEditor.resource
-	 * field.
+	 * Creates a resource set and loads all required resources for the editor input.
+	 *
+	 * @param editorInput the editor input
+	 * @return the resource set
 	 */
-	private void loadResource() {
-		final FileEditorInput fei = (FileEditorInput) getEditorInput();
-
-		resourceSet = ResourceSetHelpers.loadResourceSetWithProxies(
+	protected ResourceSet loadResource(IEditorInput editorInput) {
+		final FileEditorInput fei = (FileEditorInput) editorInput;
+		return ResourceSetHelpers.loadResourceSetWithProxies(
 			URI.createPlatformResourceURI(fei.getFile().getFullPath().toOSString(), false),
 			commandStack);
-
 	}
 
 	/*
diff --git a/bundles/org.eclipse.emfforms.editor/src/org/eclipse/emfforms/spi/editor/InitializeChildCallback.java b/bundles/org.eclipse.emfforms.editor/src/org/eclipse/emfforms/spi/editor/InitializeChildCallback.java
index 62111fd..b329331 100644
--- a/bundles/org.eclipse.emfforms.editor/src/org/eclipse/emfforms/spi/editor/InitializeChildCallback.java
+++ b/bundles/org.eclipse.emfforms.editor/src/org/eclipse/emfforms/spi/editor/InitializeChildCallback.java
@@ -57,4 +57,9 @@
 		return result == Window.OK;
 	}
 
+	@Override
+	public void afterCreateElement(Object newElement) {
+		/* no op */
+	}
+
 }
diff --git a/bundles/org.eclipse.emfforms.swt.treemasterdetail/.settings/.api_filters b/bundles/org.eclipse.emfforms.swt.treemasterdetail/.settings/.api_filters
index 2762c2b..e03463c 100644
--- a/bundles/org.eclipse.emfforms.swt.treemasterdetail/.settings/.api_filters
+++ b/bundles/org.eclipse.emfforms.swt.treemasterdetail/.settings/.api_filters
@@ -7,6 +7,12 @@
                 <message_argument value="1.7.0"/>
             </message_arguments>
         </filter>
+        <filter comment="SPI" id="923795461">
+            <message_arguments>
+                <message_argument value="1.9.0"/>
+                <message_argument value="1.8.0"/>
+            </message_arguments>
+        </filter>
     </resource>
     <resource path="META-INF/MANIFEST.MF" type="org.eclipse.emfforms.spi.swt.treemasterdetail.util.CreateChildActionWithAccelerator">
         <filter comment="SPI change 1.8.0" id="305324134">
@@ -82,6 +88,12 @@
         </filter>
     </resource>
     <resource path="src/org/eclipse/emfforms/spi/swt/treemasterdetail/util/CreateElementCallback.java" type="org.eclipse.emfforms.spi.swt.treemasterdetail.util.CreateElementCallback">
+        <filter comment="SPI" id="403804204">
+            <message_arguments>
+                <message_argument value="org.eclipse.emfforms.spi.swt.treemasterdetail.util.CreateElementCallback"/>
+                <message_argument value="afterCreateElement(Object)"/>
+            </message_arguments>
+        </filter>
         <filter comment="SPI Change 1.9.0" id="403804204">
             <message_arguments>
                 <message_argument value="org.eclipse.emfforms.spi.swt.treemasterdetail.util.CreateElementCallback"/>
diff --git a/bundles/org.eclipse.emfforms.swt.treemasterdetail/src/org/eclipse/emfforms/internal/swt/treemasterdetail/defaultprovider/DefaultMenuProvider.java b/bundles/org.eclipse.emfforms.swt.treemasterdetail/src/org/eclipse/emfforms/internal/swt/treemasterdetail/defaultprovider/DefaultMenuProvider.java
index 6be8133..21e9286 100644
--- a/bundles/org.eclipse.emfforms.swt.treemasterdetail/src/org/eclipse/emfforms/internal/swt/treemasterdetail/defaultprovider/DefaultMenuProvider.java
+++ b/bundles/org.eclipse.emfforms.swt.treemasterdetail/src/org/eclipse/emfforms/internal/swt/treemasterdetail/defaultprovider/DefaultMenuProvider.java
@@ -56,6 +56,11 @@
 			public void initElement(EObject parent, EReference reference, EObject newObject) {
 				/* no op */
 			}
+
+			@Override
+			public void afterCreateElement(Object newElement) {
+				/* no op */
+			}
 		};
 		deleteActionBuilder = new DefaultDeleteActionBuilder();
 	}
diff --git a/bundles/org.eclipse.emfforms.swt.treemasterdetail/src/org/eclipse/emfforms/spi/swt/treemasterdetail/util/CreateChildAction.java b/bundles/org.eclipse.emfforms.swt.treemasterdetail/src/org/eclipse/emfforms/spi/swt/treemasterdetail/util/CreateChildAction.java
index 44e68b7..b51537d 100644
--- a/bundles/org.eclipse.emfforms.swt.treemasterdetail/src/org/eclipse/emfforms/spi/swt/treemasterdetail/util/CreateChildAction.java
+++ b/bundles/org.eclipse.emfforms.swt.treemasterdetail/src/org/eclipse/emfforms/spi/swt/treemasterdetail/util/CreateChildAction.java
@@ -103,6 +103,9 @@
 				((Viewer) selectionProvider).refresh();
 			}
 			selectionProvider.setSelection(new StructuredSelection(newObject));
+			if (createElementCallback != null) {
+				createElementCallback.afterCreateElement(newObject);
+			}
 		} else {
 			// If the callback says "cancel" undo the addCommand.
 			addCommand.undo();
diff --git a/bundles/org.eclipse.emfforms.swt.treemasterdetail/src/org/eclipse/emfforms/spi/swt/treemasterdetail/util/CreateElementCallback.java b/bundles/org.eclipse.emfforms.swt.treemasterdetail/src/org/eclipse/emfforms/spi/swt/treemasterdetail/util/CreateElementCallback.java
index 6e4b81b..c0bf2ad 100644
--- a/bundles/org.eclipse.emfforms.swt.treemasterdetail/src/org/eclipse/emfforms/spi/swt/treemasterdetail/util/CreateElementCallback.java
+++ b/bundles/org.eclipse.emfforms.swt.treemasterdetail/src/org/eclipse/emfforms/spi/swt/treemasterdetail/util/CreateElementCallback.java
@@ -42,4 +42,12 @@
 	 *         be removed again
 	 */
 	boolean beforeCreateElement(Object newElement);
+
+	/**
+	 * Gets called after a new element was added to the domain model.
+	 * 
+	 * @param newElement the new Element.
+	 * @since 1.9
+	 */
+	void afterCreateElement(Object newElement);
 }