Author: scabanovich
Date: 2007-07-19 10:46:22 -0400 (Thu, 19 Jul 2007)
New Revision: 2525
Added:
trunk/seam/plugins/org.jboss.tools.seam.ui/src/org/jboss/tools/seam/ui/views/AbstractSeamContentProvider.java
trunk/seam/plugins/org.jboss.tools.seam.ui/src/org/jboss/tools/seam/ui/views/ProjectContentProvider.java
trunk/seam/plugins/org.jboss.tools.seam.ui/src/org/jboss/tools/seam/ui/views/SeamProjectLabelProvider.java
Modified:
trunk/seam/plugins/org.jboss.tools.seam.ui/plugin.xml
trunk/seam/plugins/org.jboss.tools.seam.ui/src/org/jboss/tools/seam/ui/views/RootContentProvider.java
trunk/seam/plugins/org.jboss.tools.seam.ui/src/org/jboss/tools/seam/ui/views/SeamLabelProvider.java
Log:
EXIN-218 Seam Components content added to Project Explorer view - it adds "Seam
Components" node to seam projects.
Modified: trunk/seam/plugins/org.jboss.tools.seam.ui/plugin.xml
===================================================================
--- trunk/seam/plugins/org.jboss.tools.seam.ui/plugin.xml 2007-07-19 14:03:56 UTC (rev
2524)
+++ trunk/seam/plugins/org.jboss.tools.seam.ui/plugin.xml 2007-07-19 14:46:22 UTC (rev
2525)
@@ -127,10 +127,8 @@
id="org.jboss.tools.seam.ui.views.rootContent">
<triggerPoints>
<or>
- <instanceof
- value="org.eclipse.core.resources.IWorkspaceRoot" />
- <instanceof
- value="org.jboss.tools.seam.core.ISeamElement" />
+ <instanceof value="org.eclipse.core.resources.IWorkspaceRoot" />
+ <instanceof value="org.jboss.tools.seam.core.ISeamElement" />
</or>
</triggerPoints>
<possibleChildren>
@@ -151,6 +149,46 @@
</navigatorContent>
</extension>
+ <extension point="org.eclipse.ui.navigator.viewer">
+ <viewerContentBinding
viewerId="org.eclipse.ui.navigator.ProjectExplorer">
+ <includes>
+ <contentExtension pattern="org.jboss.tools.seam.ui.views.projectContent"
/>
+ </includes>
+ </viewerContentBinding>
+ </extension>
+
+ <extension point="org.eclipse.ui.navigator.navigatorContent">
+ <navigatorContent
+ name="Seam Components"
+ priority="highest"
+ icon="icons/sample.gif"
+ activeByDefault="true"
+
contentProvider="org.jboss.tools.seam.ui.views.ProjectContentProvider"
+
labelProvider="org.jboss.tools.seam.ui.views.SeamProjectLabelProvider"
+ id="org.jboss.tools.seam.ui.views.projectContent">
+ <triggerPoints>
+ <or>
+ <instanceof value="org.eclipse.core.resources.IProject" />
+ <instanceof value="org.eclipse.jdt.core.IJavaProject" />
+ </or>
+ </triggerPoints>
+ <possibleChildren>
+ <or>
+ <instanceof value="org.jboss.tools.seam.core.ISeamElement" />
+ </or>
+ </possibleChildren>
+ <actionProvider
+ class="org.jboss.tools.seam.ui.views.actions.SeamActionProvider"
+ id="org.jboss.tools.seam.ui.views.actions.SeamActionProvider">
+ <enablement>
+ <or>
+ <instanceof value="org.jboss.tools.seam.core.ISeamElement"/>
+ </or>
+ </enablement>
+ </actionProvider>
+ </navigatorContent>
+ </extension>
+
<extension point="org.eclipse.core.runtime.adapters">
<factory
class="org.jboss.tools.seam.ui.views.properties.SeamElementAdapterFactory"
Added:
trunk/seam/plugins/org.jboss.tools.seam.ui/src/org/jboss/tools/seam/ui/views/AbstractSeamContentProvider.java
===================================================================
---
trunk/seam/plugins/org.jboss.tools.seam.ui/src/org/jboss/tools/seam/ui/views/AbstractSeamContentProvider.java
(rev 0)
+++
trunk/seam/plugins/org.jboss.tools.seam.ui/src/org/jboss/tools/seam/ui/views/AbstractSeamContentProvider.java 2007-07-19
14:46:22 UTC (rev 2525)
@@ -0,0 +1,171 @@
+/*******************************************************************************
+ * Copyright (c) 2007 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
+ *
+ * Contributor:
+ * Red Hat, Inc. - initial API and implementation
+ ******************************************************************************/
+package org.jboss.tools.seam.ui.views;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IResourceChangeEvent;
+import org.eclipse.core.resources.IResourceChangeListener;
+import org.eclipse.core.resources.IResourceDelta;
+import org.eclipse.core.resources.IResourceDeltaVisitor;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.StructuredViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.swt.widgets.Display;
+import org.jboss.tools.seam.core.IRole;
+import org.jboss.tools.seam.core.ISeamComponent;
+import org.jboss.tools.seam.core.ISeamComponentDeclaration;
+import org.jboss.tools.seam.core.ISeamElement;
+import org.jboss.tools.seam.core.ISeamJavaComponentDeclaration;
+import org.jboss.tools.seam.core.ISeamProject;
+import org.jboss.tools.seam.core.ISeamScope;
+import org.jboss.tools.seam.core.SeamCorePlugin;
+import org.jboss.tools.seam.core.event.ISeamProjectChangeListener;
+import org.jboss.tools.seam.core.event.SeamProjectChangeEvent;
+
+/**
+ * @author Viacheslav Kabanovich
+ */
+public abstract class AbstractSeamContentProvider implements ITreeContentProvider,
ISeamProjectChangeListener {
+ protected Viewer viewer;
+ IResourceChangeListener listener = new ResourceChangeListener();
+ Set<ISeamProject> processed = new HashSet<ISeamProject>();
+
+ public AbstractSeamContentProvider() {}
+
+ public Object[] getElements(Object inputElement) {
+ return getChildren(inputElement);
+ }
+
+ public boolean hasChildren(Object element) {
+ if(element instanceof ISeamComponentDeclaration) return false;
+ if(element instanceof IRole) return false;
+ return true;
+ }
+
+ public Object[] getChildren(Object parentElement) {
+ if(parentElement instanceof ISeamProject) {
+ return ((ISeamProject)parentElement).getScopes();
+ } else if(parentElement instanceof ISeamScope) {
+ ((ISeamScope)parentElement).getSeamProject().resolve();
+ return ((ISeamScope)parentElement).getComponents().toArray(new Object[0]);
+ } else if(parentElement instanceof ISeamComponent) {
+ List<Object> children = new ArrayList<Object>();
+ Set<ISeamComponentDeclaration> ds =
((ISeamComponent)parentElement).getAllDeclarations();
+ children.addAll(ds);
+ for (ISeamComponentDeclaration d : ds) {
+ if(d instanceof ISeamJavaComponentDeclaration) {
+ Set<IRole> rs = ((ISeamJavaComponentDeclaration)d).getRoles();
+ children.addAll(rs);
+ }
+ }
+ return children.toArray(new Object[0]);
+ }
+ return null;
+ }
+
+ public Object getParent(Object element) {
+ if(element instanceof IRole) {
+ ISeamElement p = ((IRole)element).getParent();
+ return p == null ? p : p.getParent();
+ } else if(element instanceof ISeamElement) {
+ return ((ISeamElement)element).getParent();
+ }
+ return null;
+ }
+
+ public void projectChanged(SeamProjectChangeEvent event) {
+ if(viewer == null || viewer.getControl() == null || viewer.getControl().isDisposed())
return;
+ Object o = event.getSource();
+ if(o instanceof ISeamElement) {
+ refresh(o);
+ } else {
+ System.out.println("event without source");
+ }
+ }
+
+ void refresh(final Object o) {
+ if(viewer == null || viewer.getControl() == null || viewer.getControl().isDisposed())
return;
+ if(!(viewer instanceof StructuredViewer)) return;
+ Display.getDefault().asyncExec(new Runnable() {
+ public void run() {
+ if(o == null) {
+ ((StructuredViewer)viewer).refresh();
+ } else {
+ ((StructuredViewer)viewer).refresh(o);
+ }
+ }
+ });
+
+ }
+
+ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+ this.viewer = viewer;
+ ResourcesPlugin.getWorkspace().removeResourceChangeListener(listener);
+ ResourcesPlugin.getWorkspace().addResourceChangeListener(listener);
+ }
+
+ public void dispose() {
+ ResourcesPlugin.getWorkspace().removeResourceChangeListener(listener);
+ viewer = null;
+ if(processed != null) {
+ for (ISeamProject p : processed) p.removeSeamProjectListener(this);
+ processed.clear();
+ }
+ }
+
+ class ResourceChangeListener implements IResourceChangeListener {
+ ResourceDeltaVisitor visitor = new ResourceDeltaVisitor();
+
+ public void resourceChanged(IResourceChangeEvent event) {
+ try {
+ if(event.getDelta()==null) refresh(null);
+ else event.getDelta().accept(visitor);
+ } catch (Exception e) {
+ SeamCorePlugin.getPluginLog().logError(e);
+ }
+ }
+
+ }
+
+ class ResourceDeltaVisitor implements IResourceDeltaVisitor {
+
+ public boolean visit(IResourceDelta delta) throws CoreException {
+ int kind = delta.getKind();
+ IResource r = delta.getResource();
+ if(kind == IResourceDelta.ADDED || kind == IResourceDelta.REMOVED) {
+ if(r instanceof IProject) {
+ refresh(null);
+ }
+ } else if(kind == IResourceDelta.CHANGED) {
+ IResourceDelta[] cs = delta.getAffectedChildren();
+ if(cs != null) for (int i = 0; i < cs.length; i++) {
+ IResource c = cs[i].getResource();
+ if(c instanceof IFile && c.getName().endsWith(".project")) {
+ refresh(null);
+ }
+ }
+ }
+ if(r instanceof IProject) return false;
+ return true;
+ }
+
+ }
+
+}
Added:
trunk/seam/plugins/org.jboss.tools.seam.ui/src/org/jboss/tools/seam/ui/views/ProjectContentProvider.java
===================================================================
---
trunk/seam/plugins/org.jboss.tools.seam.ui/src/org/jboss/tools/seam/ui/views/ProjectContentProvider.java
(rev 0)
+++
trunk/seam/plugins/org.jboss.tools.seam.ui/src/org/jboss/tools/seam/ui/views/ProjectContentProvider.java 2007-07-19
14:46:22 UTC (rev 2525)
@@ -0,0 +1,48 @@
+/*******************************************************************************
+ * Copyright (c) 2007 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
+ *
+ * Contributor:
+ * Red Hat, Inc. - initial API and implementation
+ ******************************************************************************/
+package org.jboss.tools.seam.ui.views;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.jdt.core.IJavaProject;
+import org.jboss.tools.seam.core.ISeamProject;
+import org.jboss.tools.seam.core.SeamCorePlugin;
+
+/**
+ * @author Viacheslav Kabanovich
+ */
+public class ProjectContentProvider extends AbstractSeamContentProvider {
+
+ public Object[] getChildren(Object parentElement) {
+ if(parentElement instanceof IJavaProject) {
+ parentElement = ((IJavaProject)parentElement).getProject();
+ }
+ if(parentElement instanceof IProject) {
+ ISeamProject p = SeamCorePlugin.getSeamProject((IProject)parentElement, false);
+ if (p == null) return null;
+ if(!processed.contains(p)) {
+ processed.add(p);
+ p.addSeamProjectListener(this);
+ }
+ return new Object[]{p};
+ } else {
+ return super.getChildren(parentElement);
+ }
+ }
+
+ public Object getParent(Object element) {
+ if(element instanceof ISeamProject) {
+ return ((ISeamProject)element).getProject();
+ } else {
+ return super.getParent(element);
+ }
+ }
+
+}
Modified:
trunk/seam/plugins/org.jboss.tools.seam.ui/src/org/jboss/tools/seam/ui/views/RootContentProvider.java
===================================================================
---
trunk/seam/plugins/org.jboss.tools.seam.ui/src/org/jboss/tools/seam/ui/views/RootContentProvider.java 2007-07-19
14:03:56 UTC (rev 2524)
+++
trunk/seam/plugins/org.jboss.tools.seam.ui/src/org/jboss/tools/seam/ui/views/RootContentProvider.java 2007-07-19
14:46:22 UTC (rev 2525)
@@ -1,44 +1,33 @@
+/*******************************************************************************
+ * Copyright (c) 2007 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
+ *
+ * Contributor:
+ * Red Hat, Inc. - initial API and implementation
+ ******************************************************************************/
package org.jboss.tools.seam.ui.views;
import java.util.ArrayList;
-import java.util.HashSet;
import java.util.List;
-import java.util.Set;
-import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.resources.IResourceChangeEvent;
-import org.eclipse.core.resources.IResourceChangeListener;
-import org.eclipse.core.resources.IResourceDelta;
-import org.eclipse.core.resources.IResourceDeltaVisitor;
import org.eclipse.core.resources.IWorkspaceRoot;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.jface.viewers.ITreeContentProvider;
-import org.eclipse.jface.viewers.StructuredViewer;
import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.swt.widgets.Display;
-import org.jboss.tools.seam.core.IRole;
-import org.jboss.tools.seam.core.ISeamComponent;
-import org.jboss.tools.seam.core.ISeamComponentDeclaration;
-import org.jboss.tools.seam.core.ISeamElement;
-import org.jboss.tools.seam.core.ISeamJavaComponentDeclaration;
import org.jboss.tools.seam.core.ISeamProject;
-import org.jboss.tools.seam.core.ISeamScope;
import org.jboss.tools.seam.core.SeamCorePlugin;
-import org.jboss.tools.seam.core.event.ISeamProjectChangeListener;
-import org.jboss.tools.seam.core.event.SeamProjectChangeEvent;
-public class RootContentProvider implements ITreeContentProvider,
ISeamProjectChangeListener {
- protected Viewer viewer;
+/**
+ * @author Viacheslav Kabanovich
+ */
+public class RootContentProvider extends AbstractSeamContentProvider {
IWorkspaceRoot root;
- Set<ISeamProject> processed = new HashSet<ISeamProject>();
+ public RootContentProvider() {}
- IResourceChangeListener listener = new ResourceChangeListener();
-
public Object[] getChildren(Object parentElement) {
if(parentElement instanceof IWorkspaceRoot) {
IWorkspaceRoot root = (IWorkspaceRoot)parentElement;
@@ -56,140 +45,34 @@
}
}
return children.toArray(new ISeamProject[0]);
- } else if(parentElement instanceof ISeamProject) {
- return ((ISeamProject)parentElement).getScopes();
- } else if(parentElement instanceof ISeamScope) {
- ((ISeamScope)parentElement).getSeamProject().resolve();
- return ((ISeamScope)parentElement).getComponents().toArray(new Object[0]);
- } else if(parentElement instanceof ISeamComponent) {
- List<Object> children = new ArrayList<Object>();
- Set<ISeamComponentDeclaration> ds =
((ISeamComponent)parentElement).getAllDeclarations();
- children.addAll(ds);
- for (ISeamComponentDeclaration d : ds) {
- if(d instanceof ISeamJavaComponentDeclaration) {
- Set<IRole> rs = ((ISeamJavaComponentDeclaration)d).getRoles();
- children.addAll(rs);
- }
- }
- return children.toArray(new Object[0]);
+ } else {
+ return super.getChildren(parentElement);
}
- return null;
}
public Object getParent(Object element) {
if(element instanceof ISeamProject) {
return root;
- } else if(element instanceof IRole) {
- ISeamElement p = ((IRole)element).getParent();
- return p == null ? p : p.getParent();
- } else if(element instanceof ISeamElement) {
- return ((ISeamElement)element).getParent();
+ } else {
+ return super.getParent(element);
}
- return null;
}
- public boolean hasChildren(Object element) {
- if(element instanceof ISeamComponentDeclaration) return false;
- if(element instanceof IRole) return false;
- return true;
- }
-
- public Object[] getElements(Object inputElement) {
- return getChildren(inputElement);
- }
-
- public void dispose() {
- if(root != null) {
- ResourcesPlugin.getWorkspace().removeResourceChangeListener(listener);
- }
- root = null;
- viewer = null;
- if(processed != null) {
- for (ISeamProject p : processed) p.removeSeamProjectListener(this);
- processed.clear();
- }
- }
-
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
- this.viewer = viewer;
+ super.inputChanged(viewer, oldInput, newInput);
if(newInput instanceof IWorkspaceRoot || newInput == null) {
root = (IWorkspaceRoot)newInput;
- ResourcesPlugin.getWorkspace().addResourceChangeListener(listener);
}
}
-
- public void projectChanged(SeamProjectChangeEvent event) {
- if(viewer == null || viewer.getControl() == null || viewer.getControl().isDisposed())
return;
- Object o = event.getSource();
- if(o instanceof ISeamElement) {
- refresh(o);
- } else {
- System.out.println("event without source");
- }
+
+ public void dispose() {
+ super.dispose();
+ root = null;
}
- void refresh(final Object o) {
- if(viewer == null || viewer.getControl() == null || viewer.getControl().isDisposed())
return;
- if(!(viewer instanceof StructuredViewer)) return;
- Display.getDefault().asyncExec(new Runnable() {
- public void run() {
- if(o == null) {
- ((StructuredViewer)viewer).refresh();
- } else {
- ((StructuredViewer)viewer).refresh(o);
- }
- }
- });
-
- }
-
boolean isGoodProject(IProject project) {
- if(project == null || !project.exists() || !project.isOpen()) return false;
-// try {
-// if(!project.hasNature("org.jboss.tools.jsf.jsfnature")) return false;
-// } catch (CoreException e) {
-// //ignore - all checks are done above
-// return false;
-// }
+ if(project == null || !project.exists() || !project.isOpen()) return false;
return true;
}
- class ResourceChangeListener implements IResourceChangeListener {
- ResourceDeltaVisitor visitor = new ResourceDeltaVisitor();
-
- public void resourceChanged(IResourceChangeEvent event) {
- try {
- if(event.getDelta()==null) refresh(null);
- else event.getDelta().accept(visitor);
- } catch (Exception e) {
- SeamCorePlugin.getPluginLog().logError(e);
- }
- }
-
- }
-
- class ResourceDeltaVisitor implements IResourceDeltaVisitor {
-
- public boolean visit(IResourceDelta delta) throws CoreException {
- int kind = delta.getKind();
- IResource r = delta.getResource();
- if(kind == IResourceDelta.ADDED || kind == IResourceDelta.REMOVED) {
- if(r instanceof IProject) {
- refresh(null);
- }
- } else if(kind == IResourceDelta.CHANGED) {
- IResourceDelta[] cs = delta.getAffectedChildren();
- if(cs != null) for (int i = 0; i < cs.length; i++) {
- IResource c = cs[i].getResource();
- if(c instanceof IFile && c.getName().endsWith(".project")) {
- refresh(null);
- }
- }
- }
- if(r instanceof IProject) return false;
- return true;
- }
-
- }
-
}
Modified:
trunk/seam/plugins/org.jboss.tools.seam.ui/src/org/jboss/tools/seam/ui/views/SeamLabelProvider.java
===================================================================
---
trunk/seam/plugins/org.jboss.tools.seam.ui/src/org/jboss/tools/seam/ui/views/SeamLabelProvider.java 2007-07-19
14:03:56 UTC (rev 2524)
+++
trunk/seam/plugins/org.jboss.tools.seam.ui/src/org/jboss/tools/seam/ui/views/SeamLabelProvider.java 2007-07-19
14:46:22 UTC (rev 2525)
@@ -1,3 +1,13 @@
+/*******************************************************************************
+ * Copyright (c) 2007 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
+ *
+ * Contributor:
+ * Red Hat, Inc. - initial API and implementation
+ ******************************************************************************/
package org.jboss.tools.seam.ui.views;
import org.eclipse.core.resources.IProjectNature;
@@ -24,6 +34,9 @@
import org.jboss.tools.seam.internal.core.SeamComponentDeclaration;
import org.jboss.tools.seam.internal.core.SeamProject;
+/**
+ * @author Viacheslav Kabanovich
+ */
public class SeamLabelProvider extends LabelProvider {
JavaElementImageProvider jip = new JavaElementImageProvider();
Added:
trunk/seam/plugins/org.jboss.tools.seam.ui/src/org/jboss/tools/seam/ui/views/SeamProjectLabelProvider.java
===================================================================
---
trunk/seam/plugins/org.jboss.tools.seam.ui/src/org/jboss/tools/seam/ui/views/SeamProjectLabelProvider.java
(rev 0)
+++
trunk/seam/plugins/org.jboss.tools.seam.ui/src/org/jboss/tools/seam/ui/views/SeamProjectLabelProvider.java 2007-07-19
14:46:22 UTC (rev 2525)
@@ -0,0 +1,29 @@
+/*******************************************************************************
+ * Copyright (c) 2007 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
+ *
+ * Contributor:
+ * Red Hat, Inc. - initial API and implementation
+ ******************************************************************************/
+package org.jboss.tools.seam.ui.views;
+
+import org.jboss.tools.seam.core.ISeamProject;
+
+/**
+ * @author Viacheslav Kabanovich
+ */
+public class SeamProjectLabelProvider extends SeamLabelProvider {
+
+ public SeamProjectLabelProvider() {}
+
+ public String getText(Object element) {
+ if(element instanceof ISeamProject) {
+ return "Seam Components";
+ }
+ return super.getText(element);
+ }
+
+}