Author: DartPeng
Date: 2009-01-05 04:36:26 -0500 (Mon, 05 Jan 2009)
New Revision: 12877
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/ui/gef/editparts/StructuredDataConnectionEditPart.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-04
22:43:28 UTC (rev 12876)
+++
trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/analyzer/AbstractAnalyzer.java 2009-01-05
09:36:26 UTC (rev 12877)
@@ -23,6 +23,7 @@
import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;
import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
import org.eclipse.emf.edit.provider.resource.ResourceItemProviderAdapterFactory;
+import org.jboss.tools.smooks.model.AbstractResourceConfig;
import org.jboss.tools.smooks.model.ParamType;
import org.jboss.tools.smooks.model.ResourceConfigType;
import org.jboss.tools.smooks.model.SmooksFactory;
@@ -36,10 +37,17 @@
* @Date Aug 20, 2008
*/
public abstract class AbstractAnalyzer implements IMappingAnalyzer {
+
+ protected List<AbstractResourceConfig> usedResourceConfigRecordList = new
ArrayList<AbstractResourceConfig>();
+
protected List usedConnectionList = new ArrayList();
+
protected AdapterFactoryEditingDomain editingDomain;
+
protected ComposedAdapterFactory adapterFactory;
+
private HashMap<String, Object> userdResourceTypeMap;
+
public AbstractAnalyzer() {
userdResourceTypeMap = new HashMap<String, Object>();
adapterFactory = new ComposedAdapterFactory(
@@ -69,19 +77,19 @@
protected void cleanUsedConnectionList() {
usedConnectionList.clear();
}
-
-
+
protected void setSelectorIsUsed(String selector) {
- if(selector != null) selector = selector.trim();
+ if (selector != null)
+ selector = selector.trim();
userdResourceTypeMap.put(selector, new Object());
}
-
protected boolean isSelectorIsUsed(String selector) {
- if(selector != null) selector = selector.trim();
+ if (selector != null)
+ selector = selector.trim();
return (userdResourceTypeMap.get(selector) != null);
}
-
+
protected void addResourceConfigType(SmooksResourceListType resourceList,
ResourceConfigType resourceConfig) {
Command addResourceConfigCommand = AddCommand.create(
@@ -91,7 +99,6 @@
addResourceConfigCommand.execute();
}
-
protected ParamType addParamTypeToResourceConfig(
ResourceConfigType resourceConfigType, String name, String text) {
ParamType paramType = SmooksFactory.eINSTANCE.createParamType();
@@ -102,8 +109,7 @@
resourceConfigType.getParam().add(paramType);
return paramType;
}
-
-
+
protected String getBeanIDFromParam(ResourceConfigType config) {
List list = config.getParam();
for (Iterator iterator = list.iterator(); iterator.hasNext();) {
@@ -115,7 +121,7 @@
}
return null;
}
-
+
protected String getBeanIdWithRawSelectorString(String selector) {
selector = selector.substring(2, selector.length() - 1);
return selector;
@@ -124,31 +130,43 @@
protected boolean isReferenceSelector(String selector) {
return (selector.startsWith("${") &&
selector.endsWith("}"));
}
-
+ /**
+ * Find the ResourceConfig via its child param element which one's name property
value is "beanId".
+ * If can't find that , return the ResourceConfig which one's
"selector" property value same as the selector
+ * @param selector
+ * @param listType
+ * @return
+ */
protected ResourceConfigType findResourceConfigTypeWithSelector(
String selector, SmooksResourceListType listType) {
- if(selector != null) selector = selector.trim();
+ if (selector != null)
+ selector = selector.trim();
if (isReferenceSelector(selector)) {
selector = this.getBeanIdWithRawSelectorString(selector);
}
- List rl = listType.getAbstractResourceConfig();
+ List<AbstractResourceConfig> rl = listType.getAbstractResourceConfig();
ResourceConfigType resourceConfig = null;
- for (Iterator iterator = rl.iterator(); iterator.hasNext();) {
- ResourceConfigType rct = (ResourceConfigType) iterator.next();
- if (this.isSelectorIsUsed(rct.getSelector()))
- continue;
- String beanId = getBeanIDFromParam(rct);
- if (selector.equals(beanId)) {
- resourceConfig = rct;
- break;
+ for (Iterator<AbstractResourceConfig> iterator = rl.iterator(); iterator
+ .hasNext();) {
+ AbstractResourceConfig abstractResourceConfig = iterator.next();
+ if (abstractResourceConfig instanceof ResourceConfigType) {
+ ResourceConfigType rct = (ResourceConfigType) abstractResourceConfig;
+ if (isResourceConfigUsed(rct))
+ continue;
+ String beanId = getBeanIDFromParam(rct);
+ if (selector.equals(beanId)) {
+ resourceConfig = rct;
+ break;
+ }
+ String selector1 = rct.getSelector();
+ if (selector1 != null)
+ selector1 = selector1.trim();
+ if (selector.equals(selector1)) {
+ resourceConfig = rct;
+ break;
+ }
}
- String selector1 = rct.getSelector();
- if(selector1 != null) selector1 = selector1.trim();
- if(selector.equals(selector1)){
- resourceConfig = rct;
- break;
- }
}
return resourceConfig;
}
@@ -168,4 +186,12 @@
this.editingDomain = editingDomain;
}
+ public void setResourceConfigUsed(ResourceConfigType resourceConfig) {
+ usedResourceConfigRecordList.add(resourceConfig);
+ }
+
+ public boolean isResourceConfigUsed(ResourceConfigType resourceConfig) {
+ return usedResourceConfigRecordList.indexOf(resourceConfig) != -1;
+ }
+
}
Modified:
trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/ui/gef/editparts/StructuredDataConnectionEditPart.java
===================================================================
---
trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/ui/gef/editparts/StructuredDataConnectionEditPart.java 2009-01-04
22:43:28 UTC (rev 12876)
+++
trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/ui/gef/editparts/StructuredDataConnectionEditPart.java 2009-01-05
09:36:26 UTC (rev 12877)
@@ -17,6 +17,7 @@
import org.eclipse.gef.GraphicalViewer;
import org.eclipse.gef.editparts.AbstractConnectionEditPart;
import org.eclipse.gef.editpolicies.ConnectionEndpointEditPolicy;
+import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeItem;
import org.eclipse.ui.IEditorPart;
@@ -194,11 +195,12 @@
}
}
if (collapse) {
- figure.setForegroundColor(GraphicsConstants.groupBorderColor);
- figure.setLineStyle(Graphics.LINE_DOT);
+// figure.setForegroundColor(GraphicsConstants.groupBorderColor);
+ figure.setForegroundColor(new Color(null,224,224,224));
+// figure.setLineStyle(Graphics.LINE_DOT);
} else {
figure.setForegroundColor(GraphicsConstants.groupBorderColor);
- figure.setLineStyle(Graphics.LINE_SOLID);
+// figure.setLineStyle(Graphics.LINE_SOLID);
}
}
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-04
22:43:28 UTC (rev 12876)
+++
trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/xml2java/analyzer/XML2JavaAnalyzer.java 2009-01-05
09:36:26 UTC (rev 12877)
@@ -10,6 +10,8 @@
******************************************************************************/
package org.jboss.tools.smooks.xml2java.analyzer;
+import java.util.ArrayList;
+import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
@@ -23,6 +25,7 @@
import org.jboss.tools.smooks.analyzer.SmooksAnalyzerException;
import org.jboss.tools.smooks.javabean.analyzer.JavaBeanAnalyzer;
import org.jboss.tools.smooks.javabean.model.JavaBeanModel;
+import org.jboss.tools.smooks.model.AbstractResourceConfig;
import org.jboss.tools.smooks.model.ParamType;
import org.jboss.tools.smooks.model.ResourceConfigType;
import org.jboss.tools.smooks.model.ResourceType;
@@ -52,6 +55,10 @@
private static final String SPACE_SPLITER = " ";
+ private List<AbstractResourceConfig> usedResourceConfigList = new
ArrayList<AbstractResourceConfig>();
+
+ private HashMap<String, ResourceConfigType> createdResourceConfigMap = new
HashMap<String, ResourceConfigType>();
+
/*
* (non-Javadoc)
*
@@ -120,9 +127,27 @@
.getReferenceEntityModel();
JavaBeanModel target = (JavaBeanModel) ((AbstractStructuredDataModel) targetg)
.getReferenceEntityModel();
+
+ // generate the beanId value:
+ if (beanID == null) {
+ beanID = getBeanID(target);
+ } else {
+ if (beanID.startsWith("${") && beanID.endsWith("}")) {
+ beanID = beanID.substring(2, beanID.length() - 1);
+ }
+ }
+ // if the resource config was created , return
+ if (beanID != null) {
+ if(isResourceConfigCreated(beanID)){
+ return;
+ }
+ }
+
ResourceConfigType resourceConfigType = SmooksFactory.eINSTANCE
.createResourceConfigType();
context.getGeneratorResourceList().add(resourceConfigType);
+ // registe it
+ registeCreatedResourceConfig(beanID, resourceConfigType);
// addResourceConfigType(listType, resourceConfigType);
// set the selector string value
resourceConfigType.setSelector(parentSelector);
@@ -145,14 +170,6 @@
resourceConfigType.setResource(resourceType);
// create param for resourceConfig
- if (beanID == null) {
- beanID = getBeanID(target);
- } else {
- if (beanID.startsWith("${") && beanID.endsWith("}")) {
- beanID = beanID.substring(2, beanID.length() - 1);
- }
- }
-
addParamTypeToResourceConfig(resourceConfigType,
SmooksModelConstants.BEAN_ID, beanID);
@@ -295,10 +312,13 @@
populator = populator.trim();
if (!JavaBeanAnalyzer.BEANPOPULATOR.equals(populator))
continue;
+ // if the ResourCeconfig element was used to render , don't analyze
+ // it again.
+ if (isResourceConfigUsed(resourceConfig)) {
+ continue;
+ }
String selector = resourceConfig.getSelector();
- if (isSelectorIsUsed(selector))
- continue;
- AbstractXMLObject source = findChildXMLObjectByName(selector,
+ AbstractXMLObject source = findXMLNodeWithSelector(selector,
sourceRoot);
if (source == null) {
// TODO if can't find the root , throw exception
@@ -347,7 +367,53 @@
return null;
}
- public static AbstractXMLObject findChildXMLObjectByName(String selector,
+ public static AbstractXMLObject findXMLNodeWithSelector(String selector,
+ AbstractXMLObject root, boolean fromRoot, boolean includeProperty) {
+ if (fromRoot) {
+ AbstractXMLObject parent = root.getParent();
+ if (parent == null)
+ return null;
+ while (!(parent instanceof TagList)) {
+ root = parent;
+ parent = parent.getParent();
+ }
+ }
+
+ if (selector != null)
+ selector = selector.trim();
+ if (isXMLAttributeObject(selector))
+ selector = selector.substring(1);
+
+ if (selector.equalsIgnoreCase(root.getName()))
+ return root;
+ if (root instanceof TagObject) {
+ List<AbstractXMLObject> children = ((TagObject) root).getChildren();
+ List<TagPropertyObject> properties = ((TagObject) root)
+ .getProperties();
+ for (Iterator iterator = children.iterator(); iterator.hasNext();) {
+ AbstractXMLObject child = (AbstractXMLObject) iterator.next();
+ AbstractXMLObject result = findXMLNodeWithSelector(selector,
+ child, false, includeProperty);
+ if (result != null)
+ return result;
+ }
+ if (includeProperty) {
+ for (Iterator iterator = properties.iterator(); iterator
+ .hasNext();) {
+ TagPropertyObject property = (TagPropertyObject) iterator
+ .next();
+ if (selector.equalsIgnoreCase(property.getName())) {
+ return property;
+ }
+ }
+ }
+ }
+
+ return null;
+
+ }
+
+ public static AbstractXMLObject findXMLNodeWithSelector(String selector,
AbstractXMLObject root) {
if (selector == null)
return null;
@@ -359,60 +425,25 @@
if (nameArray != null) {
if (nameArray.length > 1) {
String firstNodeName = nameArray[0];
- root = findChildXMLObjectByName(firstNodeName, root);
+ root = findXMLNodeWithSelector(firstNodeName, root);
+ if (root == null) {
+ root = findXMLNodeWithSelector(firstNodeName, root, true,
+ false);
+ }
if (root == null)
return null;
for (int i = 1; i < nameArray.length; i++) {
String name = nameArray[i];
- if (root instanceof TagObject) {
- List<AbstractXMLObject> childrenTags = root
- .getChildren();
- for (Iterator iterator = childrenTags.iterator(); iterator
- .hasNext();) {
- AbstractXMLObject abstractXMLObject = (AbstractXMLObject) iterator
- .next();
- if (abstractXMLObject.getName().equalsIgnoreCase(
- name)) {
- root = abstractXMLObject;
- break;
- }
- }
- }
+ root = findXMLNodeWithSelector(name, root, false, false);
}
return root;
}
}
- if (selector.equalsIgnoreCase(root.getName())) {
- return root;
- }
- if (root instanceof TagObject) {
- List properties = ((TagObject) root).getProperties();
- for (Iterator iterator = properties.iterator(); iterator.hasNext();) {
- TagPropertyObject pro = (TagPropertyObject) iterator.next();
- if (selector.equals(pro.getName()))
- return pro;
- }
- List<AbstractXMLObject> tags = ((TagObject) root).getChildren();
- for (Iterator iterator = tags.iterator(); iterator.hasNext();) {
- AbstractXMLObject tagChild = (AbstractXMLObject) iterator
- .next();
- AbstractXMLObject result = findChildXMLObjectByName(selector,
- tagChild);
- if (result != null)
- return result;
- }
- }
- return null;
-
+ return findXMLNodeWithSelector(selector, root, false, false);
}
- protected void createMappingResourceConfigList(
- MappingResourceConfigList configList, SmooksResourceListType list,
- ResourceConfigType config, AbstractXMLObject sourceRoot,
- JavaBeanModel targetJavaBean) {
-
- MappingModel mapping = new MappingModel(sourceRoot, targetJavaBean);
- configList.getMappingModelList().add(mapping);
+ protected void checkNamespaceProperty(MappingModel mapping,
+ ResourceConfigType config) {
String namespace = config.getSelectorNamespace();
if (namespace != null) {
PropertyModel np = new PropertyModel();
@@ -420,69 +451,96 @@
np.setValue(namespace);
mapping.getProperties().add(np);
}
+ }
- configList.addResourceConfig(config);
+ protected void createMappingResourceConfigList(
+ MappingResourceConfigList configList, SmooksResourceListType list,
+ ResourceConfigType processingConfig, AbstractXMLObject sourceRoot,
+ JavaBeanModel targetJavaBean) {
- List<ParamType> paramList = config.getParam();
- ParamType bindingParam = null;
- for (Iterator iterator = paramList.iterator(); iterator.hasNext();) {
- ParamType paramType = (ParamType) iterator.next();
- String name = paramType.getName();
- if (SmooksModelConstants.BINDINGS.equals(name)) {
- bindingParam = paramType;
- break;
- }
+ MappingModel mapping = new MappingModel(sourceRoot, targetJavaBean);
+ configList.getMappingModelList().add(mapping);
+ checkNamespaceProperty(mapping, processingConfig);
+
+ // this ResourceConfig was used to render , so record it in the
+ // RelatingResourceConfig of MappingResourceConfigList
+ // to make it dosen't to show in the ConfigurationPage.
+ configList.addResourceConfig(processingConfig);
+
+ // Load the bindings of parameter element:
+ List<Object> bindings = SmooksModelUtils
+ .getBindingListFromResourceConfigType(processingConfig);
+ // If the resourceConfig was be used , don't to generate binding for it and
return.
+ if(isResourceConfigUsed(processingConfig)){
+ return;
+ }else{
+ // when starting to process the ResourceConfig , mark it be used
+ setResourceConfigUsed(processingConfig);
}
+ // If the bindings isn't NULL to visit the "property" and
"selector" of
+ // binding to render the graphical
+ if (bindings != null ) {
+ for (Iterator<Object> iterator = bindings.iterator(); iterator
+ .hasNext();) {
+ Object anyType = iterator.next();
+ if (!(anyType instanceof AnyType))
+ continue;
+ AnyType binding = (AnyType) anyType;
+ String property = SmooksModelUtils
+ .getAttributeValueFromAnyType(binding,
+ SmooksModelUtils.ATTRIBUTE_PROPERTY);
+ String selectorStr = SmooksModelUtils
+ .getAttributeValueFromAnyType(binding,
+ SmooksModelUtils.ATTRIBUTE_SELECTOR);
- if (bindingParam != null) {
- List bindings = (List) bindingParam.getMixed().get(
- SmooksModelUtils.ELEMENT_BINDING, true);
- if (bindings != null) {
- for (Iterator iterator = bindings.iterator(); iterator
- .hasNext();) {
- AnyType binding = (AnyType) iterator.next();
- String property = SmooksModelUtils
- .getAttributeValueFromAnyType(binding,
- SmooksModelUtils.ATTRIBUTE_PROPERTY);
- String selectorStr = SmooksModelUtils
- .getAttributeValueFromAnyType(binding,
- SmooksModelUtils.ATTRIBUTE_SELECTOR);
- JavaBeanModel childBean = JavaBeanAnalyzer
- .findTheChildJavaBeanModel(property, targetJavaBean);
- processXMLSelector(configList, config, sourceRoot,
- childBean, list, selectorStr, binding);
- }
+ JavaBeanModel childBean = JavaBeanAnalyzer
+ .findTheChildJavaBeanModel(property, targetJavaBean);
+ processXMLSelector(configList, processingConfig, sourceRoot,
+ childBean, list, selectorStr, binding);
}
}
}
+ /**
+ *
+ * @param configList
+ * @param resourceConfig
+ * @param root
+ * @param targetBean
+ * @param listType
+ * @param selector
+ * @param currentBinding
+ */
protected void processXMLSelector(MappingResourceConfigList configList,
ResourceConfigType resourceConfig, AbstractXMLObject root,
JavaBeanModel targetBean, SmooksResourceListType listType,
String selector, AnyType currentBinding) {
if (isReferenceSelector(selector)) {
- ResourceConfigType resourceConfig1 = this
+ ResourceConfigType processingResourceConfig = this
.findResourceConfigTypeWithSelector(selector, listType);
- if (resourceConfig1 == null) {
+ if (processingResourceConfig == null) {
throw new RuntimeException(
"Can't find some ResourceConfig element in the config file.Maybe some
ResourceConfig element miss <param name = \"beanId\">"
+ selector + "</param>");
}
- String newSelector = resourceConfig1.getSelector();
+ String newSelector = processingResourceConfig.getSelector();
if (newSelector == null)
return;
- AbstractXMLObject newRoot = findChildXMLObjectByName(newSelector,
+ AbstractXMLObject newRoot = findXMLNodeWithSelector(newSelector,
root);
if (newRoot == null) {
+ newRoot = findXMLNodeWithSelector(newSelector, root, true,
+ false);
+ }
+ if (newRoot == null) {
// TODO If can't find the element , throw exception
// MODIFY by Dart , 2008.11.07
throw new RuntimeException(
Messages
.getString("XML2JavaAnalyzer.CantFindNodeErrorMessage1") + newSelector
+ Messages.getString("XML2JavaAnalyzer.CantFindNodeErrorMessage2"));
//$NON-NLS-1$ //$NON-NLS-2$
}
- this.setSelectorIsUsed(resourceConfig1.getSelector());
createMappingResourceConfigList(configList, listType,
- resourceConfig1, newRoot, targetBean);
+ processingResourceConfig, newRoot, targetBean);
} else {
AbstractXMLObject source = findXMLObjectWithSelectorString(
@@ -516,45 +574,22 @@
if (names == null)
return null;
int startIndex = 0;
- String s = null;
+ String firstName = null;
if (names.length > 1)
- s = names[0];
+ firstName = names[0];
else
- s = selector;
- AbstractXMLObject current = findChildXMLObjectByName(s, parent);
- if (current == parent) {
-
- } else {
- while (!(parent.getParent() instanceof TagList)) {
- parent = parent.getParent();
- }
- current = parent;
+ firstName = selector;
+ AbstractXMLObject current = findXMLNodeWithSelector(firstName, parent,
+ false, false);
+ if (current == null) {
+ current = findXMLNodeWithSelector(firstName, parent, true, false);
}
+ if (current == null) {
+ return null;
+ }
for (int i = startIndex; i < names.length; i++) {
String name = names[i].trim();
- if (current instanceof TagObject && isXMLAttributeObject(name)) {
- List properties = ((TagObject) current).getProperties();
- name = name.substring(1);
- for (Iterator iterator = properties.iterator(); iterator
- .hasNext();) {
- TagPropertyObject property = (TagPropertyObject) iterator
- .next();
- if (name.equalsIgnoreCase(property.getName())) {
- current = property;
- break;
- }
- }
- } else {
- List list = current.getChildren();
- for (Iterator iterator = list.iterator(); iterator.hasNext();) {
- AbstractXMLObject child = (AbstractXMLObject) iterator
- .next();
- if (name.equalsIgnoreCase(child.getName())) {
- current = child;
- break;
- }
- }
- }
+ current = findXMLNodeWithSelector(name, current, false, true);
}
return current;
}
@@ -675,4 +710,34 @@
return typeCheckResults.toArray(new DesignTimeAnalyzeResult[] {});
}
+ public void setResourceConfigUsed(ResourceConfigType resourceConfig) {
+ usedResourceConfigList.add(resourceConfig);
+ }
+
+ public boolean isResourceConfigUsed(ResourceConfigType resourceConfig) {
+ return (usedResourceConfigList.indexOf(resourceConfig) != -1);
+ }
+
+ public void registeCreatedResourceConfig(String beanId,
+ ResourceConfigType resourceConfig) {
+ if(beanId == null) return;
+ beanId = beanId.trim().toLowerCase();
+ createdResourceConfigMap.put(beanId, resourceConfig);
+ }
+
+ public ResourceConfigType getCreatedResourceConfig(String beanId) {
+ if(beanId == null) return null;
+ beanId = beanId.trim().toLowerCase();
+ return createdResourceConfigMap.get(beanId);
+ }
+
+ public boolean isResourceConfigCreated(String beanId) {
+ if(beanId == null) return false;
+ beanId = beanId.trim().toLowerCase();
+ return getCreatedResourceConfig(beanId) != null;
+ }
+
+ public boolean isResourceConfigCreated(ResourceConfigType resourceConfig) {
+ return createdResourceConfigMap.containsValue(resourceConfig);
+ }
}