sysperfana/perfinvestigator/com.nokia.carbide.cpp.pi.button/src/com/nokia/carbide/cpp/pi/button/BupMapSwitchAction.java
changeset 2 b9ab3b238396
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sysperfana/perfinvestigator/com.nokia.carbide.cpp.pi.button/src/com/nokia/carbide/cpp/pi/button/BupMapSwitchAction.java	Thu Feb 11 15:32:31 2010 +0200
@@ -0,0 +1,118 @@
+/*
+ * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). 
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the License "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description: 
+ *
+ */
+
+package com.nokia.carbide.cpp.pi.button;
+
+import java.util.Iterator;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IObjectActionDelegate;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.ide.IDE;
+import org.eclipse.ui.ide.ResourceUtil;
+
+import com.nokia.carbide.cpp.pi.editors.PIPageEditor;
+import com.nokia.carbide.cpp.pi.util.GeneralMessages;
+
+
+public class BupMapSwitchAction implements IObjectActionDelegate {
+	
+	// IDs defined in plugin.xml
+	public static final String BUP_MAP_SWITCH_POP_UP_ID = ButtonPlugin.PLUGIN_ID + ".BupMapSwitchAction"; //$NON-NLS-1$
+	
+	// private members
+	private ISelection selection;
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.IObjectActionDelegate#setActivePart(org.eclipse.jface.action.IAction, org.eclipse.ui.IWorkbenchPart)
+	 */
+	public void setActivePart(IAction arg0, IWorkbenchPart arg1) {
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.IActionDelegate#run(org.eclipse.jface.action.IAction)
+	 */
+	public void run(IAction arg0) {
+		if (arg0.getId().equals(BUP_MAP_SWITCH_POP_UP_ID)){
+			handleBupMapSwitch();
+		}
+	}
+		
+	private void handleBupMapSwitch() {
+		if (selection != null && selection instanceof IStructuredSelection) {
+			Iterator iter = ((IStructuredSelection)selection).iterator();
+			while (iter.hasNext()) {
+				Object selectedItem = iter.next();
+				IResource selectedResource = getResourceFromObject(selectedItem);
+				if (selectedResource != null && selectedResource instanceof IFile) {
+					IEditorPart selectedEditorPart = ResourceUtil.findEditor(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(), (IFile) selectedResource);
+					if (selectedEditorPart != null) {
+						if (selectedEditorPart instanceof PIPageEditor) {
+							// found an opened editor instance
+							PIPageEditor selectedPIPageEditor = (PIPageEditor) selectedEditorPart;
+							PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().activate(selectedPIPageEditor);
+							ButtonPlugin.getDefault().switchMap();
+						} else {
+							GeneralMessages.showErrorMessage(Messages.getString("BupMapSwitchAction.notPIPageeditor")); //$NON-NLS-1$
+						}
+					} else {
+						// NPI file is not opened
+						try {
+							IDE.openEditor(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(), (IFile) selectedResource);
+							// found an opened editor instance
+							PIPageEditor selectedPIPageEditor = (PIPageEditor) selectedEditorPart;
+							PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().activate(selectedPIPageEditor);
+							ButtonPlugin.getDefault().switchMap();
+						} catch (PartInitException e) {
+						}
+					}
+				}
+			}
+		}
+
+	}
+	
+	/**
+	 * Return the resource associated with an object.
+	 * @param element - object in question
+	 * @return associated resource if there is one
+	 */
+	private IResource getResourceFromObject(Object element) {
+		if (element instanceof IResource) {
+			return (IResource)element;
+		} else if (element instanceof IAdaptable) {
+			return (IResource)((IAdaptable)element).getAdapter(IResource.class);
+		}
+		return null;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.IActionDelegate#selectionChanged(org.eclipse.jface.action.IAction, org.eclipse.jface.viewers.ISelection)
+	 */
+	public void selectionChanged(IAction arg0, ISelection arg1) {
+		this.selection = arg1;
+	}
+
+}