From 21a5c0566d0f1951b3c6cfbaaf6685e723edf06c Mon Sep 17 00:00:00 2001
From: Florian Hoelzl <hoelzl@fortiss.org>
Date: Tue, 24 May 2011 15:55:24 +0000
Subject: [PATCH] Fixed NPE bug.

---
 .../kernel/internal/CommandStackService.java  | 24 ++++++++++++++-----
 1 file changed, 18 insertions(+), 6 deletions(-)

diff --git a/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/internal/CommandStackService.java b/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/internal/CommandStackService.java
index 7609c5d7c..e0b8351b4 100644
--- a/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/internal/CommandStackService.java
+++ b/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/internal/CommandStackService.java
@@ -17,7 +17,9 @@ $Id$
 +--------------------------------------------------------------------------*/
 package org.fortiss.tooling.kernel.internal;
 
+import org.eclipse.emf.common.command.CommandStack;
 import org.eclipse.emf.ecore.EObject;
+import org.fortiss.tooling.kernel.interfaces.IStorageProvider;
 import org.fortiss.tooling.kernel.services.ICommandStackService;
 import org.fortiss.tooling.kernel.services.IPersistencyService;
 
@@ -34,31 +36,41 @@ public class CommandStackService implements ICommandStackService {
 	/** {@inheritDoc} */
 	@Override
 	public void runAsCommand(EObject target, Runnable runner) {
-		IPersistencyService.INSTANCE.getStorageProviderFor(target)
-				.runAsCommand(target, runner);
+		IStorageProvider provider = IPersistencyService.INSTANCE
+				.getStorageProviderFor(target);
+		if (provider != null) {
+			provider.runAsCommand(target, runner);
+		}
 	}
 
 	/** {@inheritDoc} */
 	@Override
 	public boolean canUndo(EObject target) {
-		return IPersistencyService.INSTANCE.getCommandStack(target).canUndo();
+		CommandStack stack = getCommandStack(target);
+		return stack != null && stack.canUndo();
 	}
 
 	/** {@inheritDoc} */
 	@Override
 	public boolean canRedo(EObject target) {
-		return IPersistencyService.INSTANCE.getCommandStack(target).canRedo();
+		CommandStack stack = getCommandStack(target);
+		return stack != null && stack.canRedo();
 	}
 
 	/** {@inheritDoc} */
 	@Override
 	public void undo(EObject target) {
-		IPersistencyService.INSTANCE.getCommandStack(target).undo();
+		getCommandStack(target).undo();
 	}
 
 	/** {@inheritDoc} */
 	@Override
 	public void redo(EObject target) {
-		IPersistencyService.INSTANCE.getCommandStack(target).redo();
+		getCommandStack(target).redo();
+	}
+
+	/** Fetches command stack from persistency service. */
+	private CommandStack getCommandStack(EObject target) {
+		return IPersistencyService.INSTANCE.getCommandStack(target);
 	}
 }
-- 
GitLab