Author: akazakov
Date: 2010-09-06 12:22:38 -0400 (Mon, 06 Sep 2010)
New Revision: 24742
Added:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/ca/
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/ca/BeansXmlProcessor.java
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/IBeanManager.java
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/CDIProject.java
Log:
https://jira.jboss.org/browse/JBIDE-2704
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/IBeanManager.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/IBeanManager.java 2010-09-06
16:22:37 UTC (rev 24741)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/IBeanManager.java 2010-09-06
16:22:38 UTC (rev 24742)
@@ -174,6 +174,30 @@
IStereotype[] getStereotypes();
/**
+ * Returns all the available alternative beans.
+ * The alternative may be selected or not selected.
+ *
+ * @return all the available alternatives.
+ */
+ IBean[] getAlternatives();
+
+ /**
+ * Returns all the available decorators.
+ * The decorator may be enabled or disabled.
+ *
+ * @return all the available decorators.
+ */
+ IDecorator[] getDecorators();
+
+ /**
+ * Returns all the available interceptors.
+ * The interceptor may be selected or not selected.
+ *
+ * @return all the available interceptors.
+ */
+ IInterceptor[] getInterceptors();
+
+ /**
* Returns stereotype model element for fully qualified name of stereotype
* annotation type
*
Added:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/ca/BeansXmlProcessor.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/ca/BeansXmlProcessor.java
(rev 0)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/ca/BeansXmlProcessor.java 2010-09-06
16:22:38 UTC (rev 24742)
@@ -0,0 +1,143 @@
+/*******************************************************************************
+ * Copyright (c) 2010 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.ca;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.jdt.core.IType;
+import org.jboss.tools.cdi.core.CDICoreNature;
+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.core.IClassBean;
+import org.jboss.tools.cdi.core.IDecorator;
+import org.jboss.tools.cdi.core.IInterceptor;
+import org.jboss.tools.cdi.core.IStereotype;
+import org.jboss.tools.cdi.internal.core.el.CdiElResolver;
+import org.jboss.tools.common.text.TextProposal;
+import org.jboss.tools.jst.web.kb.KbQuery;
+
+/**
+ * @author Alexey Kazakov
+ */
+public class BeansXmlProcessor {
+
+ private static final BeansXmlProcessor INSTANCE = new BeansXmlProcessor();
+
+ /**
+ * @return instance of PageProcessor
+ */
+ public static BeansXmlProcessor getInstance() {
+ return INSTANCE;
+ }
+
+ private BeansXmlProcessor() {
+ }
+
+ private final static TextProposal[] EMPTY_ARRAY = new TextProposal[0];
+
+ private final static String ALTERNATIVES_ELEMENT = "alternatives";
//$NON-NLS-1$
+ private final static String CLASS_ELEMENT = "class"; //$NON-NLS-1$
+ private final static String STEREOTYPE_ELEMENT = "stereotype"; //$NON-NLS-1$
+ private final static String DECORATORS_ELEMENT = "decorators"; //$NON-NLS-1$
+ private final static String INTERCEPTOR_ELEMENT = "interceptors";
//$NON-NLS-1$
+
+ /**
+ * Returns proposals for the query
+ * @param query
+ * @return
+ */
+ public TextProposal[] getProposals(KbQuery query, IProject project) {
+ String[] parents = query.getParentTags();
+ if(parents.length>2) {
+ CDICoreNature nature = CDICorePlugin.getCDI(project, false);
+ if(nature!=null) {
+ ICDIProject cdiProject = nature.getDelegate();
+ if(CLASS_ELEMENT.equals(parents[0])) {
+ if(ALTERNATIVES_ELEMENT.equals(parents[1])) {
+ return getAlternativeBeans(query, cdiProject);
+ } else if(DECORATORS_ELEMENT.equals(parents[1])) {
+ return getDecorators(query, cdiProject);
+ } else if(INTERCEPTOR_ELEMENT.equals(parents[1])) {
+ return getInterceptors(query, cdiProject);
+ }
+ } else if(STEREOTYPE_ELEMENT.equals(parents[0]) &&
ALTERNATIVES_ELEMENT.equals(parents[1])) {
+ return getAlternativeStereotypes(query, cdiProject);
+ }
+ }
+ }
+ return EMPTY_ARRAY;
+ }
+
+ private TextProposal[] getAlternativeBeans(KbQuery query, ICDIProject cdiProject) {
+ List<TextProposal> proposals = new ArrayList<TextProposal>();
+ String value = query.getValue().trim();
+ IBean[] alternatives = cdiProject.getAlternatives();
+ for (IBean bean : alternatives) {
+ if(bean instanceof IClassBean) {
+ IType type = bean.getBeanClass();
+ addMutchedType(type, value, proposals);
+ }
+ }
+ return proposals.toArray(new TextProposal[0]);
+ }
+
+ private TextProposal[] getAlternativeStereotypes(KbQuery query, ICDIProject cdiProject)
{
+ List<TextProposal> proposals = new ArrayList<TextProposal>();
+ String value = query.getValue().trim();
+ IStereotype[] alternatives = cdiProject.getStereotypes();
+ for (IStereotype stereotype : alternatives) {
+ if(stereotype.isAlternative()) {
+ IType type = stereotype.getSourceType();
+ addMutchedType(type, value, proposals);
+ }
+ }
+ return proposals.toArray(new TextProposal[0]);
+ }
+
+ private TextProposal[] getDecorators(KbQuery query, ICDIProject cdiProject) {
+ List<TextProposal> proposals = new ArrayList<TextProposal>();
+ String value = query.getValue().trim();
+ IDecorator[] decorators = cdiProject.getDecorators();
+ for (IDecorator bean : decorators) {
+ IType type = bean.getBeanClass();
+ addMutchedType(type, value, proposals);
+ }
+ return proposals.toArray(new TextProposal[0]);
+ }
+
+ private TextProposal[] getInterceptors(KbQuery query, ICDIProject cdiProject) {
+ List<TextProposal> proposals = new ArrayList<TextProposal>();
+ String value = query.getValue().trim();
+ IInterceptor[] interceptors = cdiProject.getInterceptors();
+ for (IInterceptor bean : interceptors) {
+ IType type = bean.getBeanClass();
+ addMutchedType(type, value, proposals);
+ }
+ return proposals.toArray(new TextProposal[0]);
+ }
+
+ private void addMutchedType(IType type, String value, List<TextProposal>
proposals) {
+ String fullTypeName = type.getFullyQualifiedName();
+ if(fullTypeName.startsWith(value)) {
+ TextProposal proposal = new TextProposal();
+ proposal.setLabel(fullTypeName);
+ proposal.setReplacementString(fullTypeName);
+ proposal.setPosition(fullTypeName.length());
+ proposal.setImage(CdiElResolver.CDI_EL_PROPOSAL_IMAGE);
+
+ proposals.add(proposal);
+ }
+ }
+}
\ No newline at end of file
Property changes on:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/ca/BeansXmlProcessor.java
___________________________________________________________________
Name: 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 2010-09-06
16:22:37 UTC (rev 24741)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/CDIProject.java 2010-09-06
16:22:38 UTC (rev 24742)
@@ -39,9 +39,10 @@
import org.jboss.tools.cdi.core.ICDIAnnotation;
import org.jboss.tools.cdi.core.ICDIProject;
import org.jboss.tools.cdi.core.IClassBean;
+import org.jboss.tools.cdi.core.IDecorator;
import org.jboss.tools.cdi.core.IInjectionPoint;
import org.jboss.tools.cdi.core.IInjectionPointField;
-import org.jboss.tools.cdi.core.IInjectionPointParameter;
+import org.jboss.tools.cdi.core.IInterceptor;
import org.jboss.tools.cdi.core.IInterceptorBinding;
import org.jboss.tools.cdi.core.IObserverMethod;
import org.jboss.tools.cdi.core.IParametedType;
@@ -81,6 +82,9 @@
private Map<String, Set<IBean>> beansByName = new HashMap<String,
Set<IBean>>();
private Set<IBean> namedBeans = new HashSet<IBean>();
private Map<IType, ClassBean> classBeans = new HashMap<IType, ClassBean>();
+ private Set<IBean> alternatives = new HashSet<IBean>();
+ private Set<IDecorator> decorators = new HashSet<IDecorator>();
+ private Set<IInterceptor> interceptors = new HashSet<IInterceptor>();
BeansXMLData beansXMLData = new BeansXMLData();
@@ -622,6 +626,48 @@
return result;
}
+ /* (non-Javadoc)
+ * @see org.jboss.tools.cdi.core.IBeanManager#getAlternatives()
+ */
+ public IBean[] getAlternatives() {
+ IBean[] result = new IBean[alternatives.size()];
+ synchronized (alternatives) {
+ int i=0;
+ for (IBean bean: alternatives) {
+ result[i++] = bean;
+ }
+ }
+ return result;
+ }
+
+ /* (non-Javadoc)
+ * @see org.jboss.tools.cdi.core.IBeanManager#getDecorators()
+ */
+ public IDecorator[] getDecorators() {
+ IDecorator[] result = new IDecorator[decorators.size()];
+ synchronized (decorators) {
+ int i=0;
+ for (IDecorator bean: decorators) {
+ result[i++] = bean;
+ }
+ }
+ return result;
+ }
+
+ /* (non-Javadoc)
+ * @see org.jboss.tools.cdi.core.IBeanManager#getInterceptors()
+ */
+ public IInterceptor[] getInterceptors() {
+ IInterceptor[] result = new IInterceptor[interceptors.size()];
+ synchronized (interceptors) {
+ int i=0;
+ for (IInterceptor bean: interceptors) {
+ result[i++] = bean;
+ }
+ }
+ return result;
+ }
+
public boolean isNormalScope(IType annotationType) {
if(annotationType == null) return false;
try {
@@ -1112,6 +1158,15 @@
synchronized (namedBeans) {
namedBeans.clear();
}
+ synchronized (alternatives) {
+ alternatives.clear();
+ }
+ synchronized (decorators) {
+ decorators.clear();
+ }
+ synchronized (interceptors) {
+ interceptors.clear();
+ }
synchronized (allBeans) {
allBeans.clear();
}
@@ -1157,6 +1212,21 @@
synchronized (bs) {
bs.add(bean);
}
+ if(bean.isAlternative()) {
+ synchronized (alternatives) {
+ alternatives.add(bean);
+ }
+ }
+ if(bean instanceof IDecorator) {
+ synchronized (decorators) {
+ decorators.add((IDecorator)bean);
+ }
+ }
+ if(bean instanceof IInterceptor) {
+ synchronized (interceptors) {
+ interceptors.add((IInterceptor)bean);
+ }
+ }
synchronized (allBeans) {
allBeans.add(bean);
}