From 8364d6bf72c79624ae3a9fee8890c9239138fa81 Mon Sep 17 00:00:00 2001
From: Florian Hoelzl <hoelzl@fortiss.org>
Date: Mon, 12 Sep 2011 12:35:23 +0000
Subject: [PATCH] added TestModel.java and SimulatorStartup.java refs 158

---
 .../kernel/internal/DummyTopLevelElement.java | 116 ++++++++++++++++++
 .../kernel/internal/PersistencyService.java   |  24 ++++
 .../kernel/service/IPersistencyService.java   |  12 ++
 .../kernel/utils/ProjectRootElementUtils.java |  20 ++-
 4 files changed, 166 insertions(+), 6 deletions(-)
 create mode 100644 org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/internal/DummyTopLevelElement.java

diff --git a/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/internal/DummyTopLevelElement.java b/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/internal/DummyTopLevelElement.java
new file mode 100644
index 000000000..17c1d2160
--- /dev/null
+++ b/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/internal/DummyTopLevelElement.java
@@ -0,0 +1,116 @@
+/*--------------------------------------------------------------------------+
+$Id$
+|                                                                          |
+| Copyright 2011 ForTISS GmbH                     |
+|                                                                          |
+| Licensed under the Apache License, Version 2.0 (the "License");          |
+| you may not use this file except in compliance with the License.         |
+| You may obtain a copy of the License at                                  |
+|                                                                          |
+|    http://www.apache.org/licenses/LICENSE-2.0                            |
+|                                                                          |
+| Unless required by applicable law or agreed to in writing, software      |
+| distributed under the License is distributed on an "AS IS" BASIS,        |
+| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
+| See the License for the specific language governing permissions and      |
+| limitations under the License.                                           |
++--------------------------------------------------------------------------*/
+package org.fortiss.tooling.kernel.internal;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.emf.common.command.CommandStackListener;
+import org.eclipse.emf.ecore.EObject;
+import org.fortiss.tooling.kernel.extension.data.ITopLevelElement;
+
+/**
+ * 
+ * @author hoelzl
+ * @author $Author$
+ * @version $Rev$
+ * @ConQAT.Rating RED Hash:
+ */
+final class DummyTopLevelElement implements ITopLevelElement {
+
+	/** Stores the root element. */
+	private final EObject root;
+
+	/** Constructor. */
+	public DummyTopLevelElement(EObject root) {
+		Assert.isNotNull(root);
+		Assert.isTrue(root.eResource() == null);
+		this.root = root;
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public EObject getRootModelElement() {
+		return root;
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public void runAsCommand(Runnable runner) {
+		runner.run();
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public void addCommandStackListener(CommandStackListener listener) {
+		// ignore
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public void removeCommandStackListener(CommandStackListener listener) {
+		// ignore
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public boolean canUndo() {
+		return false;
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public boolean canRedo() {
+		return false;
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public void undo() {
+		// ignore
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public void redo() {
+		// ignore
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public boolean isDirty() {
+		return false;
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public String getSaveableName() {
+		return "Dummy";
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public void doSave(IProgressMonitor monitor) {
+		// ignore
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public void prepareIDs(EObject modelElement) {
+		// ignore
+	}
+}
diff --git a/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/internal/PersistencyService.java b/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/internal/PersistencyService.java
index 94a6adf86..aabcd6d71 100644
--- a/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/internal/PersistencyService.java
+++ b/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/internal/PersistencyService.java
@@ -65,6 +65,9 @@ public class PersistencyService implements IPersistencyService {
 	/** Stores the top-level element contexts. */
 	private final List<ITopLevelElement> contextCache = new LinkedList<ITopLevelElement>();
 
+	/** Stores the dummy top-level element contexts. */
+	private Map<EObject, ITopLevelElement> dummyCache = null;
+
 	/** Stores the storage providers and their element caches. */
 	private final Map<ITopLevelElement, IStorageProvider> storageProviderCache = new HashMap<ITopLevelElement, IStorageProvider>();
 
@@ -243,4 +246,25 @@ public class PersistencyService implements IPersistencyService {
 			}
 		}
 	}
+
+	/** {@inheritDoc} */
+	@Override
+	public void addDummyEObjectAsTopLevelElement(EObject dummyRoot) {
+		if (dummyCache == null) {
+			dummyCache = new HashMap<EObject, ITopLevelElement>();
+		}
+		DummyTopLevelElement dummy = new DummyTopLevelElement(dummyRoot);
+		dummyCache.put(dummyRoot, dummy);
+		contextCache.add(dummy);
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public void removeDummyTopLevelElement(EObject dummy) {
+		if (dummyCache == null || !dummyCache.containsKey(dummy)) {
+			return;
+		}
+		contextCache.remove(dummyCache.get(dummy));
+		dummyCache.remove(dummy);
+	}
 }
diff --git a/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/service/IPersistencyService.java b/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/service/IPersistencyService.java
index 3b295b56b..8cc646e16 100644
--- a/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/service/IPersistencyService.java
+++ b/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/service/IPersistencyService.java
@@ -83,4 +83,16 @@ public interface IPersistencyService {
 
 	/** Notifies top-level element listeners about change of the given element. */
 	void notifyTopLevelElementChanged(ITopLevelElement element);
+
+	/**
+	 * Adds the given EObject as a dummy top-level element. This method is
+	 * intended for JUnit testing purposes only.
+	 */
+	public void addDummyEObjectAsTopLevelElement(EObject dummy);
+
+	/**
+	 * Removes the given EObject from the dummy top-level elements. This method
+	 * is intended for JUnit testing purposes only.²
+	 */
+	public void removeDummyTopLevelElement(EObject dummy);
 }
diff --git a/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/utils/ProjectRootElementUtils.java b/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/utils/ProjectRootElementUtils.java
index 3a021565a..45b4f7928 100644
--- a/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/utils/ProjectRootElementUtils.java
+++ b/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/utils/ProjectRootElementUtils.java
@@ -54,8 +54,7 @@ public final class ProjectRootElementUtils {
 	 * <code>null</code> if no such element exists. The search is started from
 	 * the given elements top-level parent.
 	 */
-	public static EObject findElementByName(String qualifiedName,
-			EObject parent) {
+	public static EObject findElementByName(String qualifiedName, EObject parent) {
 		StringTokenizer tizer = new StringTokenizer(qualifiedName, "/");
 		EObject current = IPersistencyService.INSTANCE.getTopLevelElementFor(
 				parent).getRootModelElement();
@@ -84,12 +83,21 @@ public final class ProjectRootElementUtils {
 	 * element exists.
 	 */
 	public static EObject findElementById(IIdLabeledReference reference) {
-		EObject root = IPersistencyService.INSTANCE.getTopLevelElementFor(
-				reference).getRootModelElement();
+		return findElementById(reference.getIdReference(),
+				IPersistencyService.INSTANCE.getTopLevelElementFor(reference)
+						.getRootModelElement());
+
+	}
+
+	/**
+	 * Finds the model element referenced by the given
+	 * {@link IIdLabeledReference} element or <code>null</code> if no such
+	 * element exists.
+	 */
+	public static EObject findElementById(int id, EObject root) {
 		for (Iterator<EObject> iter = root.eAllContents(); iter.hasNext();) {
 			EObject eo = iter.next();
-			if (eo instanceof IIdLabeled
-					&& ((IIdLabeled) eo).getId() == reference.getIdReference()) {
+			if (eo instanceof IIdLabeled && ((IIdLabeled) eo).getId() == id) {
 				return eo;
 			}
 		}
-- 
GitLab