Author: dazarov
Date: 2012-02-07 15:55:30 -0500 (Tue, 07 Feb 2012)
New Revision: 38486
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/refactoring/CDIMarkerResolutionUtils.java
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/refactoring/ValuedQualifier.java
trunk/cdi/plugins/org.jboss.tools.cdi.ui/src/org/jboss/tools/cdi/ui/wizard/xpl/AddQualifiersToBeanComposite.java
Log:
Wizard 'Specify CDI Bean for the Injection Point' does not compute correctly
condition 'can finish'
https://issues.jboss.org/browse/JBIDE-10637
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/refactoring/CDIMarkerResolutionUtils.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/refactoring/CDIMarkerResolutionUtils.java 2012-02-07
20:31:15 UTC (rev 38485)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/refactoring/CDIMarkerResolutionUtils.java 2012-02-07
20:55:30 UTC (rev 38486)
@@ -66,7 +66,7 @@
String shortName = getShortName(qualifiedName);
if(!value.isEmpty())
- value = "(\""+value+"\")";
+ value = "("+value+")";
if(duplicateShortName)
shortName = qualifiedName;
@@ -107,7 +107,7 @@
String shortName = getShortName(qualifiedName);
if(!value.isEmpty())
- value = "(\""+value+"\")";
+ value = "("+value+")";
if(duplicateShortName)
shortName = qualifiedName;
@@ -180,7 +180,7 @@
String value = declaration.getValue();
if(!value.isEmpty())
- value = "(\""+value+"\")";
+ value = "("+value+")";
if(!qualifierName.equals(CDIConstants.ANY_QUALIFIER_TYPE_NAME) &&
!qualifierName.equals(CDIConstants.DEFAULT_QUALIFIER_TYPE_NAME)){
boolean duplicant = duplicants.get(declaration.getQualifier()).booleanValue();
@@ -287,7 +287,7 @@
String elName = getELName(bean);
if(!value.isEmpty() && (!value.equals(elName) ||
!qualifierName.equals(CDIConstants.NAMED_QUALIFIER_TYPE_NAME))){
- value = "(\""+value+"\")";
+ value = "("+value+")";
}else{
value = "";
}
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/refactoring/ValuedQualifier.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/refactoring/ValuedQualifier.java 2012-02-07
20:31:15 UTC (rev 38485)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/refactoring/ValuedQualifier.java 2012-02-07
20:55:30 UTC (rev 38486)
@@ -10,32 +10,148 @@
******************************************************************************/
package org.jboss.tools.cdi.internal.core.refactoring;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.jdt.core.IMemberValuePair;
+import org.eclipse.jdt.core.IMethod;
+import org.eclipse.jdt.core.IType;
+import org.eclipse.jdt.core.JavaModelException;
+import org.eclipse.jdt.core.Signature;
import org.jboss.tools.cdi.core.IQualifier;
+import org.jboss.tools.cdi.core.IQualifierDeclaration;
public class ValuedQualifier{
+ public static final int STATE_NONE = -1;
+ public static final int STATE_NEW_QUALIFIER = 0;
+ public static final int STATE_NEW_QUALIFIER_CHANGED_VALUE = 1;
+ public static final int STATE_BEAN_QUALIFIER = 2;
+ public static final int STATE_BEAN_QUALIFIER_CHANGED_VALUE = 3;
+
+ private int state = STATE_NONE;
private IQualifier qualifier;
- private String value="";
+ private List<Pair> pairs = new ArrayList<Pair>();
- public ValuedQualifier(IQualifier qualifier){
+ public ValuedQualifier(IQualifier qualifier, IQualifierDeclaration declaration){
this.qualifier = qualifier;
+ if(declaration != null){
+ // copy pairs from qualifier declaration
+ for(IMemberValuePair mvp : declaration.getMemberValuePairs()){
+ Pair pair = new Pair();
+ pair.name = mvp.getMemberName();
+ pair.value = mvp.getValue();
+ if(mvp.getValueKind() == IMemberValuePair.K_STRING){
+ pair.type = "String";
+ }
+ pairs.add(pair);
+ }
+ }else{
+ IType type = qualifier.getSourceType();
+ try {
+ if(type.isAnnotation()){
+ for(IMethod method : type.getMethods()){
+ IMemberValuePair mvp = method.getDefaultValue();
+ Pair pair = new Pair();
+ pair.type = Signature.getSignatureSimpleName(method.getReturnType());
+ pair.name = method.getElementName();
+ if(mvp != null && mvp.getValue() != null){
+ pair.required = false;
+ pair.value = mvp.getValue();
+ }else{
+ pair.required = true;
+ if(pair.type.equals("boolean")){
+ pair.value = "false";
+ }else if(pair.type.equals("int") || pair.type.equals("short")
|| pair.type.equals("long")){
+ pair.value = "0";
+ }else if(pair.type.equals("float")){
+ pair.value = "0";
+ }else if(pair.type.equals("double")){
+ pair.value = "0.0";
+ }else if(pair.type.equals("char")){
+ pair.value = ' ';
+ }else if(pair.type.equals("byte")){
+ pair.value = "0";
+ }else if(pair.type.equals("String")){
+ pair.value = "default";
+ }else{
+ pair.value = "String.class";
+ }
+ }
+ pairs.add(pair);
+ }
+ }
+ } catch (JavaModelException e) {
+ }
+ }
}
- public ValuedQualifier(IQualifier qualifier, String value){
- this(qualifier);
- this.value = value;
+ public ValuedQualifier(IQualifier qualifier){
+ this(qualifier, null);
}
+ public boolean isEditable(){
+ for(Pair pair : pairs){
+ if(pair.name.equals("value") &&
pair.type.equals("String")){
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public int getState(){
+ return state;
+ }
+
+ public List<Pair> getValuePairs(){
+ return pairs;
+ }
+
public IQualifier getQualifier(){
return qualifier;
}
public String getValue(){
- return value;
+ return generateValue();
}
- public void setValue(String value){
- this.value = value;
+ public String getStringValue(){
+ for(Pair pair : pairs){
+ if(pair.name.equals("value") &&
pair.type.equals("String")){
+ return (String)pair.value;
+ }
+ }
+ return "";
}
+
+ private String generateValue(){
+ String text = "";
+ boolean first = true;
+ for(Pair pair : pairs){
+ if(!first){
+ text += ", ";
+ }
+ if(!"value".equals(pair.name) || pairs.size() > 1){
+ text += pair.name+"=";
+ }
+ if("char".equals(pair.type)){
+ text += "\'"+pair.value+"\'";
+ }else if("String".equals(pair.type)){
+ text += "\""+pair.value+"\"";
+ }else{
+ text += pair.value;
+ }
+ first = false;
+ }
+ return text;
+ }
+
+ public void setValue(String name, String value){
+ for(Pair pair : pairs){
+ if(pair.name.equals(name)){
+ pair.value = value;
+ }
+ }
+ }
@Override
public boolean equals(Object obj) {
@@ -43,4 +159,12 @@
return
getQualifier().getSourceType().getFullyQualifiedName().equals(((ValuedQualifier)obj).getQualifier().getSourceType().getFullyQualifiedName());
return false;
}
+
+ static class Pair{
+ public boolean required;
+ public String type="";
+ public String name="";
+ public Object value;
+ }
+
}
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.ui/src/org/jboss/tools/cdi/ui/wizard/xpl/AddQualifiersToBeanComposite.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.ui/src/org/jboss/tools/cdi/ui/wizard/xpl/AddQualifiersToBeanComposite.java 2012-02-07
20:31:15 UTC (rev 38485)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.ui/src/org/jboss/tools/cdi/ui/wizard/xpl/AddQualifiersToBeanComposite.java 2012-02-07
20:55:30 UTC (rev 38486)
@@ -24,7 +24,6 @@
import org.eclipse.draw2d.ColorConstants;
import org.eclipse.jdt.core.Flags;
import org.eclipse.jdt.core.IJavaProject;
-import org.eclipse.jdt.core.IMethod;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IMessageProvider;
@@ -138,19 +137,20 @@
originalQualifiers.clear();
deployed.clear();
for(IQualifier q : bean.getQualifiers()){
+
IQualifierDeclaration declaration =
CDIMarkerResolutionUtils.findQualifierDeclaration(bean, q);
if(declaration != null){
- String value = CDIMarkerResolutionUtils.findQualifierValue(bean, declaration);
- ValuedQualifier vq = new ValuedQualifier(q, value);
+ //String value = CDIMarkerResolutionUtils.findQualifierValue(bean, declaration);
+ ValuedQualifier vq = new ValuedQualifier(q, declaration);
deployed.add(vq);
}else{
- originalQualifiers.add(new ValuedQualifier(q, ""));
+ originalQualifiers.add(new ValuedQualifier(q));
}
}
defaultQualifier = new
ValuedQualifier(bean.getCDIProject().getQualifier(CDIConstants.DEFAULT_QUALIFIER_TYPE_NAME));
namedQualifier = new
ValuedQualifier(bean.getCDIProject().getQualifier(CDIConstants.NAMED_QUALIFIER_TYPE_NAME));
- namedQualifier.setValue(beanName);
+ namedQualifier.setValue("value", beanName);
for(ValuedQualifier q : originalQualifiers){
if(q.equals(defaultQualifier)){
@@ -203,7 +203,7 @@
if((isPublic || (samePackage &&
injectionPointPackage.equals(qualifierPackage))) ){
if(beanJavaProject.findType(qualifierTypeName) != null &&
injectionPointJavaProject.findType(qualifierTypeName) != null){
if(q.getSourceType().getFullyQualifiedName().equals(CDIConstants.NAMED_QUALIFIER_TYPE_NAME))
- vq.setValue(beanName);
+ vq.setValue("value", beanName);
qualifiers.add(vq);
availableTableViewer.add(vq);
lastQualifier = vq;
@@ -492,10 +492,10 @@
@Override
public void widgetSelected(SelectionEvent event) {
ValuedQualifier[] vq = getDeployedSelection();
- ValueDialog d = new ValueDialog(getShell(), vq[0].getValue());
+ ValueDialog d = new ValueDialog(getShell(), vq[0].getStringValue());
int result = d.open();
if(result == MessageDialog.OK){
- vq[0].setValue(d.getValue());
+ vq[0].setValue("value", d.getValue());
}
}
});
@@ -566,7 +566,7 @@
}
remove.setEnabled(enabled);
- if(enabled && ms.length == 1 && isEditEnabled(ms[0].getQualifier())){
+ if(enabled && ms.length == 1 && isEditEnabled(ms[0])){
editQualifierValue.setEnabled(true);
}else{
editQualifierValue.setEnabled(false);
@@ -584,18 +584,8 @@
page.setPageComplete(isComplete);
}
- private boolean isEditEnabled(IQualifier qualifier){
- IMethod method = qualifier.getSourceType().getMethod("value", new
String[]{});
- try{
- if(method.exists()){
- if(method.getReturnType().equals("Ljava.lang.String;"))
- return true;
- }
- }catch(JavaModelException ex){
- CDIUIPlugin.getDefault().logError(ex);
- }
-
- return false;
+ private boolean isEditEnabled(ValuedQualifier valuedQualifier){
+ return valuedQualifier.isEditable();
}
protected void add(boolean all) {