Author: vrubezhny
Date: 2011-08-10 13:11:56 -0400 (Wed, 10 Aug 2011)
New Revision: 33775
Added:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/event/
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/event/CDIProjectChangeEvent.java
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/event/ICDIProjectChangeListener.java
trunk/cdi/plugins/org.jboss.tools.cdi.ui/icons/open_cdi_named_bean.gif
trunk/cdi/plugins/org.jboss.tools.cdi.ui/src/org/jboss/tools/cdi/ui/handlers/
trunk/cdi/plugins/org.jboss.tools.cdi.ui/src/org/jboss/tools/cdi/ui/handlers/OpenCDINamedBeanHandler.java
trunk/cdi/plugins/org.jboss.tools.cdi.ui/src/org/jboss/tools/cdi/ui/wizard/CDINamedBeanReferencedFilter.java
trunk/cdi/plugins/org.jboss.tools.cdi.ui/src/org/jboss/tools/cdi/ui/wizard/OpenCDINamedBeanDialog.java
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.core/META-INF/MANIFEST.MF
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/CDICorePlugin.java
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/CDIProject.java
trunk/cdi/plugins/org.jboss.tools.cdi.ui/plugin.xml
trunk/cdi/plugins/org.jboss.tools.cdi.ui/src/org/jboss/tools/cdi/ui/CDIUIMessages.java
trunk/cdi/plugins/org.jboss.tools.cdi.ui/src/org/jboss/tools/cdi/ui/CDIUIMessages.properties
trunk/cdi/plugins/org.jboss.tools.cdi.ui/src/org/jboss/tools/cdi/ui/CDIUIPlugin.java
Log:
JBIDE-7892
Search for @Named beans.
Open CDI Named Bean Dialog is added
Modified: trunk/cdi/plugins/org.jboss.tools.cdi.core/META-INF/MANIFEST.MF
===================================================================
--- trunk/cdi/plugins/org.jboss.tools.cdi.core/META-INF/MANIFEST.MF 2011-08-10 17:10:11
UTC (rev 33774)
+++ trunk/cdi/plugins/org.jboss.tools.cdi.core/META-INF/MANIFEST.MF 2011-08-10 17:11:56
UTC (rev 33775)
@@ -34,6 +34,7 @@
org.jboss.tools.cdi.core.preferences,
org.jboss.tools.cdi.internal.core.ca,
org.jboss.tools.cdi.internal.core.el,
+ org.jboss.tools.cdi.internal.core.event,
org.jboss.tools.cdi.internal.core.impl,
org.jboss.tools.cdi.internal.core.impl.definition,
org.jboss.tools.cdi.internal.core.project.facet,
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/CDICorePlugin.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/CDICorePlugin.java 2011-08-10
17:10:11 UTC (rev 33774)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/CDICorePlugin.java 2011-08-10
17:11:56 UTC (rev 33775)
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2009 Red Hat, Inc.
+ * Copyright (c) 2009-2011 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,
@@ -11,9 +11,14 @@
package org.jboss.tools.cdi.core;
+import java.util.ArrayList;
+import java.util.List;
+
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.jface.resource.ImageDescriptor;
+import org.jboss.tools.cdi.internal.core.event.CDIProjectChangeEvent;
+import org.jboss.tools.cdi.internal.core.event.ICDIProjectChangeListener;
import org.jboss.tools.common.log.BaseUIPlugin;
import org.osgi.framework.BundleContext;
@@ -105,4 +110,43 @@
}
return n;
}
+
+ private static List<ICDIProjectChangeListener> listeners = new
ArrayList<ICDIProjectChangeListener>();
+
+ /**
+ * Adds CDI Project listener
+ */
+ public static void addCDIProjectListener(ICDIProjectChangeListener listener) {
+ synchronized(listeners) {
+ if(listeners.contains(listener)) return;
+ listeners.add(listener);
+ }
+ }
+
+ /**
+ * Removes CDI Project listener
+ */
+ public static void removeCDIProjectListener(ICDIProjectChangeListener listener) {
+ synchronized(listeners) {
+ listeners.remove(listener);
+ }
+ }
+
+ /**
+ * Fires CDI Project change event
+ *
+ * @param event
+ */
+ public static void fire(CDIProjectChangeEvent event) {
+ ICDIProjectChangeListener[] ls = null;
+ synchronized(listeners) {
+ ls = listeners.toArray(new ICDIProjectChangeListener[0]);
+ }
+ if(ls != null) {
+ for (int i = 0; i < ls.length; i++) {
+ ls[i].projectChanged(event);
+ }
+ }
+ }
+
}
\ No newline at end of file
Added:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/event/CDIProjectChangeEvent.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/event/CDIProjectChangeEvent.java
(rev 0)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/event/CDIProjectChangeEvent.java 2011-08-10
17:11:56 UTC (rev 33775)
@@ -0,0 +1,41 @@
+/*******************************************************************************
+ * Copyright (c) 2011 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:
+ * Red Hat, Inc. - initial API and implementation
+ ******************************************************************************/
+package org.jboss.tools.cdi.internal.core.event;
+
+import java.util.EventObject;
+
+import org.jboss.tools.cdi.core.ICDIProject;
+
+/**
+ * CDI Project change event object
+ *
+ * @author Victor V. Rubezhny
+ */
+public class CDIProjectChangeEvent extends EventObject {
+ private static final long serialVersionUID = 1L;
+ /**
+ * Modified CDI project.
+ */
+ ICDIProject project;
+
+ public CDIProjectChangeEvent(ICDIProject project) {
+ super(project);
+ this.project = project;
+ }
+
+ /**
+ * Returns modified CDI project
+ * @return
+ */
+ public ICDIProject getProject() {
+ return project;
+ }
+}
Property changes on:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/event/CDIProjectChangeEvent.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Added:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/event/ICDIProjectChangeListener.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/event/ICDIProjectChangeListener.java
(rev 0)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/event/ICDIProjectChangeListener.java 2011-08-10
17:11:56 UTC (rev 33775)
@@ -0,0 +1,25 @@
+/*******************************************************************************
+ * Copyright (c) 2011 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:
+ * Red Hat, Inc. - initial API and implementation
+ ******************************************************************************/
+package org.jboss.tools.cdi.internal.core.event;
+
+/**
+ * CDI Project Listener
+ *
+ * @author Victor V. Rubezhny
+ */
+public interface ICDIProjectChangeListener {
+ /**
+ * Called when CDI project is changed.
+ * @param event
+ */
+ public void projectChanged(CDIProjectChangeEvent event);
+
+}
Property changes on:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/event/ICDIProjectChangeListener.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/CDIProject.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/CDIProject.java 2011-08-10
17:10:11 UTC (rev 33774)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/CDIProject.java 2011-08-10
17:11:56 UTC (rev 33775)
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2007 Red Hat, Inc.
+ * Copyright (c) 2007-2011 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,
@@ -59,6 +59,7 @@
import org.jboss.tools.cdi.core.IStereotype;
import org.jboss.tools.cdi.core.extension.feature.IAmbiguousBeanResolverFeature;
import org.jboss.tools.cdi.core.extension.feature.IBuildParticipantFeature;
+import org.jboss.tools.cdi.internal.core.event.CDIProjectChangeEvent;
import org.jboss.tools.cdi.internal.core.impl.definition.AnnotationDefinition;
import org.jboss.tools.cdi.internal.core.impl.definition.BeansXMLDefinition;
import org.jboss.tools.cdi.internal.core.impl.definition.DefinitionContext;
@@ -1058,7 +1059,8 @@
if(p.getProject() != null && p.getProject().isAccessible() &&
p.getDelegate() != null) {
p.getDelegate().update();
}
- }
+ }
+ CDICorePlugin.fire(new CDIProjectChangeEvent(this));
}
void rebuildAnnotationTypes() {
Added: trunk/cdi/plugins/org.jboss.tools.cdi.ui/icons/open_cdi_named_bean.gif
===================================================================
(Binary files differ)
Property changes on:
trunk/cdi/plugins/org.jboss.tools.cdi.ui/icons/open_cdi_named_bean.gif
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Modified: trunk/cdi/plugins/org.jboss.tools.cdi.ui/plugin.xml
===================================================================
--- trunk/cdi/plugins/org.jboss.tools.cdi.ui/plugin.xml 2011-08-10 17:10:11 UTC (rev
33774)
+++ trunk/cdi/plugins/org.jboss.tools.cdi.ui/plugin.xml 2011-08-10 17:11:56 UTC (rev
33775)
@@ -118,8 +118,62 @@
class="org.jboss.tools.cdi.ui.refactoring.CDIRefactorContributionFactory"
locationURI="popup:org.eclipse.ui.popup.any?after=save">
</menuContribution>
+
+ <menuContribution
+ locationURI="menu:navigate?after=open.ext2">
+ <command
+ commandId="org.jboss.tools.cdi.ui.open.namedBean"
+ id="openNamedBean"
+ mnemonic="Z"
+ icon="$nl$/icons/open_cdi_named_bean.gif"
+ label="Open CDI Named Bean"
+ tooltip="Open CDI Named Bean" >
+ </command>
+ </menuContribution>
+ <menuContribution
+
locationURI="toolbar:org.eclipse.ui.main.toolbar?after=additions">
+ <toolbar
+ id="org.eclipse.search.searchActionSet">
+ <command
+ commandId="org.jboss.tools.cdi.ui.open.namedBean"
+ id="openNamedBean"
+ mnemonic="Z"
+ icon="$nl$/icons/open_cdi_named_bean.gif"
+ label="Open CDI Named Bean"
+ tooltip="Open CDI Named Bean" >
+ </command>
+ </toolbar>
+ </menuContribution>
+
</extension>
-
+
+ <extension
+ point="org.eclipse.ui.handlers">
+ <handler
+ class="org.jboss.tools.cdi.ui.handlers.OpenCDINamedBeanHandler"
+ commandId="org.jboss.tools.cdi.ui.open.namedBean">
+ </handler>
+ </extension>
+
+ <extension
+ point="org.eclipse.ui.commands">
+ <command
+ categoryId="org.eclipse.ui.category.navigate"
+ description="Open CDI Named Bean"
+ id="org.jboss.tools.cdi.ui.open.namedBean"
+ name="Open CDI Named Bean">
+ </command>
+ </extension>
+
+ <extension
+ point="org.eclipse.ui.bindings">
+ <key
+ commandId="org.jboss.tools.cdi.ui.open.namedBean"
+ schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
+ sequence="M1+M3+Z">
+ </key>
+ </extension>
+
<extension point="org.eclipse.ui.newWizards">
<category
name="CDI (Context and Dependency Injection)"
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.ui/src/org/jboss/tools/cdi/ui/CDIUIMessages.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.ui/src/org/jboss/tools/cdi/ui/CDIUIMessages.java 2011-08-10
17:10:11 UTC (rev 33774)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.ui/src/org/jboss/tools/cdi/ui/CDIUIMessages.java 2011-08-10
17:11:56 UTC (rev 33775)
@@ -1,6 +1,6 @@
/*******************************************************************************
- * Copyright (c) 2010 Red Hat, Inc.
+ * Copyright (c) 2010-2011 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,
@@ -131,4 +131,11 @@
public static String CDI_GENERATE_BEANS_XML;
public static String CDI_INSTALL_WIZARD_PAGE_FACET;
public static String CDI_INSTALL_WIZARD_PAGE_CONFIGURE;
+
+ public static String OPEN_CDI_NAMED_BEAN_DIALOG_LOADING;
+ public static String OPEN_CDI_NAMED_BEAN_DIALOG_NAME;
+ public static String OPEN_CDI_NAMED_BEAN_DIALOG_WAIT;
+
+ public static String OPEN_CDI_NAMED_BEAN_ACTION_NAME;
+ public static String OPEN_CDI_NAMED_BEAN_ACTION_MESSAGE;
}
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.ui/src/org/jboss/tools/cdi/ui/CDIUIMessages.properties
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.ui/src/org/jboss/tools/cdi/ui/CDIUIMessages.properties 2011-08-10
17:10:11 UTC (rev 33774)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.ui/src/org/jboss/tools/cdi/ui/CDIUIMessages.properties 2011-08-10
17:11:56 UTC (rev 33775)
@@ -120,3 +120,12 @@
NEW_BEANS_XML_WIZARD_TITLE=New beans.xml File
NEW_BEANS_XML_WIZARD_PAGE_NAME=beans.xml File
NEW_BEANS_XML_WIZARD_DESCRIPTION=Create a new beans.xml File
+
+OPEN_CDI_NAMED_BEAN_DIALOG_LOADING=CDI Project beans loading
+OPEN_CDI_NAMED_BEAN_DIALOG_NAME=OpenCDINamedBeanDialog
+OPEN_CDI_NAMED_BEAN_DIALOG_WAIT=Wait for Build...
+
+OPEN_CDI_NAMED_BEAN_ACTION_NAME=Open CDI Named Bean
+OPEN_CDI_NAMED_BEAN_ACTION_MESSAGE=Enter CDI Named Bean name prefix or pattern (? = any
character, * = any string):
+
+
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.ui/src/org/jboss/tools/cdi/ui/CDIUIPlugin.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.ui/src/org/jboss/tools/cdi/ui/CDIUIPlugin.java 2011-08-10
17:10:11 UTC (rev 33774)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.ui/src/org/jboss/tools/cdi/ui/CDIUIPlugin.java 2011-08-10
17:11:56 UTC (rev 33775)
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2009 Red Hat, Inc.
+ * Copyright (c) 2009-2011 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,
@@ -10,6 +10,10 @@
******************************************************************************/
package org.jboss.tools.cdi.ui;
+import org.jboss.tools.cdi.core.CDICorePlugin;
+import org.jboss.tools.cdi.internal.core.event.CDIProjectChangeEvent;
+import org.jboss.tools.cdi.internal.core.event.ICDIProjectChangeListener;
+import org.jboss.tools.cdi.ui.wizard.OpenCDINamedBeanDialog;
import org.jboss.tools.common.log.BaseUIPlugin;
import org.osgi.framework.BundleContext;
@@ -37,6 +41,12 @@
public void start(BundleContext context) throws Exception {
super.start(context);
plugin = this;
+ CDICorePlugin.addCDIProjectListener(new ICDIProjectChangeListener(){
+ public void projectChanged(CDIProjectChangeEvent event) {
+ OpenCDINamedBeanDialog.validateHistory(event.getProject());
+ }
+ });
+
}
/*
Added:
trunk/cdi/plugins/org.jboss.tools.cdi.ui/src/org/jboss/tools/cdi/ui/handlers/OpenCDINamedBeanHandler.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.ui/src/org/jboss/tools/cdi/ui/handlers/OpenCDINamedBeanHandler.java
(rev 0)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.ui/src/org/jboss/tools/cdi/ui/handlers/OpenCDINamedBeanHandler.java 2011-08-10
17:11:56 UTC (rev 33775)
@@ -0,0 +1,109 @@
+/*******************************************************************************
+ * Copyright (c) 2011 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:
+ * Red Hat, Inc. - initial API and implementation
+ ******************************************************************************/
+package org.jboss.tools.cdi.ui.handlers;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.jdt.internal.ui.javaeditor.EditorUtility;
+import org.eclipse.jdt.internal.ui.javaeditor.JavaEditor;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.text.Region;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.dialogs.SelectionDialog;
+import org.eclipse.ui.ide.IDE;
+import org.jboss.tools.cdi.core.CDICorePlugin;
+import org.jboss.tools.cdi.core.IBean;
+import org.jboss.tools.cdi.internal.core.el.CdiElResolver;
+import org.jboss.tools.cdi.ui.CDIUIMessages;
+import org.jboss.tools.cdi.ui.wizard.OpenCDINamedBeanDialog;
+import org.jboss.tools.cdi.ui.wizard.OpenCDINamedBeanDialog.CDINamedBeanWrapper;
+import org.jboss.tools.common.el.core.resolver.ELContextImpl;
+import org.jboss.tools.common.el.core.resolver.ELResolution;
+import org.jboss.tools.common.el.core.resolver.ELSegment;
+import org.jboss.tools.common.el.core.resolver.IOpenableReference;
+import org.jboss.tools.common.text.ITextSourceReference;
+import org.jboss.tools.common.text.ext.util.StructuredSelectionHelper;
+
+/**
+ * Open CDI Named Bean Dialog Handler
+ *
+ * @author Victor V. Rubezhny
+ */
+@SuppressWarnings("restriction")
+public class OpenCDINamedBeanHandler extends AbstractHandler {
+
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+ Shell parent= PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell();
+ SelectionDialog dialog;
+
+ dialog= new OpenCDINamedBeanDialog(parent);
+
+ dialog.setTitle(CDIUIMessages.OPEN_CDI_NAMED_BEAN_ACTION_NAME);
+ dialog.setMessage(CDIUIMessages.OPEN_CDI_NAMED_BEAN_ACTION_MESSAGE);
+
+ int result= dialog.open();
+ if (result != IDialogConstants.OK_ID)
+ return null;
+
+ Object[] beans= dialog.getResult();
+ if (beans != null && beans.length > 0) {
+ CDINamedBeanWrapper wrapper= null;
+ for (int i= 0; i < beans.length; i++) {
+ wrapper= (CDINamedBeanWrapper) beans[i];
+ IBean bean = wrapper.getBean();
+ IProject project = bean.getCDIProject().getNature().getProject();
+ ELContextImpl elContext = new ELContextImpl();
+ elContext.setResource(project.getFile(".project"));
+
+ CdiElResolver resolver = new CdiElResolver();
+ ELResolution resolution = resolver.resolve(elContext,
resolver.parseOperand("${" + bean.getName() + "}"), 0);
+ if (resolution.isResolved() && resolution.getNumberOfResolvedSegments() == 1)
{
+ ELSegment segment = resolution.getLastSegment();
+ if (segment != null && segment.isResolved()) {
+ IOpenableReference[] openables = segment.getOpenable();
+
+ if(openables.length == 0 || !openables[0].open()) {
+ ITextSourceReference ref = segment.getSourceReference();
+ if (ref.getResource() != null && ref.getResource() instanceof IFile) {
+ IEditorPart part = null;
+ try {
+ IWorkbenchPage page = PlatformUI.getWorkbench()
+ .getActiveWorkbenchWindow().getActivePage();
+ part = IDE.openEditor(page, (IFile)ref.getResource(), true);
+ } catch (PartInitException pie) {
+ CDICorePlugin.getDefault().logError(pie);
+ }
+ if (part != null && ref.getStartPosition() >=0 &&
ref.getLength() > 0) {
+ if (part instanceof JavaEditor) {
+ EditorUtility.revealInEditor(part,
+ ref.getStartPosition(), ref.getLength());
+ } else {
+ StructuredSelectionHelper.setSelectionAndRevealInActiveEditor(
+ new Region(ref.getStartPosition(), ref.getLength()));
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ return null;
+ }
+}
Property changes on:
trunk/cdi/plugins/org.jboss.tools.cdi.ui/src/org/jboss/tools/cdi/ui/handlers/OpenCDINamedBeanHandler.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Added:
trunk/cdi/plugins/org.jboss.tools.cdi.ui/src/org/jboss/tools/cdi/ui/wizard/CDINamedBeanReferencedFilter.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.ui/src/org/jboss/tools/cdi/ui/wizard/CDINamedBeanReferencedFilter.java
(rev 0)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.ui/src/org/jboss/tools/cdi/ui/wizard/CDINamedBeanReferencedFilter.java 2011-08-10
17:11:56 UTC (rev 33775)
@@ -0,0 +1,58 @@
+/*******************************************************************************
+ * Copyright (c) 2011 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:
+ * Red Hat, Inc. - initial API and implementation
+ ******************************************************************************/
+package org.jboss.tools.cdi.ui.wizard;
+
+import org.eclipse.core.resources.IResource;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerFilter;
+import org.jboss.tools.cdi.core.CDICorePlugin;
+import org.jboss.tools.cdi.core.IBean;
+import org.jboss.tools.cdi.core.ICDIProject;
+import org.jboss.tools.common.text.ITextSourceReference;
+
+/**
+ * CDI Named Bean Filter
+ *
+ * @author Victor V. Rubezhny
+ */
+public class CDINamedBeanReferencedFilter extends ViewerFilter {
+
+ @Override
+ public boolean select(Viewer viewer, Object parentElement, Object element) {
+ if(element instanceof IBean) {
+ IBean bean = (IBean)element;
+ return isBeanDeclaredInThisProject(bean);
+ }
+
+ return true;
+ }
+
+ public static boolean isBeanDeclaredInThisProject(IBean bean) {
+ ICDIProject beanProject = bean.getCDIProject();
+ IResource beanResource = null;
+
+ //1. Get @Named declared directly, not in stereotype.
+ ITextSourceReference nameLocation = bean.getNameLocation(false);
+ //2. Get stereotype declaration declaring @Named, if @Named is not declared directly.
+ ITextSourceReference stereotypeLocation = nameLocation != null ? null :
bean.getNameLocation(true);
+ if (nameLocation != null) {
+ beanResource = nameLocation.getResource();
+ } else if (stereotypeLocation != null) {
+ beanResource = stereotypeLocation.getResource();
+ }
+ if (beanResource == null)
+ return false;
+
+ ICDIProject cdiProject = CDICorePlugin.getCDIProject(beanResource.getProject(),
+ true);
+ return cdiProject == beanProject;
+ }
+}
Property changes on:
trunk/cdi/plugins/org.jboss.tools.cdi.ui/src/org/jboss/tools/cdi/ui/wizard/CDINamedBeanReferencedFilter.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Added:
trunk/cdi/plugins/org.jboss.tools.cdi.ui/src/org/jboss/tools/cdi/ui/wizard/OpenCDINamedBeanDialog.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.ui/src/org/jboss/tools/cdi/ui/wizard/OpenCDINamedBeanDialog.java
(rev 0)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.ui/src/org/jboss/tools/cdi/ui/wizard/OpenCDINamedBeanDialog.java 2011-08-10
17:11:56 UTC (rev 33775)
@@ -0,0 +1,410 @@
+/*******************************************************************************
+ * Copyright (c) 2011 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:
+ * Red Hat, Inc. - initial API and implementation
+ ******************************************************************************/
+package org.jboss.tools.cdi.ui.wizard;
+
+import java.io.File;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Set;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.jface.dialogs.DialogSettings;
+import org.eclipse.jface.dialogs.IDialogSettings;
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.ILabelProviderListener;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.IMemento;
+import org.eclipse.ui.WorkbenchException;
+import org.eclipse.ui.XMLMemento;
+import org.eclipse.ui.dialogs.FilteredItemsSelectionDialog;
+import org.jboss.tools.cdi.core.CDICorePlugin;
+import org.jboss.tools.cdi.core.IBean;
+import org.jboss.tools.cdi.core.ICDIProject;
+import org.jboss.tools.cdi.ui.CDIUIMessages;
+import org.jboss.tools.cdi.ui.CDIUIPlugin;
+import org.jboss.tools.cdi.ui.CDIUiImages;
+
+/**
+ * Open CDI Named Bean Dialog
+ *
+ * @author Victor V. Rubezhny
+ */
+public class OpenCDINamedBeanDialog extends FilteredItemsSelectionDialog {
+
+ private static final String FILE_NAME = "OpenCDINamedBeanHistory.xml";
//$NON-NLS-1$
+ private static final String ROOT_NODE = "historyRootNode"; //$NON-NLS-1$
+ private static final String INFO_NODE = "infoNode"; //$NON-NLS-1$
+ private static final String PROJECT_NAME = "ProjectName"; //$NON-NLS-1$
+ private static final String BEAN_NAME = "BeanName"; //$NON-NLS-1$
+ private static final String DELETED = "Deleted"; //$NON-NLS-1$
+ private static final String SEPARATOR = " - "; //$NON-NLS-1$
+ private static final String YES = "yes"; //$NON-NLS-1$
+ private static final String NO = "no"; //$NON-NLS-1$
+
+ public OpenCDINamedBeanDialog(Shell shell) {
+ super(shell);
+
+ setSelectionHistory(new CDINamedBeanSelectionHistory());
+
+ setListLabelProvider(new CDINamedBeanLabelProvider());
+ setDetailsLabelProvider(new CDINamedBeanLabelProvider());
+
+ XMLMemento memento = loadMemento();
+ if (memento != null)
+ getSelectionHistory().load(memento);
+ }
+
+ public void startSearch() {
+ applyFilter();
+ }
+
+ @Override
+ public void okPressed() {
+ // TODO Auto-generated method stub
+ super.okPressed();
+ }
+
+ @SuppressWarnings({ "rawtypes", "unchecked" })
+ public void stopSearchAndShowResults() {
+ refresh();
+ List list = getSelectedItems().toList();
+ Collections.sort(list,getItemsComparator());
+ setResult(list);
+ }
+
+ protected Control createExtendedContentArea(Composite parent) {
+ return null;
+ }
+
+ protected ItemsFilter createFilter() {
+ return new CDINamedBeanFilter();
+ }
+
+ protected void fillContentProvider(AbstractContentProvider contentProvider,
+ ItemsFilter itemsFilter, IProgressMonitor progressMonitor)
+ throws CoreException {
+
+ progressMonitor.subTask(CDIUIMessages.OPEN_CDI_NAMED_BEAN_DIALOG_WAIT);
+
+ try {
+ Job.getJobManager().join(ResourcesPlugin.FAMILY_AUTO_BUILD, null);
+ } catch (InterruptedException e) {
+ // do nothing
+ }
+
+ IProject[] projects = ResourcesPlugin.getWorkspace().getRoot()
+ .getProjects();
+
+ progressMonitor.beginTask(
+ CDIUIMessages.OPEN_CDI_NAMED_BEAN_DIALOG_LOADING,
+ projects.length);
+
+ for (int i = 0; i < projects.length; i++) {
+ IProject project = projects[i];
+ progressMonitor.subTask(project.getName());
+
+ ICDIProject cdiProject = CDICorePlugin.getCDIProject(project,
+ true);
+ if (cdiProject != null) {
+ Set<IBean> iter = cdiProject.getNamedBeans(false);
+ for (IBean bean: iter) {
+ if (CDINamedBeanReferencedFilter
+ .isBeanDeclaredInThisProject(bean))
+ contentProvider.add(new CDINamedBeanWrapper(bean
+ .getName(), project.getName(), bean),
+ itemsFilter);
+ }
+ }
+ progressMonitor.worked(1);
+ }
+ progressMonitor.done();
+ }
+
+ private static XMLMemento loadMemento() {
+ XMLMemento memento = null;
+ IPath stateLocation = CDIUIPlugin.getDefault().getStateLocation()
+ .append(FILE_NAME);
+ File file = new File(stateLocation.toOSString());
+ if (file.exists()) {
+ FileReader reader = null;
+ try {
+ reader = new FileReader(file);
+
+ memento = XMLMemento.createReadRoot(reader);
+ } catch (IOException ex) {
+ CDICorePlugin.getDefault().logError(ex);
+ } catch (WorkbenchException ex) {
+ CDICorePlugin.getDefault().logError(ex);
+ } finally {
+ try {
+ reader.close();
+ } catch (IOException ex) {
+ CDICorePlugin.getDefault().logError(ex);
+ }
+ }
+ }
+ return memento;
+ }
+
+ private static void saveMemento(XMLMemento xmlMemento) {
+ IPath stateLocation = CDIUIPlugin.getDefault().getStateLocation()
+ .append(FILE_NAME);
+ File file = new File(stateLocation.toOSString());
+ FileWriter writer = null;
+ try {
+ writer = new FileWriter(file);
+
+ xmlMemento.save(writer);
+ } catch (IOException ex) {
+ CDICorePlugin.getDefault().logError(ex);
+ } finally {
+ try {
+ writer.close();
+ } catch (IOException ex) {
+ CDICorePlugin.getDefault().logError(ex);
+ }
+ }
+ }
+
+ protected IDialogSettings getDialogSettings() {
+ return new DialogSettings(
+ CDIUIMessages.OPEN_CDI_NAMED_BEAN_DIALOG_NAME);
+ }
+
+ public String getElementName(Object item) {
+ if (item instanceof CDINamedBeanWrapper) {
+ CDINamedBeanWrapper beanWrapper = (CDINamedBeanWrapper) item;
+ return beanWrapper.getBeanName();
+ }
+ return null;
+ }
+
+ protected Comparator<CDINamedBeanWrapper> getItemsComparator() {
+ return new CDINamedBeanComparator();
+ }
+
+ protected IStatus validateItem(Object item) {
+ return new Status(getSelectedItems().size() >=
0?IStatus.OK:IStatus.ERROR,CDIUIPlugin.PLUGIN_ID,null);
+ }
+
+ public class CDINamedBeanComparator implements
+ Comparator<CDINamedBeanWrapper> {
+ public int compare(CDINamedBeanWrapper left, CDINamedBeanWrapper right) {
+ return left.getBeanName().compareTo(right.getBeanName());
+ }
+
+ }
+
+ public class CDINamedBeanFilter extends ItemsFilter {
+ public boolean isConsistentItem(Object item) {
+ return true;
+ }
+
+ public boolean matchItem(Object item) {
+ if (item instanceof CDINamedBeanWrapper) {
+ CDINamedBeanWrapper beanWrapper = (CDINamedBeanWrapper) item;
+
+ boolean result = patternMatcher.matches(beanWrapper
+ .getBeanName());
+ if (!result) {
+ String pattern = patternMatcher.getPattern();
+ if (pattern.indexOf(".") < 0) {
+ int lastIndex = beanWrapper.getBeanName()
+ .lastIndexOf(".");
+ if (lastIndex >= 0
+ && (lastIndex + 1) < beanWrapper
+ .getBeanName().length())
+ return patternMatcher.matches(beanWrapper
+ .getBeanName()
+ .substring(lastIndex + 1));
+ }
+ }
+ return result;
+ }
+ return false;
+ }
+ }
+
+ public class CDINamedBeanSelectionHistory extends SelectionHistory {
+
+ public CDINamedBeanSelectionHistory() {
+ super();
+ }
+
+ protected Object restoreItemFromMemento(IMemento memento) {
+ XMLMemento mem = (XMLMemento) memento;
+ String projectName = mem.getString(PROJECT_NAME);
+ if (projectName == null)
+ return null;
+ String beanName = mem.getString(BEAN_NAME);
+ if (beanName == null)
+ return null;
+ String beanDeleted = mem.getString(DELETED);
+ if (beanDeleted != null && YES.equals(beanDeleted))
+ return null;
+
+ return new CDINamedBeanWrapper(beanName, projectName);
+ }
+
+ @Override
+ protected void storeItemToMemento(Object item, IMemento memento) {
+ CDINamedBeanWrapper beanWrapper = (CDINamedBeanWrapper) item;
+ XMLMemento mem = (XMLMemento) memento;
+ mem.putString(PROJECT_NAME, beanWrapper.getProjectName());
+ mem.putString(BEAN_NAME, beanWrapper.getBeanName());
+ }
+
+ public void save(IMemento memento) {
+ super.save(memento);
+ if (!(memento instanceof XMLMemento))
+ return;
+ XMLMemento xmlMemento = (XMLMemento) memento;
+ saveMemento(xmlMemento);
+ }
+ }
+
+ public class CDINamedBeanLabelProvider implements ILabelProvider {
+
+ public Image getImage(Object element) {
+ return CDIUiImages.CDI_BEAN_IMAGE;
+ }
+
+ public String getText(Object element) {
+ if (element instanceof CDINamedBeanWrapper) {
+ CDINamedBeanWrapper beanWrapper = (CDINamedBeanWrapper) element;
+ return beanWrapper.getBeanName() + SEPARATOR
+ + beanWrapper.getProjectName();
+ }
+ return null;
+ }
+
+ public void addListener(ILabelProviderListener listener) {
+ }
+
+ public void dispose() {
+ }
+
+ public boolean isLabelProperty(Object element, String property) {
+ return false;
+ }
+
+ public void removeListener(ILabelProviderListener listener) {
+ }
+ }
+
+ public class CDINamedBeanWrapper {
+ private String beanName;
+ private String projectName;
+ private IBean bean;
+
+ public CDINamedBeanWrapper(String beanName, String projectName) {
+ this.beanName = beanName;
+ this.projectName = projectName;
+ }
+
+ public CDINamedBeanWrapper(String beanName, String projectName,
+ IBean bean) {
+ this(beanName, projectName);
+ this.bean = bean;
+ }
+
+ public String getBeanName() {
+ return beanName;
+ }
+
+ public String getProjectName() {
+ return projectName;
+ }
+
+ public IBean getBean() {
+ if (bean == null) {
+ IProject project = ResourcesPlugin.getWorkspace().getRoot()
+ .getProject(projectName);
+ if (project != null) {
+ ICDIProject cdiProject = CDICorePlugin.getCDIProject(
+ project, true);
+ if (cdiProject != null) {
+ Set<IBean> beans = cdiProject
+ .getBeans(beanName, true);
+ if (beans != null && !beans.isEmpty())
+ return beans.iterator().next();
+ }
+ }
+ return null;
+ }
+ return bean;
+ }
+
+ }
+
+ public static void validateHistory(ICDIProject cdiProject) {
+ String cdiProjectName = cdiProject.getNature().getProject().getName();
+
+ XMLMemento memento = loadMemento();
+ if (memento != null) {
+ XMLMemento historyMemento = (XMLMemento) memento
+ .getChild(ROOT_NODE);
+
+ if (historyMemento == null) {
+ return;
+ }
+
+ IMemento[] mementoElements = historyMemento.getChildren(INFO_NODE);
+ for (int i = 0; i < mementoElements.length; ++i) {
+ IMemento mem = mementoElements[i];
+ String projectName = mem.getString(PROJECT_NAME);
+ if (projectName == null) {
+ mem.putString(DELETED, YES);
+ continue;
+ }
+ if (projectName.equals(cdiProjectName)) {
+ String beanName = mem.getString(BEAN_NAME);
+ if (beanName == null) {
+ mem.putString(DELETED, YES);
+ continue;
+ }
+ IProject project = ResourcesPlugin.getWorkspace().getRoot()
+ .getProject(projectName);
+ if (project != null) {
+ ICDIProject cCDIProject = CDICorePlugin
+ .getCDIProject(project, true);
+ if (cCDIProject != null) {
+ Set<IBean> beans = cdiProject
+ .getBeans(beanName, true);
+ IBean bean = (beans == null || beans.isEmpty() ? null : beans.iterator().next());
+ if (bean == null)
+ mem.putString(DELETED, YES);
+ else
+ mem.putString(DELETED, NO);
+ } else
+ mem.putString(DELETED, YES);
+ } else
+ mem.putString(DELETED, YES);
+ }
+ }
+ saveMemento(memento);
+ }
+ }
+}
Property changes on:
trunk/cdi/plugins/org.jboss.tools.cdi.ui/src/org/jboss/tools/cdi/ui/wizard/OpenCDINamedBeanDialog.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain