Author: DartPeng
Date: 2009-01-06 04:20:30 -0500 (Tue, 06 Jan 2009)
New Revision: 12889
Modified:
trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/analyzer/AbstractAnalyzer.java
trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/javabean/model/JavaBeanModel.java
trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/utils/UIUtils.java
trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/xml2java/analyzer/AbstractXMLModelAnalyzer.java
trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/xml2java/analyzer/XML2JavaAnalyzer.java
Log:
JBIDE-3207
Fix some bugs for X2J analyzer
Modified:
trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/analyzer/AbstractAnalyzer.java
===================================================================
---
trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/analyzer/AbstractAnalyzer.java 2009-01-06
09:19:01 UTC (rev 12888)
+++
trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/analyzer/AbstractAnalyzer.java 2009-01-06
09:20:30 UTC (rev 12889)
@@ -152,8 +152,8 @@
AbstractResourceConfig abstractResourceConfig = iterator.next();
if (abstractResourceConfig instanceof ResourceConfigType) {
ResourceConfigType rct = (ResourceConfigType) abstractResourceConfig;
- if (isResourceConfigUsed(rct))
- continue;
+// if (isResourceConfigUsed(rct))
+// continue;
String beanId = getBeanIDFromParam(rct);
if (selector.equals(beanId)) {
resourceConfig = rct;
Modified:
trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/javabean/model/JavaBeanModel.java
===================================================================
---
trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/javabean/model/JavaBeanModel.java 2009-01-06
09:19:01 UTC (rev 12888)
+++
trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/javabean/model/JavaBeanModel.java 2009-01-06
09:20:30 UTC (rev 12889)
@@ -11,9 +11,11 @@
package org.jboss.tools.smooks.javabean.model;
import java.beans.PropertyDescriptor;
+import java.lang.reflect.GenericDeclaration;
import java.lang.reflect.Method;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
+import java.lang.reflect.TypeVariable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
@@ -29,7 +31,7 @@
public class JavaBeanModel implements IValidatable {
private String beanClassString = null;
-
+
public void setBeanClassString(String beanClassString) {
this.beanClassString = beanClassString;
}
@@ -47,7 +49,7 @@
private boolean collection = false;
private boolean isPrimitive = false;
-
+
private boolean hasGenericType = false;
private Class<? extends Object> beanClass = null;
@@ -60,7 +62,7 @@
private Class parentClass = null;
-// private boolean isRoot = false;
+ // private boolean isRoot = false;
private boolean isRootClassModel = false;
@@ -79,15 +81,15 @@
this.isRootClassModel = isRootClassModel;
}
-// /**
-// * @return the isRoot
-// */
-// public boolean isRoot() {
-// return isRoot;
-// }
+ // /**
+ // * @return the isRoot
+ // */
+ // public boolean isRoot() {
+ // return isRoot;
+ // }
public String getBeanClassString() {
- if(beanClassString != null && beanClassString.length() != 0){
+ if (beanClassString != null && beanClassString.length() != 0) {
return this.beanClassString;
}
Class clazz = this.getBeanClass();
@@ -106,8 +108,7 @@
* @param isRoot
* the isRoot to set
*/
-// public void setRoot(boolean isRoot) {ois
-
+ // public void setRoot(boolean isRoot) {ois
private boolean isList = false;
private Class componentClass = null;
@@ -115,7 +116,8 @@
private boolean lazyLoadProperties = true;
public boolean isList() {
- if(beanClass == null) return false;
+ if (beanClass == null)
+ return false;
if (Collection.class.isAssignableFrom(beanClass)) {
if (this.propertyDescriptor != null) {
Method rmethod = propertyDescriptor.getReadMethod();
@@ -157,11 +159,10 @@
this.name = beanName;
if (beanClass == null)
return;
- if(this.name == null){
+ if (this.name == null) {
this.name = beanClass.getSimpleName();
}
-
-
+
if (propertyDescriptor == null)
setRootClassModel(true);
this.propertyDescriptor = propertyDescriptor;
@@ -233,7 +234,8 @@
}
public boolean isArray() {
- if(beanClass == null) return false;
+ if (beanClass == null)
+ return false;
if (beanClass.isArray()) {
Class beanType = beanClass.getComponentType();
setMany(true);
@@ -242,8 +244,8 @@
}
return many;
}
-
- public Class getGenericType(){
+
+ public Class getGenericType() {
return componentClass;
}
@@ -251,21 +253,21 @@
this.many = many;
}
-// public boolean isCollection() {
-// return collection;
-// }
-//
-// public void setCollection(boolean collection) {
-// this.collection = collection;
-// }
+ // public boolean isCollection() {
+ // return collection;
+ // }
+ //
+ // public void setCollection(boolean collection) {
+ // this.collection = collection;
+ // }
-// public Class getTypeRef() {
-// return typeRef;
-// }
-//
-// public void setTypeRef(Class typeRef) {
-// this.typeRef = typeRef;
-// }
+ // public Class getTypeRef() {
+ // return typeRef;
+ // }
+ //
+ // public void setTypeRef(Class typeRef) {
+ // this.typeRef = typeRef;
+ // }
public String getName() {
return name;
@@ -285,11 +287,12 @@
private List properties;
public List getProperties() {
-
+
if (properties == null) {
properties = new ArrayList();
- if(isPrimitive()) return properties;
-
+ if (isPrimitive())
+ return properties;
+
Class beanType = beanClass;
if (this.componentClass != null) {
if (isArray() || isList()) {
@@ -303,13 +306,30 @@
return properties;
}
}
- if(beanType == null) return null;
- PropertyDescriptor[] pds = JavaPropertyUtils.getPropertyDescriptor(beanType);
+ if (beanType == null)
+ return null;
+ PropertyDescriptor[] pds = JavaPropertyUtils
+ .getPropertyDescriptor(beanType);
for (int i = 0; i < pds.length; i++) {
PropertyDescriptor pd = pds[i];
if ("class".equals(pd.getName())) //$NON-NLS-1$
continue;
+ if (Collection.class.isAssignableFrom(pd.getPropertyType())) {
+ Method rmethod = pd.getReadMethod();
+ if (rmethod != null) {
+ Type returnType = rmethod.getGenericReturnType();
+ if (returnType instanceof ParameterizedType) {
+ Type[] types = ((ParameterizedType) returnType)
+ .getActualTypeArguments();
+ if(types == null || types.length == 0){
+ continue;
+ }
+ }else{
+ continue;
+ }
+ }
+ }
JavaBeanModel jbm = new JavaBeanModel(pd.getPropertyType(), pd
.getName(), pd, beanClass, this.lazyLoadProperties);
addProperty(jbm);
@@ -363,9 +383,11 @@
* @see java.lang.Object#toString()
*/
public String toString() {
- StringBuffer buffer = new
StringBuffer(Messages.getString("JavaBeanModel.JavaBeanName") + name);
//$NON-NLS-1$
+ StringBuffer buffer = new StringBuffer(Messages
+ .getString("JavaBeanModel.JavaBeanName") + name); //$NON-NLS-1$
if (beanClass != null)
- buffer.append(Messages.getString("JavaBeanModel.ClassIs") +
this.beanClass.getName()); //$NON-NLS-1$
+ buffer
+ .append(Messages.getString("JavaBeanModel.ClassIs") +
this.beanClass.getName()); //$NON-NLS-1$
if (this.properties != null) {
buffer.append("\n"); //$NON-NLS-1$
for (Iterator iterator = properties.iterator(); iterator.hasNext();) {
Modified:
trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/utils/UIUtils.java
===================================================================
---
trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/utils/UIUtils.java 2009-01-06
09:19:01 UTC (rev 12888)
+++
trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/utils/UIUtils.java 2009-01-06
09:20:30 UTC (rev 12889)
@@ -68,16 +68,16 @@
}
public static AbstractXMLObject getRootTagXMLObject(AbstractXMLObject xmlObj) {
+ if(xmlObj == null) return null;
AbstractXMLObject parent = xmlObj.getParent();
+ if(parent == null) return null;
+ if(parent instanceof TagList) return xmlObj;
while (true) {
AbstractXMLObject p = parent.getParent();
if (p instanceof TagList)
break;
parent = p;
}
-// if (parent instanceof TagList) {
-// parent = ((TagList) parent).getRootTag();
-// }
return parent;
}
Modified:
trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/xml2java/analyzer/AbstractXMLModelAnalyzer.java
===================================================================
---
trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/xml2java/analyzer/AbstractXMLModelAnalyzer.java 2009-01-06
09:19:01 UTC (rev 12888)
+++
trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/xml2java/analyzer/AbstractXMLModelAnalyzer.java 2009-01-06
09:20:30 UTC (rev 12889)
@@ -12,8 +12,10 @@
import java.beans.PropertyChangeListener;
import java.io.ByteArrayInputStream;
+import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
+import java.io.InputStream;
import java.lang.reflect.InvocationTargetException;
import java.util.Iterator;
import java.util.List;
@@ -47,6 +49,8 @@
public static final String WORKSPACE_PRIX = "Workspace:/"; //$NON-NLS-1$
+ public static final String RESOURCE = "Resource:/";
+
private String parmaKey = ""; //$NON-NLS-1$
public AbstractXMLModelAnalyzer(String paramKey) {
@@ -103,9 +107,15 @@
TagList document = new TagList();
if (path != null) {
path = parseFilePath(path);
- XMLObjectAnalyzer objectBuilder = new XMLObjectAnalyzer();
try {
- FileInputStream stream = new FileInputStream(path);
+ InputStream stream = null;
+ if (!new File(path).exists()) {
+ // maybe it's resource path:
+ stream = getClass().getResourceAsStream(path);
+ } else {
+ stream = new FileInputStream(path);
+ }
+ XMLObjectAnalyzer objectBuilder = new XMLObjectAnalyzer();
document = objectBuilder.analyze(stream, null);
if (viewer != null && viewer instanceof PropertyChangeListener) {
document
@@ -145,8 +155,8 @@
new String[] { "xsl-value-of" });
if (tag != null) {
if (viewer instanceof PropertyChangeListener) {
- document.addNodePropetyChangeListener(
- (PropertyChangeListener) viewer);
+ document
+ .addNodePropetyChangeListener((PropertyChangeListener) viewer);
hookNodes(
tag,
(PropertyChangeListener) viewer);
Modified:
trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/xml2java/analyzer/XML2JavaAnalyzer.java
===================================================================
---
trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/xml2java/analyzer/XML2JavaAnalyzer.java 2009-01-06
09:19:01 UTC (rev 12888)
+++
trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/xml2java/analyzer/XML2JavaAnalyzer.java 2009-01-06
09:20:30 UTC (rev 12889)
@@ -240,20 +240,37 @@
protected String getSelectorIDViaXMLObject(AbstractXMLObject sourceModel,
AbstractXMLObject currentRoot, String resourceConfigSelector) {
+ boolean isChild = false;
String name = sourceModel.getName();
if (sourceModel instanceof TagPropertyObject) {
name = "@" + name;
}
AbstractXMLObject parent = sourceModel.getParent();
- while (parent != null && parent.getName() != null) {
- if (parent == currentRoot)
+ while (parent != null && parent.getName() != null && !(parent
instanceof TagList)) {
+ if (parent == currentRoot){
+ isChild = true;
break;
+ }
name = parent.getName() + SPACE_SPLITER + name;
parent = parent.getParent();
}
if (resourceConfigSelector != null) {
name = resourceConfigSelector + SPACE_SPLITER + name;
}
+ // if the node is not the child of current root node , reload the name
+ if(!isChild){
+ name = sourceModel.getName();
+ if (sourceModel instanceof TagPropertyObject) {
+ name = "@" + name;
+ }
+ parent = sourceModel.getParent();
+ if(parent == null) return name;
+ while(!(parent instanceof TagList)){
+ name = name + SPACE_SPLITER + parent.getName();
+ parent = parent.getParent();
+ }
+ }
+
return name;
}
@@ -528,6 +545,7 @@
return;
AbstractXMLObject newRoot = findXMLNodeWithSelector(newSelector,
root);
+ // find the node from the root
if (newRoot == null) {
newRoot = findXMLNodeWithSelector(newSelector, root, true,
false);
@@ -581,6 +599,7 @@
firstName = selector;
AbstractXMLObject current = findXMLNodeWithSelector(firstName, parent,
false, false);
+ // if can't find the node , to search it from the root node
if (current == null) {
current = findXMLNodeWithSelector(firstName, parent, true, false);
}