Author: john.graham(a)jboss.org
Date: 2008-11-14 16:23:08 -0500 (Fri, 14 Nov 2008)
New Revision: 11804
Added:
workspace/jgraham/plugins/trunk/org.jboss.tools.esb.actionview/.classpath
workspace/jgraham/plugins/trunk/org.jboss.tools.esb.actionview/.project
workspace/jgraham/plugins/trunk/org.jboss.tools.esb.actionview/.settings/
workspace/jgraham/plugins/trunk/org.jboss.tools.esb.actionview/.settings/org.eclipse.jdt.core.prefs
workspace/jgraham/plugins/trunk/org.jboss.tools.esb.actionview/META-INF/
workspace/jgraham/plugins/trunk/org.jboss.tools.esb.actionview/META-INF/MANIFEST.MF
workspace/jgraham/plugins/trunk/org.jboss.tools.esb.actionview/build.properties
workspace/jgraham/plugins/trunk/org.jboss.tools.esb.actionview/icons/
workspace/jgraham/plugins/trunk/org.jboss.tools.esb.actionview/icons/action.gif
workspace/jgraham/plugins/trunk/org.jboss.tools.esb.actionview/plugin.xml
workspace/jgraham/plugins/trunk/org.jboss.tools.esb.actionview/src/
workspace/jgraham/plugins/trunk/org.jboss.tools.esb.actionview/src/org/
workspace/jgraham/plugins/trunk/org.jboss.tools.esb.actionview/src/org/jboss/
workspace/jgraham/plugins/trunk/org.jboss.tools.esb.actionview/src/org/jboss/tools/
workspace/jgraham/plugins/trunk/org.jboss.tools.esb.actionview/src/org/jboss/tools/esb/
workspace/jgraham/plugins/trunk/org.jboss.tools.esb.actionview/src/org/jboss/tools/esb/actionview/
workspace/jgraham/plugins/trunk/org.jboss.tools.esb.actionview/src/org/jboss/tools/esb/actionview/Activator.java
workspace/jgraham/plugins/trunk/org.jboss.tools.esb.actionview/src/org/jboss/tools/esb/actionview/views/
workspace/jgraham/plugins/trunk/org.jboss.tools.esb.actionview/src/org/jboss/tools/esb/actionview/views/ActionContentProvider.java
workspace/jgraham/plugins/trunk/org.jboss.tools.esb.actionview/src/org/jboss/tools/esb/actionview/views/ActionLabelProvider.java
workspace/jgraham/plugins/trunk/org.jboss.tools.esb.actionview/src/org/jboss/tools/esb/actionview/views/ActionPage.java
workspace/jgraham/plugins/trunk/org.jboss.tools.esb.actionview/src/org/jboss/tools/esb/actionview/views/ActionTreeObject.java
workspace/jgraham/plugins/trunk/org.jboss.tools.esb.actionview/src/org/jboss/tools/esb/actionview/views/DefaultPage.java
workspace/jgraham/plugins/trunk/org.jboss.tools.esb.actionview/src/org/jboss/tools/esb/actionview/views/ESBActionView.java
Log:
Initial commit
Added: workspace/jgraham/plugins/trunk/org.jboss.tools.esb.actionview/.classpath
===================================================================
--- workspace/jgraham/plugins/trunk/org.jboss.tools.esb.actionview/.classpath
(rev 0)
+++ workspace/jgraham/plugins/trunk/org.jboss.tools.esb.actionview/.classpath 2008-11-14
21:23:08 UTC (rev 11804)
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con"
path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+ <classpathentry kind="con"
path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
Property changes on:
workspace/jgraham/plugins/trunk/org.jboss.tools.esb.actionview/.classpath
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Added: workspace/jgraham/plugins/trunk/org.jboss.tools.esb.actionview/.project
===================================================================
--- workspace/jgraham/plugins/trunk/org.jboss.tools.esb.actionview/.project
(rev 0)
+++ workspace/jgraham/plugins/trunk/org.jboss.tools.esb.actionview/.project 2008-11-14
21:23:08 UTC (rev 11804)
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.jboss.tools.esb.actionview</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
Property changes on:
workspace/jgraham/plugins/trunk/org.jboss.tools.esb.actionview/.project
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Added:
workspace/jgraham/plugins/trunk/org.jboss.tools.esb.actionview/.settings/org.eclipse.jdt.core.prefs
===================================================================
---
workspace/jgraham/plugins/trunk/org.jboss.tools.esb.actionview/.settings/org.eclipse.jdt.core.prefs
(rev 0)
+++
workspace/jgraham/plugins/trunk/org.jboss.tools.esb.actionview/.settings/org.eclipse.jdt.core.prefs 2008-11-14
21:23:08 UTC (rev 11804)
@@ -0,0 +1,7 @@
+#Tue Nov 11 15:23:22 GMT-05:00 2008
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.5
Property changes on:
workspace/jgraham/plugins/trunk/org.jboss.tools.esb.actionview/.settings/org.eclipse.jdt.core.prefs
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Added:
workspace/jgraham/plugins/trunk/org.jboss.tools.esb.actionview/META-INF/MANIFEST.MF
===================================================================
--- workspace/jgraham/plugins/trunk/org.jboss.tools.esb.actionview/META-INF/MANIFEST.MF
(rev 0)
+++
workspace/jgraham/plugins/trunk/org.jboss.tools.esb.actionview/META-INF/MANIFEST.MF 2008-11-14
21:23:08 UTC (rev 11804)
@@ -0,0 +1,15 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: ESB Action View Plug-in
+Bundle-SymbolicName: org.jboss.tools.esb.actionview; singleton:=true
+Bundle-Version: 0.0.1.200811141617
+Bundle-Activator: org.jboss.tools.esb.actionview.Activator
+Bundle-Vendor: JBoss, a division of Red Hat
+Require-Bundle: org.eclipse.ui,
+ org.eclipse.core.runtime,
+ org.eclipse.core.resources;bundle-version="3.4.1",
+ org.eclipse.jdt.core;bundle-version="3.4.2",
+ org.eclipse.jdt.ui;bundle-version="3.4.1",
+ org.eclipse.jface.text;bundle-version="3.4.1"
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Bundle-ActivationPolicy: lazy
Property changes on:
workspace/jgraham/plugins/trunk/org.jboss.tools.esb.actionview/META-INF/MANIFEST.MF
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Added: workspace/jgraham/plugins/trunk/org.jboss.tools.esb.actionview/build.properties
===================================================================
--- workspace/jgraham/plugins/trunk/org.jboss.tools.esb.actionview/build.properties
(rev 0)
+++
workspace/jgraham/plugins/trunk/org.jboss.tools.esb.actionview/build.properties 2008-11-14
21:23:08 UTC (rev 11804)
@@ -0,0 +1,6 @@
+source.. = src/
+output.. = bin/
+bin.includes = plugin.xml,\
+ META-INF/,\
+ .,\
+ icons/
Property changes on:
workspace/jgraham/plugins/trunk/org.jboss.tools.esb.actionview/build.properties
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Added: workspace/jgraham/plugins/trunk/org.jboss.tools.esb.actionview/icons/action.gif
===================================================================
(Binary files differ)
Property changes on:
workspace/jgraham/plugins/trunk/org.jboss.tools.esb.actionview/icons/action.gif
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: workspace/jgraham/plugins/trunk/org.jboss.tools.esb.actionview/plugin.xml
===================================================================
--- workspace/jgraham/plugins/trunk/org.jboss.tools.esb.actionview/plugin.xml
(rev 0)
+++ workspace/jgraham/plugins/trunk/org.jboss.tools.esb.actionview/plugin.xml 2008-11-14
21:23:08 UTC (rev 11804)
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.2"?>
+<plugin>
+
+ <extension
+ point="org.eclipse.ui.views">
+ <category
+ name="ESB"
+ id="org.jboss.tools.esb.actionview">
+ </category>
+ <view
+ name="ESB Action View"
+ icon="icons/action.gif"
+ category="org.jboss.tools.esb.actionview"
+ class="org.jboss.tools.esb.actionview.views.ESBActionView"
+ id="org.jboss.tools.esb.actionview.views.ESBActionView">
+ </view>
+ </extension>
+ <extension
+ point="org.eclipse.ui.perspectiveExtensions">
+ <perspectiveExtension
+ targetID="org.eclipse.jdt.ui.JavaPerspective">
+ <view
+ ratio="0.5"
+ relative="org.eclipse.ui.views.TaskList"
+ relationship="right"
+ id="org.jboss.tools.esb.actionview.views.ESBActionView">
+ </view>
+ </perspectiveExtension>
+ </extension>
+
+</plugin>
Property changes on:
workspace/jgraham/plugins/trunk/org.jboss.tools.esb.actionview/plugin.xml
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Added:
workspace/jgraham/plugins/trunk/org.jboss.tools.esb.actionview/src/org/jboss/tools/esb/actionview/Activator.java
===================================================================
---
workspace/jgraham/plugins/trunk/org.jboss.tools.esb.actionview/src/org/jboss/tools/esb/actionview/Activator.java
(rev 0)
+++
workspace/jgraham/plugins/trunk/org.jboss.tools.esb.actionview/src/org/jboss/tools/esb/actionview/Activator.java 2008-11-14
21:23:08 UTC (rev 11804)
@@ -0,0 +1,85 @@
+/*******************************************************************************
+ * Copyright (c) 2008 JBoss, a division of Red Hat, Inc.
+ * Distributed under license by Red Hat, Inc. All rights reserved.
+ * This program is made available under the terms of the
+ * Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at
http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * JBoss, a division of Red Hat, Inc. - initial API and implementation
+ ******************************************************************************/
+
+package org.jboss.tools.esb.actionview;
+
+import org.eclipse.core.resources.IWorkspace;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle
+ */
+public class Activator extends AbstractUIPlugin {
+
+ // The plug-in ID
+ public static final String PLUGIN_ID = "org.jboss.tools.esb.actionview";
+
+ // The shared instance
+ private static Activator plugin;
+
+ /**
+ * The constructor
+ */
+ public Activator() {
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
+ */
+ public void start(BundleContext context) throws Exception {
+ super.start(context);
+ plugin = this;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
+ */
+ public void stop(BundleContext context) throws Exception {
+ plugin = null;
+ super.stop(context);
+ }
+
+ /**
+ * Returns the shared instance
+ *
+ * @return the shared instance
+ */
+ public static Activator getDefault() {
+ return plugin;
+ }
+
+ public IWorkspace getWorkspace() {
+ return ResourcesPlugin.getWorkspace();
+ }
+
+ /**
+ * Returns an image descriptor for the image file at the given
+ * plug-in relative path
+ *
+ * @param path the path
+ * @return the image descriptor
+ */
+ public static ImageDescriptor getImageDescriptor(String path) {
+ return imageDescriptorFromPlugin(PLUGIN_ID, path);
+ }
+
+ public void writeLog(int severity, String msg, Throwable t) {
+ IStatus status = new Status(severity, PLUGIN_ID, msg, t);
+ super.getLog().log(status);
+ }
+}
Property changes on:
workspace/jgraham/plugins/trunk/org.jboss.tools.esb.actionview/src/org/jboss/tools/esb/actionview/Activator.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Added:
workspace/jgraham/plugins/trunk/org.jboss.tools.esb.actionview/src/org/jboss/tools/esb/actionview/views/ActionContentProvider.java
===================================================================
---
workspace/jgraham/plugins/trunk/org.jboss.tools.esb.actionview/src/org/jboss/tools/esb/actionview/views/ActionContentProvider.java
(rev 0)
+++
workspace/jgraham/plugins/trunk/org.jboss.tools.esb.actionview/src/org/jboss/tools/esb/actionview/views/ActionContentProvider.java 2008-11-14
21:23:08 UTC (rev 11804)
@@ -0,0 +1,197 @@
+/*******************************************************************************
+ * Copyright (c) 2008 JBoss, a division of Red Hat, Inc.
+ * Distributed under license by Red Hat, Inc. All rights reserved.
+ * This program is made available under the terms of the
+ * Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at
http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * JBoss, a division of Red Hat, Inc. - initial API and implementation
+ ******************************************************************************/
+
+package org.jboss.tools.esb.actionview.views;
+
+import java.lang.reflect.InvocationTargetException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.jdt.core.Flags;
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.IMethod;
+import org.eclipse.jdt.core.IType;
+import org.eclipse.jdt.core.ITypeHierarchy;
+import org.eclipse.jdt.core.ITypeHierarchyChangedListener;
+import org.eclipse.jdt.core.JavaModelException;
+import org.eclipse.jface.operation.IRunnableWithProgress;
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.progress.IProgressService;
+import org.jboss.tools.esb.actionview.Activator;
+
+public class ActionContentProvider implements IStructuredContentProvider,
+ ITreeContentProvider {
+
+ private static String ESB_ACTION_IFACE =
"org.jboss.soa.esb.actions.ActionLifecycle";
+
+ private Viewer theViewer;
+
+ private boolean isActionType(IType type) {
+ return !"java.lang.Object".equals(type.getFullyQualifiedName());
+ }
+
+ private boolean isVisibleMethod(IMethod method) throws JavaModelException {
+ return Flags.isPublic(method.getFlags());
+ }
+
+ private Object[] initialize(IJavaProject project,
+ IProgressMonitor monitor) throws JavaModelException,
+ InterruptedException {
+ Object[] res = null;
+ try {
+ IType esbActionType = project.findType(ESB_ACTION_IFACE);
+ if (esbActionType != null) {
+ ITypeHierarchy typeHierarchy = esbActionType.newTypeHierarchy(project, null);
+ typeHierarchy.addTypeHierarchyChangedListener(new ITypeHierarchyChangedListener() {
+ public void typeHierarchyChanged(ITypeHierarchy typeHierarchy) {
+ if (theViewer != null) {
+ Display display = PlatformUI.getWorkbench().getDisplay();
+ display.asyncExec(new Runnable() {
+ public void run() {
+ theViewer.refresh();
+ }
+ });
+ }
+ }
+ });
+ IType[] allClasses = typeHierarchy.getAllClasses();
+ monitor.beginTask("Loading", allClasses.length);
+ List<ActionTreeObject> esbActions =
+ new ArrayList<ActionTreeObject>(allClasses.length);
+ Map<String, ActionTreeObject> packages = new HashMap<String,
ActionTreeObject>();
+ for (int i = 0; i < allClasses.length; i++) {
+ if (!isActionType(allClasses[i])) {
+ monitor.worked(1);
+ continue;
+ }
+ ActionTreeObject hostPackage = null;
+ if (allClasses[i].getPackageFragment() != null) {
+ String packageName = allClasses[i].getPackageFragment().getElementName();
+ hostPackage = packages.get(packageName);
+ if (hostPackage == null) {
+ hostPackage = new ActionTreeObject(packageName,
allClasses[i].getPackageFragment());
+ packages.put(packageName, hostPackage);
+ esbActions.add(hostPackage);
+ }
+ }
+ ActionTreeObject clazz = new ActionTreeObject(allClasses[i].getElementName(),
allClasses[i]);
+ addMethods(allClasses[i], clazz);
+ if (hostPackage != null) {
+ hostPackage.addChild(clazz);
+ }
+ monitor.worked(1);
+ if (monitor.isCanceled()) {
+ throw new InterruptedException();
+ }
+ }
+ res = new Object[esbActions.size()];
+ esbActions.toArray(res);
+ }
+ } finally {
+ monitor.done();
+ }
+ return res == null?new Object[0]:res;
+ }
+
+ private void addMethods(IType type, ActionTreeObject clazz) throws JavaModelException {
+ IMethod[] methods = type.getMethods();
+ for (int i = 0; i < methods.length; i++) {
+ if (isVisibleMethod(methods[i])) {
+ ActionTreeObject m =
+ new ActionTreeObject(methods[i].getElementName(), methods[i]);
+ clazz.addChild(m);
+ }
+ }
+ }
+
+ private class InitializationRunnable implements IRunnableWithProgress {
+ private Object[] results;
+ private IJavaProject project;
+
+ public InitializationRunnable(IJavaProject project) {
+ this.project = project;
+ }
+
+ public void run(IProgressMonitor monitor) throws InvocationTargetException,
+ InterruptedException {
+ try {
+ results = initialize(project, monitor);
+ } catch (JavaModelException e) {
+ Activator.getDefault().writeLog(IStatus.ERROR, e.getMessage(), e);
+ }
+ }
+ public Object[] getResults() {
+ return results;
+ }
+ }
+
+ private Object[] getTreeNodes(Object element) {
+ if (element instanceof IJavaProject) {
+ IProgressService pgService = Activator.getDefault().
+ getWorkbench().getProgressService();
+ InitializationRunnable runnable =
+ new InitializationRunnable((IJavaProject)element);
+ try {
+ pgService.run(true, true, runnable);
+ } catch (InvocationTargetException e) {
+ Activator.getDefault().writeLog(IStatus.ERROR, e.getMessage(), e);
+ } catch (InterruptedException e) {
+ // Loading was cancelled; nothing to log here
+ }
+ return runnable.getResults() != null?runnable.getResults():new Object[0];
+ }
+ if (element instanceof ActionTreeObject) {
+ return ((ActionTreeObject)element).getChildren();
+ }
+ return new Object[0];
+ }
+
+ public Object[] getElements(Object inputElement) {
+ return getTreeNodes(inputElement);
+ }
+
+
+ public Object[] getChildren(Object parentElement) {
+ return getTreeNodes(parentElement);
+ }
+
+ public void dispose() {
+
+ }
+
+ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+ theViewer = viewer;
+ }
+
+ public Object getParent(Object element) {
+ if (element instanceof ActionTreeObject) {
+ return ((ActionTreeObject)element).getParent();
+ } else {
+ return null;
+ }
+ }
+
+ public boolean hasChildren(Object element) {
+ if (element instanceof ActionTreeObject) {
+ return ((ActionTreeObject)element).hasChildren();
+ } else {
+ return false;
+ }
+ }
+}
\ No newline at end of file
Property changes on:
workspace/jgraham/plugins/trunk/org.jboss.tools.esb.actionview/src/org/jboss/tools/esb/actionview/views/ActionContentProvider.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Added:
workspace/jgraham/plugins/trunk/org.jboss.tools.esb.actionview/src/org/jboss/tools/esb/actionview/views/ActionLabelProvider.java
===================================================================
---
workspace/jgraham/plugins/trunk/org.jboss.tools.esb.actionview/src/org/jboss/tools/esb/actionview/views/ActionLabelProvider.java
(rev 0)
+++
workspace/jgraham/plugins/trunk/org.jboss.tools.esb.actionview/src/org/jboss/tools/esb/actionview/views/ActionLabelProvider.java 2008-11-14
21:23:08 UTC (rev 11804)
@@ -0,0 +1,41 @@
+/*******************************************************************************
+ * Copyright (c) 2008 JBoss, a division of Red Hat, Inc.
+ * Distributed under license by Red Hat, Inc. All rights reserved.
+ * This program is made available under the terms of the
+ * Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at
http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * JBoss, a division of Red Hat, Inc. - initial API and implementation
+ ******************************************************************************/
+
+package org.jboss.tools.esb.actionview.views;
+
+import org.eclipse.jdt.ui.JavaElementLabelProvider;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.swt.graphics.Image;
+
+public class ActionLabelProvider extends LabelProvider {
+ private JavaElementLabelProvider javaLabels;
+
+ public ActionLabelProvider() {
+ javaLabels = new JavaElementLabelProvider();
+ }
+
+ @Override
+ public Image getImage(Object element) {
+ if (element instanceof ActionTreeObject) {
+ return javaLabels.getImage(((ActionTreeObject)element).getJavaElement());
+ }
+ return super.getImage(element);
+ }
+
+ @Override
+ public String getText(Object element) {
+ if (element instanceof ActionTreeObject) {
+ return javaLabels.getText(((ActionTreeObject)element).getJavaElement());
+ } else {
+ return element.toString();
+ }
+ }
+}
Property changes on:
workspace/jgraham/plugins/trunk/org.jboss.tools.esb.actionview/src/org/jboss/tools/esb/actionview/views/ActionLabelProvider.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Added:
workspace/jgraham/plugins/trunk/org.jboss.tools.esb.actionview/src/org/jboss/tools/esb/actionview/views/ActionPage.java
===================================================================
---
workspace/jgraham/plugins/trunk/org.jboss.tools.esb.actionview/src/org/jboss/tools/esb/actionview/views/ActionPage.java
(rev 0)
+++
workspace/jgraham/plugins/trunk/org.jboss.tools.esb.actionview/src/org/jboss/tools/esb/actionview/views/ActionPage.java 2008-11-14
21:23:08 UTC (rev 11804)
@@ -0,0 +1,181 @@
+/*******************************************************************************
+ * Copyright (c) 2008 JBoss, a division of Red Hat, Inc.
+ * Distributed under license by Red Hat, Inc. All rights reserved.
+ * This program is made available under the terms of the
+ * Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at
http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * JBoss, a division of Red Hat, Inc. - initial API and implementation
+ ******************************************************************************/
+
+package org.jboss.tools.esb.actionview.views;
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.IMethod;
+import org.eclipse.jdt.core.IType;
+import org.eclipse.jdt.internal.ui.infoviews.JavadocView;
+import org.eclipse.jdt.ui.ISharedImages;
+import org.eclipse.jdt.ui.JavaUI;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.jface.viewers.DoubleClickEvent;
+import org.eclipse.jface.viewers.IDoubleClickListener;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.ViewerSorter;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.ui.IWorkbenchActionConstants;
+import org.eclipse.ui.part.DrillDownAdapter;
+import org.eclipse.ui.part.Page;
+import org.jboss.tools.esb.actionview.Activator;
+
+public class ActionPage extends Page {
+
+ private TreeViewer viewer;
+ private IJavaProject project;
+ private DrillDownAdapter drillDownAdapter;
+
+ private Action openSrcFileAction;
+
+ public ActionPage(IJavaProject project) {
+ this.project = project;
+ }
+
+ public IJavaProject getJavaProject() {
+ return project;
+ }
+
+ public void refresh() {
+ if (viewer != null) {
+ viewer.refresh(true);
+ }
+ handleSelection();
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.ui.part.Page#createControl(org.eclipse.swt.widgets.Composite)
+ */
+ public void createControl(Composite parent) {
+ try {
+ viewer = new TreeViewer(parent, SWT.NONE);
+ } catch (Throwable t) {
+ // Stupid "widget disposed" errors when view is closed then reopened...
+ // Ignoring this doesn't seem to impact the rest of the functionality
+ }
+ drillDownAdapter = new DrillDownAdapter(viewer);
+
+ viewer.addPostSelectionChangedListener(new ISelectionChangedListener() {
+ public void selectionChanged(SelectionChangedEvent event) {
+ handleSelection();
+ }
+ });
+ viewer.addDoubleClickListener(new IDoubleClickListener() {
+ public void doubleClick(DoubleClickEvent event) {
+ handleOpenSrcFile();
+ }
+ });
+
+ viewer.setSorter(new ViewerSorter());
+ viewer.setContentProvider(new ActionContentProvider());
+ viewer.setLabelProvider(new ActionLabelProvider());
+ viewer.setInput(project);
+
+ openSrcFileAction = new Action() {
+ public void run() {
+ handleOpenSrcFile();
+ }
+ };
+ openSrcFileAction.setText("Open source file");
+ openSrcFileAction.setToolTipText("Opens the source file");
+ openSrcFileAction.setImageDescriptor(JavaUI.getSharedImages().
+ getImageDescriptor(ISharedImages.IMG_OBJS_CFILE));
+ hookContextMenu();
+ }
+
+ private void hookContextMenu() {
+ if (super.getSite() == null) {
+ return;
+ }
+ MenuManager menuMgr = new MenuManager("#PopupMenu");
+ menuMgr.setRemoveAllWhenShown(true);
+ menuMgr.addMenuListener(new IMenuListener() {
+ public void menuAboutToShow(IMenuManager manager) {
+ ActionPage.this.fillContextMenu(manager);
+ }
+ });
+ Menu menu = menuMgr.createContextMenu(viewer.getControl());
+ viewer.getControl().setMenu(menu);
+ super.getSite().registerContextMenu(this.toString(), menuMgr, viewer);
+ }
+
+ private void fillContextMenu(IMenuManager manager) {
+ manager.add(openSrcFileAction);
+ manager.add(new Separator());
+ drillDownAdapter.addNavigationActions(manager);
+ // Other plug-ins can contribute there actions here
+ manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
+ }
+
+ private void handleOpenSrcFile() {
+ IStructuredSelection selection = (IStructuredSelection)viewer.getSelection();
+ if (selection.getFirstElement() instanceof ActionTreeObject) {
+ ActionTreeObject o = (ActionTreeObject)selection.getFirstElement();
+ try {
+ JavaUI.openInEditor(o.getJavaElement());
+ } catch (Exception e) {
+ Activator.getDefault().writeLog(IStatus.ERROR, e.getMessage(), e);
+ }
+ }
+ }
+
+ private void handleSelection() {
+ IStructuredSelection selection = (IStructuredSelection)viewer.getSelection();
+ if (selection == null) {
+ return;
+ }
+ if (selection.getFirstElement() instanceof ActionTreeObject) {
+ ActionTreeObject o = (ActionTreeObject)selection.getFirstElement();
+ JavadocView jdview = getJavaDocView();
+ if (jdview != null) {
+ jdview.setInput(o.getJavaElement());
+ }
+ boolean canOpen = o.getJavaElement() instanceof IType ||
+ o.getJavaElement() instanceof IMethod;
+ openSrcFileAction.setEnabled(canOpen);
+ }
+ }
+
+ private JavadocView getJavaDocView() {
+ return (JavadocView)Activator.getDefault().
+ getWorkbench().getActiveWorkbenchWindow().
+ getActivePage().findView(JavaUI.ID_JAVADOC_VIEW);
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.ui.part.Page#getControl()
+ */
+ public Control getControl() {
+ return viewer != null?viewer.getTree():null;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.ui.part.Page#setFocus()
+ */
+ public void setFocus() {
+ viewer.getControl().setFocus();
+ }
+
+}
Property changes on:
workspace/jgraham/plugins/trunk/org.jboss.tools.esb.actionview/src/org/jboss/tools/esb/actionview/views/ActionPage.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Added:
workspace/jgraham/plugins/trunk/org.jboss.tools.esb.actionview/src/org/jboss/tools/esb/actionview/views/ActionTreeObject.java
===================================================================
---
workspace/jgraham/plugins/trunk/org.jboss.tools.esb.actionview/src/org/jboss/tools/esb/actionview/views/ActionTreeObject.java
(rev 0)
+++
workspace/jgraham/plugins/trunk/org.jboss.tools.esb.actionview/src/org/jboss/tools/esb/actionview/views/ActionTreeObject.java 2008-11-14
21:23:08 UTC (rev 11804)
@@ -0,0 +1,62 @@
+/*******************************************************************************
+ * Copyright (c) 2008 JBoss, a division of Red Hat, Inc.
+ * Distributed under license by Red Hat, Inc. All rights reserved.
+ * This program is made available under the terms of the
+ * Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at
http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * JBoss, a division of Red Hat, Inc. - initial API and implementation
+ ******************************************************************************/
+
+package org.jboss.tools.esb.actionview.views;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.jdt.core.IJavaElement;
+
+public class ActionTreeObject {
+ private ActionTreeObject parent;
+ private List<ActionTreeObject> children;
+ private String name;
+ private IJavaElement javaElement;
+
+ public ActionTreeObject(String name, IJavaElement javaElement) {
+ this.name = name;
+ this.javaElement = javaElement;
+ children = new ArrayList<ActionTreeObject>();
+ }
+ public IJavaElement getJavaElement() {
+ return javaElement;
+ }
+ public void setJavaElement(IJavaElement javaElement) {
+ this.javaElement = javaElement;
+ }
+
+ public ActionTreeObject getParent() {
+ return parent;
+ }
+ public void setParent(ActionTreeObject parent) {
+ this.parent = parent;
+ }
+ public ActionTreeObject[] getChildren() {
+ ActionTreeObject[] res = new ActionTreeObject[children.size()];
+ children.toArray(res);
+ return res;
+ }
+ public boolean hasChildren() {
+ return children.size() > 0;
+ }
+ public void addChild(ActionTreeObject child) {
+ children.add(child);
+ child.setParent(this);
+
+ }
+ public String getName() {
+ return name;
+ }
+ public void setName(String name) {
+ this.name = name;
+ }
+}
Property changes on:
workspace/jgraham/plugins/trunk/org.jboss.tools.esb.actionview/src/org/jboss/tools/esb/actionview/views/ActionTreeObject.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Added:
workspace/jgraham/plugins/trunk/org.jboss.tools.esb.actionview/src/org/jboss/tools/esb/actionview/views/DefaultPage.java
===================================================================
---
workspace/jgraham/plugins/trunk/org.jboss.tools.esb.actionview/src/org/jboss/tools/esb/actionview/views/DefaultPage.java
(rev 0)
+++
workspace/jgraham/plugins/trunk/org.jboss.tools.esb.actionview/src/org/jboss/tools/esb/actionview/views/DefaultPage.java 2008-11-14
21:23:08 UTC (rev 11804)
@@ -0,0 +1,47 @@
+/*******************************************************************************
+ * Copyright (c) 2008 JBoss, a division of Red Hat, Inc.
+ * Distributed under license by Red Hat, Inc. All rights reserved.
+ * This program is made available under the terms of the
+ * Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at
http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * JBoss, a division of Red Hat, Inc. - initial API and implementation
+ ******************************************************************************/
+
+package org.jboss.tools.esb.actionview.views;
+
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.ui.part.Page;
+
+public class DefaultPage extends Page {
+
+ private TreeViewer viewer;
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.ui.part.Page#createControl(org.eclipse.swt.widgets.Composite)
+ */
+ public void createControl(Composite parent) {
+ viewer = new TreeViewer(parent, SWT.NONE);
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.ui.part.Page#getControl()
+ */
+ public Control getControl() {
+ return viewer.getTree();
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.ui.part.Page#setFocus()
+ */
+ public void setFocus() {
+ getControl().setFocus();
+ }
+}
Property changes on:
workspace/jgraham/plugins/trunk/org.jboss.tools.esb.actionview/src/org/jboss/tools/esb/actionview/views/DefaultPage.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Added:
workspace/jgraham/plugins/trunk/org.jboss.tools.esb.actionview/src/org/jboss/tools/esb/actionview/views/ESBActionView.java
===================================================================
---
workspace/jgraham/plugins/trunk/org.jboss.tools.esb.actionview/src/org/jboss/tools/esb/actionview/views/ESBActionView.java
(rev 0)
+++
workspace/jgraham/plugins/trunk/org.jboss.tools.esb.actionview/src/org/jboss/tools/esb/actionview/views/ESBActionView.java 2008-11-14
21:23:08 UTC (rev 11804)
@@ -0,0 +1,163 @@
+/*******************************************************************************
+ * Copyright (c) 2008 JBoss, a division of Red Hat, Inc.
+ * Distributed under license by Red Hat, Inc. All rights reserved.
+ * This program is made available under the terms of the
+ * Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at
http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * JBoss, a division of Red Hat, Inc. - initial API and implementation
+ ******************************************************************************/
+
+package org.jboss.tools.esb.actionview.views;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.jdt.core.IJavaElement;
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.ISelectionListener;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.part.IPageSite;
+import org.eclipse.ui.part.Page;
+import org.eclipse.ui.part.PageBook;
+import org.eclipse.ui.part.PageSite;
+import org.eclipse.ui.part.ViewPart;
+import org.jboss.tools.esb.actionview.Activator;
+
+public class ESBActionView extends ViewPart {
+
+ private PageBook pageBook;
+ private DefaultPage defaultPage;
+ private Map<String, Page> pages;
+ private Page currentPage;
+
+ private Composite parent;
+
+ public ESBActionView() {
+ pages = new HashMap<String, Page>();
+ }
+
+ public void createPartControl(Composite parent) {
+ this.parent = parent;
+ initializeControls();
+ createListeners();
+ }
+
+ private void initializeControls() {
+ try {
+ pages.clear();
+ pageBook = new PageBook(parent, SWT.NONE);
+ defaultPage = new DefaultPage();
+ defaultPage.createControl(pageBook);
+ currentPage = defaultPage;
+ } catch (Throwable t) {
+ // TODO: Figure out what's up with those stupid "widget disposed"
errors
+ // when view is closed and then re-opened.
+ }
+ }
+
+ private void createListeners() {
+ SelectionChangeListener selListener = new SelectionChangeListener();
+ super.getSite().getPage().addSelectionListener(selListener);
+ }
+
+ public void setFocus() {
+ currentPage.setFocus();
+ }
+
+ private IJavaProject getJavaProject(Object element) throws CoreException {
+ if (element instanceof IJavaProject) {
+ return (IJavaProject)element;
+ }
+ if (element instanceof IJavaElement) {
+ IJavaProject jproject = ((IJavaElement)element).getJavaProject();
+ if (jproject != null) {
+ return jproject;
+ }
+ }
+ if (element instanceof IResource) {
+ IResource resource = (IResource)element;
+ if (resource.getProject() != null &&
+ resource.getProject().hasNature(JavaCore.NATURE_ID)) {
+ return JavaCore.create(((IResource)element).getProject());
+ }
+ }
+ return null;
+ }
+
+ private boolean isProjectSelection(Object selection) {
+ return selection instanceof IJavaElement || selection instanceof IResource;
+ }
+
+ private void setCurrentPage(Object selection) {
+ if (selection == null || !isProjectSelection(selection)) {
+ return;
+ }
+ IJavaProject project = null;
+ try {
+ project = getJavaProject(selection);
+ } catch (CoreException e) {
+ Activator.getDefault().writeLog(IStatus.ERROR, e.getMessage(), e);
+ }
+ try {
+ if (project != null) {
+ Page selPage = pages.get(project.getProject().getName());
+ if (selPage == null) {
+ selPage = createProjectPage(project);
+ } else {
+ if (selPage.getControl().isDisposed()) {
+ initializeControls();
+ selPage = createProjectPage(project);
+ }
+ }
+ currentPage = selPage;
+ pageBook.showPage(selPage.getControl());
+ } else {
+ if (currentPage != defaultPage) {
+ if (defaultPage.getControl().isDisposed()) {
+ initializeControls();
+ }
+ currentPage = defaultPage;
+ pageBook.showPage(defaultPage.getControl());
+ }
+ }
+ } catch (Exception e) {
+ // TODO: Figure out what's up with those stupid "widget disposed"
errors
+ // when view is closed and then re-opened.
+ }
+ }
+
+ private Page createProjectPage(IJavaProject project) {
+ Page selPage;
+ selPage = new ActionPage(project);
+ try {
+ IPageSite pgSite = new PageSite(getViewSite());
+ selPage.init(pgSite);
+ selPage.createControl(pageBook);
+ } catch (Throwable t) {
+ // in some cases IServiceLocatorCreator in PageSite<init> is null,
+ // causing a NPE. Don't know what I'm supposed to do about that...
+ }
+ pages.put(project.getProject().getName(), selPage);
+ return selPage;
+ }
+
+ class SelectionChangeListener implements ISelectionListener {
+
+ public void selectionChanged(IWorkbenchPart part, ISelection selection) {
+ if (selection instanceof IStructuredSelection) {
+ IStructuredSelection ss = (IStructuredSelection)selection;
+ setCurrentPage(ss.getFirstElement());
+ }
+ }
+ }
+}
\ No newline at end of file
Property changes on:
workspace/jgraham/plugins/trunk/org.jboss.tools.esb.actionview/src/org/jboss/tools/esb/actionview/views/ESBActionView.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain