Author: scabanovich
Date: 2011-11-01 20:38:09 -0400 (Tue, 01 Nov 2011)
New Revision: 36122
Added:
trunk/cdi/plugins/org.jboss.tools.cdi.text.ext/schema/
trunk/cdi/plugins/org.jboss.tools.cdi.text.ext/schema/assignableBeanFilterContributors.exsd
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.text.ext/plugin.xml
trunk/cdi/plugins/org.jboss.tools.cdi.text.ext/src/org/jboss/tools/cdi/text/ext/hyperlink/AssignableBeanFilters.java
trunk/cdi/plugins/org.jboss.tools.cdi.text.ext/src/org/jboss/tools/cdi/text/ext/hyperlink/AssignableBeansDialog.java
Log:
JBIDE-10086
https://issues.jboss.org/browse/JBIDE-10086
DefaultBean filter for Assignable Beans dialog is implemented.
Modified: trunk/cdi/plugins/org.jboss.tools.cdi.text.ext/plugin.xml
===================================================================
--- trunk/cdi/plugins/org.jboss.tools.cdi.text.ext/plugin.xml 2011-11-02 00:14:46 UTC (rev
36121)
+++ trunk/cdi/plugins/org.jboss.tools.cdi.text.ext/plugin.xml 2011-11-02 00:38:09 UTC (rev
36122)
@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.0"?>
<plugin>
+ <extension-point id="assignableBeanFilterContributors"
name="Assignable Bean Filter Contributors"
schema="schema/assignableBeanFilterContributors.exsd"/>
<extension
point="org.eclipse.ui.workbench.texteditor.hyperlinkDetectors">
@@ -62,4 +63,4 @@
</hyperlinkPartitioner>
</extension>
-</plugin>
\ No newline at end of file
+</plugin>
Added:
trunk/cdi/plugins/org.jboss.tools.cdi.text.ext/schema/assignableBeanFilterContributors.exsd
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.text.ext/schema/assignableBeanFilterContributors.exsd
(rev 0)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.text.ext/schema/assignableBeanFilterContributors.exsd 2011-11-02
00:38:09 UTC (rev 36122)
@@ -0,0 +1,102 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.jboss.tools.cdi.text.ext"
xmlns="http://www.w3.org/2001/XMLSchema">
+<annotation>
+ <appInfo>
+ <meta.schema plugin="org.jboss.tools.cdi.text.ext"
id="assignableBeanFilterContributors" name="Assignable Bean Filter
Contributors"/>
+ </appInfo>
+ <documentation>
+ [Enter description of this extension point.]
+ </documentation>
+ </annotation>
+
+ <element name="extension">
+ <annotation>
+ <appInfo>
+ <meta.element />
+ </appInfo>
+ </annotation>
+ <complexType>
+ <sequence>
+ <element ref="contributor" minOccurs="1"
maxOccurs="unbounded"/>
+ </sequence>
+ <attribute name="point" type="string"
use="required">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="id" type="string">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="name" type="string">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ <appInfo>
+ <meta.attribute translatable="true"/>
+ </appInfo>
+ </annotation>
+ </attribute>
+ </complexType>
+ </element>
+
+ <element name="contributor">
+ <complexType>
+ <attribute name="class" type="string">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ <appInfo>
+ <meta.attribute kind="java"/>
+ </appInfo>
+ </annotation>
+ </attribute>
+ </complexType>
+ </element>
+
+ <annotation>
+ <appInfo>
+ <meta.section type="since"/>
+ </appInfo>
+ <documentation>
+ [Enter the first release in which this extension point appears.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appInfo>
+ <meta.section type="examples"/>
+ </appInfo>
+ <documentation>
+ [Enter extension point usage example here.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appInfo>
+ <meta.section type="apiinfo"/>
+ </appInfo>
+ <documentation>
+ [Enter API information here.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appInfo>
+ <meta.section type="implementation"/>
+ </appInfo>
+ <documentation>
+ [Enter information about supplied implementation of this extension point.]
+ </documentation>
+ </annotation>
+
+
+</schema>
Property changes on:
trunk/cdi/plugins/org.jboss.tools.cdi.text.ext/schema/assignableBeanFilterContributors.exsd
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.text.ext/src/org/jboss/tools/cdi/text/ext/hyperlink/AssignableBeanFilters.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.text.ext/src/org/jboss/tools/cdi/text/ext/hyperlink/AssignableBeanFilters.java 2011-11-02
00:14:46 UTC (rev 36121)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.text.ext/src/org/jboss/tools/cdi/text/ext/hyperlink/AssignableBeanFilters.java 2011-11-02
00:38:09 UTC (rev 36122)
@@ -11,16 +11,22 @@
package org.jboss.tools.cdi.text.ext.hyperlink;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
+import java.util.Map;
import java.util.Set;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.Platform;
import org.jboss.tools.cdi.core.CDIConstants;
import org.jboss.tools.cdi.core.IBean;
import org.jboss.tools.cdi.core.IBeanMember;
-import org.jboss.tools.cdi.core.IClassBean;
+import org.jboss.tools.cdi.core.IInjectionPoint;
import org.jboss.tools.cdi.core.IProducer;
+import org.jboss.tools.cdi.text.ext.CDIExtensionsPlugin;
/**
*
@@ -33,6 +39,12 @@
public void filter(Set<IBean> beans);
}
+ public static interface FilterContributor {
+ public void contribute(AssignableBeanFilters filters, IInjectionPoint injectionPoint);
+ }
+
+ static FilterContributor[] contributors = null;
+
public static int OPTION_UNAVAILABLE_BEANS = 1;
public static int OPTION_DECORATOR = 2;
public static int OPTION_INTERCEPTOR = 3;
@@ -50,7 +62,6 @@
this.id = id;
this.label = label;
this.filter = filter;
- ALL_OPTIONS[id] = this;
}
Checkbox parent = null;
List<Checkbox> children = new ArrayList<Checkbox>();
@@ -71,7 +82,6 @@
}
public void filter(Set<IBean> beans) {
- if(id == OPTION_ELIMINATED_AMBIGUOUS) filter = new EliminatedAmbiguousFilter();
if(!isEnabled() && filter != null) {
filter.filter(beans);
}
@@ -81,20 +91,70 @@
}
}
- public static Checkbox[] ALL_OPTIONS = new Checkbox[8];
+ private Map<Integer, Checkbox> allOptions = new HashMap<Integer,
Checkbox>();
+ private Checkbox root = new Checkbox(0, "", null);
- public static Checkbox ROOT = new Checkbox(0, "", null);
+ public AssignableBeanFilters() {
+ initContributors();
+ }
+
+ void initContributors() {
+ if(contributors == null) {
+ IConfigurationElement[] cs =
Platform.getExtensionRegistry().getExtensionPoint("org.jboss.tools.cdi.text.ext.assignableBeanFilterContributors").getConfigurationElements();
+ ArrayList<FilterContributor> s = new ArrayList<FilterContributor>();
+ for (IConfigurationElement c: cs) {
+ try {
+ FilterContributor f =
(FilterContributor)c.createExecutableExtension("class");
+ s.add(f);
+ } catch (CoreException e) {
+ CDIExtensionsPlugin.getDefault().log(e);
+ }
+ }
+ contributors = s.toArray(new FilterContributor[s.size()]);
+ }
+ }
- static {
- Checkbox unavailable = ROOT.add(OPTION_UNAVAILABLE_BEANS, "Unavailable
Beans", null);
- unavailable.add(OPTION_DECORATOR, "@Decorator", new DecoratorFilter());
- unavailable.add(OPTION_INTERCEPTOR, "@Interceptor", new
InterceptorFilter());
- unavailable.add(OPTION_UNSELECTED_ALTERNATIVE, "Unselected @Alternative", new
UnselectedAlternativeFilter());
- unavailable.add(OPTION_PRODUCER_IN_UNAVAILABLE_BEAN, "@Produces in unavailable
bean", new ProducerFilter());
- unavailable.add(OPTION_SPECIALIZED_BEAN, "Specialized beans", new
SpecializedBeanFilter());
- ROOT.add(OPTION_ELIMINATED_AMBIGUOUS, "Eliminated ambiguous", new
EliminatedAmbiguousFilter());
+ public void init(IInjectionPoint point) {
+ allOptions.clear();
+ allOptions.put(root.id, root);
+ add(0, OPTION_UNAVAILABLE_BEANS, "Unavailable Beans", null);
+ add(OPTION_UNAVAILABLE_BEANS, OPTION_DECORATOR, "@Decorator", new
DecoratorFilter());
+ add(OPTION_UNAVAILABLE_BEANS, OPTION_INTERCEPTOR, "@Interceptor", new
InterceptorFilter());
+ add(OPTION_UNAVAILABLE_BEANS, OPTION_UNSELECTED_ALTERNATIVE, "Unselected
@Alternative", new UnselectedAlternativeFilter());
+ add(OPTION_UNAVAILABLE_BEANS, OPTION_PRODUCER_IN_UNAVAILABLE_BEAN, "@Produces in
unavailable bean", new ProducerFilter());
+ add(OPTION_UNAVAILABLE_BEANS, OPTION_SPECIALIZED_BEAN, "Specialized beans",
new SpecializedBeanFilter());
+ add(0, OPTION_ELIMINATED_AMBIGUOUS, "Eliminated ambiguous", new
EliminatedAmbiguousFilter());
+ for (FilterContributor c: contributors) {
+ c.contribute(this, point);
+ }
}
-
+
+ public void add(int parentId, int id, String label, Filter f) {
+ Checkbox parent = getOption(parentId);
+ if(parent == null) {
+ parent = root;
+ }
+ Checkbox c = parent.add(id, label, f);
+ allOptions.put(id, c);
+ }
+
+ public Checkbox getRoot() {
+ return root;
+ }
+
+ public Map<Integer, Checkbox> getAllOptions() {
+ return allOptions;
+ }
+
+ public Checkbox getOption(int id) {
+ return allOptions.get(id);
+ }
+
+ public Filter getFilter(int id) {
+ Checkbox c = getOption(id);
+ return c == null ? null : c.filter;
+ }
+
public static class DecoratorFilter implements Filter {
public void filter(Set<IBean> beans) {
Iterator<IBean> it = beans.iterator();
@@ -158,11 +218,12 @@
}
}
- public static class EliminatedAmbiguousFilter implements Filter {
+ public class EliminatedAmbiguousFilter implements Filter {
+
public void filter(Set<IBean> beans) {
Set<IBean> eligible = new HashSet<IBean>(beans);
for (int i = OPTION_UNAVAILABLE_BEANS + 1; i < OPTION_ELIMINATED_AMBIGUOUS; i++) {
- Filter f = ALL_OPTIONS[i].filter;
+ Filter f = getFilter(i);
if(f != null) {
f.filter(eligible);
}
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.text.ext/src/org/jboss/tools/cdi/text/ext/hyperlink/AssignableBeansDialog.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.text.ext/src/org/jboss/tools/cdi/text/ext/hyperlink/AssignableBeansDialog.java 2011-11-02
00:14:46 UTC (rev 36121)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.text.ext/src/org/jboss/tools/cdi/text/ext/hyperlink/AssignableBeansDialog.java 2011-11-02
00:38:09 UTC (rev 36122)
@@ -11,6 +11,7 @@
package org.jboss.tools.cdi.text.ext.hyperlink;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
@@ -18,7 +19,6 @@
import java.util.Set;
import java.util.TreeMap;
-import org.eclipse.core.runtime.IPath;
import org.eclipse.jdt.core.IMethod;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IMenuManager;
@@ -68,24 +68,18 @@
import org.eclipse.swt.widgets.Text;
import org.eclipse.swt.widgets.Widget;
import org.eclipse.ui.dialogs.SearchPattern;
-import org.jboss.tools.cdi.core.CDIConstants;
import org.jboss.tools.cdi.core.CDIImages;
import org.jboss.tools.cdi.core.IBean;
import org.jboss.tools.cdi.core.ICDIElement;
import org.jboss.tools.cdi.core.IInjectionPoint;
import org.jboss.tools.cdi.core.IInjectionPointParameter;
-import org.jboss.tools.cdi.core.IProducer;
-import org.jboss.tools.cdi.core.IProducerField;
-import org.jboss.tools.cdi.core.IProducerMethod;
import org.jboss.tools.cdi.core.IQualifierDeclaration;
import org.jboss.tools.cdi.core.util.BeanPresentationUtil;
-import org.jboss.tools.cdi.internal.core.impl.AbstractBeanElement;
import org.jboss.tools.cdi.text.ext.CDIExtensionsMessages;
import org.jboss.tools.cdi.text.ext.CDIExtensionsPlugin;
import org.jboss.tools.cdi.text.ext.hyperlink.AssignableBeanFilters.Checkbox;
import org.jboss.tools.cdi.text.ext.hyperlink.AssignableBeanFilters.Filter;
import org.jboss.tools.common.java.IParametedType;
-import org.jboss.tools.common.text.ITextSourceReference;
/**
*
@@ -94,6 +88,7 @@
*/
public class AssignableBeansDialog extends PopupDialog {// TitleAreaDialog {
IInjectionPoint injectionPoint;
+ AssignableBeanFilters filters = null;
Set<IBean> beans = new HashSet<IBean>();
Set<IBean> eligibleBeans = new HashSet<IBean>();
Set<IBean> resolvedBeans = new HashSet<IBean>();
@@ -113,24 +108,27 @@
//PopupDialog
super(parentShell, 0, true, true, true, true, true, "title", null);
setShellStyle(getShellStyle() | SWT.RESIZE);
- initSettings();
+ filters = new AssignableBeanFilters();
}
protected void initSettings() {
IDialogSettings settings = getDialogSettings();
showHideOptions = settings.getBoolean(SHOW_HIDE_PANEL);
- for (Checkbox c: AssignableBeanFilters.ALL_OPTIONS) {
- c.state = settings.getBoolean(FILTER_OPTION + c.id);
+ for (Checkbox c: filters.getAllOptions().values()) {
+ String name = FILTER_OPTION + c.id;
+ c.state = !"false".equals(settings.get(name));
}
- AssignableBeanFilters.ROOT.state = true;
+ filters.getRoot().state = true;
}
public void setInjectionPoint(IInjectionPoint injectionPoint) {
this.injectionPoint = injectionPoint;
+ filters.init(injectionPoint);
+ initSettings();
beans = injectionPoint.getCDIProject().getBeans(false, injectionPoint);
eligibleBeans = new HashSet<IBean>(beans);
for (int i = AssignableBeanFilters.OPTION_UNAVAILABLE_BEANS + 1; i <
AssignableBeanFilters.OPTION_ELIMINATED_AMBIGUOUS; i++) {
- Filter f = AssignableBeanFilters.ALL_OPTIONS[i].filter;
+ Filter f = filters.getFilter(i);
if(f != null) {
f.filter(eligibleBeans);
}
@@ -270,9 +268,9 @@
filterView = new CheckboxTreeViewer(g, 0);
filterView.setAutoExpandLevel(3);
filterView.setContentProvider(checkboxContentProvider);
- filterView.setInput(AssignableBeanFilters.ROOT);
- for (int i = 1; i < AssignableBeanFilters.ALL_OPTIONS.length; i++) {
- filterView.setChecked(AssignableBeanFilters.ALL_OPTIONS[i], true);
+ filterView.setInput(filters.getRoot());
+ for (Checkbox c: filters.getAllOptions().values()) {
+ filterView.setChecked(c, true);
}
filterView.getControl().setBackground(g.getBackground());
g.setData(new GridData(GridData.FILL_BOTH));
@@ -373,11 +371,11 @@
}
protected IDialogSettings getDialogSettings() {
IDialogSettings settings =
CDIExtensionsPlugin.getDefault().getDialogSettings().getSection(getId());
- if(settings == null) {
+ if(settings == null && filters != null && injectionPoint != null) {
settings =
CDIExtensionsPlugin.getDefault().getDialogSettings().addNewSection(getId());
settings.put(SHOW_HIDE_PANEL, true);
- for (Checkbox c: AssignableBeanFilters.ALL_OPTIONS) {
- settings.put(FILTER_OPTION + c.id, c.state);
+ for (Checkbox c: filters.getAllOptions().values()) {
+ settings.put(FILTER_OPTION + c.id, "" + c.state);
}
}
return settings;
@@ -394,8 +392,8 @@
private void saveFilterOptions() {
IDialogSettings settings = getDialogSettings();
settings.put(SHOW_HIDE_PANEL, showHideOptions);
- for (Checkbox c: AssignableBeanFilters.ALL_OPTIONS) {
- settings.put(FILTER_OPTION + c.id, c.state);
+ for (Checkbox c: filters.getAllOptions().values()) {
+ settings.put(FILTER_OPTION + c.id, "" + c.state);
}
}
@@ -415,16 +413,23 @@
}
public boolean isFilterEnabled(int index) {
- return AssignableBeanFilters.ALL_OPTIONS[index].state;
+ Checkbox c = filters.getOption(index);
+ return c != null && c.state;
}
public void setFilterEnabled(int index, boolean value) {
- AssignableBeanFilters.ALL_OPTIONS[index].state = value;
+ Checkbox c = filters.getOption(index);
+ if(c == null) return;
+ c.state = value;
filterView.refresh();
// filterView.setChecked(AssignableBeanFilters.ALL_OPTIONS[index], value);
list.refresh();
}
+ public Collection<Checkbox> getOptions() {
+ return filters.getAllOptions().values();
+ }
+
class ShowHideAction extends Action {
public ShowHideAction() {
super("Show/Hide panel", Action.AS_CHECK_BOX);
@@ -520,7 +525,7 @@
Set<IBean> bs = new HashSet<IBean>(beans);
Set<String> keys = new HashSet<String>();
LP p = new LP();
- AssignableBeanFilters.ROOT.filter(bs);
+ filters.getRoot().filter(bs);
textFilter.filter(bs);
Map<String, IBean> map = new TreeMap<String, IBean>();
for (IBean b: bs) {