Author: scabanovich
Date: 2010-12-16 09:33:00 -0500 (Thu, 16 Dec 2010)
New Revision: 27549
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.properties
trunk/cdi/plugins/org.jboss.tools.cdi.ui/src/org/jboss/tools/cdi/ui/wizard/NewInterceptorBindingWizardPage.java
Log:
JBIDE-7909
https://issues.jboss.org/browse/JBIDE-7909
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 2010-12-16
14:20:35 UTC (rev 27548)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.ui/src/org/jboss/tools/cdi/ui/CDIUIMessages.java 2010-12-16
14:33:00 UTC (rev 27549)
@@ -74,6 +74,7 @@
public static String MESSAGE_STEREOTYPE_CANNOT_BE_APPLIED_TO_TYPE;
public static String MESSAGE_STEREOTYPE_IS_NOT_COMPATIBLE;
+ public static String MESSAGE_INTERCEPTOR_BINDING_IS_NOT_COMPATIBLE;
public static String MESSAGE_QUALIFIER_NOT_SET;
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 2010-12-16
14:20:35 UTC (rev 27548)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.ui/src/org/jboss/tools/cdi/ui/CDIUIMessages.properties 2010-12-16
14:33:00 UTC (rev 27549)
@@ -58,6 +58,7 @@
MESSAGE_STEREOTYPE_CANNOT_BE_APPLIED_TO_TYPE={0} cannot be applied to a type.
MESSAGE_STEREOTYPE_IS_NOT_COMPATIBLE={0} annotated with
'''@Target({TYPE})''' is not compatible with target.
+MESSAGE_INTERCEPTOR_BINDING_IS_NOT_COMPATIBLE={0} annotated with
'''@Target({TYPE})''' is not compatible with target.
MESSAGE_QUALIFIER_NOT_SET=Qualifier is not set
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.ui/src/org/jboss/tools/cdi/ui/wizard/NewInterceptorBindingWizardPage.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.ui/src/org/jboss/tools/cdi/ui/wizard/NewInterceptorBindingWizardPage.java 2010-12-16
14:20:35 UTC (rev 27548)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.ui/src/org/jboss/tools/cdi/ui/wizard/NewInterceptorBindingWizardPage.java 2010-12-16
14:33:00 UTC (rev 27549)
@@ -10,17 +10,30 @@
******************************************************************************/
package org.jboss.tools.cdi.ui.wizard;
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
import java.util.ArrayList;
import java.util.List;
+import java.util.Set;
+import org.eclipse.core.runtime.IStatus;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.IPackageFragmentRoot;
+import org.eclipse.jdt.core.JavaModelException;
+import org.eclipse.jdt.internal.ui.dialogs.StatusInfo;
+import org.eclipse.jdt.internal.ui.dialogs.StatusUtil;
+import org.eclipse.osgi.util.NLS;
import org.eclipse.swt.widgets.Composite;
import org.jboss.tools.cdi.core.CDIConstants;
import org.jboss.tools.cdi.core.CDICorePlugin;
+import org.jboss.tools.cdi.core.CDIUtil;
+import org.jboss.tools.cdi.core.IAnnotationDeclaration;
import org.jboss.tools.cdi.core.ICDIAnnotation;
import org.jboss.tools.cdi.core.ICDIProject;
+import org.jboss.tools.cdi.core.IInterceptorBinding;
+import org.jboss.tools.cdi.core.IStereotype;
import org.jboss.tools.cdi.ui.CDIUIMessages;
+import org.jboss.tools.cdi.ui.CDIUIPlugin;
import org.jboss.tools.common.ui.widget.editor.ListFieldEditor;
/**
@@ -32,6 +45,7 @@
protected InterceptorBindingSelectionProvider interceptorBindingsProvider = new
InterceptorBindingSelectionProvider();
protected ListFieldEditor interceptorBindings = null;
+ protected StatusInfo targetStatus = new StatusInfo();
public NewInterceptorBindingWizardPage() {
setTitle(CDIUIMessages.NEW_INTERCEPTOR_BINDING_WIZARD_PAGE_NAME);
@@ -76,6 +90,10 @@
targetOptions.add("TYPE,METHOD");
targetOptions.add("TYPE");
createTargetField(composite, targetOptions);
+ target.addPropertyChangeListener(new PropertyChangeListener() {
+ public void propertyChange(PropertyChangeEvent evt) {
+ validateTargetAndInterceptorBinding();
+ }});
}
protected void createInterceptorBindingField(Composite composite) {
@@ -84,6 +102,10 @@
interceptorBindingsProvider.setEditorField(interceptorBindings);
interceptorBindings.doFillIntoGrid(composite);
setInterceptorBindings(getPackageFragmentRoot());
+ interceptorBindings.addPropertyChangeListener(new PropertyChangeListener() {
+ public void propertyChange(PropertyChangeEvent evt) {
+ validateTargetAndInterceptorBinding();
+ }});
}
public void setPackageFragmentRoot(IPackageFragmentRoot root, boolean canBeModified) {
@@ -102,4 +124,68 @@
}
}
+ void validateTargetAndInterceptorBinding() {
+ try {
+ getTargetAndInterceptorBindingError();
+ } catch (JavaModelException e) {
+ CDIUIPlugin.getDefault().logError(e);
+ }
+ doStatusUpdate();
+ }
+
+ private void doStatusUpdate() {
+ // status of all used components
+ IStatus[] status= new IStatus[] {
+ fContainerStatus,
+ isEnclosingTypeSelected() ? fEnclosingTypeStatus : fPackageStatus,
+ fTypeNameStatus,
+ fModifierStatus,
+ fSuperClassStatus,
+ fSuperInterfacesStatus
+ };
+
+ // the mode severe status will be displayed and the OK button enabled/disabled.
+ updateStatus(status);
+ }
+
+ protected void updateStatus(IStatus[] status) {
+ IStatus[] ns = new IStatus[status.length + 1];
+ System.arraycopy(status, 0, ns, 0, status.length);
+ ns[status.length] = targetStatus;
+ status = ns;
+ updateStatus(StatusUtil.getMostSevere(status));
+ }
+
+ void getTargetAndInterceptorBindingError() throws JavaModelException {
+ targetStatus = new StatusInfo();
+ if(interceptorBindings != null && target != null) {
+ String value = (String)target.getValue();
+ boolean hasMethodOrField = value != null && (value.indexOf("METHOD")
>= 0 || value.indexOf("FIELD") >= 0);
+ List list = (List)interceptorBindings.getValue();
+ for (Object o: list) {
+ if(o instanceof IInterceptorBinding) {
+ IInterceptorBinding a = (IInterceptorBinding)o;
+ IAnnotationDeclaration target =
a.getAnnotationDeclaration(CDIConstants.TARGET_ANNOTATION_TYPE_NAME);
+ if(target != null) {
+ Set<String> targets = CDIUtil.getTargetAnnotationValues(target);
+ if(targets != null && targets.size() == 1 &&
targets.contains("TYPE") && hasMethodOrField) {
+ String message =
NLS.bind(CDIUIMessages.MESSAGE_INTERCEPTOR_BINDING_IS_NOT_COMPATIBLE,
a.getSourceType().getElementName());
+// String message = a.getSourceType().getElementName() + " annotated with
@Target({TYPE}) is not compatible with target";
+ targetStatus.setWarning(message);
+ }
+ //targets always contain TYPE
+ }
+ }
+ }
+ }
+ }
+
+ public void addInterceptorBinding(IInterceptorBinding s) {
+ List vs = (List)interceptorBindings.getValue();
+ List nvs = new ArrayList();
+ if(vs != null) nvs.addAll(vs);
+ nvs.add(s);
+ interceptorBindings.setValue(nvs);
+ }
+
}