Fix2 for Bug 465654

Change-Id: I95415c5ca798f3baf803cf542b9e7454fe4d4071
Signed-off-by: Sounak Basu <sounak.basu@sap.com>
diff --git a/org.eclipse.ogee.core/META-INF/MANIFEST.MF b/org.eclipse.ogee.core/META-INF/MANIFEST.MF
index 6a218cd..53961cd 100644
--- a/org.eclipse.ogee.core/META-INF/MANIFEST.MF
+++ b/org.eclipse.ogee.core/META-INF/MANIFEST.MF
@@ -22,7 +22,8 @@
  org.eclipse.ogee.exploration.tree,
  org.eclipse.ogee.client,
  org.eclipse.emf.transaction,
- org.eclipse.emf.ecore.xmi
+ org.eclipse.emf.ecore.xmi,
+ org.eclipse.graphiti.ui
 Bundle-RequiredExecutionEnvironment: JavaSE-1.7
 Bundle-ActivationPolicy: lazy
 Export-Package: org.eclipse.ogee.core,
diff --git a/org.eclipse.ogee.core/src/org/eclipse/ogee/core/UninstallAction.java b/org.eclipse.ogee.core/src/org/eclipse/ogee/core/UninstallAction.java
index 739c7be..32a3958 100644
--- a/org.eclipse.ogee.core/src/org/eclipse/ogee/core/UninstallAction.java
+++ b/org.eclipse.ogee.core/src/org/eclipse/ogee/core/UninstallAction.java
@@ -14,19 +14,31 @@
 import java.util.Map;
 
 import org.eclipse.core.internal.registry.ExtensionRegistry;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Path;
 import org.eclipse.core.runtime.Platform;
 import org.eclipse.core.runtime.Status;
+import org.eclipse.emf.common.util.URI;
 import org.eclipse.equinox.p2.engine.spi.ProvisioningAction;
+import org.eclipse.graphiti.ui.editor.DiagramEditorInput;
 import org.eclipse.ogee.core.nls.messages.FrameworkMessages;
+import org.eclipse.ogee.designer.ODataEditorInput;
 import org.eclipse.ogee.utils.logger.Logger;
 import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IEditorReference;
+import org.eclipse.ui.IFileEditorInput;
 import org.eclipse.ui.IPerspectiveDescriptor;
 import org.eclipse.ui.IWorkbenchPage;
 import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PartInitException;
 import org.eclipse.ui.PlatformUI;
 
 
+@SuppressWarnings("restriction")
 public class UninstallAction extends ProvisioningAction
 {
 	private static Logger logger = Logger.getUtilsLogger();
@@ -48,6 +60,14 @@
 				public void run()
 				{
 					logger.log("Closing OData Perspective"); //$NON-NLS-1$
+					try
+					{
+						closeODataEditors();
+					}
+					catch (PartInitException e)
+					{
+						logger.logError(e);
+					}
 					closeODataPerspective();
 				}
 			});
@@ -67,6 +87,58 @@
 		return Status.OK_STATUS;
 	}
 
+	protected void closeODataEditors() throws PartInitException
+	{
+		boolean odataEditor = false;
+		IWorkbenchWindow w = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
+		if (w != null)
+		{
+			IWorkbenchPage[] pages = w.getPages();
+			for (IWorkbenchPage page : pages)
+			{
+				IEditorReference[] editorReferences = page.getEditorReferences();
+				for (IEditorReference editorReference : editorReferences)
+				{
+					IEditorInput editorInput = editorReference.getEditorInput();
+					if (editorInput instanceof ODataEditorInput)
+					{
+						final URI uri = ((ODataEditorInput) editorInput).getUri();
+						final String uriString = uri.trimFragment().toPlatformString(true);
+						IFile file = ResourcesPlugin.getWorkspace().getRoot().getFile(new Path(uriString));
+						if (file.getFileExtension().equals("odata"))
+						{
+							odataEditor = true;
+						}
+					}
+					else if (editorInput instanceof IFileEditorInput)
+					{
+						IFile file = ((IFileEditorInput) editorInput).getFile();
+						if (file.getFileExtension().equals("odata"))
+						{
+							odataEditor = true;
+						}
+					}
+					else if (editorInput instanceof DiagramEditorInput)
+					{
+						final URI uri = ((DiagramEditorInput) editorInput).getUri();
+						final String uriString = uri.trimFragment().toPlatformString(true);
+						IFile file = ResourcesPlugin.getWorkspace().getRoot().getFile(new Path(uriString));
+						if (file.getFileExtension().equals("odata"))
+						{
+							odataEditor = true;
+						}
+					}
+					if (odataEditor)
+					{
+						IEditorPart editorPart = page.findEditor(editorInput);
+						page.closeEditor(editorPart, true);
+					}
+				}
+			}
+		}
+
+	}
+
 	@Override
 	public IStatus undo(Map<String, Object> parameters)
 	{