[jbosstools-commits] JBoss Tools SVN: r13105 - in trunk/smooks/plugins: org.jboss.tools.smooks.ui and 20 other directories.

jbosstools-commits at lists.jboss.org jbosstools-commits at lists.jboss.org
Sun Jan 18 02:45:39 EST 2009


Author: DartPeng
Date: 2009-01-18 02:45:38 -0500 (Sun, 18 Jan 2009)
New Revision: 13105

Added:
   trunk/smooks/plugins/org.jboss.tools.smooks.ui/icons/full/obj16/checkbox_checked.gif
   trunk/smooks/plugins/org.jboss.tools.smooks.ui/icons/full/obj16/checkbox_uncheck.gif
   trunk/smooks/plugins/org.jboss.tools.smooks.ui/schema/graphicalModelListener.exsd
   trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/javabean/model/Java2JavaAnalyzer.java
   trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/javabean/model/JavaBeanList.java
   trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/javabean/ui/AbstractJavaBeanBuilder.java
   trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/javabean/ui/BeanPopulatorGraphicalModelListener.java
   trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/javabean/ui/BeanPopulatorMappingAnalyzer.java
   trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/javabean/ui/JavaBeanSourceBuilder.java
   trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/javabean/ui/JavaBeanTargetBuilder.java
   trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/javabean/ui/JavaBeanViewerActionProvider.java
   trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/javabean/ui/TargetReferenceConnectionLine.java
   trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/javabean/ui/action/
   trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/javabean/ui/action/AddJavaBeanModelAction.java
   trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/javabean/ui/action/JavaBeanModelAction.java
   trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/javabean/ui/action/RemoveJavaBeanAction.java
   trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/ui/TargetTreeDragListener.java
   trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/ui/gef/model/GraphicalModelListenerManager.java
   trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/ui/gef/model/IGraphicalModelListener.java
   trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/xml2java/analyzer/XML2JavaAnalyzer2.java
Modified:
   trunk/smooks/plugins/org.jboss.tools.smooks.core/src/org/jboss/tools/smooks/model/util/SmooksModelUtils.java
   trunk/smooks/plugins/org.jboss.tools.smooks.ui/plugin.xml
   trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/analyzer/MappingModel.java
   trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/javabean/commandprocessor/JavaBeanModelCommandProcessor.java
   trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/javabean/model/BeanContentProvider.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/javabean/ui/JavaBeanConfigWizardPage.java
   trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/javabean/ui/JavaBeanLinePaintLitener.java
   trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/javabean/ui/JavaBeanModelLoadComposite.java
   trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/javabean/ui/JavaBeanPropertiesSection.java
   trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/javabean/ui/JavaImageConstants.java
   trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/javabean/ui/NewJavaBeanStrucutredDataWizard.java
   trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/ui/ConnectionPropertySection.java
   trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/ui/IXMLStructuredObject.java
   trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/ui/SmooksUIActivator.java
   trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/ui/editors/SmooksGraphicalFormPage.java
   trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/ui/editors/SmooksNormalContentEditFormPage.java
   trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/ui/editors/TransformDataTreeViewer.java
   trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/ui/gef/commands/CreateConnectionCommand.java
   trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/ui/gef/commands/DeleteConnectionCommand.java
   trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/ui/gef/editparts/AbstractStructuredDataEditPart.java
   trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/ui/gef/editparts/ConnectionPointEditPart.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/ui/gef/figures/ILineFigurePaintListener.java
   trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/ui/gef/figures/LinePaintListener.java
   trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/ui/gef/model/AbstractStructuredDataConnectionModel.java
   trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/ui/gef/model/IConnectableModel.java
   trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/ui/gef/model/PropertyModel.java
   trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/ui/gef/model/StructuredDataContentModel.java
   trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/ui/gef/model/StructuredDataModel.java
   trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/ui/gef/model/TreeItemRelationModel.java
   trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/ui/gef/policy/CustomGraphicalNodeEditPolicy.java
   trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/ui/gef/tools/TargetTreeDropTargetListener.java
   trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/ui/modelparser/SmooksConfigurationFileGenerateContext.java
   trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/utils/SmooksExtensionPointConstants.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/xml/model/AbstractXMLObject.java
   trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/xml/model/TagList.java
   trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/xml/ui/AddXMLChildNodeAction.java
   trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/xml/ui/XMLPropertiesSection.java
   trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/xml2java/analyzer/XML2JavaAnalyzer.java
Log:
JBIDE-3580

Finish the major functions of the *2Java analyzer.

Modified: trunk/smooks/plugins/org.jboss.tools.smooks.core/src/org/jboss/tools/smooks/model/util/SmooksModelUtils.java
===================================================================
--- trunk/smooks/plugins/org.jboss.tools.smooks.core/src/org/jboss/tools/smooks/model/util/SmooksModelUtils.java	2009-01-18 07:41:24 UTC (rev 13104)
+++ trunk/smooks/plugins/org.jboss.tools.smooks.core/src/org/jboss/tools/smooks/model/util/SmooksModelUtils.java	2009-01-18 07:45:38 UTC (rev 13105)
@@ -10,6 +10,7 @@
  ******************************************************************************/
 package org.jboss.tools.smooks.model.util;
 
+import java.util.Collections;
 import java.util.Iterator;
 import java.util.List;
 
@@ -75,7 +76,7 @@
 				return bindingList;
 			}
 		}
-		return null;
+		return Collections.EMPTY_LIST;
 	}
 	
 	public static boolean isBeanPopulatorResource(ResourceConfigType type) {

Added: trunk/smooks/plugins/org.jboss.tools.smooks.ui/icons/full/obj16/checkbox_checked.gif
===================================================================
(Binary files differ)


Property changes on: trunk/smooks/plugins/org.jboss.tools.smooks.ui/icons/full/obj16/checkbox_checked.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/smooks/plugins/org.jboss.tools.smooks.ui/icons/full/obj16/checkbox_uncheck.gif
===================================================================
(Binary files differ)


Property changes on: trunk/smooks/plugins/org.jboss.tools.smooks.ui/icons/full/obj16/checkbox_uncheck.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Modified: trunk/smooks/plugins/org.jboss.tools.smooks.ui/plugin.xml
===================================================================
--- trunk/smooks/plugins/org.jboss.tools.smooks.ui/plugin.xml	2009-01-18 07:41:24 UTC (rev 13104)
+++ trunk/smooks/plugins/org.jboss.tools.smooks.ui/plugin.xml	2009-01-18 07:45:38 UTC (rev 13105)
@@ -6,6 +6,7 @@
    <extension-point id="commandProcessor" name="commandProcessor" schema="schema/commandProcessor.exsd"/>
    <extension-point id="menuActionProvider" name="menuActionProvider" schema="schema/menuActionProvider.exsd"/>
    <extension-point id="linePaintListener" name="linePaintListener" schema="schema/linePaintListener.exsd"/>
+   <extension-point id="graphicalModelListener" name="graphicalModelListener" schema="schema/graphicalModelListener.exsd"/>
   <extension point="org.eclipse.emf.ecore.generated_package">
     <package 
        uri = "http://www.jboss.org/tools/smooks/graphicalInformation" 
@@ -150,9 +151,9 @@
      <mappingAnalyzer
            class="org.jboss.tools.smooks.javabean.analyzer.JavaBeanAnalyzer"
            name="Java"
-           typeID="org.jboss.tools.smooks.ui.viewerInitor.javabean">
+           typeID="org.jboss.tools.smooks.ui.viewerInitor.javabean1">
         <targetSourceType
-              id="org.jboss.tools.smooks.ui.viewerInitor.javabean"
+              id="org.jboss.tools.smooks.ui.viewerInitor.javabean1"
               name="java2java">
         </targetSourceType>
      </mappingAnalyzer>
@@ -160,13 +161,13 @@
            class="org.jboss.tools.smooks.javabean.analyzer.JavaBeanAnalyzer"
            level="0"
            name="Java"
-           typeID="org.jboss.tools.smooks.ui.viewerInitor.javabean">
+           typeID="org.jboss.tools.smooks.ui.viewerInitor.javabean1">
      </sourceModelAnalyzer>
      <targetModelAnalyzer
            class="org.jboss.tools.smooks.javabean.analyzer.JavaBeanAnalyzer"
            level="0"
            name="Java"
-           typeID="org.jboss.tools.smooks.ui.viewerInitor.javabean">
+           typeID="org.jboss.tools.smooks.ui.viewerInitor.javabean1">
      </targetModelAnalyzer>
   </extension>
   
@@ -186,7 +187,7 @@
    <extension
          point="org.jboss.tools.smooks.ui.analyzer">
       <mappingAnalyzer
-            class="org.jboss.tools.smooks.xml2java.analyzer.XML2JavaAnalyzer"
+            class="org.jboss.tools.smooks.xml2java.analyzer.XML2JavaAnalyzer2"
             name="XML2Java"
             typeID="org.jboss.tools.smooks.xml.viewerInitor.xml">
          <targetSourceType
@@ -258,6 +259,10 @@
             class="org.jboss.tools.smooks.xml.ui.XMLViewerActionProvider"
             typeID="org.jboss.tools.smooks.xml.viewerInitor.xml">
       </menuActionProvider>
+      <menuActionProvider
+            class="org.jboss.tools.smooks.javabean.ui.JavaBeanViewerActionProvider"
+            typeID="org.jboss.tools.smooks.ui.viewerInitor.javabean">
+      </menuActionProvider>
    </extension>
    <extension
          point="org.jboss.tools.smooks.ui.linePaintListener">
@@ -277,4 +282,41 @@
             targetId="org.jboss.tools.smooks.ui.viewerInitor.javabean">
       </linePaintListener>
    </extension>
+   <extension
+         point="org.jboss.tools.smooks.ui.analyzer">
+      <mappingAnalyzer
+            class="org.jboss.tools.smooks.javabean.model.Java2JavaAnalyzer"
+            name="Java"
+            typeID="org.jboss.tools.smooks.ui.viewerInitor.javabean">
+         <targetSourceType
+               id="org.jboss.tools.smooks.ui.viewerInitor.javabean"
+               name="java2java">
+         </targetSourceType>
+      </mappingAnalyzer>
+      <sourceModelAnalyzer
+            class="org.jboss.tools.smooks.javabean.ui.JavaBeanSourceBuilder"
+            level="0"
+            name="Java"
+            typeID="org.jboss.tools.smooks.ui.viewerInitor.javabean">
+      </sourceModelAnalyzer>
+      <targetModelAnalyzer
+            class="org.jboss.tools.smooks.javabean.ui.JavaBeanTargetBuilder"
+            level="0"
+            name="Java"
+            typeID="org.jboss.tools.smooks.ui.viewerInitor.javabean">
+      </targetModelAnalyzer>
+   </extension>
+   <extension
+         point="org.jboss.tools.smooks.ui.graphicalModelListener">
+      <graphicalModelListener
+            class="org.jboss.tools.smooks.javabean.ui.BeanPopulatorGraphicalModelListener"
+            sourceId="org.jboss.tools.smooks.ui.viewerInitor.javabean"
+            targetId="org.jboss.tools.smooks.ui.viewerInitor.javabean">
+      </graphicalModelListener>
+      <graphicalModelListener
+            class="org.jboss.tools.smooks.javabean.ui.BeanPopulatorGraphicalModelListener"
+            sourceId="org.jboss.tools.smooks.xml.viewerInitor.xml"
+            targetId="org.jboss.tools.smooks.ui.viewerInitor.javabean">
+      </graphicalModelListener>
+   </extension>
 </plugin>

Added: trunk/smooks/plugins/org.jboss.tools.smooks.ui/schema/graphicalModelListener.exsd
===================================================================
--- trunk/smooks/plugins/org.jboss.tools.smooks.ui/schema/graphicalModelListener.exsd	                        (rev 0)
+++ trunk/smooks/plugins/org.jboss.tools.smooks.ui/schema/graphicalModelListener.exsd	2009-01-18 07:45:38 UTC (rev 13105)
@@ -0,0 +1,116 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.jboss.tools.smooks.ui" xmlns="http://www.w3.org/2001/XMLSchema">
+<annotation>
+      <appinfo>
+         <meta.schema plugin="org.jboss.tools.smooks.ui" id="graphicalModelListener" name="graphicalModelListener"/>
+      </appinfo>
+      <documentation>
+         [Enter description of this extension point.]
+      </documentation>
+   </annotation>
+
+   <element name="extension">
+      <annotation>
+         <appinfo>
+            <meta.element />
+         </appinfo>
+      </annotation>
+      <complexType>
+         <sequence minOccurs="1" maxOccurs="unbounded">
+            <element ref="graphicalModelListener"/>
+         </sequence>
+         <attribute name="point" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="id" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+               <appinfo>
+                  <meta.attribute translatable="true"/>
+               </appinfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="graphicalModelListener">
+      <complexType>
+         <attribute name="sourceId" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="targetId" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="class" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+               <appinfo>
+                  <meta.attribute kind="java"/>
+               </appinfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="since"/>
+      </appinfo>
+      <documentation>
+         [Enter the first release in which this extension point appears.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="examples"/>
+      </appinfo>
+      <documentation>
+         [Enter extension point usage example here.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="apiinfo"/>
+      </appinfo>
+      <documentation>
+         [Enter API information here.]
+      </documentation>
+   </annotation>
+
+   <annotation>
+      <appinfo>
+         <meta.section type="implementation"/>
+      </appinfo>
+      <documentation>
+         [Enter information about supplied implementation of this extension point.]
+      </documentation>
+   </annotation>
+
+
+</schema>


Property changes on: trunk/smooks/plugins/org.jboss.tools.smooks.ui/schema/graphicalModelListener.exsd
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Modified: trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/analyzer/MappingModel.java
===================================================================
--- trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/analyzer/MappingModel.java	2009-01-18 07:41:24 UTC (rev 13104)
+++ trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/analyzer/MappingModel.java	2009-01-18 07:45:38 UTC (rev 13105)
@@ -4,6 +4,7 @@
 package org.jboss.tools.smooks.analyzer;
 
 import java.util.ArrayList;
+import java.util.Iterator;
 import java.util.List;
 
 import org.jboss.tools.smooks.ui.gef.model.PropertyModel;
@@ -22,6 +23,16 @@
 		setSource(source);
 		setTarget(target);
 	}
+	
+	public Object getPropertyValue(String name){
+		for (Iterator iterator = properties.iterator(); iterator.hasNext();) {
+			PropertyModel property = (PropertyModel) iterator.next();
+			if(name.equals(property.getName())){
+				return property.getValue();
+			}
+		}
+		return null;
+	}
 
 	public Object getSource() {
 		return source;

Modified: trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/javabean/commandprocessor/JavaBeanModelCommandProcessor.java
===================================================================
--- trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/javabean/commandprocessor/JavaBeanModelCommandProcessor.java	2009-01-18 07:41:24 UTC (rev 13104)
+++ trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/javabean/commandprocessor/JavaBeanModelCommandProcessor.java	2009-01-18 07:45:38 UTC (rev 13105)
@@ -11,25 +11,27 @@
 package org.jboss.tools.smooks.javabean.commandprocessor;
 
 import java.util.Collection;
-import java.util.Iterator;
 import java.util.List;
 
 import org.eclipse.emf.common.command.Command;
+import org.eclipse.gef.DefaultEditDomain;
+import org.eclipse.gef.EditDomain;
+import org.eclipse.gef.commands.CommandStack;
 import org.eclipse.gef.commands.CompoundCommand;
 import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.jboss.tools.smooks.javabean.model.JavaBeanList;
 import org.jboss.tools.smooks.javabean.model.JavaBeanModel;
+import org.jboss.tools.smooks.javabean.ui.BeanPopulatorMappingAnalyzer;
 import org.jboss.tools.smooks.ui.gef.commandprocessor.ICommandProcessor;
 import org.jboss.tools.smooks.ui.gef.commands.CreateConnectionCommand;
 import org.jboss.tools.smooks.ui.gef.model.AbstractStructuredDataModel;
-import org.jboss.tools.smooks.ui.gef.model.GraphRootModel;
 import org.jboss.tools.smooks.ui.gef.model.IConnectableModel;
 import org.jboss.tools.smooks.ui.gef.model.LineConnectionModel;
 import org.jboss.tools.smooks.ui.gef.model.PropertyModel;
+import org.jboss.tools.smooks.ui.gef.model.SourceModel;
 import org.jboss.tools.smooks.ui.gef.model.TargetModel;
 import org.jboss.tools.smooks.ui.modelparser.SmooksConfigurationFileGenerateContext;
 import org.jboss.tools.smooks.utils.UIUtils;
-import org.jboss.tools.smooks.xml.model.AbstractXMLObject;
-import org.jboss.tools.smooks.xml.model.TagList;
 
 /**
  * @author Dart Peng
@@ -43,6 +45,124 @@
 		return true;
 	}
 
+	private boolean isTargetDeep(JavaBeanModel javaBean) {
+		JavaBeanModel parent = javaBean.getParent();
+		if (parent != null) {
+			parent = parent.getParent();
+		}
+		if (parent != null) {
+			parent = parent.getParent();
+			if ((parent != null)) {
+				return false;
+			} else {
+				if (parent != null && !(parent instanceof JavaBeanList)) {
+					return false;
+				}
+			}
+		}
+		return true;
+	}
+
+	private boolean isSecondLevelComplexJavaBean(JavaBeanModel beanModel) {
+		if (beanModel.isPrimitive())
+			return false;
+		JavaBeanModel parent = beanModel.getParent();
+		if (parent != null) {
+			if (parent instanceof JavaBeanList) {
+				return false;
+			}
+			parent = parent.getParent();
+		}
+		if (parent != null) {
+			if (!(parent instanceof JavaBeanList))
+				return false;
+		}
+		return true;
+	}
+
+	private boolean checkSourceToTarget(
+			AbstractStructuredDataModel sourceGraphModel,
+			AbstractStructuredDataModel targetGraphModel,
+			SmooksConfigurationFileGenerateContext context) {
+		Object source = ((AbstractStructuredDataModel) sourceGraphModel)
+				.getReferenceEntityModel();
+		Object t = ((AbstractStructuredDataModel) targetGraphModel)
+				.getReferenceEntityModel();
+		List connections = ((IConnectableModel) targetGraphModel)
+				.getModelTargetConnections();
+		// *2Java , allow the target node have two connections :
+		// 1.beancreation,2.referencebinding
+		if (connections.size() > 1)
+			return false;
+		if (connections.size() == 1) {
+			LineConnectionModel line = (LineConnectionModel) connections.get(0);
+			Object bindingType = line
+					.getProperty(BeanPopulatorMappingAnalyzer.BINDING_TYPE);
+			if (!BeanPopulatorMappingAnalyzer.REFERENCE_BINDING
+					.equals(bindingType)) {
+				if (sourceGraphModel instanceof SourceModel) {
+					return false;
+				}
+			}
+		}
+		if (t instanceof JavaBeanModel) {
+			if (isSecondLevelComplexJavaBean((JavaBeanModel) t)
+					&& sourceGraphModel instanceof SourceModel) {
+				createReferenceConnection(source, (JavaBeanModel) t, context);
+				return false;
+			}
+		}
+		if (source instanceof JavaBeanModel && t instanceof JavaBeanModel
+				&& sourceGraphModel instanceof SourceModel) {
+
+			JavaBeanModel sourceModel = (JavaBeanModel) source;
+			JavaBeanModel targetModel = (JavaBeanModel) t;
+			boolean sis = ((JavaBeanModel) source).isPrimitive();
+			boolean tis = ((JavaBeanModel) t).isPrimitive();
+			if ((sis && !tis) || (!sis && tis)) {
+				return false;
+			}
+
+			Class sourceClass = sourceModel.getBeanClass();
+			Class targetClass = targetModel.getBeanClass();
+			boolean isCompositeSource = sourceClass.isArray()
+					|| Collection.class.isAssignableFrom(sourceClass);
+			boolean isCompositeTarget = targetClass.isArray()
+					|| Collection.class.isAssignableFrom(targetClass);
+			if (isCompositeSource != isCompositeTarget)
+				return false;
+		}
+		return true;
+	}
+
+	private boolean checkTargetToTarget(
+			AbstractStructuredDataModel sourceGraphModel,
+			AbstractStructuredDataModel targetGraphModel,
+			SmooksConfigurationFileGenerateContext context) {
+		if (sourceGraphModel instanceof SourceModel) {
+			return true;
+		}
+		List connections = ((IConnectableModel) targetGraphModel)
+				.getModelTargetConnections();
+		List connections1 = ((IConnectableModel) sourceGraphModel)
+		.getModelSourceConnections();
+		// *2Java , allow the target node have two connections :
+		// 1.beancreation,2.referencebinding
+		// reference binding need the target node have the bean creation
+		// connection already.
+		if(connections1.size() > 0) return false;
+		if (connections.size() != 1)
+			return false;
+		LineConnectionModel line = (LineConnectionModel) connections.get(0);
+		Object bindingType = line
+				.getProperty(BeanPopulatorMappingAnalyzer.BINDING_TYPE);
+		if (!BeanPopulatorMappingAnalyzer.BEAN_CREATION.equals(bindingType)) {
+			return false;
+		}
+
+		return true;
+	}
+
 	private boolean checkGEFCommand(
 			org.eclipse.gef.commands.Command gefCommand,
 			SmooksConfigurationFileGenerateContext context) {
@@ -54,41 +174,81 @@
 				Object s = command.getSource();
 				if (m instanceof AbstractStructuredDataModel
 						&& s instanceof AbstractStructuredDataModel) {
-					Object source = ((AbstractStructuredDataModel) s)
-							.getReferenceEntityModel();
-					Object t = ((AbstractStructuredDataModel) m)
-							.getReferenceEntityModel();
-					List connections = ((IConnectableModel) m).getModelTargetConnections();
-					if(connections.size() > 0) return false;
-					if (source instanceof JavaBeanModel
-							&& t instanceof JavaBeanModel) {
-
-						JavaBeanModel sourceModel = (JavaBeanModel) source;
-						JavaBeanModel targetModel = (JavaBeanModel) t;
-						boolean sis = ((JavaBeanModel) source).isPrimitive();
-						boolean tis = ((JavaBeanModel) t).isPrimitive();
-						if ((sis && !tis) || (!sis && tis)) {
+					AbstractStructuredDataModel sourceGraphModel = (AbstractStructuredDataModel) s;
+					AbstractStructuredDataModel targetGraphModel = (AbstractStructuredDataModel) m;
+					Object t = targetGraphModel.getReferenceEntityModel();
+					if (t instanceof JavaBeanModel) {
+						if (!isTargetDeep((JavaBeanModel) t)) {
 							return false;
 						}
-
-						Class sourceClass = sourceModel.getBeanClass();
-						Class targetClass = targetModel.getBeanClass();
-						boolean isCompositeSource = sourceClass.isArray()
-								|| Collection.class
-										.isAssignableFrom(sourceClass);
-						boolean isCompositeTarget = targetClass.isArray()
-								|| Collection.class
-										.isAssignableFrom(targetClass);
-						if (isCompositeSource != isCompositeTarget)
-							return false;
-
 					}
+					if (!checkSourceToTarget(sourceGraphModel,
+							targetGraphModel, context)) {
+						return false;
+					}
+					if (!checkTargetToTarget(sourceGraphModel,
+							targetGraphModel, context)) {
+						return false;
+					}
 				}
 			}
 		}
 		return true;
 	}
 
+	protected void createReferenceConnection(Object source,
+			JavaBeanModel target, SmooksConfigurationFileGenerateContext context) {
+		CompoundCommand commands = new CompoundCommand();
+		JavaBeanList list = (JavaBeanList) target.getRootParent();
+		JavaBeanModel cloneModel = (JavaBeanModel) target.clone();
+		list.addJavaBean(cloneModel);
+
+		AbstractStructuredDataModel targetGraphModel = UIUtils.findGraphModel(
+				context.getGraphicalRootModel(), target);
+		AbstractStructuredDataModel cloneTargetGraphModel = UIUtils
+				.findGraphModel(context.getGraphicalRootModel(), cloneModel);
+		AbstractStructuredDataModel sourceGraphModel = UIUtils.findGraphModel(
+				context.getGraphicalRootModel(), source);
+
+		if (cloneTargetGraphModel != null && sourceGraphModel != null
+				&& targetGraphModel != null) {
+			CreateConnectionCommand beanCreationLineCommand = new CreateConnectionCommand();
+			beanCreationLineCommand
+					.setSource((IConnectableModel) sourceGraphModel);
+			beanCreationLineCommand
+					.setTarget((IConnectableModel) cloneTargetGraphModel);
+			PropertyModel bindingType = new PropertyModel(
+					BeanPopulatorMappingAnalyzer.BINDING_TYPE,
+					BeanPopulatorMappingAnalyzer.BEAN_CREATION);
+			beanCreationLineCommand.addPropertyModel(bindingType);
+			commands.add(beanCreationLineCommand);
+
+			CreateConnectionCommand referenceLineCommand = new CreateConnectionCommand();
+			referenceLineCommand
+					.setSource((IConnectableModel) targetGraphModel);
+			referenceLineCommand
+					.setTarget((IConnectableModel) cloneTargetGraphModel);
+			PropertyModel referenceType = new PropertyModel(
+					BeanPopulatorMappingAnalyzer.BINDING_TYPE,
+					BeanPopulatorMappingAnalyzer.REFERENCE_BINDING);
+			referenceLineCommand.addPropertyModel(referenceType);
+			commands.add(referenceLineCommand);
+		}
+
+		if (commands.size() > 0) {
+			executeGEFCommand(commands, context);
+		}
+	}
+
+	protected void executeGEFCommand(org.eclipse.gef.commands.Command command,
+			SmooksConfigurationFileGenerateContext context) {
+		EditDomain domain = context.getGefDomain();
+		CommandStack stack = domain.getCommandStack();
+		if (stack != null) {
+			stack.execute(command);
+		}
+	}
+
 	/*
 	 * (non-Javadoc)
 	 * 
@@ -100,6 +260,7 @@
 	public boolean processGEFCommand(
 			org.eclipse.gef.commands.Command gefCommand,
 			SmooksConfigurationFileGenerateContext context) {
+		// if(true) return true;
 		Object source = null;
 		JavaBeanModel target = null;
 		if (!checkGEFCommand(gefCommand, context)) {
@@ -119,9 +280,15 @@
 							.getReferenceEntityModel();
 					if (t instanceof JavaBeanModel) {
 						target = (JavaBeanModel) t;
+					} else {
+						return true;
 					}
 					if (!UIUtils.isInstanceCreatingConnection(source, t)) {
 						if (t instanceof JavaBeanModel) {
+							PropertyModel bindingType = new PropertyModel(
+									BeanPopulatorMappingAnalyzer.BINDING_TYPE,
+									BeanPopulatorMappingAnalyzer.PROPERTY_BINDING);
+							command.addPropertyModel(bindingType);
 							Class clazz = ((JavaBeanModel) t).getBeanClass();
 							if (clazz != null && clazz != String.class) {
 								PropertyModel property = new PropertyModel();
@@ -130,94 +297,105 @@
 								command.addPropertyModel(property);
 							}
 						}
+					} else {
+						if (s instanceof TargetModel) {
+							PropertyModel bindingType = new PropertyModel(
+									BeanPopulatorMappingAnalyzer.BINDING_TYPE,
+									BeanPopulatorMappingAnalyzer.REFERENCE_BINDING);
+							command.addPropertyModel(bindingType);
+						}
+						if (s instanceof SourceModel) {
+							PropertyModel bindingType = new PropertyModel(
+									BeanPopulatorMappingAnalyzer.BINDING_TYPE,
+									BeanPopulatorMappingAnalyzer.BEAN_CREATION);
+							command.addPropertyModel(bindingType);
+						}
 					}
 				}
 			}
 
 			CompoundCommand compoundCommand = new CompoundCommand();
-			CreateConnectionCommand connectRootNodeCommand = connectRootNode(
-					source, target, context);
-			if (connectRootNodeCommand != null)
-				connectRootNodeCommand.execute();
 			fillCreateParentLinkCommand(compoundCommand, source, target,
 					context);
 			if (!compoundCommand.isEmpty()) {
-				compoundCommand.execute();
+				executeGEFCommand(compoundCommand, context);
 			}
 		}
 		return true;
 	}
 
-	private CreateConnectionCommand connectRootNode(Object source,
-			Object target, SmooksConfigurationFileGenerateContext context) {
-		JavaBeanModel javaBeanTarget = (JavaBeanModel) target;
-		Object sourceModel = source;
+	// private CreateConnectionCommand connectRootNode(Object source,
+	// Object target, SmooksConfigurationFileGenerateContext context) {
+	// JavaBeanModel javaBeanTarget = (JavaBeanModel) target;
+	// Object sourceModel = source;
+	//
+	// JavaBeanModel targetRoot = javaBeanTarget.getParent();
+	// JavaBeanModel tempTargetRoot = targetRoot;
+	// while (tempTargetRoot != null) {
+	// targetRoot = tempTargetRoot;
+	// tempTargetRoot = tempTargetRoot.getParent();
+	// }
+	// Object sourceRoot = null;
+	// if (sourceModel instanceof JavaBeanModel) {
+	// sourceRoot = ((JavaBeanModel) sourceModel).getParent();
+	// JavaBeanModel sourceTempRoot = (JavaBeanModel) sourceRoot;
+	// while (sourceTempRoot != null) {
+	// sourceRoot = sourceTempRoot;
+	// sourceTempRoot = ((JavaBeanModel) sourceTempRoot).getParent();
+	// }
+	// }
+	//
+	// if (sourceModel instanceof AbstractXMLObject) {
+	// sourceRoot = ((AbstractXMLObject) sourceModel).getParent();
+	// AbstractXMLObject tempParent = ((AbstractXMLObject) sourceRoot)
+	// .getParent();
+	// while (!(tempParent instanceof TagList)) {
+	// sourceRoot = tempParent;
+	// tempParent = tempParent.getParent();
+	// }
+	// }
+	// GraphRootModel graphRoot = context.getGraphicalRootModel();
+	// if (sourceRoot == null || targetRoot == null)
+	// return null;
+	// AbstractStructuredDataModel graphSourceRoot = UIUtils.findGraphModel(
+	// graphRoot, sourceRoot);
+	// AbstractStructuredDataModel graphTargetRoot = UIUtils.findGraphModel(
+	// graphRoot, targetRoot);
+	//
+	// List<TargetModel> graphTargetList = graphRoot.loadTargetModelList();
+	// boolean isConnected = false;
+	// for (Iterator iterator = graphTargetList.iterator(); iterator.hasNext();)
+	// {
+	// TargetModel targetModel = (TargetModel) iterator.next();
+	// if (targetModel == graphTargetRoot) {
+	// List connections = targetModel.getModelTargetConnections();
+	// for (Iterator iterator2 = connections.iterator(); iterator2
+	// .hasNext();) {
+	// Object object = (Object) iterator2.next();
+	// if (object instanceof LineConnectionModel) {
+	// Object cs = ((LineConnectionModel) object).getSource();
+	// if (cs == graphSourceRoot) {
+	// isConnected = true;
+	// break;
+	// }
+	// }
+	// }
+	// }
+	// if (isConnected)
+	// break;
+	// }
+	//
+	// if (!isConnected) {
+	// CreateConnectionCommand connectionCommand = new
+	// CreateConnectionCommand();
+	// connectionCommand.setSource(graphSourceRoot);
+	// connectionCommand.setTarget(graphTargetRoot);
+	// return connectionCommand;
+	// }
+	//
+	// return null;
+	// }
 
-		JavaBeanModel targetRoot = javaBeanTarget.getParent();
-		JavaBeanModel tempTargetRoot = targetRoot;
-		while (tempTargetRoot != null) {
-			targetRoot = tempTargetRoot;
-			tempTargetRoot = tempTargetRoot.getParent();
-		}
-		Object sourceRoot = null;
-		if (sourceModel instanceof JavaBeanModel) {
-			sourceRoot = ((JavaBeanModel) sourceModel).getParent();
-			JavaBeanModel sourceTempRoot = (JavaBeanModel) sourceRoot;
-			while (sourceTempRoot != null) {
-				sourceRoot = sourceTempRoot;
-				sourceTempRoot = ((JavaBeanModel) sourceTempRoot).getParent();
-			}
-		}
-
-		if (sourceModel instanceof AbstractXMLObject) {
-			sourceRoot = ((AbstractXMLObject) sourceModel).getParent();
-			AbstractXMLObject tempParent = ((AbstractXMLObject) sourceRoot)
-					.getParent();
-			while (!(tempParent instanceof TagList)) {
-				sourceRoot = tempParent;
-				tempParent = tempParent.getParent();
-			}
-		}
-		GraphRootModel graphRoot = context.getGraphicalRootModel();
-		if (sourceRoot == null || targetRoot == null)
-			return null;
-		AbstractStructuredDataModel graphSourceRoot = UIUtils.findGraphModel(
-				graphRoot, sourceRoot);
-		AbstractStructuredDataModel graphTargetRoot = UIUtils.findGraphModel(
-				graphRoot, targetRoot);
-
-		List<TargetModel> graphTargetList = graphRoot.loadTargetModelList();
-		boolean isConnected = false;
-		for (Iterator iterator = graphTargetList.iterator(); iterator.hasNext();) {
-			TargetModel targetModel = (TargetModel) iterator.next();
-			if (targetModel == graphTargetRoot) {
-				List connections = targetModel.getModelTargetConnections();
-				for (Iterator iterator2 = connections.iterator(); iterator2
-						.hasNext();) {
-					Object object = (Object) iterator2.next();
-					if (object instanceof LineConnectionModel) {
-						Object cs = ((LineConnectionModel) object).getSource();
-						if (cs == graphSourceRoot) {
-							isConnected = true;
-							break;
-						}
-					}
-				}
-			}
-			if (isConnected)
-				break;
-		}
-
-		if (!isConnected) {
-			CreateConnectionCommand connectionCommand = new CreateConnectionCommand();
-			connectionCommand.setSource(graphSourceRoot);
-			connectionCommand.setTarget(graphTargetRoot);
-			return connectionCommand;
-		}
-
-		return null;
-	}
-
 	private void fillCreateParentLinkCommand(CompoundCommand compoundCommand,
 			Object source, JavaBeanModel target,
 			SmooksConfigurationFileGenerateContext context) {
@@ -261,6 +439,34 @@
 					CreateConnectionCommand connectionCommand = new CreateConnectionCommand();
 					connectionCommand.setSource(sourceParentGraphModel);
 					connectionCommand.setTarget(targetParentGraphModel);
+					if (!UIUtils.isInstanceCreatingConnection(source,
+							targetParent)) {
+						Class clazz = ((JavaBeanModel) targetParent)
+								.getBeanClass();
+						PropertyModel bindingType = new PropertyModel(
+								BeanPopulatorMappingAnalyzer.BINDING_TYPE,
+								BeanPopulatorMappingAnalyzer.PROPERTY_BINDING);
+						connectionCommand.addPropertyModel(bindingType);
+						if (clazz != null && clazz != String.class) {
+							PropertyModel property = new PropertyModel();
+							property.setName("type");
+							property.setValue(getTypeString(clazz));
+							connectionCommand.addPropertyModel(property);
+						}
+					} else {
+						if (sourceParentGraphModel instanceof TargetModel) {
+							PropertyModel bindingType = new PropertyModel(
+									BeanPopulatorMappingAnalyzer.BINDING_TYPE,
+									BeanPopulatorMappingAnalyzer.REFERENCE_BINDING);
+							connectionCommand.addPropertyModel(bindingType);
+						}
+						if (sourceParentGraphModel instanceof SourceModel) {
+							PropertyModel bindingType = new PropertyModel(
+									BeanPopulatorMappingAnalyzer.BINDING_TYPE,
+									BeanPopulatorMappingAnalyzer.BEAN_CREATION);
+							connectionCommand.addPropertyModel(bindingType);
+						}
+					}
 					return connectionCommand;
 				}
 			}

Modified: trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/javabean/model/BeanContentProvider.java
===================================================================
--- trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/javabean/model/BeanContentProvider.java	2009-01-18 07:41:24 UTC (rev 13104)
+++ trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/javabean/model/BeanContentProvider.java	2009-01-18 07:45:38 UTC (rev 13105)
@@ -1,10 +1,9 @@
 package org.jboss.tools.smooks.javabean.model;
 
-import java.util.List;
-
 import org.eclipse.jface.viewers.IStructuredContentProvider;
 import org.eclipse.jface.viewers.ITreeContentProvider;
 import org.eclipse.jface.viewers.Viewer;
+import org.jboss.tools.smooks.ui.IXMLStructuredObject;
 /**
  * 
  * @author Dart Peng
@@ -14,8 +13,8 @@
 		IStructuredContentProvider {
 
 	public Object[] getChildren(Object arg0) {
-		if (arg0 instanceof JavaBeanModel) {
-			return ((JavaBeanModel) arg0).getProperties().toArray();
+		if (arg0 instanceof IXMLStructuredObject) {
+			return ((IXMLStructuredObject) arg0).getChildren().toArray();
 		}
 		return new Object[] {};
 	}
@@ -35,10 +34,10 @@
 	}
 
 	public Object[] getElements(Object arg0) {
-		if (arg0 instanceof List) {
-			return ((List) arg0).toArray();
+		if (arg0 instanceof JavaBeanList) {
+			return ((JavaBeanList) arg0).getChildren().toArray();
 		}
-		return new Object[]{arg0};
+		return new Object[]{};
 	}
 
 	public void dispose() {

Added: trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/javabean/model/Java2JavaAnalyzer.java
===================================================================
--- trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/javabean/model/Java2JavaAnalyzer.java	                        (rev 0)
+++ trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/javabean/model/Java2JavaAnalyzer.java	2009-01-18 07:45:38 UTC (rev 13105)
@@ -0,0 +1,23 @@
+/**
+ * 
+ */
+package org.jboss.tools.smooks.javabean.model;
+
+import org.jboss.tools.smooks.javabean.ui.BeanPopulatorMappingAnalyzer;
+
+/**
+ * @author Dart
+ *
+ */
+public class Java2JavaAnalyzer extends BeanPopulatorMappingAnalyzer {
+
+	@Override
+	protected boolean checkSourceAndTarget(Object sourceObject,
+			Object targetObject) {
+		if(sourceObject instanceof JavaBeanList &&
+				targetObject instanceof JavaBeanList) 
+			return true;
+		return false;
+	}
+	
+}


Property changes on: trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/javabean/model/Java2JavaAnalyzer.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Added: trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/javabean/model/JavaBeanList.java
===================================================================
--- trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/javabean/model/JavaBeanList.java	                        (rev 0)
+++ trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/javabean/model/JavaBeanList.java	2009-01-18 07:45:38 UTC (rev 13105)
@@ -0,0 +1,119 @@
+/**
+ * 
+ */
+package org.jboss.tools.smooks.javabean.model;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+
+import org.jboss.tools.smooks.ui.IXMLStructuredObject;
+import org.jboss.tools.smooks.ui.editors.TransformDataTreeViewer;
+
+/**
+ * @author Dart
+ *
+ */
+public class JavaBeanList extends JavaBeanModel implements IXMLStructuredObject{
+	
+
+	private List<IXMLStructuredObject> children = null;
+	
+	public List<IXMLStructuredObject> getChildren() {
+		if(children == null){
+			children = new ArrayList<IXMLStructuredObject>();
+		}
+		return children;
+	}
+	
+	public JavaBeanList(){
+		super(null);
+	}
+
+	@Override
+	public boolean isPrimitive() {
+		return false;
+	}
+	
+	public String getJavaBeanName(JavaBeanModel javaBean){
+		List children = getChildren();
+		int sameNameBean = 0;
+		for (Iterator iterator = children.iterator(); iterator.hasNext();) {
+			JavaBeanModel child = (JavaBeanModel) iterator.next();
+			if(child.getBeanClass().getName().equals(javaBean.getBeanClass().getName())){
+				sameNameBean++;
+			}
+		}
+		if(sameNameBean > 0){
+			String name = javaBean.getName() + String.valueOf(sameNameBean);
+			while(hasSameNameBean(name,javaBean.getBeanClass())){
+				sameNameBean++;
+				name = javaBean.getName() + String.valueOf(sameNameBean);
+			}
+			return name;
+		}
+		return javaBean.getName();
+	}
+	
+	private boolean hasSameNameBean(String name , Class clazz){
+		for (Iterator iterator = children.iterator(); iterator.hasNext();) {
+			JavaBeanModel child = (JavaBeanModel) iterator.next();
+			if(child.getBeanClass().getName().equals(clazz.getName())){
+				if(name.equals(child.getName())){
+					return true;
+				}
+			}
+		}
+		return false;
+	}
+	
+
+	public void addJavaBean(JavaBeanModel javaBean){
+		if(javaBean == null) return;
+		String name = javaBean.getName();
+		String n1 = getJavaBeanName(javaBean);
+		if(!name.equals(n1)){
+			javaBean.setName(n1);
+		}
+		javaBean.setParent(this);
+		this.getChildren().add(javaBean);
+		support.firePropertyChange(TransformDataTreeViewer.ADD_CHILDREN_EVENT, null, javaBean);
+	}
+	
+	public void removeJavaBean(JavaBeanModel javaBean){
+		this.getChildren().remove(javaBean);
+		javaBean.setParent(null);
+		support.firePropertyChange(TransformDataTreeViewer.REMOVE_CHILDREN_EVENT, javaBean, null);
+	}
+
+	@Override
+	public List getProperties() {
+		return Collections.EMPTY_LIST;
+	}
+
+	public Object getID() {
+		return this;
+	}
+
+	public String getNodeName() {
+		return null;
+	}
+
+	public JavaBeanModel getParent() {
+		return null;
+	}
+
+	public boolean isAttribute() {
+		// TODO Auto-generated method stub
+		return false;
+	}
+
+	@Override
+	public boolean isRootNode() {
+		return true;
+	}
+	
+	
+	
+}


Property changes on: trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/javabean/model/JavaBeanList.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

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-18 07:41:24 UTC (rev 13104)
+++ trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/javabean/model/JavaBeanModel.java	2009-01-18 07:45:38 UTC (rev 13105)
@@ -10,18 +10,20 @@
  ******************************************************************************/
 package org.jboss.tools.smooks.javabean.model;
 
+import java.beans.PropertyChangeListener;
+import java.beans.PropertyChangeSupport;
 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.Collections;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Properties;
 
+import org.eclipse.jdt.internal.corext.refactoring.typeconstraints.types.ExtendsWildcardType;
 import org.jboss.tools.smooks.analyzer.IValidatable;
 import org.jboss.tools.smooks.javabean.uitils.JavaPropertyUtils;
 import org.jboss.tools.smooks.ui.IXMLStructuredObject;
@@ -30,8 +32,13 @@
  * @author Dart Peng
  * 
  */
-public class JavaBeanModel implements IValidatable ,IXMLStructuredObject{
+public class JavaBeanModel implements IValidatable, IXMLStructuredObject,
+		Cloneable {
+	
+	private Properties extendProperties = new Properties();
 
+	protected PropertyChangeSupport support = new PropertyChangeSupport(this);
+
 	private String beanClassString = null;
 
 	public void setBeanClassString(String beanClassString) {
@@ -83,6 +90,14 @@
 		this.isRootClassModel = isRootClassModel;
 	}
 
+	public void addPropertyChangeListener(PropertyChangeListener listener) {
+		support.addPropertyChangeListener(listener);
+	}
+
+	public void removePropertyChangeListener(PropertyChangeListener listener) {
+		support.removePropertyChangeListener(listener);
+	}
+
 	// /**
 	// * @return the isRoot
 	// */
@@ -148,6 +163,7 @@
 	public PropertyDescriptor getPropertyDescriptor() {
 		return propertyDescriptor;
 	}
+	
 
 	public void setPropertyDescriptor(PropertyDescriptor propertyDescriptor) {
 		this.propertyDescriptor = propertyDescriptor;
@@ -164,7 +180,6 @@
 		if (this.name == null) {
 			this.name = beanClass.getSimpleName();
 		}
-
 		if (propertyDescriptor == null)
 			setRootClassModel(true);
 		this.propertyDescriptor = propertyDescriptor;
@@ -298,17 +313,21 @@
 				return properties;
 
 			Class beanType = beanClass;
-			if (this.componentClass != null) {
-				if (isArray() || isList()) {
+			if (isArray() || isList()) {
+				if (componentClass != null) {
 					JavaBeanModel proxyModel = new JavaBeanModel(
 							componentClass, componentClass.getSimpleName(),
 							null, beanClass, this.lazyLoadProperties);
 					beanType = componentClass;
+					addProperty(proxyModel);
 
+				} else {
+					JavaBeanModel proxyModel = new JavaBeanModel(Object.class,
+							"object", null, beanClass, this.lazyLoadProperties);
+					beanType = componentClass;
 					addProperty(proxyModel);
-
-					return properties;
 				}
+				return properties;
 			}
 			if (beanType == null)
 				return Collections.EMPTY_LIST;
@@ -383,9 +402,10 @@
 
 	public JavaBeanModel getRootParent() {
 		JavaBeanModel parent = this.getParent();
-		if(parent == null) return this;
+		if (parent == null)
+			return this;
 		JavaBeanModel temp = parent;
-		while(temp != null){
+		while (temp != null) {
 			parent = temp;
 			temp = temp.getParent();
 		}
@@ -414,17 +434,20 @@
 		}
 		return buffer.toString();
 	}
-	
-	public String getSelectorString(){
-		if(parent == null){
+
+	public String getSelectorString() {
+		if(parent == null) {
 			return getBeanClassString();
 		}
-		
-		if(parent.isArray() || parent.isList()){
+		if (parent.getClass() == JavaBeanList.class) {
 			return getBeanClassString();
 		}
+
+		if (parent.isArray() || parent.isList()) {
+			return getBeanClassString();
+		}
 		return getName();
-		
+
 	}
 
 	public boolean hasGenericType() {
@@ -434,14 +457,14 @@
 	public void setGenericType(boolean hasGenericType) {
 		this.hasGenericType = hasGenericType;
 	}
-	
-	public boolean isAttribute(){
+
+	public boolean isAttribute() {
 		return false;
 	}
 
 	public List<IXMLStructuredObject> getChildren() {
 		List ps = getProperties();
-		if(ps!=null){
+		if (ps != null) {
 			return ps;
 		}
 		return null;
@@ -455,4 +478,35 @@
 		return getSelectorString();
 	}
 
+	public boolean isRootNode() {
+		// TODO Auto-generated method stub
+		return false;
+	}
+	
+	public void setComponentClass(Class clazz){
+		componentClass = clazz;
+	}
+
+	public Class getComponentClass() {
+		return componentClass;
+	}
+	
+	public void addExtendProperty(String name,String value){
+		extendProperties.setProperty(name, value);
+	}
+	
+	public String getExtendProperty(String name){
+		return extendProperties.getProperty(name);
+	}
+
+	public Object clone() {
+		if(isList()){
+			JavaBeanModel model = JavaBeanModelFactory.getJavaBeanModelWithLazyLoad(ArrayList.class);
+			model.setComponentClass(componentClass);
+			return model;
+		}
+		return JavaBeanModelFactory.getJavaBeanModelWithLazyLoad(this
+				.getBeanClass());
+	}
+
 }

Added: trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/javabean/ui/AbstractJavaBeanBuilder.java
===================================================================
--- trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/javabean/ui/AbstractJavaBeanBuilder.java	                        (rev 0)
+++ trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/javabean/ui/AbstractJavaBeanBuilder.java	2009-01-18 07:45:38 UTC (rev 13105)
@@ -0,0 +1,21 @@
+/**
+ * 
+ */
+package org.jboss.tools.smooks.javabean.ui;
+
+/**
+ * @author Dart
+ *
+ */
+public class AbstractJavaBeanBuilder {
+	private ClassLoader classLoader = null;
+
+	public ClassLoader getClassLoader() {
+		return classLoader;
+	}
+
+	public void setClassLoader(ClassLoader classLoader) {
+		this.classLoader = classLoader;
+	}
+	
+}


Property changes on: trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/javabean/ui/AbstractJavaBeanBuilder.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Added: trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/javabean/ui/BeanPopulatorGraphicalModelListener.java
===================================================================
--- trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/javabean/ui/BeanPopulatorGraphicalModelListener.java	                        (rev 0)
+++ trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/javabean/ui/BeanPopulatorGraphicalModelListener.java	2009-01-18 07:45:38 UTC (rev 13105)
@@ -0,0 +1,571 @@
+/**
+ * 
+ */
+package org.jboss.tools.smooks.javabean.ui;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.emf.ecore.xml.type.AnyType;
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.jboss.tools.smooks.javabean.model.JavaBeanList;
+import org.jboss.tools.smooks.javabean.model.JavaBeanModel;
+import org.jboss.tools.smooks.model.ParamType;
+import org.jboss.tools.smooks.model.ResourceConfigType;
+import org.jboss.tools.smooks.model.ResourceType;
+import org.jboss.tools.smooks.model.SmooksFactory;
+import org.jboss.tools.smooks.model.SmooksResourceListType;
+import org.jboss.tools.smooks.model.util.SmooksModelConstants;
+import org.jboss.tools.smooks.model.util.SmooksModelUtils;
+import org.jboss.tools.smooks.ui.IXMLStructuredObject;
+import org.jboss.tools.smooks.ui.gef.model.AbstractStructuredDataModel;
+import org.jboss.tools.smooks.ui.gef.model.GraphRootModel;
+import org.jboss.tools.smooks.ui.gef.model.IConnectableModel;
+import org.jboss.tools.smooks.ui.gef.model.IGraphicalModelListener;
+import org.jboss.tools.smooks.ui.gef.model.LineConnectionModel;
+import org.jboss.tools.smooks.ui.gef.model.PropertyModel;
+import org.jboss.tools.smooks.ui.modelparser.SmooksConfigurationFileGenerateContext;
+import org.jboss.tools.smooks.utils.UIUtils;
+
+/**
+ * @author Dart
+ * 
+ */
+public class BeanPopulatorGraphicalModelListener implements
+		IGraphicalModelListener {
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.jboss.tools.smooks.ui.gef.model.IGraphicalModelListener#modelAdded
+	 * (java.lang.Object,
+	 * org.jboss.tools.smooks.ui.modelparser.SmooksConfigurationFileGenerateContext
+	 * )
+	 */
+	public void modelAdded(Object graphicalModel,
+			SmooksConfigurationFileGenerateContext context) {
+		if (graphicalModel instanceof LineConnectionModel) {
+			if (isBeanCreationConnection((LineConnectionModel) graphicalModel)) {
+				addNewResourceConfig((LineConnectionModel) graphicalModel,
+						context);
+				return;
+			}
+
+			if (isPropertyBindingConnection((LineConnectionModel) graphicalModel)) {
+				addNewPropertyBinding((LineConnectionModel) graphicalModel,
+						context);
+				return;
+			}
+
+			if (isReferenceBindingConnection((LineConnectionModel) graphicalModel)) {
+				addNewReferenceBinding((LineConnectionModel) graphicalModel,
+						context);
+				return;
+			}
+		}
+	}
+
+	protected void addNewReferenceBinding(LineConnectionModel line,
+			SmooksConfigurationFileGenerateContext context) {
+		Object source = ((AbstractStructuredDataModel) line.getSource())
+				.getReferenceEntityModel();
+		if (!(source instanceof JavaBeanModel)) {
+			return;
+		}
+
+		Object target = ((AbstractStructuredDataModel) line.getTarget())
+				.getReferenceEntityModel();
+		if (!(target instanceof JavaBeanModel)) {
+			return;
+		}
+		JavaBeanModel sourceParent = ((JavaBeanModel) source).getParent();
+		IConnectableModel sourceParentGraph = (IConnectableModel) UIUtils
+				.findGraphModel(context.getGraphicalRootModel(), sourceParent);
+		IConnectableModel targetGraph = (IConnectableModel) UIUtils
+				.findGraphModel(context.getGraphicalRootModel(), target);
+
+		if (sourceParentGraph == null || targetGraph == null)
+			return;
+		List sourceParentConnections = sourceParentGraph
+				.getModelTargetConnections();
+		List targetConnections = targetGraph.getModelTargetConnections();
+		if (sourceParentConnections.size() <= 0
+				|| sourceParentConnections.size() > 2) {
+			return;
+		}
+		if (targetConnections.size() <= 0 || targetConnections.size() > 2) {
+			return;
+		}
+		ResourceConfigType hostResourceConfig = null;
+		ResourceConfigType referenceResourceConfig = null;
+		for (Iterator iterator = sourceParentConnections.iterator(); iterator
+				.hasNext();) {
+			LineConnectionModel connection = (LineConnectionModel) iterator
+					.next();
+			if (isBeanCreationConnection(connection)) {
+				ResourceConfigType re = getResourceConfig(connection);
+				if (re != null)
+					hostResourceConfig = re;
+				break;
+			}
+		}
+
+		for (Iterator iterator = targetConnections.iterator(); iterator
+				.hasNext();) {
+			LineConnectionModel connection = (LineConnectionModel) iterator
+					.next();
+			if (isBeanCreationConnection(connection)) {
+				ResourceConfigType re = getResourceConfig(connection);
+				if (re != null)
+					referenceResourceConfig = re;
+				break;
+			}
+		}
+		if (hostResourceConfig != null) {
+			setReferenceResourceConfig(hostResourceConfig, line);
+			if (referenceResourceConfig != null) {
+				String beanId = SmooksModelUtils.getParmaText(
+						SmooksModelConstants.BEAN_ID, referenceResourceConfig);
+				if (beanId == null) {
+					return;
+				}
+				beanId = beanId.trim();
+				String propertyName = ((JavaBeanModel)source).getName();
+				if(((JavaBeanModel)sourceParent).isArray() || ((JavaBeanModel)sourceParent).isList()){
+					propertyName = null;
+				}
+				String selector = "${" + beanId +"}";
+				addBindingToParamType(hostResourceConfig, propertyName, selector, line);
+			}
+		}
+	}
+
+	private void setReferenceResourceConfig(ResourceConfigType resourceConfig,
+			LineConnectionModel connection) {
+		connection.updateAndAddProperty(
+				BeanPopulatorMappingAnalyzer.REFERENCE_RESOURCE_CONFIG, resourceConfig);
+	}
+
+	private ResourceConfigType getResourceConfig(LineConnectionModel line) {
+		Object obj = line
+				.getProperty(BeanPopulatorMappingAnalyzer.REFERENCE_RESOURCE_CONFIG);
+		if (obj != null && obj instanceof ResourceConfigType) {
+			return (ResourceConfigType) obj;
+		}
+		return null;
+	}
+
+	protected void addNewPropertyBinding(LineConnectionModel graphicalModel,
+			SmooksConfigurationFileGenerateContext context) {
+		JavaBeanModel target = (JavaBeanModel) ((AbstractStructuredDataModel) graphicalModel
+				.getTarget()).getReferenceEntityModel();
+		ResourceConfigType reference = findReferenceResourceConfig(context
+				.getGraphicalRootModel(), target);
+		if (reference != null) {
+			addPropertyBinding(reference, graphicalModel);
+		}
+	}
+
+	private ResourceConfigType findReferenceResourceConfig(GraphRootModel root,
+			JavaBeanModel target) {
+		JavaBeanModel javaBeanModel = target.getParent();
+		if (javaBeanModel == null || javaBeanModel instanceof JavaBeanList) {
+			return null;
+		}
+		AbstractStructuredDataModel graphModel = UIUtils.findGraphModel(root,
+				javaBeanModel);
+		if (graphModel != null && graphModel instanceof IConnectableModel) {
+			List connections = ((IConnectableModel) graphModel)
+					.getModelTargetConnections();
+			for (Iterator iterator = connections.iterator(); iterator.hasNext();) {
+				LineConnectionModel connection = (LineConnectionModel) iterator
+						.next();
+				if (isBeanCreationConnection(connection)) {
+					Object obj = connection
+							.getProperty(BeanPopulatorMappingAnalyzer.REFERENCE_RESOURCE_CONFIG);
+					if (obj == null || !(obj instanceof ResourceConfigType))
+						return null;
+					return (ResourceConfigType) obj;
+				}
+			}
+		}
+		return null;
+	}
+
+	private ParamType getBindingsParamType(ResourceConfigType config) {
+		List<ParamType> list = config.getParam();
+		for (Iterator iterator = list.iterator(); iterator.hasNext();) {
+			ParamType paramType = (ParamType) iterator.next();
+			String name = paramType.getName();
+			if (name != null)
+				name = name.trim();
+			if (SmooksModelUtils.BINDINGS.equals(name)) {
+				return paramType;
+			}
+		}
+		return null;
+	}
+
+	protected IXMLStructuredObject ignoreRootParentNode(
+			IXMLStructuredObject node) {
+		IXMLStructuredObject parent = node.getParent();
+		if (parent == null || parent.isRootNode())
+			return node;
+		IXMLStructuredObject temp = parent;
+		while (temp != null && !temp.isRootNode()) {
+			temp = temp.getParent();
+			if (temp == null || temp.isRootNode()) {
+				return parent;
+			}
+			parent = temp;
+		}
+		return parent;
+	}
+
+	protected IXMLStructuredObject rootParentNode(IXMLStructuredObject node) {
+		return UIUtils.getRootParent(node);
+	}
+
+	protected IXMLStructuredObject parentNode(IXMLStructuredObject node) {
+		IXMLStructuredObject parent = node.getParent();
+		if (parent != null)
+			return parent;
+		return node;
+	}
+
+	private void addPropertyBinding(ResourceConfigType resourceConfig,
+			LineConnectionModel line) {
+		JavaBeanModel target = (JavaBeanModel) ((AbstractStructuredDataModel) line
+				.getTarget()).getReferenceEntityModel();
+		JavaBeanModel targetParent = target.getParent();
+		Object source = ((AbstractStructuredDataModel) line.getSource())
+				.getReferenceEntityModel();
+		String propertyName = target.getName();
+		//
+		IXMLStructuredObject contextNode = ignoreRootParentNode((IXMLStructuredObject) source);
+		if (targetParent.isList() || targetParent.isArray()) {
+			propertyName = null;
+			//
+			contextNode = parentNode((IXMLStructuredObject) source);
+		}
+		String currentSelectorName = null;
+		if (source instanceof IXMLStructuredObject) {
+			currentSelectorName = UIUtils.generatePath(
+					(IXMLStructuredObject) source, contextNode, " ", false);
+		}
+
+		if (currentSelectorName == null)
+			return;
+		addBindingToParamType(resourceConfig, propertyName,
+				currentSelectorName, line);
+	}
+
+	private void addBindingToParamType(ResourceConfigType resourceConfig,
+			String propertyName, String currentSelectorName,
+			LineConnectionModel line) {
+		ParamType bindingsParam = getBindingsParamType(resourceConfig);
+		if (bindingsParam == null) {
+			bindingsParam = SmooksFactory.eINSTANCE.createParamType();
+			bindingsParam.setName(SmooksModelConstants.BINDINGS);
+			resourceConfig.getParam().add(bindingsParam);
+		}
+		AnyType binding = SmooksModelUtils.addBindingTypeToParamType(
+				bindingsParam, propertyName, currentSelectorName, null, null);
+		UIUtils
+				.assignConnectionPropertyToBinding(
+						line,
+						binding,
+						new String[] {
+								"property", "selector", BeanPopulatorMappingAnalyzer.BINDING_TYPE, BeanPopulatorMappingAnalyzer.REFERENCE_RESOURCE_CONFIG }); //$NON-NLS-1$ //$NON-NLS-2$
+
+	}
+
+	protected void removeResourceConfigAssociatedConnections(
+			JavaBeanModel parent, GraphRootModel root,
+			ResourceConfigType referenceResourceConfig) {
+		IConnectableModel parentGraphModel = (IConnectableModel) UIUtils
+		.findGraphModel(root, parent);
+		List targetConnections  = parentGraphModel.getModelTargetConnections();
+		List temp1 = new ArrayList(targetConnections);
+		for (Iterator iterator = temp1.iterator(); iterator
+				.hasNext();) {
+			LineConnectionModel targetConnection = (LineConnectionModel) iterator.next();
+			if(isReferenceBindingConnection(targetConnection)){
+				targetConnection.disConnect();
+			}
+		}
+		temp1.clear();
+		temp1 = null;
+		
+		List<IXMLStructuredObject> children = parent.getChildren();
+		for (Iterator iterator = children.iterator(); iterator.hasNext();) {
+			IXMLStructuredObject structuredObject = (IXMLStructuredObject) iterator
+					.next();
+			IConnectableModel childTarget = (IConnectableModel) UIUtils
+					.findGraphModel(root, structuredObject);
+			if (childTarget == null)
+				continue;
+			List connections1 = childTarget.getModelTargetConnections();
+			List temp = new ArrayList(connections1);
+			for (Iterator iterator2 = temp.iterator(); iterator2.hasNext();) {
+				LineConnectionModel connection1 = (LineConnectionModel) iterator2
+						.next();
+				if (referenceResourceConfig == connection1
+						.getProperty(BeanPopulatorMappingAnalyzer.REFERENCE_RESOURCE_CONFIG)) {
+					connection1.disConnect();
+				}
+			}
+			temp.clear();
+
+			List connections2 = childTarget.getModelSourceConnections();
+			temp = new ArrayList(connections2);
+			for (Iterator iterator2 = temp.iterator(); iterator2.hasNext();) {
+				LineConnectionModel connection2 = (LineConnectionModel) iterator2
+						.next();
+				if (referenceResourceConfig == connection2
+						.getProperty(BeanPopulatorMappingAnalyzer.REFERENCE_RESOURCE_CONFIG)) {
+					connection2.disConnect();
+				}
+			}
+			temp.clear();
+			temp = null;
+		}
+	}
+
+	protected void removeResourceConfig(LineConnectionModel line,
+			SmooksConfigurationFileGenerateContext context) {
+		Object value = line
+				.getProperty(BeanPopulatorMappingAnalyzer.REFERENCE_RESOURCE_CONFIG);
+		if (value == null || !(value instanceof ResourceConfigType))
+			return;
+		ResourceConfigType resourceConfig = (ResourceConfigType) value;
+		SmooksResourceListType listType = context.getSmooksResourceListModel();
+		listType.getAbstractResourceConfig().remove(resourceConfig);
+		GraphRootModel graphRoot = context.getGraphicalRootModel();
+		AbstractStructuredDataModel transformData = (AbstractStructuredDataModel) line
+				.getTarget();
+		JavaBeanModel targetModel = (JavaBeanModel) transformData
+				.getReferenceEntityModel();
+		removeResourceConfigAssociatedConnections(targetModel, graphRoot,
+				resourceConfig);
+	}
+
+	protected void addNewResourceConfig(LineConnectionModel graphicalModel,
+			SmooksConfigurationFileGenerateContext context) {
+		ResourceConfigType resourceConfig = SmooksFactory.eINSTANCE
+				.createResourceConfigType();
+		configNewResourceConfig(resourceConfig,
+				(LineConnectionModel) graphicalModel);
+		SmooksResourceListType listType = context.getSmooksResourceListModel();
+		EditingDomain domain = context.getDomain();
+		UIUtils.addResourceConfigType(domain, listType, resourceConfig);
+		PropertyModel bindingModel = new PropertyModel(
+				BeanPopulatorMappingAnalyzer.REFERENCE_RESOURCE_CONFIG, resourceConfig);
+		((LineConnectionModel) graphicalModel).addPropertyModel(bindingModel);
+	}
+
+	private boolean isPropertyBindingConnection(LineConnectionModel connection) {
+		return BeanPopulatorMappingAnalyzer.PROPERTY_BINDING.equals(connection
+				.getProperty(BeanPopulatorMappingAnalyzer.BINDING_TYPE));
+	}
+
+	private boolean isReferenceBindingConnection(LineConnectionModel connection) {
+		return BeanPopulatorMappingAnalyzer.REFERENCE_BINDING.equals(connection
+				.getProperty(BeanPopulatorMappingAnalyzer.BINDING_TYPE));
+	}
+
+	private boolean isBeanCreationConnection(LineConnectionModel connection) {
+		return BeanPopulatorMappingAnalyzer.BEAN_CREATION.equals(connection
+				.getProperty(BeanPopulatorMappingAnalyzer.BINDING_TYPE));
+	}
+
+	protected void configNewResourceConfig(ResourceConfigType resourceConfig,
+			LineConnectionModel line) {
+		JavaBeanModel target = (JavaBeanModel) ((AbstractStructuredDataModel) line
+				.getTarget()).getReferenceEntityModel();
+		Object source = ((AbstractStructuredDataModel) line.getSource())
+				.getReferenceEntityModel();
+		String sourceSelector = null;
+		if (source instanceof IXMLStructuredObject) {
+			sourceSelector = ((IXMLStructuredObject) source).getNodeName();
+		}
+		if (sourceSelector != null) {
+			resourceConfig.setSelector(sourceSelector);
+		}
+		ResourceType resource = SmooksFactory.eINSTANCE.createResourceType();
+		resourceConfig.setResource(resource);
+		resource.setStringValue(SmooksModelConstants.BEAN_POPULATOR);
+
+		ParamType beanIdParam = SmooksFactory.eINSTANCE.createParamType();
+		String beanId = generateBeanId(resourceConfig, target);
+		beanIdParam.setName(SmooksModelConstants.BEAN_ID);
+		SmooksModelUtils.setTextToAnyType(beanIdParam, beanId);
+		resourceConfig.getParam().add(beanIdParam);
+
+		ParamType beanClassParam = SmooksFactory.eINSTANCE.createParamType();
+		beanClassParam.setName(SmooksModelConstants.BEAN_CLASS);
+		SmooksModelUtils.setTextToAnyType(beanClassParam, target
+				.getBeanClassString());
+		resourceConfig.getParam().add(beanClassParam);
+
+		ParamType bindingsParam = SmooksFactory.eINSTANCE.createParamType();
+		bindingsParam.setName(SmooksModelConstants.BINDINGS);
+		resourceConfig.getParam().add(bindingsParam);
+	}
+
+	private String generateBeanId(ResourceConfigType resourceConfig,
+			JavaBeanModel target) {
+		return target.getName();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.jboss.tools.smooks.ui.gef.model.IGraphicalModelListener#modelChanged
+	 * (java.lang.Object,
+	 * org.jboss.tools.smooks.ui.modelparser.SmooksConfigurationFileGenerateContext
+	 * )
+	 */
+	public void modelChanged(Object graphicalModel,
+			SmooksConfigurationFileGenerateContext context) {
+
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.jboss.tools.smooks.ui.gef.model.IGraphicalModelListener#modelRemoved
+	 * (java.lang.Object,
+	 * org.jboss.tools.smooks.ui.modelparser.SmooksConfigurationFileGenerateContext
+	 * )
+	 */
+	public void modelRemoved(Object graphicalModel,
+			SmooksConfigurationFileGenerateContext context) {
+		if (graphicalModel instanceof LineConnectionModel) {
+			LineConnectionModel line = ((LineConnectionModel) graphicalModel);
+			if (isBeanCreationConnection(line)) {
+				removeResourceConfig(line, context);
+				return;
+			}
+			if (isPropertyBindingConnection(line)) {
+				removePropertyBinding(line, context);
+				return;
+			}
+
+			if (isReferenceBindingConnection(line)) {
+				removeReferenceBinding(line, context);
+				return;
+			}
+		}
+	}
+
+	protected void removeReferenceBinding(LineConnectionModel line,
+			SmooksConfigurationFileGenerateContext context) {
+		Object value = line
+				.getProperty(BeanPopulatorMappingAnalyzer.REFERENCE_RESOURCE_CONFIG);
+		if (value == null || !(value instanceof ResourceConfigType))
+			return;
+		ResourceConfigType resourceConfig = (ResourceConfigType) value;
+		AbstractStructuredDataModel transformTargetData = (AbstractStructuredDataModel) line
+				.getTarget();
+		String beanId = getBeanId((IConnectableModel) transformTargetData);
+		if (beanId == null)
+			return;
+		beanId = "${" + beanId + "}";
+		AnyType binding = findBindingViaSelector(beanId, resourceConfig);
+		ParamType param = getBindingsParamType(resourceConfig);
+		if (binding == null || param == null)
+			return;
+		List<Object> bindingList = (List<Object>) param.getMixed().get(
+				SmooksModelUtils.ELEMENT_BINDING, false);
+		bindingList.remove(binding);
+	}
+
+	private String getBeanId(IConnectableModel targetPoint) {
+		List connections = targetPoint.getModelTargetConnections();
+		if (connections.size() < 1 || connections.size() > 2)
+			return null;
+		for (Iterator iterator = connections.iterator(); iterator.hasNext();) {
+			LineConnectionModel connection = (LineConnectionModel) iterator
+					.next();
+			if (BeanPopulatorMappingAnalyzer.BEAN_CREATION.equals(connection
+					.getProperty(BeanPopulatorMappingAnalyzer.BINDING_TYPE))) {
+				Object obj = connection
+						.getProperty(BeanPopulatorMappingAnalyzer.REFERENCE_RESOURCE_CONFIG);
+				if (obj == null || !(obj instanceof ResourceConfigType)) {
+
+				} else {
+					return SmooksModelUtils.getParmaText(
+							SmooksModelUtils.BEAN_ID, (ResourceConfigType) obj);
+				}
+			}
+		}
+		return null;
+	}
+
+	protected void removePropertyBinding(LineConnectionModel line,
+			SmooksConfigurationFileGenerateContext context) {
+		Object value = line
+				.getProperty(BeanPopulatorMappingAnalyzer.REFERENCE_RESOURCE_CONFIG);
+		if (value == null || !(value instanceof ResourceConfigType))
+			return;
+		ResourceConfigType resourceConfig = (ResourceConfigType) value;
+		AbstractStructuredDataModel transformData = (AbstractStructuredDataModel) line
+				.getTarget();
+		JavaBeanModel targetModel = (JavaBeanModel) transformData
+				.getReferenceEntityModel();
+		AnyType binding = findBindingViaProperty(targetModel.getName(),
+				resourceConfig);
+		ParamType param = getBindingsParamType(resourceConfig);
+		if (binding == null || param == null)
+			return;
+		List<Object> bindingList = (List<Object>) param.getMixed().get(
+				SmooksModelUtils.ELEMENT_BINDING, false);
+		bindingList.remove(binding);
+	}
+
+	protected AnyType findBindingViaProperty(String property,
+			ResourceConfigType resourceConfig) {
+		List bindingList = SmooksModelUtils
+				.getBindingListFromResourceConfigType(resourceConfig);
+		for (Iterator iterator = bindingList.iterator(); iterator.hasNext();) {
+			Object object = (Object) iterator.next();
+			if (!(object instanceof AnyType))
+				continue;
+			String value = SmooksModelUtils.getAttributeValueFromAnyType(
+					(AnyType) object, SmooksModelUtils.ATTRIBUTE_PROPERTY);
+			if (value == null)
+				continue;
+			value = value.trim();
+			if (property.equalsIgnoreCase(value)) {
+				return (AnyType) object;
+			}
+		}
+		return null;
+	}
+
+	protected AnyType findBindingViaSelector(String selector,
+			ResourceConfigType resourceConfig) {
+		List bindingList = SmooksModelUtils
+				.getBindingListFromResourceConfigType(resourceConfig);
+		for (Iterator iterator = bindingList.iterator(); iterator.hasNext();) {
+			Object object = (Object) iterator.next();
+			if (!(object instanceof AnyType))
+				continue;
+			String value = SmooksModelUtils.getAttributeValueFromAnyType(
+					(AnyType) object, SmooksModelUtils.ATTRIBUTE_SELECTOR);
+			if (value == null)
+				continue;
+			value = value.trim();
+			if (selector.equalsIgnoreCase(value)) {
+				return (AnyType) object;
+			}
+		}
+		return null;
+	}
+
+}


Property changes on: trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/javabean/ui/BeanPopulatorGraphicalModelListener.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Added: trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/javabean/ui/BeanPopulatorMappingAnalyzer.java
===================================================================
--- trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/javabean/ui/BeanPopulatorMappingAnalyzer.java	                        (rev 0)
+++ trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/javabean/ui/BeanPopulatorMappingAnalyzer.java	2009-01-18 07:45:38 UTC (rev 13105)
@@ -0,0 +1,375 @@
+/**
+ * 
+ */
+package org.jboss.tools.smooks.javabean.ui;
+
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.emf.ecore.xml.type.AnyType;
+import org.jboss.tools.smooks.analyzer.DesignTimeAnalyzeResult;
+import org.jboss.tools.smooks.analyzer.IMappingAnalyzer;
+import org.jboss.tools.smooks.analyzer.MappingModel;
+import org.jboss.tools.smooks.analyzer.MappingResourceConfigList;
+import org.jboss.tools.smooks.analyzer.SmooksAnalyzerException;
+import org.jboss.tools.smooks.javabean.model.JavaBeanList;
+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;
+import org.jboss.tools.smooks.model.SmooksResourceListType;
+import org.jboss.tools.smooks.model.util.SmooksModelConstants;
+import org.jboss.tools.smooks.model.util.SmooksModelUtils;
+import org.jboss.tools.smooks.ui.IXMLStructuredObject;
+import org.jboss.tools.smooks.ui.gef.model.PropertyModel;
+import org.jboss.tools.smooks.ui.modelparser.SmooksConfigurationFileGenerateContext;
+import org.jboss.tools.smooks.utils.UIUtils;
+
+/**
+ * @author Dart
+ * 
+ */
+public class BeanPopulatorMappingAnalyzer implements IMappingAnalyzer {
+	public static final String BINDING_TYPE = "bindingType";
+
+	public static final String REFERENCE_RESOURCE_CONFIG = "reference_resourceConfig";
+
+	public static final String BEAN_CREATION = "beanCreation";
+
+	public static final String PROPERTY_BINDING = "propertyBinding";
+
+	public static final String REFERENCE_BINDING = "referenceBinding";
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.jboss.tools.smooks.analyzer.IMappingAnalyzer#analyzeGraphModel(org
+	 * .jboss
+	 * .tools.smooks.ui.modelparser.SmooksConfigurationFileGenerateContext)
+	 */
+	public DesignTimeAnalyzeResult[] analyzeGraphModel(
+			SmooksConfigurationFileGenerateContext context) {
+		return null;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.jboss.tools.smooks.analyzer.IMappingAnalyzer#analyzeMappingGraphModel
+	 * (
+	 * org.jboss.tools.smooks.ui.modelparser.SmooksConfigurationFileGenerateContext
+	 * )
+	 */
+	public void analyzeMappingGraphModel(
+			SmooksConfigurationFileGenerateContext context)
+			throws SmooksAnalyzerException {
+
+	}
+
+	protected boolean checkSourceAndTarget(Object sourceObject,
+			Object targetObject) {
+		return true;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.jboss.tools.smooks.analyzer.IMappingAnalyzer#analyzeMappingSmooksModel
+	 * (org.jboss.tools.smooks.model.SmooksResourceListType, java.lang.Object,
+	 * java.lang.Object)
+	 */
+	public MappingResourceConfigList analyzeMappingSmooksModel(
+			SmooksResourceListType listType, Object sourceObject,
+			Object targetObject) {
+		MappingResourceConfigList mappingList = new MappingResourceConfigList();
+
+		if (!checkSourceAndTarget(sourceObject, targetObject)) {
+			return mappingList;
+		}
+
+		Object sourceModel = sourceObject;
+
+		JavaBeanList targetModel = (JavaBeanList) targetObject;
+
+		List<AbstractResourceConfig> resourceList = listType
+				.getAbstractResourceConfig();
+		for (Iterator<AbstractResourceConfig> iterator = resourceList
+				.iterator(); iterator.hasNext();) {
+			AbstractResourceConfig abstractResourceConfig = (AbstractResourceConfig) iterator
+					.next();
+			if (abstractResourceConfig instanceof ResourceConfigType) {
+				ResourceConfigType resourceConfig = (ResourceConfigType) abstractResourceConfig;
+				ResourceType resource = resourceConfig.getResource();
+				if (resource != null) {
+					String resourceValue = resource.getStringValue();
+					if (resourceValue == null)
+						continue;
+
+					if (!SmooksModelConstants.BEAN_POPULATOR
+							.equals(resourceValue))
+						continue;
+
+					String selector = resourceConfig.getSelector();
+					if (selector == null)
+						continue;
+					selector = selector.trim();
+					IXMLStructuredObject sourceNode = null;
+					if (sourceModel instanceof IXMLStructuredObject) {
+						sourceNode = UIUtils.localXMLNodeWithPath(selector,
+								(IXMLStructuredObject) sourceModel);
+					}
+					if (sourceNode == null) {
+						throw new RuntimeException(
+								"Can't find the node from resource-config selector string : "
+										+ selector);
+					}
+
+					String bindingClass = SmooksModelUtils.getParmaText(
+							SmooksModelConstants.BEAN_CLASS, resourceConfig);
+					if (bindingClass == null) {
+						continue;
+					}
+
+					bindingClass = bindingClass.trim();
+					JavaBeanModel targetNode = findJavaBeanFrombeanList(
+							bindingClass, targetModel, mappingList , false);
+					if (targetNode == null) {
+						throw new RuntimeException(
+								"Can't find the class node : " + bindingClass);
+					}
+
+					MappingModel mapping = new MappingModel(sourceNode,
+							targetNode);
+					PropertyModel bindingProperty = new PropertyModel();
+					bindingProperty.setName(BINDING_TYPE);
+					bindingProperty.setValue(BEAN_CREATION);
+					mapping.getProperties().add(bindingProperty);
+
+					PropertyModel referenceProperty = new PropertyModel(
+							REFERENCE_RESOURCE_CONFIG, resourceConfig);
+					mapping.getProperties().add(referenceProperty);
+
+					mappingList.getMappingModelList().add(mapping);
+					mappingList.addResourceConfig(resourceConfig);
+
+					createPropertyConnection(listType, mappingList,
+							resourceConfig, sourceNode, targetNode);
+				}
+			}
+		}
+		return mappingList;
+	}
+
+	public static boolean isReferenceSelector(String selector) {
+		if (selector == null)
+			return false;
+		if (selector.startsWith("${") && selector.endsWith("}"))
+			return true;
+		return false;
+	}
+
+	protected void createPropertyConnection(SmooksResourceListType listType,
+			MappingResourceConfigList mappingList,
+			ResourceConfigType resourceConfig,
+			IXMLStructuredObject sourceModel, JavaBeanModel targetNode) {
+		List<Object> bindingList = SmooksModelUtils
+				.getBindingListFromResourceConfigType(resourceConfig);
+		if (bindingList != null) {
+			for (Iterator<Object> iterator = bindingList.iterator(); iterator
+					.hasNext();) {
+				Object object = (Object) iterator.next();
+				if (!(object instanceof AnyType))
+					continue;
+				AnyType binding = (AnyType) object;
+				String property = SmooksModelUtils
+						.getAttributeValueFromAnyType(binding,
+								SmooksModelUtils.ATTRIBUTE_PROPERTY);
+				if (property != null) {
+					property = property.trim();
+				}
+				String selector = SmooksModelUtils
+						.getAttributeValueFromAnyType(binding,
+								SmooksModelUtils.ATTRIBUTE_SELECTOR);
+				if (selector != null) {
+					selector = selector.trim();
+				}
+				boolean isReferenceBinding = false;
+				IXMLStructuredObject childSourceNode = null;
+				if (isReferenceSelector(selector)) {
+					ResourceConfigType referenceConfig = findResourceConfigTypeWithBeanId(
+							selector, listType);
+					if (referenceConfig == null)
+						continue;
+					String beanClass = SmooksModelUtils.getParmaText(
+							SmooksModelConstants.BEAN_CLASS, referenceConfig);
+					if (beanClass == null)
+						continue;
+					beanClass = beanClass.trim();
+					childSourceNode = findJavaBeanFrombeanList(beanClass,
+							(JavaBeanList) targetNode.getParent(), mappingList , true);
+					if (childSourceNode == null) {
+						throw new RuntimeException("Can't find the class "
+								+ beanClass);
+					}
+					isReferenceBinding = true;
+				}
+
+				JavaBeanModel childTargetNode = findTheChildJavaBeanModel(
+						property, targetNode);
+				if (childTargetNode == null) {
+					throw new RuntimeException("Can't find the property "
+							+ property + " in the " + targetNode.getName()
+							+ " node");
+				}
+				if (childSourceNode == null) {
+					childSourceNode = UIUtils.localXMLNodeWithPath(selector,
+							sourceModel);
+				}
+
+				if (childSourceNode == null) {
+					throw new RuntimeException(
+							"Can't find the node from path : " + selector);
+				}
+
+				MappingModel mapping = null;
+				if (isReferenceBinding) {
+					mapping = new MappingModel(childTargetNode, childSourceNode);
+				} else {
+					mapping = new MappingModel(childSourceNode, childTargetNode);
+				}
+				UIUtils.assignBindingPropertyToMappingModel(binding, mapping,
+						new Object[] { SmooksModelUtils.ATTRIBUTE_PROPERTY,
+								SmooksModelUtils.ATTRIBUTE_SELECTOR });
+				PropertyModel bindingProperty = new PropertyModel();
+				bindingProperty.setName(BINDING_TYPE);
+				if (!isReferenceBinding) {
+					bindingProperty.setValue(PROPERTY_BINDING);
+				} else {
+					bindingProperty.setValue(REFERENCE_BINDING);
+				}
+				mapping.getProperties().add(
+						new PropertyModel(REFERENCE_RESOURCE_CONFIG,
+								resourceConfig));
+				mapping.getProperties().add(bindingProperty);
+				mappingList.getMappingModelList().add(mapping);
+
+			}
+		}
+	}
+
+	protected ResourceConfigType findResourceConfigTypeWithBeanId(
+			String selector, SmooksResourceListType listType) {
+		if (isReferenceSelector(selector)) {
+			selector = this.getBeanIdWithRawSelectorString(selector);
+		}
+		List 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;
+			}
+			String selector1 = rct.getSelector();
+			if (selector1 != null)
+				selector1 = selector1.trim();
+			if (selector.equals(selector1)) {
+				resourceConfig = rct;
+				break;
+			}
+		}
+		return resourceConfig;
+	}
+
+	protected String getBeanIdWithRawSelectorString(String selector) {
+		selector = selector.substring(2, selector.length() - 1);
+		return selector;
+	}
+
+	protected String getBeanIDFromParam(ResourceConfigType config) {
+		List list = config.getParam();
+		for (Iterator iterator = list.iterator(); iterator.hasNext();) {
+			ParamType p = (ParamType) iterator.next();
+			if (SmooksModelUtils.BEAN_ID.equals(p.getName())) {
+				return SmooksModelUtils.getAnyTypeText(p);
+			}
+
+		}
+		return null;
+	}
+
+	protected JavaBeanModel findJavaBeanFrombeanList(String className,
+			JavaBeanList list, MappingResourceConfigList mappingList,
+			boolean ignoreMultipleConnection) {
+		List children = list.getChildren();
+		for (Iterator iterator = children.iterator(); iterator.hasNext();) {
+			JavaBeanModel javaBean = (JavaBeanModel) iterator.next();
+			if (className.equals(javaBean.getBeanClassString())) {
+				// If the node hasbean coonect
+				if (!ignoreMultipleConnection) {
+					if (isHasBeenConnected(mappingList, javaBean)) {
+						continue;
+					}
+				}
+				return javaBean;
+			}
+		}
+		return null;
+	}
+
+	private boolean isHasBeenConnected(MappingResourceConfigList mappingList,
+			JavaBeanModel javaBean) {
+		List<MappingModel> list = mappingList.getMappingModelList();
+		for (Iterator iterator = list.iterator(); iterator.hasNext();) {
+			MappingModel mappingModel = (MappingModel) iterator.next();
+			if (mappingModel.getTarget() == javaBean) {
+				if (BEAN_CREATION.equals(mappingModel
+						.getPropertyValue(BINDING_TYPE))) {
+					return true;
+				}
+			}
+		}
+		return false;
+	}
+
+	/**
+	 * Find the child JavaBeanModel from parent with the child name <br>
+	 * If the parent JavabeanModel is "Collection" or "Array" , the child
+	 * JavabeanModel is the first child of the parent model,it means that the
+	 * param "name" is useless with the status.<br>
+	 * 
+	 * TODO The method need to improve!!!!!
+	 * 
+	 * @param name
+	 * @param parentModel
+	 * @return
+	 */
+	public static JavaBeanModel findTheChildJavaBeanModel(String name,
+			JavaBeanModel parentModel) {
+		List list = parentModel.getProperties();
+		if (list == null)
+			return null;
+		if (parentModel.isList() || parentModel.isArray()) {
+			if (list.size() >= 1) {
+				JavaBeanModel m = (JavaBeanModel) list.get(0);
+				return m;
+			}
+		}
+
+		for (Iterator iterator = list.iterator(); iterator.hasNext();) {
+			JavaBeanModel child = (JavaBeanModel) iterator.next();
+			if (name.equals(child.getSelectorString())) {
+				return child;
+			}
+		}
+		return null;
+	}
+
+}


Property changes on: trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/javabean/ui/BeanPopulatorMappingAnalyzer.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Modified: trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/javabean/ui/JavaBeanConfigWizardPage.java
===================================================================
--- trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/javabean/ui/JavaBeanConfigWizardPage.java	2009-01-18 07:41:24 UTC (rev 13104)
+++ trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/javabean/ui/JavaBeanConfigWizardPage.java	2009-01-18 07:45:38 UTC (rev 13105)
@@ -68,42 +68,10 @@
 	 */
 	public void createControl(Composite parent) {
 		initilize();
-//		Composite cc = new Composite(parent,SWT.NONE);
-//		cc.setLayout(new GridLayout());
 		try {
 			javaPropertySelectComposite = new JavaBeanModelLoadComposite(
 					parent, SWT.NONE, getContainer(), project);
 			javaPropertySelectComposite.addJavaBeanSelectionListener(this);
-//			Button button = new Button(cc, SWT.BORDER);
-//
-//			final TreeViewer vi = new TreeViewer(cc, SWT.NONE);
-//			GridData gd = new GridData(GridData.FILL_BOTH);
-//			gd.grabExcessHorizontalSpace = true;
-//			gd.grabExcessVerticalSpace = true;
-//			vi.setContentProvider(new BeanContentProvider());
-//			vi.setLabelProvider(new BeanlabelProvider());
-//			vi.getTree().setLayoutData(gd);
-//			
-//			javaPropertySelectComposite.setLayoutData(gd);
-//			button.addSelectionListener(new SelectionAdapter() {
-//
-//				/*
-//				 * (non-Javadoc)
-//				 * 
-//				 * @see
-//				 * org.eclipse.swt.events.SelectionAdapter#widgetSelected(org
-//				 * .eclipse.swt.events.SelectionEvent)
-//				 */
-//				@Override
-//				public void widgetSelected(SelectionEvent e) {
-//					// TODO Auto-generated method stub
-//					super.widgetSelected(e);
-//					List l = new ArrayList();
-//					l.add(javaPropertySelectComposite.getCheckedJavaBeanModel());
-//					vi.setInput(l);
-//				}
-//
-//			});
 		} catch (Exception e) {
 			throw new RuntimeException(e);
 		}

Modified: trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/javabean/ui/JavaBeanLinePaintLitener.java
===================================================================
--- trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/javabean/ui/JavaBeanLinePaintLitener.java	2009-01-18 07:41:24 UTC (rev 13104)
+++ trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/javabean/ui/JavaBeanLinePaintLitener.java	2009-01-18 07:45:38 UTC (rev 13105)
@@ -6,13 +6,19 @@
 import org.eclipse.draw2d.ColorConstants;
 import org.eclipse.draw2d.Graphics;
 import org.eclipse.draw2d.IFigure;
+import org.eclipse.draw2d.PolylineConnection;
 import org.eclipse.draw2d.Shape;
+import org.eclipse.draw2d.geometry.Point;
+import org.eclipse.draw2d.geometry.PointList;
 import org.eclipse.draw2d.geometry.Rectangle;
+import org.eclipse.gef.EditPart;
+import org.eclipse.gef.requests.CreateConnectionRequest;
 import org.jboss.tools.smooks.javabean.model.JavaBeanModel;
 import org.jboss.tools.smooks.ui.gef.figures.LinePaintListener;
 import org.jboss.tools.smooks.ui.gef.model.AbstractStructuredDataModel;
 import org.jboss.tools.smooks.ui.gef.model.IConnectableModel;
 import org.jboss.tools.smooks.ui.gef.model.LineConnectionModel;
+import org.jboss.tools.smooks.ui.gef.model.TargetModel;
 import org.jboss.tools.smooks.ui.gef.model.TreeItemRelationModel;
 
 /**
@@ -20,8 +26,31 @@
  * 
  */
 public class JavaBeanLinePaintLitener extends LinePaintListener {
+	
+	
 
 	@Override
+	public PolylineConnection createDummyFigure(CreateConnectionRequest req) {
+		EditPart editPart = req.getSourceEditPart();
+		if(editPart != null){
+			if(editPart.getModel() instanceof TargetModel){
+				return new TargetReferenceConnectionLine();
+			}
+		}
+		return super.createDummyFigure(req);
+	}
+
+	@Override
+	public PolylineConnection createHostFigure(LineConnectionModel model) {
+		IConnectableModel source = model.getSource();
+		IConnectableModel target = model.getTarget();
+		if(source instanceof TargetModel && target instanceof TargetModel){
+			return new TargetReferenceConnectionLine();
+		}
+		return super.createHostFigure(model);
+	}
+
+	@Override
 	public void drawLineAdditions(Graphics graphics, IFigure hostFigure,
 			LineConnectionModel model) {
 		((Shape) hostFigure).setLineStyle(Graphics.LINE_SOLID);
@@ -55,6 +84,22 @@
 	@Override
 	public void drawLineSourceLocator(Graphics graphics, IFigure hostFigure,
 			LineConnectionModel model) {
+		if(model.getSource() instanceof TargetModel){
+			PointList pointList = new PointList();
+			Rectangle bounds = hostFigure.getBounds();
+			Point p1 = bounds.getTopLeft();
+			p1.setLocation(p1.x, p1.y + bounds.height/2);
+			Point p2 = bounds.getBottomRight();
+			Point p3 = bounds.getTopRight();
+			pointList.addPoint(p1);
+			pointList.addPoint(p2);
+			pointList.addPoint(p3);
+			graphics.pushState();
+			graphics.setBackgroundColor(ColorConstants.darkGray);
+			graphics.fillPolygon(pointList);
+			graphics.popState();
+			return;
+		}
 		AbstractStructuredDataModel targetModel = (AbstractStructuredDataModel) model
 				.getTarget();
 		JavaBeanModel targetTransformModel = (JavaBeanModel) targetModel
@@ -69,6 +114,10 @@
 	@Override
 	public void drawLineTargetLocator(Graphics graphics, IFigure hostFigure,
 			LineConnectionModel model) {
+		if(model.getSource() instanceof TargetModel){
+			super.drawLineTargetLocator(graphics, hostFigure, model);
+			return;
+		}
 		AbstractStructuredDataModel targetModel = (AbstractStructuredDataModel) model
 				.getTarget();
 		JavaBeanModel targetTransformModel = (JavaBeanModel) targetModel

Modified: trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/javabean/ui/JavaBeanModelLoadComposite.java
===================================================================
--- trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/javabean/ui/JavaBeanModelLoadComposite.java	2009-01-18 07:41:24 UTC (rev 13104)
+++ trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/javabean/ui/JavaBeanModelLoadComposite.java	2009-01-18 07:45:38 UTC (rev 13105)
@@ -16,25 +16,32 @@
 
 import org.eclipse.jdt.core.IJavaProject;
 import org.eclipse.jdt.core.IType;
-import org.eclipse.jdt.core.JavaModelException;
 import org.eclipse.jdt.core.search.IJavaSearchScope;
 import org.eclipse.jdt.internal.corext.util.JavaModelUtil;
 import org.eclipse.jdt.internal.ui.search.JavaSearchScopeFactory;
 import org.eclipse.jdt.ui.IJavaElementSearchConstants;
 import org.eclipse.jdt.ui.JavaUI;
 import org.eclipse.jface.operation.IRunnableContext;
+import org.eclipse.jface.viewers.CellEditor;
+import org.eclipse.jface.viewers.CheckboxCellEditor;
+import org.eclipse.jface.viewers.ICellModifier;
 import org.eclipse.jface.viewers.IStructuredContentProvider;
 import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.ITableLabelProvider;
 import org.eclipse.jface.viewers.LabelProvider;
-import org.eclipse.jface.viewers.ListViewer;
 import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.viewers.TextCellEditor;
 import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerCell;
 import org.eclipse.jface.window.Window;
 import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.MouseEvent;
+import org.eclipse.swt.events.MouseListener;
 import org.eclipse.swt.events.SelectionAdapter;
 import org.eclipse.swt.events.SelectionEvent;
 import org.eclipse.swt.events.SelectionListener;
 import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.Point;
 import org.eclipse.swt.layout.FillLayout;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.layout.GridLayout;
@@ -42,6 +49,7 @@
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.TableColumn;
 import org.eclipse.swt.widgets.Text;
 import org.eclipse.ui.dialogs.SelectionDialog;
 import org.jboss.tools.smooks.javabean.model.JavaBeanModel;
@@ -134,30 +142,6 @@
 		GridData gd = new GridData(GridData.FILL_HORIZONTAL);
 		gd.horizontalSpan = 2;
 		classLabel.setLayoutData(gd);
-		// Composite classTextContainer = new Composite(com, SWT.NONE);
-		// GridData gd = new GridData(GridData.FILL_HORIZONTAL);
-		// gd.grabExcessHorizontalSpace = true;
-		// classTextContainer.setLayoutData(gd);
-		//
-		// GridLayout gl = new GridLayout();
-		// gl.numColumns = 2;
-		// classTextContainer.setLayout(gl);
-		//
-		// {
-		// classText = new Text(classTextContainer, SWT.BORDER);
-		// gd = new GridData(GridData.FILL_HORIZONTAL);
-		// gd.grabExcessHorizontalSpace = true;
-		// classText.setLayoutData(gd);
-		// classText.addModifyListener(new ModifyListener() {
-		// public void modifyText(ModifyEvent arg0) {
-		// classFullName = classText.getText();
-		// }
-		// });
-		//
-		// classBrowseButton = new Button(classTextContainer, SWT.NONE);
-		// classBrowseButton.addSelectionListener(this);
-		//			classBrowseButton.setText(Messages.getString("JavaBeanModelLoadComposite.Browse")); //$NON-NLS-1$
-		// }
 
 		Composite listViewerComposite = new Composite(com, SWT.NONE);
 		GridLayout listLayout = new GridLayout();
@@ -168,7 +152,24 @@
 		listViewerComposite.setLayoutData(gd);
 
 		listViewer = new TableViewer(listViewerComposite, SWT.BORDER);
+		TableColumn nameColumn = new TableColumn(listViewer.getTable(),
+				SWT.NONE);
+		nameColumn.setText("Class");
+		TableColumn isArrayColumn = new TableColumn(listViewer.getTable(),
+				SWT.NONE);
+		isArrayColumn.setText("Array");
+		TableColumn isListColumn = new TableColumn(listViewer.getTable(),
+				SWT.NONE);
+		isListColumn.setText("List");
+
+		nameColumn.setWidth(400);
+		isArrayColumn.setWidth(60);
+		isListColumn.setWidth(60);
+
+		listViewer.getTable().setHeaderVisible(true);
+
 		gd = new GridData(GridData.FILL_BOTH);
+		listViewer.getTable().addMouseListener(new ColumnSelectionListener());
 		listViewer.getControl().setLayoutData(gd);
 		listViewer.setContentProvider(new IStructuredContentProvider() {
 
@@ -189,26 +190,7 @@
 			}
 
 		});
-		listViewer.setLabelProvider(new LabelProvider() {
-
-			@Override
-			public Image getImage(Object element) {
-				if (element instanceof JavaBeanModel) {
-					return SmooksUIActivator.getDefault().getImageRegistry()
-							.get(JavaImageConstants.IMAGE_JAVA_OBJECT);
-				}
-				return super.getImage(element);
-			}
-
-			@Override
-			public String getText(Object element) {
-				if (element instanceof JavaBeanModel) {
-					return ((JavaBeanModel) element).getBeanClassString();
-				}
-				return super.getText(element);
-			}
-
-		});
+		listViewer.setLabelProvider(new BeanViewerLabelProvider());
 		listViewer.setInput(javabeanList);
 
 		Composite buttonArea = new Composite(listViewerComposite, SWT.NONE);
@@ -260,13 +242,17 @@
 	}
 
 	public void widgetSelected(SelectionEvent arg0) {
-		IJavaSearchScope scope = JavaSearchScopeFactory.getInstance()
-				.createJavaProjectSearchScope(javaProject, true);
+		IJavaSearchScope scope = JavaSearchScopeFactory.getInstance().createWorkspaceScope(true);
 		SelectionDialog dialog;
-		Exception exception = null;
+		Throwable exception = null;
 		try {
-			dialog = JavaUI.createTypeDialog(this.getShell(), runnableContext,
-					scope, IJavaElementSearchConstants.CONSIDER_CLASSES, false);
+			dialog = JavaUI
+					.createTypeDialog(
+							this.getShell(),
+							runnableContext,
+							scope,
+							IJavaElementSearchConstants.CONSIDER_CLASSES_AND_INTERFACES,
+							false);
 			dialog.setMessage(Messages
 					.getString("JavaBeanModelLoadComposite.SourceJavaBean")); //$NON-NLS-1$
 			dialog.setTitle(Messages
@@ -301,7 +287,7 @@
 					}
 				}
 			}
-		} catch (Exception e){
+		} catch (Throwable e) {
 			exception = e;
 		}
 		if (exception != null) {
@@ -309,10 +295,154 @@
 					.iterator(); iterator.hasNext();) {
 				IJavaBeanSelectionListener l = (IJavaBeanSelectionListener) iterator
 						.next();
-				l.exceptionOccur(exception);
+				l.exceptionOccur(new Exception(exception));
 			}
 		}
 
 	}
 
+	private class BeanViewerCellModifyer implements ICellModifier {
+
+		public boolean canModify(Object element, String property) {
+			if (property.equals("name"))
+				return false;
+			return true;
+		}
+
+		public Object getValue(Object element, String property) {
+			if (element instanceof JavaBeanModel) {
+				if (property.equals("array")) {
+					return ((JavaBeanModel) element).isArray();
+				}
+				if (property.equals("list")) {
+					return ((JavaBeanModel) element).isList();
+				}
+			}
+			return Boolean.TRUE;
+		}
+
+		public void modify(Object element, String property, Object value) {
+
+		}
+
+	}
+
+	private class BeanViewerLabelProvider extends LabelProvider implements
+			ITableLabelProvider {
+
+		public Image getColumnImage(Object element, int columnIndex) {
+
+			if (element instanceof JavaBeanModel) {
+				boolean isArray = "array".equals(((JavaBeanModel) element)
+						.getExtendProperty("many"));
+				boolean isList = "list".equals(((JavaBeanModel) element)
+						.getExtendProperty("many"));
+				switch (columnIndex) {
+				case 0:
+					if (isArray) {
+						return SmooksUIActivator.getDefault().getImageRegistry().get(
+								JavaImageConstants.IMAGE_JAVA_ARRAY);
+					}
+					if (isList) {
+						return SmooksUIActivator.getDefault().getImageRegistry().get(
+								JavaImageConstants.IMAGE_JAVA_COLLECTION);
+					}
+					return SmooksUIActivator.getDefault().getImageRegistry()
+							.get(JavaImageConstants.IMAGE_JAVA_OBJECT);
+				case 1:
+					if (isArray) {
+						return SmooksUIActivator.getDefault()
+								.getImageRegistry()
+								.get(JavaImageConstants.IMAGE_CHECKBOX_CHECK);
+					} else {
+						return SmooksUIActivator.getDefault()
+								.getImageRegistry()
+								.get(JavaImageConstants.IMAGE_CHECKBOX_UNCHECK);
+					}
+				case 2:
+					if (isList) {
+						return SmooksUIActivator.getDefault()
+								.getImageRegistry()
+								.get(JavaImageConstants.IMAGE_CHECKBOX_CHECK);
+					} else {
+						return SmooksUIActivator.getDefault()
+								.getImageRegistry()
+								.get(JavaImageConstants.IMAGE_CHECKBOX_UNCHECK);
+					}
+				}
+			}
+			return null;
+		}
+
+		public String getColumnText(Object element, int columnIndex) {
+			if (element instanceof JavaBeanModel) {
+				switch (columnIndex) {
+				case 0:
+					return ((JavaBeanModel) element).getBeanClassString();
+				case 1:
+					return null;
+				case 2:
+					return null;
+				}
+			}
+			return null;
+		}
+
+	}
+
+	public class ColumnSelectionListener implements MouseListener {
+
+		public void widgetSelected(SelectionEvent e) {
+		}
+
+		public void widgetDefaultSelected(SelectionEvent e) {
+
+		}
+
+		public void mouseDoubleClick(MouseEvent e) {
+
+		}
+
+		public void mouseDown(MouseEvent e) {
+			if (!(e.button == 1))
+				return;
+			ViewerCell cell = listViewer.getCell(new Point(e.x, e.y));
+			if (cell != null) {
+				Object element = cell.getElement();
+				if (element instanceof JavaBeanModel) {
+					if (cell.getColumnIndex() == 1) {
+						String many = ((JavaBeanModel) element)
+								.getExtendProperty("many");
+						if ("array".equals(many)) {
+							((JavaBeanModel) element).addExtendProperty("many",
+									"");
+						} else {
+							((JavaBeanModel) element).addExtendProperty("many",
+									"array");
+						}
+					}
+					if (cell.getColumnIndex() == 2) {
+						String many = ((JavaBeanModel) element)
+								.getExtendProperty("many");
+						if ("list".equals(many)) {
+							((JavaBeanModel) element).addExtendProperty("many",
+									"");
+						} else {
+							((JavaBeanModel) element).addExtendProperty("many",
+									"list");
+						}
+					}
+					try {
+						listViewer.refresh(element);
+					} catch (Exception e1) {
+					}
+				}
+			}
+		}
+
+		public void mouseUp(MouseEvent e) {
+
+		}
+	}
+
 }

Modified: trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/javabean/ui/JavaBeanPropertiesSection.java
===================================================================
--- trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/javabean/ui/JavaBeanPropertiesSection.java	2009-01-18 07:41:24 UTC (rev 13104)
+++ trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/javabean/ui/JavaBeanPropertiesSection.java	2009-01-18 07:45:38 UTC (rev 13105)
@@ -386,7 +386,10 @@
 			PropertyModel pro = (PropertyModel) properties[i];
 			if (Messages
 					.getString("JavaBeanPropertiesSection.TypePropertyName").equalsIgnoreCase(pro.getName())) { //$NON-NLS-1$
-				return pro.getValue();
+				Object value = pro.getValue();
+				if(value != null){
+					return value.toString();
+				}
 			}
 		}
 		return null;

Added: trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/javabean/ui/JavaBeanSourceBuilder.java
===================================================================
--- trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/javabean/ui/JavaBeanSourceBuilder.java	                        (rev 0)
+++ trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/javabean/ui/JavaBeanSourceBuilder.java	2009-01-18 07:45:38 UTC (rev 13105)
@@ -0,0 +1,110 @@
+/**
+ * 
+ */
+package org.jboss.tools.smooks.javabean.ui;
+
+import java.beans.PropertyChangeListener;
+import java.lang.reflect.Array;
+import java.lang.reflect.InvocationTargetException;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.jdt.core.JavaModelException;
+import org.jboss.tools.smooks.analyzer.ISourceModelAnalyzer;
+import org.jboss.tools.smooks.graphical.GraphInformations;
+import org.jboss.tools.smooks.javabean.model.JavaBeanList;
+import org.jboss.tools.smooks.javabean.model.JavaBeanModel;
+import org.jboss.tools.smooks.javabean.model.JavaBeanModelFactory;
+import org.jboss.tools.smooks.model.AbstractResourceConfig;
+import org.jboss.tools.smooks.model.ResourceConfigType;
+import org.jboss.tools.smooks.model.ResourceType;
+import org.jboss.tools.smooks.model.SmooksResourceListType;
+import org.jboss.tools.smooks.model.util.SmooksModelConstants;
+import org.jboss.tools.smooks.utils.ProjectClassLoader;
+
+/**
+ * @author Dart
+ * 
+ */
+public class JavaBeanSourceBuilder extends AbstractJavaBeanBuilder implements
+		ISourceModelAnalyzer {
+
+	public Object buildSourceInputObjects(GraphInformations graphInfo,
+			SmooksResourceListType listType, IFile sourceFile, Object viewer)
+			throws InvocationTargetException {
+		return buildSourceInputObjects(graphInfo, listType, sourceFile, viewer,
+				getClassLoader());
+	}
+
+	public Object buildSourceInputObjects(GraphInformations graphInfo,
+			SmooksResourceListType listType, IFile sourceFile, Object viewer,
+			ClassLoader classLoader) throws InvocationTargetException {
+		JavaBeanList beanList = new JavaBeanList();
+		if (classLoader == null) {
+			IProject project = sourceFile.getProject();
+			try {
+				classLoader = new ProjectClassLoader(JavaCore.create(project));
+			} catch (JavaModelException e) {
+				if (viewer instanceof PropertyChangeListener) {
+					beanList
+							.addPropertyChangeListener((PropertyChangeListener) viewer);
+				}
+				throw new InvocationTargetException(e);
+			}
+		}
+		List<AbstractResourceConfig> abstractResourceConfigList = listType
+				.getAbstractResourceConfig();
+		for (Iterator<AbstractResourceConfig> iterator = abstractResourceConfigList
+				.iterator(); iterator.hasNext();) {
+			AbstractResourceConfig abstractResourceConfig = (AbstractResourceConfig) iterator
+					.next();
+			if (abstractResourceConfig instanceof ResourceConfigType) {
+				ResourceConfigType resourceConfig = (ResourceConfigType) abstractResourceConfig;
+				ResourceType resource = resourceConfig.getResource();
+				if (resource != null) {
+					String resourceValue = resource.getStringValue();
+					if (resourceValue != null)
+						resourceValue = resourceValue.trim();
+					if (SmooksModelConstants.BEAN_POPULATOR
+							.equals(resourceValue)) {
+						String selector = resourceConfig.getSelector();
+						if (selector == null)
+							continue;
+						selector = selector.trim();
+						Class clazz = loadClassFromSelector(selector,
+								classLoader);
+						if (clazz != null) {
+							JavaBeanModel javaBeanModel = JavaBeanModelFactory
+									.getJavaBeanModelWithLazyLoad(clazz);
+							beanList.addJavaBean(javaBeanModel);
+							break;
+						}
+					}
+				}
+			}
+		}
+		if (viewer instanceof PropertyChangeListener) {
+			beanList.addPropertyChangeListener((PropertyChangeListener) viewer);
+		}
+		return beanList;
+	}
+
+	private Class loadClassFromSelector(String selector, ClassLoader loader)
+			throws InvocationTargetException {
+		try {
+			if (selector.endsWith("[]")) {
+				selector = selector.substring(0, selector.length() - 2);
+				Class arrayClass = loader.loadClass(selector);
+				Object arrayInstance = Array.newInstance(arrayClass, 0);
+				return arrayInstance.getClass();
+			}
+			return loader.loadClass(selector);
+		} catch (ClassNotFoundException e) {
+			return null;
+		}
+	}
+
+}


Property changes on: trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/javabean/ui/JavaBeanSourceBuilder.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Added: trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/javabean/ui/JavaBeanTargetBuilder.java
===================================================================
--- trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/javabean/ui/JavaBeanTargetBuilder.java	                        (rev 0)
+++ trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/javabean/ui/JavaBeanTargetBuilder.java	2009-01-18 07:45:38 UTC (rev 13105)
@@ -0,0 +1,121 @@
+/**
+ * 
+ */
+package org.jboss.tools.smooks.javabean.ui;
+
+import java.beans.PropertyChangeListener;
+import java.lang.reflect.Array;
+import java.lang.reflect.InvocationTargetException;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.jdt.core.JavaModelException;
+import org.jboss.tools.smooks.analyzer.ITargetModelAnalyzer;
+import org.jboss.tools.smooks.graphical.GraphInformations;
+import org.jboss.tools.smooks.javabean.model.JavaBeanList;
+import org.jboss.tools.smooks.javabean.model.JavaBeanModel;
+import org.jboss.tools.smooks.javabean.model.JavaBeanModelFactory;
+import org.jboss.tools.smooks.model.AbstractResourceConfig;
+import org.jboss.tools.smooks.model.ResourceConfigType;
+import org.jboss.tools.smooks.model.ResourceType;
+import org.jboss.tools.smooks.model.SmooksResourceListType;
+import org.jboss.tools.smooks.model.util.SmooksModelConstants;
+import org.jboss.tools.smooks.model.util.SmooksModelUtils;
+import org.jboss.tools.smooks.utils.ProjectClassLoader;
+
+/**
+ * @author Dart
+ * 
+ */
+public class JavaBeanTargetBuilder extends AbstractJavaBeanBuilder implements
+		ITargetModelAnalyzer {
+
+	public Object buildTargetInputObjects(GraphInformations graphInfo,
+			SmooksResourceListType listType, IFile sourceFile, Object viewer)
+			throws InvocationTargetException {
+		return buildTargetInputObjects(graphInfo, listType, sourceFile, viewer,
+				getClassLoader());
+	}
+
+	public Object buildTargetInputObjects(GraphInformations graphInfo,
+			SmooksResourceListType listType, IFile sourceFile, Object viewer,
+			ClassLoader classLoader) throws InvocationTargetException {
+		JavaBeanList beanList = new JavaBeanList();
+		if (classLoader == null) {
+			IProject project = sourceFile.getProject();
+			try {
+				classLoader = new ProjectClassLoader(JavaCore.create(project));
+			} catch (JavaModelException e) {
+				registeListener(viewer, beanList);
+				throw new InvocationTargetException(e);
+			}
+		}
+
+		List<AbstractResourceConfig> abstractResourceConfigList = listType
+				.getAbstractResourceConfig();
+		for (Iterator<AbstractResourceConfig> iterator = abstractResourceConfigList
+				.iterator(); iterator.hasNext();) {
+			AbstractResourceConfig abstractResourceConfig = (AbstractResourceConfig) iterator
+					.next();
+			if (abstractResourceConfig instanceof ResourceConfigType) {
+				ResourceConfigType resourceConfig = (ResourceConfigType) abstractResourceConfig;
+				ResourceType resource = resourceConfig.getResource();
+				if (resource != null) {
+					String resourceValue = resource.getStringValue();
+					if (resourceValue != null)
+						resourceValue = resourceValue.trim();
+					if (!SmooksModelConstants.BEAN_POPULATOR
+							.equals(resourceValue)) {
+						continue;
+					}
+					String beanClassString = SmooksModelUtils.getParmaText(
+							SmooksModelConstants.BEAN_CLASS, resourceConfig);
+					if (beanClassString == null)
+						continue;
+					beanClassString = beanClassString.trim();
+					Class clazz = loadClassFormBeanClassString(beanClassString,
+							classLoader);
+					if (clazz == null)
+						continue;
+					JavaBeanModel javaBean = JavaBeanModelFactory
+							.getJavaBeanModelWithLazyLoad(clazz);
+					registeListener(viewer, javaBean);
+					beanList.addJavaBean(javaBean);
+				}
+			}
+		}
+		registeListener(viewer, beanList);
+		return beanList;
+	}
+
+	private void registeListener(Object listener, JavaBeanModel javaBean) {
+		if (listener instanceof PropertyChangeListener) {
+			javaBean
+					.addPropertyChangeListener((PropertyChangeListener) listener);
+		}
+	}
+
+	protected Class loadClassFormBeanClassString(String beanClassString,
+			ClassLoader classLoader) {
+
+		try {
+			if (beanClassString.endsWith("[]")) {
+				beanClassString = beanClassString.substring(0, beanClassString
+						.length() - 2);
+				Class arrayClass = classLoader.loadClass(beanClassString);
+				Object arrayInstance = Array.newInstance(arrayClass, 0);
+				Class clazz = arrayInstance.getClass();
+				arrayInstance = null;
+				return clazz;
+			}
+			return classLoader.loadClass(beanClassString);
+		} catch (Exception e) {
+
+		}
+		return null;
+	}
+
+}


Property changes on: trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/javabean/ui/JavaBeanTargetBuilder.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Added: trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/javabean/ui/JavaBeanViewerActionProvider.java
===================================================================
--- trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/javabean/ui/JavaBeanViewerActionProvider.java	                        (rev 0)
+++ trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/javabean/ui/JavaBeanViewerActionProvider.java	2009-01-18 07:45:38 UTC (rev 13105)
@@ -0,0 +1,41 @@
+/**
+ * 
+ */
+package org.jboss.tools.smooks.javabean.ui;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.jboss.tools.smooks.javabean.ui.action.AddJavaBeanModelAction;
+import org.jboss.tools.smooks.javabean.ui.action.RemoveJavaBeanAction;
+import org.jboss.tools.smooks.ui.popup.ISmooksAction;
+import org.jboss.tools.smooks.ui.popup.IViewerActionsProvider;
+
+/**
+ * @author Dart
+ *
+ */
+public class JavaBeanViewerActionProvider implements IViewerActionsProvider {
+	private List<ISmooksAction> actionList = null;
+	public List<ISmooksAction> getActionList() {
+		if(actionList == null){
+			actionList = new ArrayList<ISmooksAction>();
+			actionList.add(createAddJavaBeanAction());
+			actionList.add(createRemoveJavaBeanModelAction());
+		}
+		return actionList;
+	}
+	
+	protected AddJavaBeanModelAction createAddJavaBeanAction(){
+		AddJavaBeanModelAction action = new AddJavaBeanModelAction();
+		action.setText("Add JavaBean");
+		return action;
+	}
+	
+	protected RemoveJavaBeanAction createRemoveJavaBeanModelAction(){
+		RemoveJavaBeanAction action = new RemoveJavaBeanAction();
+		action.setText("Remove JavaBean");
+		return action;
+	}
+
+}


Property changes on: trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/javabean/ui/JavaBeanViewerActionProvider.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Modified: trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/javabean/ui/JavaImageConstants.java
===================================================================
--- trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/javabean/ui/JavaImageConstants.java	2009-01-18 07:41:24 UTC (rev 13104)
+++ trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/javabean/ui/JavaImageConstants.java	2009-01-18 07:45:38 UTC (rev 13105)
@@ -7,4 +7,8 @@
 	public static final String IMAGE_JAVA_COLLECTION = "icons/full/obj16/javalistmodel.gif";
 	
 	public static final String IMAGE_JAVA_ARRAY = "icons/full/obj16/javaarraymodel.gif";
+	
+	public static final String IMAGE_CHECKBOX_CHECK = "icons/full/obj16/checkbox_checked.gif";
+	
+	public static final String IMAGE_CHECKBOX_UNCHECK = "icons/full/obj16/checkbox_uncheck.gif";
 }

Modified: trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/javabean/ui/NewJavaBeanStrucutredDataWizard.java
===================================================================
--- trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/javabean/ui/NewJavaBeanStrucutredDataWizard.java	2009-01-18 07:41:24 UTC (rev 13104)
+++ trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/javabean/ui/NewJavaBeanStrucutredDataWizard.java	2009-01-18 07:45:38 UTC (rev 13105)
@@ -10,6 +10,8 @@
  ******************************************************************************/
 package org.jboss.tools.smooks.javabean.ui;
 
+import java.lang.reflect.Array;
+import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Properties;
@@ -27,7 +29,9 @@
 import org.eclipse.ui.IFileEditorInput;
 import org.eclipse.ui.INewWizard;
 import org.eclipse.ui.IWorkbench;
+import org.jboss.tools.smooks.javabean.model.JavaBeanList;
 import org.jboss.tools.smooks.javabean.model.JavaBeanModel;
+import org.jboss.tools.smooks.javabean.model.JavaBeanModelFactory;
 import org.jboss.tools.smooks.ui.IStructuredDataCreationWizard;
 import org.jboss.tools.smooks.ui.SmooksUIActivator;
 
@@ -39,6 +43,14 @@
 		IStructuredDataCreationWizard, INewWizard {
 	JavaBeanConfigWizardPage page = null;
 	IJavaProject project = null;
+	public IJavaProject getProject() {
+		return project;
+	}
+
+	public void setProject(IJavaProject project) {
+		this.project = project;
+	}
+
 	Object result = null;
 	Properties properties = new Properties();
 
@@ -67,12 +79,49 @@
 		return true;
 	}
 
-	public Object getTreeViewerInputContents() {
-		if (result == null)
+	public JavaBeanList getJavaBeanList() {
+		JavaBeanList list = new JavaBeanList();
+		if (result != null && result instanceof List) {
+			for (Iterator iterator = ((List) result).iterator(); iterator
+					.hasNext();) {
+				JavaBeanModel javabean = (JavaBeanModel) iterator.next();
+				boolean isArray = "array".equals(javabean
+						.getExtendProperty("many"));
+				boolean isList = "list".equals(javabean
+						.getExtendProperty("many"));
+				if (isArray) {
+					Object arrayInstance = Array.newInstance(javabean
+							.getBeanClass(), 0);
+					JavaBeanModel model = JavaBeanModelFactory
+							.getJavaBeanModelWithLazyLoad(arrayInstance
+									.getClass());
+					list.addJavaBean(model);
+					continue;
+				}
+				if(isList){
+					JavaBeanModel model = JavaBeanModelFactory
+							.getJavaBeanModelWithLazyLoad(ArrayList.class);
+					model.setComponentClass(javabean.getBeanClass());
+					list.addJavaBean(model);
+					continue;
+				}
+				list.addJavaBean(javabean);
+			}
+		}
+		if (list.getChildren().size() <= 0) {
 			return null;
+		}
+		return list;
+	}
+
+	public Object getResult() {
 		return result;
 	}
 
+	public Object getTreeViewerInputContents() {
+		return getJavaBeanList();
+	}
+
 	public void init(IEditorSite site, IEditorInput input) {
 		if (input != null && input instanceof IFileEditorInput) {
 			IFileEditorInput fi = (IFileEditorInput) input;

Added: trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/javabean/ui/TargetReferenceConnectionLine.java
===================================================================
--- trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/javabean/ui/TargetReferenceConnectionLine.java	                        (rev 0)
+++ trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/javabean/ui/TargetReferenceConnectionLine.java	2009-01-18 07:45:38 UTC (rev 13105)
@@ -0,0 +1,85 @@
+/**
+ * 
+ */
+package org.jboss.tools.smooks.javabean.ui;
+
+import org.eclipse.draw2d.Graphics;
+import org.eclipse.draw2d.IFigure;
+import org.eclipse.draw2d.PolylineConnection;
+import org.eclipse.draw2d.geometry.Point;
+import org.eclipse.draw2d.geometry.PointList;
+import org.eclipse.draw2d.geometry.Rectangle;
+
+/**
+ * @author Dart
+ * 
+ */
+public class TargetReferenceConnectionLine extends PolylineConnection {
+	protected void outlineShape(Graphics g) {
+		try {
+			g.setAlpha(100);
+			g.setForegroundColor(org.eclipse.draw2d.ColorConstants.red);
+			PointList displayPoints = getReferenceLinePoints();
+			if (displayPoints != null)
+				g.drawPolyline(displayPoints);
+		} catch (Exception e) {
+			e.printStackTrace();
+			super.outlineShape(g);
+		}
+	}
+
+	private PointList getReferenceLinePoints() {
+		PointList list = new PointList();
+		Point start = getStart();
+		Point end = getEnd();
+		
+		if(getCenterWidth() <= 0){
+			return getPoints();
+		}
+
+		int width = getCenterWidth();
+		int h = Math.min(width/4, 15);
+		
+		
+		Point startnext = new Point(start.x - 30, start.y + h);
+
+		Point endnext = new Point(end.x - 30, end.y - h);
+
+		start = new Point(start.x - 5,start.y);
+		end = new Point(end.x - 5,end.y);
+		
+		list.addPoint(start);
+		list.addPoint(startnext);
+		list.addPoint(endnext);
+		list.addPoint(end);
+
+		return list;
+
+	}
+
+	protected int getCenterWidth() {
+		return Math.abs(getStart().y - getEnd().y);
+	}
+
+	public Rectangle getBounds() {
+		if (bounds == null) {
+			if (this.getCenterWidth() <= 0)
+				return super.getBounds();
+			bounds = getReferenceLinePoints().getBounds();
+			bounds.expand(lineWidth / 2, lineWidth / 2);
+
+			for (int i = 0; i < getChildren().size(); i++) {
+				IFigure child = (IFigure) getChildren().get(i);
+				bounds.union(child.getBounds());
+			}
+		}
+		return bounds;
+	}
+
+	@Override
+	public boolean containsPoint(int x, int y) {
+		// TODO Auto-generated method stub
+		return super.containsPoint(x, y);
+	}
+
+}


Property changes on: trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/javabean/ui/TargetReferenceConnectionLine.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Added: trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/javabean/ui/action/AddJavaBeanModelAction.java
===================================================================
--- trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/javabean/ui/action/AddJavaBeanModelAction.java	                        (rev 0)
+++ trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/javabean/ui/action/AddJavaBeanModelAction.java	2009-01-18 07:45:38 UTC (rev 13105)
@@ -0,0 +1,89 @@
+/**
+ * 
+ */
+package org.jboss.tools.smooks.javabean.ui.action;
+
+import java.beans.PropertyChangeListener;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.wizard.WizardDialog;
+import org.jboss.tools.smooks.javabean.model.JavaBeanList;
+import org.jboss.tools.smooks.javabean.model.JavaBeanModel;
+import org.jboss.tools.smooks.javabean.ui.NewJavaBeanStrucutredDataWizard;
+import org.jboss.tools.smooks.ui.gef.model.AbstractStructuredDataModel;
+import org.jboss.tools.smooks.ui.gef.model.SourceModel;
+import org.jboss.tools.smooks.ui.modelparser.SmooksConfigurationFileGenerateContext;
+import org.jboss.tools.smooks.utils.UIUtils;
+
+/**
+ * @author Dart
+ * 
+ */
+public class AddJavaBeanModelAction extends JavaBeanModelAction {
+	@Override
+	public void run() {
+		super.run();
+		SmooksConfigurationFileGenerateContext context = getSmooksContext();
+		if(context == null) return;
+		
+		NewJavaBeanStrucutredDataWizard wizard = new NewJavaBeanStrucutredDataWizard();
+		IProject project = context.getSmooksConfigFile().getProject();
+		IJavaProject javaProject = null;
+		if (project instanceof IJavaProject) {
+			javaProject = (IJavaProject) project;
+		} else {
+			javaProject = JavaCore.create(project);
+		}
+		if(javaProject == null) return;
+		
+		wizard.setProject(javaProject);
+		WizardDialog dialog = new WizardDialog(context.getShell(),wizard);
+		if(dialog.open() == Dialog.OK){
+			JavaBeanList list = wizard.getJavaBeanList();
+			TreeViewer viewer = (TreeViewer) getViewer();
+			Object input = viewer.getInput();
+			if(input == null){
+				if(viewer instanceof PropertyChangeListener){
+					list.addPropertyChangeListener((PropertyChangeListener)viewer);
+				}
+				viewer.setInput(list);
+			}else{
+				if(input instanceof JavaBeanList){
+					List children = list.getChildren();
+					for (Iterator iterator = children.iterator(); iterator
+							.hasNext();) {
+						JavaBeanModel javaBean = (JavaBeanModel) iterator.next();
+						((JavaBeanList)input).addJavaBean(javaBean);
+					}
+				}
+			}
+		}
+	}
+	
+
+	@Override
+	public void setSelection(ISelection selection) {
+		super.setSelection(selection);
+		setEnabled(true);
+		SmooksConfigurationFileGenerateContext context = getSmooksContext();
+		if(context == null) return;
+		List elements = ((IStructuredSelection) selection).toList();
+		for (Iterator iterator = elements.iterator(); iterator.hasNext();) {
+			JavaBeanModel model = (JavaBeanModel) iterator.next();
+			AbstractStructuredDataModel graphModel = UIUtils.findGraphModel(
+					context.getGraphicalRootModel(), model);
+			if(graphModel instanceof SourceModel){
+				setEnabled(false);
+				break;
+			}
+		}
+	}
+}


Property changes on: trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/javabean/ui/action/AddJavaBeanModelAction.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Added: trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/javabean/ui/action/JavaBeanModelAction.java
===================================================================
--- trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/javabean/ui/action/JavaBeanModelAction.java	                        (rev 0)
+++ trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/javabean/ui/action/JavaBeanModelAction.java	2009-01-18 07:45:38 UTC (rev 13105)
@@ -0,0 +1,28 @@
+/**
+ * 
+ */
+package org.jboss.tools.smooks.javabean.ui.action;
+
+import java.util.List;
+
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.jboss.tools.smooks.javabean.model.JavaBeanModel;
+import org.jboss.tools.smooks.ui.popup.SmooksAction;
+
+/**
+ * @author Dart
+ *
+ */
+public class JavaBeanModelAction extends SmooksAction{
+	public List getJavaBeanModelList(){
+		return ((IStructuredSelection)getSelection()).toList();
+	}
+	
+	public JavaBeanModel getFirstJavaBeanModel(){
+		Object element = ((IStructuredSelection)getSelection()).getFirstElement();
+		if(element instanceof JavaBeanModel){
+			return (JavaBeanModel)element;
+		}
+		return null;
+	}
+}


Property changes on: trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/javabean/ui/action/JavaBeanModelAction.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Added: trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/javabean/ui/action/RemoveJavaBeanAction.java
===================================================================
--- trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/javabean/ui/action/RemoveJavaBeanAction.java	                        (rev 0)
+++ trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/javabean/ui/action/RemoveJavaBeanAction.java	2009-01-18 07:45:38 UTC (rev 13105)
@@ -0,0 +1,90 @@
+/**
+ * 
+ */
+package org.jboss.tools.smooks.javabean.ui.action;
+
+import java.beans.PropertyChangeListener;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.jboss.tools.smooks.javabean.model.JavaBeanList;
+import org.jboss.tools.smooks.javabean.model.JavaBeanModel;
+import org.jboss.tools.smooks.ui.gef.model.IConnectableModel;
+import org.jboss.tools.smooks.ui.gef.model.LineConnectionModel;
+import org.jboss.tools.smooks.ui.modelparser.SmooksConfigurationFileGenerateContext;
+import org.jboss.tools.smooks.utils.UIUtils;
+
+/**
+ * @author Dart
+ *
+ */
+public class RemoveJavaBeanAction extends JavaBeanModelAction {
+
+	@Override
+	public void run() {
+		super.run();
+		SmooksConfigurationFileGenerateContext context = getSmooksContext();
+		if(context == null) return;
+		List list = getJavaBeanModelList();
+		TreeViewer viewer = (TreeViewer)getViewer();
+		Object input = viewer.getInput();
+		JavaBeanList beanList = null;
+		if(input instanceof JavaBeanList){
+			beanList = (JavaBeanList)input;
+		}
+		if(beanList==null) return;
+		for (Iterator iterator = list.iterator(); iterator.hasNext();) {
+			JavaBeanModel model = (JavaBeanModel) iterator.next();
+			IConnectableModel graphModel = (IConnectableModel) UIUtils.findGraphModel(context.getGraphicalRootModel(), model);
+			if(graphModel != null){
+//				disConnectAllConnections(graphModel);
+			}
+			if(viewer instanceof PropertyChangeListener){
+				model.removePropertyChangeListener((PropertyChangeListener)viewer);
+			}
+			beanList.removeJavaBean(model);
+		}
+	}
+	
+	protected void disConnectAllConnections(IConnectableModel model){
+		List temp = new ArrayList(model.getModelSourceConnections());
+		for (Iterator iterator = temp.iterator(); iterator.hasNext();) {
+			LineConnectionModel connection = (LineConnectionModel) iterator.next();
+			connection.disConnect();
+		}
+		temp.clear();
+		
+		temp = new ArrayList(model.getModelTargetConnections());
+		for (Iterator iterator = temp.iterator(); iterator.hasNext();) {
+			LineConnectionModel object = (LineConnectionModel) iterator.next();
+			object.disConnect();
+		}
+		temp.clear();
+		temp = null;
+	}
+
+	@Override
+	public void setSelection(ISelection selection) {
+		super.setSelection(selection);
+		setEnabled(true);
+		List list = getJavaBeanModelList();
+		if(list.size() <= 0){
+			setEnabled(false);
+			return;
+		}
+		for (Iterator iterator = list.iterator(); iterator.hasNext();) {
+			JavaBeanModel model = (JavaBeanModel) iterator.next();
+			JavaBeanModel parent = model.getParent();
+			if(parent != null && parent instanceof JavaBeanList){
+				
+			}else{
+				setEnabled(false);
+				return;
+			}
+		}
+	}
+	
+}


Property changes on: trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/javabean/ui/action/RemoveJavaBeanAction.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Modified: trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/ui/ConnectionPropertySection.java
===================================================================
--- trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/ui/ConnectionPropertySection.java	2009-01-18 07:41:24 UTC (rev 13104)
+++ trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/ui/ConnectionPropertySection.java	2009-01-18 07:45:38 UTC (rev 13105)
@@ -68,7 +68,9 @@
 		pgd.grabExcessVerticalSpace = true;
 		rootParent.setLayoutData(pgd);
 		Section section = factory.createSection(parent, Section.TITLE_BAR);
-		section.setText(Messages.getString("ConnectionPropertySection.ConnectionPropertiesSecionText")); //$NON-NLS-1$
+		section
+				.setText(Messages
+						.getString("ConnectionPropertySection.ConnectionPropertiesSecionText")); //$NON-NLS-1$
 
 		Composite mainComposite = factory.createComposite(section);
 
@@ -157,17 +159,24 @@
 
 		});
 		nameColumn.getColumn().setWidth(100);
-		nameColumn.getColumn().setText(Messages.getString("ConnectionPropertySection.NameColumnText")); //$NON-NLS-1$
+		nameColumn.getColumn().setText(
+				Messages.getString("ConnectionPropertySection.NameColumnText")); //$NON-NLS-1$
 		TableViewerColumn valueColumn = new TableViewerColumn(tableViewer,
 				SWT.NONE);
 		valueColumn.getColumn().setWidth(100);
-		valueColumn.getColumn().setText(Messages.getString("ConnectionPropertySection.ValueColumnText")); //$NON-NLS-1$
+		valueColumn
+				.getColumn()
+				.setText(
+						Messages
+								.getString("ConnectionPropertySection.ValueColumnText")); //$NON-NLS-1$
 		valueColumn.setLabelProvider(new CellLabelProvider() {
 
 			public void update(ViewerCell cell) {
 				Object obj = cell.getElement();
 				if (obj instanceof PropertyModel) {
-					cell.setText(((PropertyModel) obj).getValue());
+					Object value = ((PropertyModel) obj).getValue();
+					if (value != null)
+						cell.setText(value.toString());
 				}
 			}
 
@@ -182,7 +191,8 @@
 		GridLayout gl = new GridLayout();
 		buttonComposite.setLayout(gl);
 
-		Button button1 = factory.createButton(buttonComposite, Messages.getString("ConnectionPropertySection.NewButtonText"), //$NON-NLS-1$
+		Button button1 = factory.createButton(buttonComposite, Messages
+				.getString("ConnectionPropertySection.NewButtonText"), //$NON-NLS-1$
 				SWT.NONE);
 		button1.addSelectionListener(new SelectionListener() {
 
@@ -214,7 +224,8 @@
 		gd = new GridData(GridData.FILL_HORIZONTAL);
 		button1.setLayoutData(gd);
 
-		Button button2 = factory.createButton(buttonComposite, Messages.getString("ConnectionPropertySection.DeleteButtonText"), //$NON-NLS-1$
+		Button button2 = factory.createButton(buttonComposite, Messages
+				.getString("ConnectionPropertySection.DeleteButtonText"), //$NON-NLS-1$
 				SWT.NONE);
 		gd = new GridData(GridData.FILL_HORIZONTAL);
 		button2.setLayoutData(gd);
@@ -286,7 +297,8 @@
 
 			case 1:
 				if (element instanceof PropertyModel) {
-					return ((PropertyModel) element).getValue();
+					Object value = ((PropertyModel) element).getValue();
+					return value.toString();
 				}
 				return element.toString();
 			}

Modified: trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/ui/IXMLStructuredObject.java
===================================================================
--- trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/ui/IXMLStructuredObject.java	2009-01-18 07:41:24 UTC (rev 13104)
+++ trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/ui/IXMLStructuredObject.java	2009-01-18 07:45:38 UTC (rev 13105)
@@ -19,5 +19,7 @@
 	
 	public Object getID();
 	
+	public boolean isRootNode();
+	
 	public boolean isAttribute();
 }

Modified: trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/ui/SmooksUIActivator.java
===================================================================
--- trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/ui/SmooksUIActivator.java	2009-01-18 07:41:24 UTC (rev 13104)
+++ trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/ui/SmooksUIActivator.java	2009-01-18 07:45:38 UTC (rev 13105)
@@ -68,6 +68,10 @@
 		// regist java images
 		reg.put(JavaImageConstants.IMAGE_JAVA_ATTRIBUTE,
 				imageDescriptorFromPlugin(PLUGIN_ID, JavaImageConstants.IMAGE_JAVA_ATTRIBUTE));
+		reg.put(JavaImageConstants.IMAGE_CHECKBOX_CHECK,
+				imageDescriptorFromPlugin(PLUGIN_ID, JavaImageConstants.IMAGE_CHECKBOX_CHECK));
+		reg.put(JavaImageConstants.IMAGE_CHECKBOX_UNCHECK,
+				imageDescriptorFromPlugin(PLUGIN_ID, JavaImageConstants.IMAGE_CHECKBOX_UNCHECK));
 		reg.put(JavaImageConstants.IMAGE_JAVA_OBJECT,
 				imageDescriptorFromPlugin(PLUGIN_ID, "icons/full/obj16/class_obj.gif"));
 		reg.put(JavaImageConstants.IMAGE_JAVA_ARRAY,

Added: trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/ui/TargetTreeDragListener.java
===================================================================
--- trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/ui/TargetTreeDragListener.java	                        (rev 0)
+++ trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/ui/TargetTreeDragListener.java	2009-01-18 07:45:38 UTC (rev 13105)
@@ -0,0 +1,64 @@
+/**
+ * 
+ */
+package org.jboss.tools.smooks.ui;
+
+import org.eclipse.gef.GraphicalViewer;
+import org.eclipse.gef.dnd.TemplateTransfer;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.swt.dnd.DragSourceAdapter;
+import org.eclipse.swt.dnd.DragSourceEvent;
+import org.jboss.tools.smooks.graphical.util.GraphicalAdapterFactory;
+import org.jboss.tools.smooks.ui.gef.tools.SmooksCustomConnectionCreationTool;
+
+/**
+ * @author Dart
+ *
+ */
+public class TargetTreeDragListener extends DragSourceAdapter {
+	
+	private TreeViewer hostViewer = null;
+	
+	private GraphicalViewer graphicalViewer = null;
+
+
+	public TargetTreeDragListener(TreeViewer hostViewer , GraphicalViewer graphicalViewer){
+		super();
+		setHostViewer(hostViewer);
+		setGraphicalViewer(graphicalViewer);
+	}
+	
+	public GraphicalViewer getGraphicalViewer() {
+		return graphicalViewer;
+	}
+
+
+	public void setGraphicalViewer(GraphicalViewer graphicalViewer) {
+		this.graphicalViewer = graphicalViewer;
+	}
+	
+	public TreeViewer getHostViewer() {
+		return hostViewer;
+	}
+
+	public void setHostViewer(TreeViewer hostViewer) {
+		this.hostViewer = hostViewer;
+	}
+
+	public void dragStart(DragSourceEvent event) {
+		if(getHostViewer() != null){
+			TreeViewer viewer = getHostViewer();
+			IStructuredSelection selection = (IStructuredSelection) viewer.getSelection();
+			if(selection == null) return;
+			event.data = selection;
+			TemplateTransfer.getInstance().setTemplate(
+					viewer.getSelection());
+			event.doit = true;
+			
+			getGraphicalViewer().getEditDomain().setActiveTool(
+					new SmooksCustomConnectionCreationTool(selection.getFirstElement(),
+							getGraphicalViewer()));
+		}
+	}
+}


Property changes on: trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/ui/TargetTreeDragListener.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Modified: trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/ui/editors/SmooksGraphicalFormPage.java
===================================================================
--- trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/ui/editors/SmooksGraphicalFormPage.java	2009-01-18 07:41:24 UTC (rev 13104)
+++ trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/ui/editors/SmooksGraphicalFormPage.java	2009-01-18 07:45:38 UTC (rev 13105)
@@ -28,7 +28,6 @@
 import org.eclipse.draw2d.ColorConstants;
 import org.eclipse.draw2d.ConnectionLayer;
 import org.eclipse.emf.ecore.resource.Resource;
-import org.eclipse.emf.ecore.resource.Resource.IOWrappedException;
 import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;
 import org.eclipse.gef.DefaultEditDomain;
 import org.eclipse.gef.GraphicalViewer;
@@ -106,7 +105,6 @@
 import org.eclipse.ui.forms.widgets.Hyperlink;
 import org.eclipse.ui.forms.widgets.ScrolledForm;
 import org.eclipse.ui.forms.widgets.Section;
-import org.eclipse.ui.internal.handlers.WizardHandler.New;
 import org.eclipse.wst.sse.ui.StructuredTextEditor;
 import org.jboss.tools.smooks.analyzer.AnalyzerFactory;
 import org.jboss.tools.smooks.analyzer.DesignTimeAnalyzeResult;
@@ -135,7 +133,9 @@
 import org.jboss.tools.smooks.ui.IViewerInitor;
 import org.jboss.tools.smooks.ui.SmooksUIActivator;
 import org.jboss.tools.smooks.ui.StructuredDataCreationWizardDailog;
+import org.jboss.tools.smooks.ui.TargetTreeDragListener;
 import org.jboss.tools.smooks.ui.ViewerInitorStore;
+import org.jboss.tools.smooks.ui.gef.commands.DeleteConnectionCommand;
 import org.jboss.tools.smooks.ui.gef.editparts.SmooksEditPartFactory;
 import org.jboss.tools.smooks.ui.gef.model.AbstractStructuredDataModel;
 import org.jboss.tools.smooks.ui.gef.model.GraphRootModel;
@@ -274,20 +274,20 @@
 	}
 
 	protected void cleanMappingResourceConfig() {
-		SmooksResourceListType list = null;
-		if (!smooksResource.getContents().isEmpty()) {
-			DocumentRoot doc = (DocumentRoot) this.smooksResource.getContents()
-					.get(0);
-			list = doc.getSmooksResourceList();
-			ResourceConfigEraser eraser = new ResourceConfigEraser();
-			eraser.cleanMappingResourceConfig(list, mappingResourceConfigList,
-					this.editingDomain);
-		} else {
-			DocumentRoot doc = SmooksFactory.eINSTANCE.createDocumentRoot();
-			smooksResource.getContents().add(doc);
-			list = SmooksFactory.eINSTANCE.createSmooksResourceListType();
-			doc.setSmooksResourceList(list);
-		}
+		// SmooksResourceListType list = null;
+		// if (!smooksResource.getContents().isEmpty()) {
+		// DocumentRoot doc = (DocumentRoot) this.smooksResource.getContents()
+		// .get(0);
+		// list = doc.getSmooksResourceList();
+		// ResourceConfigEraser eraser = new ResourceConfigEraser();
+		// eraser.cleanMappingResourceConfig(list, mappingResourceConfigList,
+		// this.editingDomain);
+		// } else {
+		// DocumentRoot doc = SmooksFactory.eINSTANCE.createDocumentRoot();
+		// smooksResource.getContents().add(doc);
+		// list = SmooksFactory.eINSTANCE.createSmooksResourceListType();
+		// doc.setSmooksResourceList(list);
+		// }
 	}
 
 	public void addAnalyzeListener(IAnalyzeListener listener) {
@@ -351,7 +351,7 @@
 		// sashForm.setSashWidth(1);
 
 		SashForm mappingMainComposite = new SashForm(sashForm, SWT.NONE);
-		// under the eclipse3.3
+		// TODO under the eclipse3.3
 		// mappingMainComposite.setSashWidth(1);
 		GridData sgd = new GridData(GridData.FILL_BOTH);
 		mappingGUISection.setLayoutData(sgd);
@@ -418,15 +418,6 @@
 			compositeSelectionProvider.addSelectionProvider(targetViewer);
 			composite3.setLayoutData(gd);
 			targetViewer.getTree().setLayoutData(gd);
-			targetViewer.addDropSupport(DND.DROP_TARGET_MOVE | DND.DROP_MOVE
-					| DND.DROP_LINK | DND.DROP_LINK,
-					new Transfer[] { TemplateTransfer.getInstance() },
-					new TargetTreeDropTargetListener(targetViewer,
-							getGraphicalViewer()));
-			targetViewer.getTree().addPaintListener(
-					new TreePaintControlListener());
-			targetViewer.getTree().addListener(SWT.PaintItem,
-					new TreeItemPaintListener());
 
 			final MenuManager menuManager = new MenuManager("#TargetViewerMenu");
 			targetViewer.getTree().setMenu(
@@ -441,8 +432,6 @@
 			});
 			menuManager.add(new Separator("smooks_additions"));
 			getSite().registerContextMenu(menuManager, targetViewer);
-
-			targetViewer.addSelectionChangedListener(this);
 			composite3.setBackground(GraphicsConstants.groupBorderColor);
 		}
 
@@ -488,23 +477,6 @@
 						targetViewer));
 			}
 		}
-
-		// other fragment edit panel
-
-		// Section section1 = this.createPageSectionHeader(rootMainControl,
-		// Section.TITLE_BAR | Section.TWISTIE,
-		// "Other Edit Panel", "Edit the filter panel");
-		// Composite otherComposite = this.createUISectionContainer(section1,
-		// 1);
-		// section1.setClient(otherComposite);
-		// FillLayout otherFillLayout = new FillLayout();
-		// otherFillLayout.marginHeight = 0;
-		// otherFillLayout.marginWidth = 0;
-		// otherComposite.setLayout(otherFillLayout);
-		// createOtherSmooksGUI(otherComposite,toolkit);
-		// GridData sgd1 = new GridData(GridData.FILL_HORIZONTAL);
-		// section1.setLayoutData(sgd1);
-
 		toolkit.paintBordersFor(rootMainControl);
 		form.pack();
 
@@ -531,12 +503,30 @@
 		}
 
 		getSite().setSelectionProvider(compositeSelectionProvider);
-
+		this.hookTargetTreeViewer(targetViewer);
 		this.hookGraphicalViewer();
 		this.initGraphicalViewer();
 		initMappingGUIStates();
 	}
 
+	protected void hookTargetTreeViewer(TreeViewer targetViewer) {
+		targetViewer.addDropSupport(DND.DROP_TARGET_MOVE | DND.DROP_MOVE
+				| DND.DROP_LINK | DND.DROP_LINK,
+				new Transfer[] { TemplateTransfer.getInstance() },
+				new TargetTreeDropTargetListener(targetViewer,
+						getGraphicalViewer()));
+		
+		targetViewer.addDragSupport(DND.DROP_MOVE | DND.DROP_COPY
+				| DND.DROP_LINK, new Transfer[] { TemplateTransfer
+				.getInstance() }, new TargetTreeDragListener(targetViewer,
+				getGraphicalViewer()));
+		
+		targetViewer.getTree().addPaintListener(new TreePaintControlListener());
+		targetViewer.getTree().addListener(SWT.PaintItem,
+				new TreeItemPaintListener());
+		targetViewer.addSelectionChangedListener(this);
+	}
+
 	protected void createErrorMessageLinkGUI(FormToolkit toolkit,
 			Composite parent) {
 
@@ -586,12 +576,12 @@
 				mappingGUISection.setEnabled(false);
 			this.notifyAnalyzeListeners(throwable);
 		}
-		
+
 		// show/unshow the problem panel
-		if(disableMappingGUI){
+		if (disableMappingGUI) {
 			analyzeResultList.clear();
 			updateNotifyMessage();
-		}else{
+		} else {
 			analyzeDesignGraph();
 		}
 	}
@@ -628,12 +618,12 @@
 				mappingGUISection.setEnabled(false);
 			this.notifyAnalyzeListeners(throwable);
 		}
-		
+
 		// show/unshow the problem panel
-		if(disableMappingGUI){
+		if (disableMappingGUI) {
 			analyzeResultList.clear();
 			updateNotifyMessage();
-		}else{
+		} else {
 			analyzeDesignGraph();
 		}
 	}
@@ -693,10 +683,24 @@
 				currentModel = connection.getSource();
 			}
 			Object parent = provider.getParent(currentModel);
-			while (parent != null && parent != currentModel) {
-				viewer.expandToLevel(parent, 1);
-				parent = provider.getParent(parent);
+			try {
+				while (parent != null && parent != currentModel) {
+					viewer.expandToLevel(parent, 1);
+					parent = provider.getParent(parent);
+				}
+			} catch (Exception e) {
+				continue;
 			}
+			currentModel = connection.getSource();
+			parent = provider.getParent(currentModel);
+			try {
+				while (parent != null && parent != currentModel) {
+					viewer.expandToLevel(parent, 1);
+					parent = provider.getParent(parent);
+				}
+			} catch (Exception e) {
+				continue;
+			}
 		}
 	}
 
@@ -708,16 +712,21 @@
 		return this.initTreeViewerProvider(sourceViewer, sourceDataTypeID);
 	}
 
-	/**
-	 * this method is only for demo
-	 * 
-	 * @param items
-	 * @param modelClass
-	 */
 	protected void createGraphModels(TreeItem[] items,
-			Class<? extends Object> modelClass) {
+			Class<? extends Object> modelClass, Object[] effectiveElements) {
 		for (int i = 0; i < items.length; i++) {
 			TreeItem item = (TreeItem) items[i];
+			if (effectiveElements != null) {
+				boolean effective = false;
+				for (int j = 0; j < effectiveElements.length; j++) {
+					if (item.getData() == effectiveElements[j]) {
+						effective = true;
+						break;
+					}
+				}
+				if (!effective)
+					continue;
+			}
 			if (item == null)
 				continue;
 			if (item.getData(REFERENCE_MODEL) != null && !item.isDisposed()) {
@@ -748,12 +757,23 @@
 				}
 			}
 			if (item.getExpanded() && item.getItemCount() > 0) {
-				createGraphModels(item.getItems(), modelClass);
+				createGraphModels(item.getItems(), modelClass,
+						effectiveElements);
 			} else {
 			}
 		}
 	}
 
+	/**
+	 * 
+	 * @param items
+	 * @param modelClass
+	 */
+	protected void createGraphModels(TreeItem[] items,
+			Class<? extends Object> modelClass) {
+		createGraphModels(items, modelClass, null);
+	}
+
 	protected void createSourceGraphModels() {
 		clearExsitingGraphModels(SourceModel.class);
 		if (sourceViewer == null)
@@ -793,7 +813,7 @@
 	 * 
 	 * @param transformModel
 	 */
-	public void clearGraphModel(Object transformModel) {
+	public boolean clearGraphModel(Object transformModel) {
 		AbstractStructuredDataModel graphModel = UIUtils.findGraphModel(
 				rootModel, transformModel);
 		if (graphModel != null) {
@@ -804,7 +824,9 @@
 				for (Iterator iterator = temp.iterator(); iterator.hasNext();) {
 					LineConnectionModel line = (LineConnectionModel) iterator
 							.next();
-					line.disConnect();
+					DeleteConnectionCommand command = new DeleteConnectionCommand();
+					command.setConnectionModel(line);
+					getEditDomain().getCommandStack().execute(command);
 				}
 				temp.clear();
 				list.clear();
@@ -817,13 +839,18 @@
 				for (Iterator iterator = temp.iterator(); iterator.hasNext();) {
 					LineConnectionModel line = (LineConnectionModel) iterator
 							.next();
-					line.disConnect();
+					DeleteConnectionCommand command = new DeleteConnectionCommand();
+					command.setConnectionModel(line);
+					getEditDomain().getCommandStack().execute(command);
 				}
 				temp.clear();
 				list.clear();
 			}
 			rootModel.removeChild(graphModel);
 			deAssosiateGraphAndTransformModel(graphModel);
+			return true;
+		} else {
+			return false;
 		}
 	}
 
@@ -880,7 +907,14 @@
 
 	protected TreeViewer createTargetTreeViewer(Composite parent, int style) {
 		TreeViewer viewer = new TransformDataTreeViewer(parent, SWT.NONE
-				| style, this);
+				| style, this) {
+			protected void internalRefresh(Object obj) {
+				super.internalRefresh(obj);
+				if (obj != null)
+					createGraphModels(getTree().getItems(), TargetModel.class,
+							null);
+			}
+		};
 		return viewer;
 	}
 
@@ -1008,6 +1042,14 @@
 		context.setDataMappingRootModel(this.rootModel);
 		context.setSmooksConfigFile(((IFileEditorInput) getEditorInput())
 				.getFile());
+		context.setGefDomain(getEditDomain());
+		List contents = this.smooksResource.getContents();
+		if (contents.size() > 0) {
+			DocumentRoot documentRoot = (DocumentRoot) contents.get(0);
+			context.setSmooksResourceListModel(documentRoot
+					.getSmooksResourceList());
+		}
+		context.setDomain(getEditingDomain());
 		if (sourceViewer != null) {
 			context.setSourceViewerLabelProvider((LabelProvider) sourceViewer
 					.getLabelProvider());
@@ -1099,26 +1141,37 @@
 	protected void createConnectionModels() {
 		if (rootModel == null)
 			return;
-		List children = this.rootModel.getChildren();
-		for (Iterator iterator = children.iterator(); iterator.hasNext();) {
-			TreeItemRelationModel source = (TreeItemRelationModel) iterator
-					.next();
-			if (source instanceof SourceModel) {
-				for (Iterator iterator2 = children.iterator(); iterator2
-						.hasNext();) {
-					TreeItemRelationModel target = (TreeItemRelationModel) iterator2
-							.next();
-					if (target instanceof TargetModel) {
-						MappingModel mapping = getMappingModel(source, target);
-						if (mapping != null) {
-							LineConnectionModel connection = new LineConnectionModel(
-									source, target);
-							connection.setProperties(mapping.getProperties());
-						}
-					}
+
+		List<SourceModel> sourceModelList = rootModel.loadSourceModelList();
+		List<TargetModel> targetModelList = rootModel.loadTargetModelList();
+
+		for (Iterator iterator = sourceModelList.iterator(); iterator.hasNext();) {
+			SourceModel sourceModel = (SourceModel) iterator.next();
+			for (Iterator iterator2 = targetModelList.iterator(); iterator2
+					.hasNext();) {
+				TargetModel targetModel = (TargetModel) iterator2.next();
+				MappingModel mapping = getMappingModel(sourceModel, targetModel);
+				if (mapping != null) {
+					LineConnectionModel connection = new LineConnectionModel(
+							sourceModel, targetModel);
+					connection.setProperties(mapping.getProperties());
 				}
 			}
 		}
+		List temp = new ArrayList(targetModelList);
+		for (Iterator iterator = targetModelList.iterator(); iterator.hasNext();) {
+			TargetModel targetModel = (TargetModel) iterator.next();
+			for (Iterator iterator2 = temp.iterator(); iterator2.hasNext();) {
+				TargetModel targetModel1 = (TargetModel) iterator2.next();
+				MappingModel mapping = getMappingModel(targetModel,
+						targetModel1);
+				if (mapping != null) {
+					LineConnectionModel connection = new LineConnectionModel(
+							targetModel, targetModel1);
+					connection.setProperties(mapping.getProperties());
+				}
+			}
+		}
 	}
 
 	protected MappingModel getMappingModel(TreeItemRelationModel source,
@@ -1626,11 +1679,6 @@
 				modelClass = SourceModel.class;
 			}
 			createGraphModels(tree.getItems(), modelClass);
-			// if (tree.getData(TreeItemRelationModel.PRO_TREE_REPAINT) != null)
-			// {
-			// // System.out.println("Block a event fire !!");
-			// return;
-			// }
 			rootModel.firePropertyChange(
 					AbstractStructuredDataModel.P_REFRESH_PANEL, null,
 					new Object());

Modified: trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/ui/editors/SmooksNormalContentEditFormPage.java
===================================================================
--- trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/ui/editors/SmooksNormalContentEditFormPage.java	2009-01-18 07:41:24 UTC (rev 13104)
+++ trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/ui/editors/SmooksNormalContentEditFormPage.java	2009-01-18 07:45:38 UTC (rev 13105)
@@ -301,8 +301,13 @@
 		fileViewer = new TableViewer(viewerComposite, SWT.NONE);
 		fileViewer.setContentProvider(new FileImportContentProvider());
 		fileViewer.setLabelProvider(new FileImportLabelProvider());
-		fileViewer.setInput(getModelPackage().getSmooksResourceList()
-				.getAbstractResourceConfig());
+		if (getModelPackage() != null) {
+			SmooksResourceListType listType = getModelPackage()
+					.getSmooksResourceList();
+			if (listType != null && listType.getAbstractResourceConfig() != null) {
+				fileViewer.setInput(listType.getAbstractResourceConfig());
+			}
+		}
 		fileViewer.addDoubleClickListener(new IDoubleClickListener() {
 			public void doubleClick(DoubleClickEvent event) {
 				openFile(fileViewer.getSelection());

Modified: trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/ui/editors/TransformDataTreeViewer.java
===================================================================
--- trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/ui/editors/TransformDataTreeViewer.java	2009-01-18 07:41:24 UTC (rev 13104)
+++ trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/ui/editors/TransformDataTreeViewer.java	2009-01-18 07:45:38 UTC (rev 13105)
@@ -64,12 +64,13 @@
 		ITreeContentProvider provider = (ITreeContentProvider) this
 				.getContentProvider();
 		if (provider != null) {
-			editor.clearGraphModel(model);
-			Object[] children = provider.getChildren(model);
-			if (children != null) {
-				for (int i = 0; i < children.length; i++) {
-					Object child = children[i];
-					removeGraphModel(child);
+			if (editor.clearGraphModel(model)) {
+				Object[] children = provider.getChildren(model);
+				if (children != null) {
+					for (int i = 0; i < children.length; i++) {
+						Object child = children[i];
+						removeGraphModel(child);
+					}
 				}
 			}
 		}

Modified: trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/ui/gef/commands/CreateConnectionCommand.java
===================================================================
--- trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/ui/gef/commands/CreateConnectionCommand.java	2009-01-18 07:41:24 UTC (rev 13104)
+++ trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/ui/gef/commands/CreateConnectionCommand.java	2009-01-18 07:45:38 UTC (rev 13105)
@@ -14,6 +14,7 @@
  */
 public class CreateConnectionCommand extends Command {
 
+	
 	private List<PropertyModel> propertyList = new ArrayList<PropertyModel>();
 	
 	
@@ -68,6 +69,7 @@
 		connection.setSource(source);
 		connection.setTarget(target);
 		connection.connect();
+		
 	}
 
 	public void setConnection(Object model) {

Modified: trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/ui/gef/commands/DeleteConnectionCommand.java
===================================================================
--- trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/ui/gef/commands/DeleteConnectionCommand.java	2009-01-18 07:41:24 UTC (rev 13104)
+++ trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/ui/gef/commands/DeleteConnectionCommand.java	2009-01-18 07:45:38 UTC (rev 13105)
@@ -14,9 +14,10 @@
 	private IConnectableModel targetNode;
 
 	public void execute() {
-
-		sourceNode.removeSourceConnection(connectionModel);
-		targetNode.removeTargetConnection(connectionModel);
+		if (sourceNode != null && targetNode != null) {
+			sourceNode.removeSourceConnection(connectionModel);
+			targetNode.removeTargetConnection(connectionModel);
+		}
 	}
 
 	public void undo() {
@@ -35,6 +36,10 @@
 	public void setConnectionModel(
 			AbstractStructuredDataConnectionModel connectionModel) {
 		this.connectionModel = connectionModel;
+		if (connectionModel != null) {
+			setSourceNode(connectionModel.getSource());
+			setTargetNode(connectionModel.getTarget());
+		}
 	}
 
 	/**

Modified: trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/ui/gef/editparts/AbstractStructuredDataEditPart.java
===================================================================
--- trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/ui/gef/editparts/AbstractStructuredDataEditPart.java	2009-01-18 07:41:24 UTC (rev 13104)
+++ trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/ui/gef/editparts/AbstractStructuredDataEditPart.java	2009-01-18 07:45:38 UTC (rev 13105)
@@ -2,7 +2,11 @@
 
 import java.beans.PropertyChangeListener;
 
+import org.eclipse.gef.DefaultEditDomain;
+import org.eclipse.gef.GraphicalViewer;
 import org.eclipse.gef.editparts.AbstractGraphicalEditPart;
+import org.eclipse.ui.IEditorPart;
+import org.jboss.tools.smooks.ui.editors.SmooksGraphicalFormPage;
 import org.jboss.tools.smooks.ui.gef.model.AbstractStructuredDataModel;
 
 /**
@@ -12,6 +16,8 @@
  */
 public abstract class AbstractStructuredDataEditPart extends
 		AbstractGraphicalEditPart implements PropertyChangeListener {
+	
+	
 	/*
 	 * (non-Javadoc)
 	 * 
@@ -22,6 +28,32 @@
 		((AbstractStructuredDataModel) getModel())
 				.addPropertyChangeListener(this);
 	}
+	
+	public String getSourceID(){
+		SmooksGraphicalFormPage page = getSmooksGraphicalPage();
+		if(page != null){
+			return page.getSourceDataTypeID();
+		}
+		return null;
+	}
+	
+	public String getTargetID(){
+		SmooksGraphicalFormPage page = getSmooksGraphicalPage();
+		if(page != null){
+			return page.getTargetDataTypeID();
+		}
+		return null;
+	}
+	
+	public SmooksGraphicalFormPage getSmooksGraphicalPage(){
+		GraphicalViewer viewer = (GraphicalViewer) this.getViewer();
+		DefaultEditDomain domain = (DefaultEditDomain) viewer.getEditDomain();
+		IEditorPart part = domain.getEditorPart();
+		if(part instanceof SmooksGraphicalFormPage){
+			return (SmooksGraphicalFormPage)part;
+		}
+		return null;
+	}
 
 	/*
 	 * (non-Javadoc)

Modified: trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/ui/gef/editparts/ConnectionPointEditPart.java
===================================================================
--- trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/ui/gef/editparts/ConnectionPointEditPart.java	2009-01-18 07:41:24 UTC (rev 13104)
+++ trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/ui/gef/editparts/ConnectionPointEditPart.java	2009-01-18 07:45:38 UTC (rev 13105)
@@ -23,9 +23,13 @@
 import org.eclipse.gef.NodeEditPart;
 import org.eclipse.gef.Request;
 import org.eclipse.swt.widgets.TreeItem;
+import org.jboss.tools.smooks.ui.editors.SmooksGraphicalFormPage;
+import org.jboss.tools.smooks.ui.gef.model.GraphicalModelListenerManager;
 import org.jboss.tools.smooks.ui.gef.model.IConnectableModel;
+import org.jboss.tools.smooks.ui.gef.model.IGraphicalModelListener;
 import org.jboss.tools.smooks.ui.gef.model.TreeItemRelationModel;
 import org.jboss.tools.smooks.ui.gef.policy.CustomGraphicalNodeEditPolicy;
+import org.jboss.tools.smooks.ui.modelparser.SmooksConfigurationFileGenerateContext;
 
 /**
  * @author Dart Peng
@@ -46,43 +50,41 @@
 		return figure;
 	}
 
-	public boolean isCollapse(){
-		TreeItemRelationModel model =  (TreeItemRelationModel) this.getModel();
-		if(model == null) return false;
+	public boolean isCollapse() {
+		TreeItemRelationModel model = (TreeItemRelationModel) this.getModel();
+		if (model == null)
+			return false;
 		return model.isCollapse();
 	}
-	
-	
+
 	@Override
 	protected List getModelSourceConnections() {
 		Object model = getModel();
-		if(model instanceof IConnectableModel){
-			return ((IConnectableModel)model).getModelSourceConnections();
+		if (model instanceof IConnectableModel) {
+			return ((IConnectableModel) model).getModelSourceConnections();
 		}
 		return super.getModelSourceConnections();
 	}
 
-
-
 	@Override
 	protected List getModelTargetConnections() {
 		Object model = getModel();
-		if(model instanceof IConnectableModel){
-			return ((IConnectableModel)model).getModelTargetConnections();
+		if (model instanceof IConnectableModel) {
+			return ((IConnectableModel) model).getModelTargetConnections();
 		}
 		return super.getModelTargetConnections();
 	}
-	
-	public void refreshAllSourceConnectionLineStyle(){
+
+	public void refreshAllSourceConnectionLineStyle() {
 		List sourceConnection = this.getSourceConnections();
 		for (Iterator iterator = sourceConnection.iterator(); iterator
 				.hasNext();) {
-			StructuredDataConnectionEditPart connection = (StructuredDataConnectionEditPart) iterator.next();
+			StructuredDataConnectionEditPart connection = (StructuredDataConnectionEditPart) iterator
+					.next();
 			connection.refresh();
 		}
 	}
 
-
 	/*
 	 * (non-Javadoc)
 	 * 
@@ -97,14 +99,34 @@
 	/*
 	 * (non-Javadoc)
 	 * 
-	 * @see java.beans.PropertyChangeListener#propertyChange(java.beans.PropertyChangeEvent)
+	 * @seejava.beans.PropertyChangeListener#propertyChange(java.beans.
+	 * PropertyChangeEvent)
 	 */
 	public void propertyChange(PropertyChangeEvent evt) {
 		String pname = evt.getPropertyName();
-		if (IConnectableModel.P_SOURCE_CONNECTION.equals(pname)) {
+		String sid = getSourceID();
+		String tid = getTargetID();
+		SmooksGraphicalFormPage page = getSmooksGraphicalPage();
+		SmooksConfigurationFileGenerateContext context = null;
+		if(page != null){
+			context = page.getSmooksConfigurationFileGenerateContext();
+		}
+		IGraphicalModelListener listener = GraphicalModelListenerManager
+				.getInstance().getPaintListener(sid, tid);
+		if (IConnectableModel.P_ADD_SOURCE_CONNECTION.equals(pname) ||
+				IConnectableModel.P_REMOVE_SOURCE_CONNECTION.equals(pname)) {
+			if (listener != null) {
+				if(IConnectableModel.P_ADD_SOURCE_CONNECTION.equals(pname)){
+					listener.modelAdded(evt.getNewValue(), context);
+				}
+				if(IConnectableModel.P_REMOVE_SOURCE_CONNECTION.equals(pname)){
+					listener.modelRemoved(evt.getOldValue(), context);
+				}
+			}
 			this.refreshSourceConnections();
 		}
-		if (IConnectableModel.P_TARGET_CONNECTION.equals(pname)) {
+		if (IConnectableModel.P_ADD_TARGET_CONNECTION.equals(pname) ||
+				IConnectableModel.P_REMOVE_TARGET_CONNECTION.equals(pname)) {
 			this.refreshTargetConnections();
 		}
 	}

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-18 07:41:24 UTC (rev 13104)
+++ trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/ui/gef/editparts/StructuredDataConnectionEditPart.java	2009-01-18 07:45:38 UTC (rev 13105)
@@ -1,248 +1,256 @@
-package org.jboss.tools.smooks.ui.gef.editparts;
-
-import java.beans.PropertyChangeEvent;
-import java.beans.PropertyChangeListener;
-
-import org.eclipse.draw2d.ColorConstants;
-import org.eclipse.draw2d.ConnectionLocator;
-import org.eclipse.draw2d.Figure;
-import org.eclipse.draw2d.Graphics;
-import org.eclipse.draw2d.IFigure;
-import org.eclipse.draw2d.Shape;
-import org.eclipse.draw2d.geometry.Point;
-import org.eclipse.draw2d.geometry.PointList;
-import org.eclipse.gef.DefaultEditDomain;
-import org.eclipse.gef.EditPart;
-import org.eclipse.gef.EditPolicy;
-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;
-import org.jboss.tools.smooks.ui.editors.SmooksGraphicalFormPage;
-import org.jboss.tools.smooks.ui.gef.figures.CurveLineConnection;
-import org.jboss.tools.smooks.ui.gef.figures.ILineFigurePaintListener;
-import org.jboss.tools.smooks.ui.gef.figures.LineFigurePaintListenerManager;
-import org.jboss.tools.smooks.ui.gef.model.AbstractStructuredDataConnectionModel;
-import org.jboss.tools.smooks.ui.gef.model.IConnectableModel;
-import org.jboss.tools.smooks.ui.gef.model.LineConnectionModel;
-import org.jboss.tools.smooks.ui.gef.model.TreeItemRelationModel;
-import org.jboss.tools.smooks.ui.gef.policy.DeleteConnectionEditPolicy;
-import org.jboss.tools.smooks.ui.gef.util.GraphicsConstants;
-
-public class StructuredDataConnectionEditPart extends
-		AbstractConnectionEditPart implements PropertyChangeListener {
-
-	public StructuredDataConnectionEditPart() {
-		super();
-	}
-
-	public void activate() {
-		super.activate();
-		Object model = getModel();
-		if (model instanceof AbstractStructuredDataConnectionModel) {
-			((AbstractStructuredDataConnectionModel) model)
-					.addPropertyChangeListener(this);
-		}
-	}
-
-	public void deactivate() {
-		Object model = getModel();
-		if (model instanceof AbstractStructuredDataConnectionModel) {
-			((AbstractStructuredDataConnectionModel) model)
-					.removePropertyChangeListener(this);
-		}
-		super.deactivate();
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.gef.editparts.AbstractConnectionEditPart#refresh()
-	 */
-	@Override
-	public void refresh() {
-		super.refresh();
-		changeLineStyleWithCollapseStatus();
-	}
-
-	protected void createEditPolicies() {
-		installEditPolicy(EditPolicy.CONNECTION_ENDPOINTS_ROLE,
-				new ConnectionEndpointEditPolicy());
-		installEditPolicy(EditPolicy.COMPONENT_ROLE,
-				new DeleteConnectionEditPolicy());
-	}
-
-	private String getSourceDataTypeID() {
-		GraphicalViewer viewer = (GraphicalViewer) this.getViewer();
-		IEditorPart editor = ((DefaultEditDomain) viewer.getEditDomain())
-				.getEditorPart();
-		if (editor instanceof SmooksGraphicalFormPage) {
-			return ((SmooksGraphicalFormPage) editor).getSourceDataTypeID();
-		}
-		return null;
-	}
-
-	private String getTargetDataTypeID() {
-		GraphicalViewer viewer = (GraphicalViewer) this.getViewer();
-		IEditorPart editor = ((DefaultEditDomain) viewer.getEditDomain())
-				.getEditorPart();
-		if (editor instanceof SmooksGraphicalFormPage) {
-			return ((SmooksGraphicalFormPage) editor).getTargetDataTypeID();
-		}
-		return null;
-	}
-
-	protected IFigure createFigure() {
-		CurveLineConnection conn = new CurveLineConnection(this) {
-			
-			public void paintFigure(Graphics graphics) {
-				String sourceid = getSourceDataTypeID();
-				String targetid = getTargetDataTypeID();
-				ILineFigurePaintListener listener = LineFigurePaintListenerManager
-						.getInstance().getPaintListener(sourceid, targetid);
-				if (listener != null) {
-					listener.drawLineAdditions(graphics, this,
-							(LineConnectionModel) getHostEditPart().getModel());
-				}
-				super.paintFigure(graphics);
-			}
-		};
-		// conn.setSmoothness(SmoothPolyLineConnection.SMOOTH_MORE);
-		Figure targetFlagFigure = new Figure() {
-			/*
-			 * (non-Javadoc)
-			 * 
-			 * @see org.eclipse.draw2d.Figure#paint(org.eclipse.draw2d.Graphics)
-			 */
-			@Override
-			public void paint(Graphics graphics) {
-				graphics.pushState();
-				String sourceid = getSourceDataTypeID();
-				String targetid = getTargetDataTypeID();
-				ILineFigurePaintListener listener = LineFigurePaintListenerManager
-						.getInstance().getPaintListener(sourceid, targetid);
-				if (listener != null) {
-					listener.drawLineTargetLocator(graphics, this,(LineConnectionModel) getModel());
-				}
-				super.paint(graphics);
-				graphics.popState();
-			}
-
-		};
-
-		Figure sourceFlagFigure = new Figure() {
-
-			/*
-			 * (non-Javadoc)
-			 * 
-			 * @see org.eclipse.draw2d.Figure#paint(org.eclipse.draw2d.Graphics)
-			 */
-			@Override
-			public void paint(Graphics graphics) {
-				graphics.pushState();
-				String sourceid = getSourceDataTypeID();
-				String targetid = getTargetDataTypeID();
-				ILineFigurePaintListener listener = LineFigurePaintListenerManager
-						.getInstance().getPaintListener(sourceid, targetid);
-				if (listener != null) {
-					listener.drawLineSourceLocator(graphics, this,(LineConnectionModel) getModel());
-				}
-				super.paint(graphics);
-				graphics.popState();
-			}
-
-		};
-		targetFlagFigure.setSize(10, 10);
-		sourceFlagFigure.setSize(10, 10);
-		ConnectionLocator targetLocator = new ConnectionLocator(conn,
-				ConnectionLocator.TARGET);
-		conn.add(targetFlagFigure, targetLocator);
-		ConnectionLocator sourceLocator = new ConnectionLocator(conn,
-				ConnectionLocator.SOURCE);
-		conn.add(sourceFlagFigure, sourceLocator);
-		return conn;
-	}
-
-	protected void changeLineStyleWithCollapseStatus() {
-		Shape figure = (Shape) this.getFigure();
-		LineConnectionModel model = (LineConnectionModel) this.getModel();
-		IConnectableModel source = model.getSource();
-		IConnectableModel target = model.getTarget();
-		boolean collapse = false;
-		if (source instanceof TreeItemRelationModel) {
-			if (((TreeItemRelationModel) source).isCollapse()) {
-				collapse = true;
-			}
-		}
-		if (target instanceof TreeItemRelationModel) {
-			if (((TreeItemRelationModel) target).isCollapse()) {
-				collapse = true;
-			}
-		}
-		if (collapse) {
-			// 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);
-		}
-	}
-
-	protected void changeTreeItemSelectionStatus(boolean selected) {
-		LineConnectionModel model = (LineConnectionModel) this.getModel();
-		IConnectableModel source = model.getSource();
-		IConnectableModel target = model.getTarget();
-		Tree sourceTree = null;
-		Tree targetTree = null;
-		if (source instanceof TreeItemRelationModel) {
-			TreeItem item = ((TreeItemRelationModel) source).getTreeItem();
-			if (!item.isDisposed()) {
-				item.setData(
-						TreeItemRelationModel.PRO_TREE_ITEM_SELECTION_STATUS,
-						new Boolean(selected));
-				sourceTree = item.getParent();
-			}
-		}
-		if (target instanceof TreeItemRelationModel) {
-			TreeItem item = ((TreeItemRelationModel) target).getTreeItem();
-			if (!item.isDisposed()) {
-				item.setData(
-						TreeItemRelationModel.PRO_TREE_ITEM_SELECTION_STATUS,
-						new Boolean(selected));
-				targetTree = item.getParent();
-			}
-		}
-		refreshTree(sourceTree);
-		refreshTree(targetTree);
-	}
-
-	private void refreshTree(Tree tree) {
-		if (tree != null) {
-			tree.setData(TreeItemRelationModel.PRO_TREE_REPAINT, new Object());
-			tree.redraw();
-			tree.setData(TreeItemRelationModel.PRO_TREE_REPAINT, null);
-		}
-	}
-
-	public void setSelected(int value) {
-		super.setSelected(value);
-		if (value == EditPart.SELECTED_NONE) {
-			((Shape) figure).setLineWidth(1);
-			((Shape) figure)
-					.setForegroundColor(GraphicsConstants.groupBorderColor);
-			changeTreeItemSelectionStatus(false);
-		} else {
-			((Shape) figure).setLineWidth(2);
-			figure.setForegroundColor(ColorConstants.darkBlue);
-			changeTreeItemSelectionStatus(true);
-		}
-	}
-
-	public void propertyChange(PropertyChangeEvent evt) {
-
-	}
+package org.jboss.tools.smooks.ui.gef.editparts;
+
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+
+import org.eclipse.draw2d.ColorConstants;
+import org.eclipse.draw2d.ConnectionLocator;
+import org.eclipse.draw2d.Figure;
+import org.eclipse.draw2d.Graphics;
+import org.eclipse.draw2d.IFigure;
+import org.eclipse.draw2d.PolylineConnection;
+import org.eclipse.draw2d.Shape;
+import org.eclipse.draw2d.geometry.Point;
+import org.eclipse.draw2d.geometry.PointList;
+import org.eclipse.gef.DefaultEditDomain;
+import org.eclipse.gef.EditPart;
+import org.eclipse.gef.EditPolicy;
+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;
+import org.jboss.tools.smooks.ui.editors.SmooksGraphicalFormPage;
+import org.jboss.tools.smooks.ui.gef.figures.CurveLineConnection;
+import org.jboss.tools.smooks.ui.gef.figures.ILineFigurePaintListener;
+import org.jboss.tools.smooks.ui.gef.figures.LineFigurePaintListenerManager;
+import org.jboss.tools.smooks.ui.gef.model.AbstractStructuredDataConnectionModel;
+import org.jboss.tools.smooks.ui.gef.model.IConnectableModel;
+import org.jboss.tools.smooks.ui.gef.model.LineConnectionModel;
+import org.jboss.tools.smooks.ui.gef.model.TreeItemRelationModel;
+import org.jboss.tools.smooks.ui.gef.policy.DeleteConnectionEditPolicy;
+import org.jboss.tools.smooks.ui.gef.util.GraphicsConstants;
+
+public class StructuredDataConnectionEditPart extends
+		AbstractConnectionEditPart implements PropertyChangeListener {
+
+	public StructuredDataConnectionEditPart() {
+		super();
+	}
+
+	public void activate() {
+		super.activate();
+		Object model = getModel();
+		if (model instanceof AbstractStructuredDataConnectionModel) {
+			((AbstractStructuredDataConnectionModel) model)
+					.addPropertyChangeListener(this);
+		}
+	}
+
+	public void deactivate() {
+		Object model = getModel();
+		if (model instanceof AbstractStructuredDataConnectionModel) {
+			((AbstractStructuredDataConnectionModel) model)
+					.removePropertyChangeListener(this);
+		}
+		super.deactivate();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.gef.editparts.AbstractConnectionEditPart#refresh()
+	 */
+	@Override
+	public void refresh() {
+		super.refresh();
+		changeLineStyleWithCollapseStatus();
+	}
+
+	protected void createEditPolicies() {
+		installEditPolicy(EditPolicy.CONNECTION_ENDPOINTS_ROLE,
+				new ConnectionEndpointEditPolicy());
+		installEditPolicy(EditPolicy.COMPONENT_ROLE,
+				new DeleteConnectionEditPolicy());
+	}
+
+	private String getSourceDataTypeID() {
+		GraphicalViewer viewer = (GraphicalViewer) this.getViewer();
+		IEditorPart editor = ((DefaultEditDomain) viewer.getEditDomain())
+				.getEditorPart();
+		if (editor instanceof SmooksGraphicalFormPage) {
+			return ((SmooksGraphicalFormPage) editor).getSourceDataTypeID();
+		}
+		return null;
+	}
+
+	private String getTargetDataTypeID() {
+		GraphicalViewer viewer = (GraphicalViewer) this.getViewer();
+		IEditorPart editor = ((DefaultEditDomain) viewer.getEditDomain())
+				.getEditorPart();
+		if (editor instanceof SmooksGraphicalFormPage) {
+			return ((SmooksGraphicalFormPage) editor).getTargetDataTypeID();
+		}
+		return null;
+	}
+
+	protected IFigure createFigure() {
+		final String sourceid = getSourceDataTypeID();
+		final String targetid = getTargetDataTypeID();
+		final ILineFigurePaintListener listener = LineFigurePaintListenerManager
+				.getInstance().getPaintListener(sourceid, targetid);
+		PolylineConnection connection = null;
+		if (listener != null) {
+			connection = listener
+					.createHostFigure((LineConnectionModel) getModel());
+		}
+		if (connection == null) {
+			connection = new CurveLineConnection(this) {
+				public void paintFigure(Graphics graphics) {
+					ILineFigurePaintListener listener = LineFigurePaintListenerManager
+							.getInstance().getPaintListener(sourceid, targetid);
+					if (listener != null) {
+						listener.drawLineAdditions(graphics, this,
+								(LineConnectionModel) getHostEditPart()
+										.getModel());
+					}
+					super.paintFigure(graphics);
+				}
+			};
+		}
+		// conn.setSmoothness(SmoothPolyLineConnection.SMOOTH_MORE);
+		Figure targetFlagFigure = new Figure() {
+			/*
+			 * (non-Javadoc)
+			 * 
+			 * @see org.eclipse.draw2d.Figure#paint(org.eclipse.draw2d.Graphics)
+			 */
+			@Override
+			public void paint(Graphics graphics) {
+				graphics.pushState();
+				ILineFigurePaintListener listener = LineFigurePaintListenerManager
+						.getInstance().getPaintListener(sourceid, targetid);
+				if (listener != null) {
+					listener.drawLineTargetLocator(graphics, this,
+							(LineConnectionModel) getModel());
+				}
+				super.paint(graphics);
+				graphics.popState();
+			}
+
+		};
+
+		Figure sourceFlagFigure = new Figure() {
+
+			/*
+			 * (non-Javadoc)
+			 * 
+			 * @see org.eclipse.draw2d.Figure#paint(org.eclipse.draw2d.Graphics)
+			 */
+			@Override
+			public void paint(Graphics graphics) {
+				graphics.pushState();
+				ILineFigurePaintListener listener = LineFigurePaintListenerManager
+						.getInstance().getPaintListener(sourceid, targetid);
+				if (listener != null) {
+					listener.drawLineSourceLocator(graphics, this,
+							(LineConnectionModel) getModel());
+				}
+				super.paint(graphics);
+				graphics.popState();
+			}
+
+		};
+		targetFlagFigure.setSize(10, 10);
+		sourceFlagFigure.setSize(10, 10);
+		ConnectionLocator targetLocator = new ConnectionLocator(connection,
+				ConnectionLocator.TARGET);
+		connection.add(targetFlagFigure, targetLocator);
+		ConnectionLocator sourceLocator = new ConnectionLocator(connection,
+				ConnectionLocator.SOURCE);
+		connection.add(sourceFlagFigure, sourceLocator);
+		return connection;
+	}
+
+	protected void changeLineStyleWithCollapseStatus() {
+		Shape figure = (Shape) this.getFigure();
+		LineConnectionModel model = (LineConnectionModel) this.getModel();
+		IConnectableModel source = model.getSource();
+		IConnectableModel target = model.getTarget();
+		boolean collapse = false;
+		if (source instanceof TreeItemRelationModel) {
+			if (((TreeItemRelationModel) source).isCollapse()) {
+				collapse = true;
+			}
+		}
+		if (target instanceof TreeItemRelationModel) {
+			if (((TreeItemRelationModel) target).isCollapse()) {
+				collapse = true;
+			}
+		}
+		if (collapse) {
+			// 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);
+		}
+	}
+
+	protected void changeTreeItemSelectionStatus(boolean selected) {
+		LineConnectionModel model = (LineConnectionModel) this.getModel();
+		IConnectableModel source = model.getSource();
+		IConnectableModel target = model.getTarget();
+		Tree sourceTree = null;
+		Tree targetTree = null;
+		if (source instanceof TreeItemRelationModel) {
+			TreeItem item = ((TreeItemRelationModel) source).getTreeItem();
+			if (!item.isDisposed()) {
+				item.setData(
+						TreeItemRelationModel.PRO_TREE_ITEM_SELECTION_STATUS,
+						new Boolean(selected));
+				sourceTree = item.getParent();
+			}
+		}
+		if (target instanceof TreeItemRelationModel) {
+			TreeItem item = ((TreeItemRelationModel) target).getTreeItem();
+			if (!item.isDisposed()) {
+				item.setData(
+						TreeItemRelationModel.PRO_TREE_ITEM_SELECTION_STATUS,
+						new Boolean(selected));
+				targetTree = item.getParent();
+			}
+		}
+		refreshTree(sourceTree);
+		refreshTree(targetTree);
+	}
+
+	private void refreshTree(Tree tree) {
+		if (tree != null) {
+			tree.setData(TreeItemRelationModel.PRO_TREE_REPAINT, new Object());
+			tree.redraw();
+			tree.setData(TreeItemRelationModel.PRO_TREE_REPAINT, null);
+		}
+	}
+
+	public void setSelected(int value) {
+		super.setSelected(value);
+		if (value == EditPart.SELECTED_NONE) {
+			((Shape) figure).setLineWidth(1);
+			((Shape) figure)
+					.setForegroundColor(GraphicsConstants.groupBorderColor);
+			changeTreeItemSelectionStatus(false);
+		} else {
+			((Shape) figure).setLineWidth(2);
+			figure.setForegroundColor(ColorConstants.darkBlue);
+			changeTreeItemSelectionStatus(true);
+		}
+	}
+
+	public void propertyChange(PropertyChangeEvent evt) {
+
+	}
 }
\ No newline at end of file

Modified: trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/ui/gef/figures/ILineFigurePaintListener.java
===================================================================
--- trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/ui/gef/figures/ILineFigurePaintListener.java	2009-01-18 07:41:24 UTC (rev 13104)
+++ trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/ui/gef/figures/ILineFigurePaintListener.java	2009-01-18 07:45:38 UTC (rev 13105)
@@ -5,6 +5,8 @@
 
 import org.eclipse.draw2d.Graphics;
 import org.eclipse.draw2d.IFigure;
+import org.eclipse.draw2d.PolylineConnection;
+import org.eclipse.gef.requests.CreateConnectionRequest;
 import org.jboss.tools.smooks.ui.gef.model.LineConnectionModel;
 
 /**
@@ -17,4 +19,18 @@
 	public void drawLineSourceLocator(Graphics graphics , IFigure hostFigure, LineConnectionModel model);
 	
 	public void drawLineTargetLocator(Graphics graphics , IFigure hostFigure, LineConnectionModel model);
+	/**
+	 * Return the line you wanted . If return figure is NOT null , the drawLineAdditions method will be disabled
+	 * @param model
+	 * @return
+	 */
+	public PolylineConnection createHostFigure(LineConnectionModel model);
+	
+	/**
+	 * 
+	 * @param sid
+	 * @param tid
+	 * @return
+	 */
+	public PolylineConnection createDummyFigure(CreateConnectionRequest req);
 }

Modified: trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/ui/gef/figures/LinePaintListener.java
===================================================================
--- trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/ui/gef/figures/LinePaintListener.java	2009-01-18 07:41:24 UTC (rev 13104)
+++ trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/ui/gef/figures/LinePaintListener.java	2009-01-18 07:45:38 UTC (rev 13105)
@@ -6,8 +6,10 @@
 import org.eclipse.draw2d.ColorConstants;
 import org.eclipse.draw2d.Graphics;
 import org.eclipse.draw2d.IFigure;
+import org.eclipse.draw2d.PolylineConnection;
 import org.eclipse.draw2d.geometry.Point;
 import org.eclipse.draw2d.geometry.PointList;
+import org.eclipse.gef.requests.CreateConnectionRequest;
 import org.jboss.tools.smooks.ui.gef.model.LineConnectionModel;
 import org.jboss.tools.smooks.ui.gef.util.GraphicsConstants;
 
@@ -81,4 +83,12 @@
 		graphics.popState();
 	}
 
+	public PolylineConnection createHostFigure(LineConnectionModel model) {
+		return null;
+	}
+
+	public PolylineConnection createDummyFigure(CreateConnectionRequest req) {
+		return null;
+	}
+
 }

Modified: trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/ui/gef/model/AbstractStructuredDataConnectionModel.java
===================================================================
--- trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/ui/gef/model/AbstractStructuredDataConnectionModel.java	2009-01-18 07:41:24 UTC (rev 13104)
+++ trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/ui/gef/model/AbstractStructuredDataConnectionModel.java	2009-01-18 07:45:38 UTC (rev 13105)
@@ -24,6 +24,29 @@
 		attachTarget();
 	}
 	
+	public void updateAndAddProperty(String propertyName,Object value){
+		for (Iterator iterator = properties.iterator(); iterator.hasNext();) {
+			PropertyModel property = (PropertyModel) iterator.next();
+			if(property.getName().equals(propertyName)){
+				property.setValue(value);
+				return;
+			}
+		}
+		
+		PropertyModel model = new PropertyModel(propertyName,value);
+		properties.add(model);
+	}
+	
+	public Object getProperty(String propertyName){
+		for (Iterator iterator = properties.iterator(); iterator.hasNext();) {
+			PropertyModel property = (PropertyModel) iterator.next();
+			if(property.getName().equals(propertyName)){
+				return property.getValue();
+			}
+		}
+		return null;
+	}
+	
 	public AbstractStructuredDataConnectionModel(){
 	}
 	
@@ -88,9 +111,21 @@
 	}
 	
 	public void addPropertyModel(PropertyModel property){
-		this.getProperties().add(property);
-		property.addPropertyChangeListener(this);
-		support.firePropertyChange(CONNECTION_PROPERTY_CHANGE, null, property);
+		if(properties != null){
+			boolean updated = false;
+			for (Iterator iterator = properties.iterator(); iterator.hasNext();) {
+				PropertyModel p = (PropertyModel) iterator.next();
+				if(p.getName().equals(property.getName())){
+					p.setValue(property.getValue());
+					updated = true;
+				}
+			}
+			if(!updated){
+				this.getProperties().add(property);
+				property.addPropertyChangeListener(this);
+			}
+			support.firePropertyChange(CONNECTION_PROPERTY_CHANGE, null, property);
+		}
 	}
 	
 	public void removePropertyModel(String propertyName){

Added: trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/ui/gef/model/GraphicalModelListenerManager.java
===================================================================
--- trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/ui/gef/model/GraphicalModelListenerManager.java	                        (rev 0)
+++ trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/ui/gef/model/GraphicalModelListenerManager.java	2009-01-18 07:45:38 UTC (rev 13105)
@@ -0,0 +1,73 @@
+/**
+ * 
+ */
+package org.jboss.tools.smooks.ui.gef.model;
+
+import java.util.HashMap;
+
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtensionPoint;
+import org.eclipse.core.runtime.IExtensionRegistry;
+import org.eclipse.core.runtime.Platform;
+import org.jboss.tools.smooks.utils.SmooksExtensionPointConstants;
+
+/**
+ * @author Dart
+ *
+ */
+public class GraphicalModelListenerManager {
+	private static GraphicalModelListenerManager instance;
+	private HashMap<String, IConfigurationElement> litenserMap = new HashMap<String, IConfigurationElement>();
+
+	private GraphicalModelListenerManager() {
+		super();
+		loadExtensions();
+	}
+
+	public synchronized static GraphicalModelListenerManager getInstance() {
+		if (instance == null) {
+			instance = new GraphicalModelListenerManager();
+		}
+		return instance;
+	}
+
+	public IGraphicalModelListener getPaintListener(String sid, String tid) {
+		try {
+			IConfigurationElement element = litenserMap.get(this.generateKey(
+					sid, tid));
+			if (element != null) {
+				return (IGraphicalModelListener) element
+						.createExecutableExtension(SmooksExtensionPointConstants.EXTENTION_POINT_ATTRIBUTE_CLASS);
+			}
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+		return null;
+	}
+
+	private void loadExtensions() {
+		IExtensionRegistry registry = Platform.getExtensionRegistry();
+		IExtensionPoint ep = registry
+				.getExtensionPoint(SmooksExtensionPointConstants.EXTENTION_POINT_GRAPHICAL_MODEL_LISTENER);
+		IConfigurationElement[] elements = ep.getConfigurationElements();
+		for (int i = 0; i < elements.length; i++) {
+			IConfigurationElement element = elements[i];
+			if (!element
+					.getName()
+					.equals(
+							SmooksExtensionPointConstants.EXTENTION_POINT_ELEMENT_GRAPHICAL_MODEL_LISTENER))
+				continue;
+			String sourceId = element
+					.getAttribute(SmooksExtensionPointConstants.EXTENTION_POINT_ATTRIBUTE_SOURCEID);
+			String targetId = element
+					.getAttribute(SmooksExtensionPointConstants.EXTENTION_POINT_ATTRIBUTE_TARGETID);
+			if (sourceId != null && targetId != null) {
+				litenserMap.put(generateKey(sourceId, targetId), element);
+			}
+		}
+	}
+
+	private String generateKey(String sid, String tid) {
+		return sid + ":" + tid;
+	}
+}


Property changes on: trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/ui/gef/model/GraphicalModelListenerManager.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Modified: trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/ui/gef/model/IConnectableModel.java
===================================================================
--- trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/ui/gef/model/IConnectableModel.java	2009-01-18 07:41:24 UTC (rev 13104)
+++ trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/ui/gef/model/IConnectableModel.java	2009-01-18 07:45:38 UTC (rev 13105)
@@ -20,8 +20,11 @@
  */
 public interface IConnectableModel {
 
-	public static final String P_SOURCE_CONNECTION = "_source_connection";
-	public static final String P_TARGET_CONNECTION = "_target_connection";
+	public static final String P_ADD_SOURCE_CONNECTION = "_source_add_connection";
+	public static final String P_ADD_TARGET_CONNECTION = "_add_target_connection";
+	
+	public static final String P_REMOVE_SOURCE_CONNECTION = "_source_remove_connection";
+	public static final String P_REMOVE_TARGET_CONNECTION = "_remove_target_connection";
 
 	public void addSourceConnection(Object connx);
 

Added: trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/ui/gef/model/IGraphicalModelListener.java
===================================================================
--- trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/ui/gef/model/IGraphicalModelListener.java	                        (rev 0)
+++ trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/ui/gef/model/IGraphicalModelListener.java	2009-01-18 07:45:38 UTC (rev 13105)
@@ -0,0 +1,22 @@
+/**
+ * 
+ */
+package org.jboss.tools.smooks.ui.gef.model;
+
+import org.jboss.tools.smooks.ui.modelparser.SmooksConfigurationFileGenerateContext;
+
+/**
+ * @author Dart
+ * 
+ */
+public interface IGraphicalModelListener {
+	
+	public void modelAdded(Object graphicalModel,
+			SmooksConfigurationFileGenerateContext context);
+
+	public void modelRemoved(Object graphicalModel,
+			SmooksConfigurationFileGenerateContext context);
+	
+	public void modelChanged(Object graphicalModel,
+			SmooksConfigurationFileGenerateContext context);
+}


Property changes on: trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/ui/gef/model/IGraphicalModelListener.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Modified: trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/ui/gef/model/PropertyModel.java
===================================================================
--- trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/ui/gef/model/PropertyModel.java	2009-01-18 07:41:24 UTC (rev 13104)
+++ trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/ui/gef/model/PropertyModel.java	2009-01-18 07:45:38 UTC (rev 13105)
@@ -16,9 +16,9 @@
  */
 public class PropertyModel extends AbstractStructuredDataModel {
 	private String name;
-	private String value;
+	private Object value;
 	
-	public PropertyModel(String name,String value){
+	public PropertyModel(String name,Object value){
 		this.name = name;
 		this.value = value;
 	}
@@ -39,7 +39,7 @@
 				oldName, this.name);
 	}
 
-	public String getValue() {
+	public Object getValue() {
 		return value;
 	}
 
@@ -58,7 +58,7 @@
 			if (!this.name.equals(name)) {
 				return false;
 			}
-			String value = ((PropertyModel) obj).getValue();
+			Object value = ((PropertyModel) obj).getValue();
 			if (value == null) {
 				if (this.value == null)
 					return true;
@@ -72,8 +72,8 @@
 		return false;
 	}
 
-	public void setValue(String value) {
-		String oldValue = this.value;
+	public void setValue(Object value) {
+		Object oldValue = this.value;
 		this.value = value;
 		firePropertyChange(
 				AbstractStructuredDataConnectionModel.CONNECTION_PROPERTY_CHANGE,

Modified: trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/ui/gef/model/StructuredDataContentModel.java
===================================================================
--- trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/ui/gef/model/StructuredDataContentModel.java	2009-01-18 07:41:24 UTC (rev 13104)
+++ trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/ui/gef/model/StructuredDataContentModel.java	2009-01-18 07:45:38 UTC (rev 13105)
@@ -103,7 +103,7 @@
 	public void addSourceConnection(Object connx) {
 		sourceConnections.add(connx);
 
-		firePropertyChange(P_SOURCE_CONNECTION, null, connx);
+		firePropertyChange(P_ADD_SOURCE_CONNECTION, null, connx);
 	}
 
 	/**
@@ -112,7 +112,7 @@
 	public void addTargetConnection(Object connx) {
 		targetConnections.add(connx);
 
-		firePropertyChange(P_TARGET_CONNECTION, null, connx);
+		firePropertyChange(P_ADD_TARGET_CONNECTION, null, connx);
 	}
 
 	public List getModelSourceConnections() {
@@ -126,13 +126,13 @@
 	public void removeSourceConnection(Object connx) {
 		sourceConnections.remove(connx);
 
-		firePropertyChange(P_SOURCE_CONNECTION, connx, null);
+		firePropertyChange(P_ADD_SOURCE_CONNECTION, connx, null);
 	}
 
 	public void removeTargetConnection(Object connx) {
 		targetConnections.remove(connx);
 
-		firePropertyChange(P_TARGET_CONNECTION, connx, null);
+		firePropertyChange(P_ADD_TARGET_CONNECTION, connx, null);
 	}
 
 	public boolean equals(Object node) {

Modified: trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/ui/gef/model/StructuredDataModel.java
===================================================================
--- trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/ui/gef/model/StructuredDataModel.java	2009-01-18 07:41:24 UTC (rev 13104)
+++ trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/ui/gef/model/StructuredDataModel.java	2009-01-18 07:45:38 UTC (rev 13105)
@@ -43,7 +43,7 @@
 	 */
 	public void addSourceConnection(Object connx) {
 		modelSourceConnections.add(connx);
-		firePropertyChange(IConnectableModel.P_SOURCE_CONNECTION, null, connx);
+		firePropertyChange(IConnectableModel.P_ADD_SOURCE_CONNECTION, null, connx);
 	}
 
 	/*
@@ -55,7 +55,7 @@
 	 */
 	public void addTargetConnection(Object connx) {
 		modelTargetConnections.add(connx);
-		firePropertyChange(IConnectableModel.P_TARGET_CONNECTION, null, connx);
+		firePropertyChange(IConnectableModel.P_ADD_TARGET_CONNECTION, null, connx);
 	}
 
 	/*
@@ -67,7 +67,7 @@
 	 */
 	public void removeSourceConnection(Object connx) {
 		modelSourceConnections.remove(connx);
-		firePropertyChange(IConnectableModel.P_SOURCE_CONNECTION, connx, null);
+		firePropertyChange(IConnectableModel.P_ADD_SOURCE_CONNECTION, connx, null);
 	}
 	
 	
@@ -81,7 +81,7 @@
 	 */
 	public void removeTargetConnection(Object connx) {
 		modelTargetConnections.remove(connx);
-		firePropertyChange(IConnectableModel.P_TARGET_CONNECTION, connx, null);
+		firePropertyChange(IConnectableModel.P_ADD_TARGET_CONNECTION, connx, null);
 	}
 
 	/**

Modified: trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/ui/gef/model/TreeItemRelationModel.java
===================================================================
--- trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/ui/gef/model/TreeItemRelationModel.java	2009-01-18 07:41:24 UTC (rev 13104)
+++ trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/ui/gef/model/TreeItemRelationModel.java	2009-01-18 07:45:38 UTC (rev 13105)
@@ -54,22 +54,22 @@
 
 	public void addSourceConnection(Object connx) {
 		this.getModelSourceConnections().add(connx);
-		this.firePropertyChange(P_SOURCE_CONNECTION, null, connx);
+		this.firePropertyChange(P_ADD_SOURCE_CONNECTION, null, connx);
 	}
 
 	public void addTargetConnection(Object connx) {
 		this.getModelTargetConnections().add(connx);
-		this.firePropertyChange(P_TARGET_CONNECTION, null, connx);
+		this.firePropertyChange(P_ADD_TARGET_CONNECTION, null, connx);
 	}
 
 	public void removeSourceConnection(Object connx) {
 		this.getModelSourceConnections().remove(connx);
-		this.firePropertyChange(P_SOURCE_CONNECTION, connx, null);
+		this.firePropertyChange(P_REMOVE_SOURCE_CONNECTION, connx, null);
 	}
 
 	public void removeTargetConnection(Object connx) {
 		this.getModelTargetConnections().remove(connx);
-		this.firePropertyChange(P_TARGET_CONNECTION, connx, null);
+		this.firePropertyChange(P_REMOVE_TARGET_CONNECTION, connx, null);
 	}
 
 	public List<Object> getModelSourceConnections() {

Modified: trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/ui/gef/policy/CustomGraphicalNodeEditPolicy.java
===================================================================
--- trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/ui/gef/policy/CustomGraphicalNodeEditPolicy.java	2009-01-18 07:41:24 UTC (rev 13104)
+++ trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/ui/gef/policy/CustomGraphicalNodeEditPolicy.java	2009-01-18 07:45:38 UTC (rev 13105)
@@ -4,18 +4,26 @@
 import java.util.List;
 
 import org.eclipse.core.runtime.CoreException;
+import org.eclipse.draw2d.Connection;
 import org.eclipse.draw2d.ConnectionAnchor;
+import org.eclipse.draw2d.PolylineConnection;
 import org.eclipse.gef.EditPart;
 import org.eclipse.gef.EditPartViewer;
 import org.eclipse.gef.GraphicalViewer;
 import org.eclipse.gef.NodeEditPart;
+import org.eclipse.gef.Request;
 import org.eclipse.gef.commands.Command;
 import org.eclipse.gef.editpolicies.GraphicalNodeEditPolicy;
 import org.eclipse.gef.requests.CreateConnectionRequest;
 import org.eclipse.gef.requests.ReconnectRequest;
 import org.jboss.tools.smooks.ui.gef.commandprocessor.CommandProcessorFactory;
 import org.jboss.tools.smooks.ui.gef.commands.CreateConnectionCommand;
+import org.jboss.tools.smooks.ui.gef.editparts.AbstractStructuredDataEditPart;
+import org.jboss.tools.smooks.ui.gef.figures.CurveLineConnection;
+import org.jboss.tools.smooks.ui.gef.figures.ILineFigurePaintListener;
+import org.jboss.tools.smooks.ui.gef.figures.LineFigurePaintListenerManager;
 import org.jboss.tools.smooks.ui.gef.model.AbstractStructuredDataModel;
+import org.jboss.tools.smooks.ui.gef.model.SourceModel;
 
 public class CustomGraphicalNodeEditPolicy extends GraphicalNodeEditPolicy {
 
@@ -29,15 +37,40 @@
 		}
 		command.setTarget(getHost().getModel());
 		try {
-			boolean cando = CommandProcessorFactory.getInstance().processGEFCommand(command,
-					getHost());
-			if(!cando) return null;
+			boolean cando = CommandProcessorFactory.getInstance()
+					.processGEFCommand(command, getHost());
+			if (!cando)
+				return null;
 		} catch (CoreException e) {
 			// ignore
 		}
 		return command;
 	}
 
+	protected Connection createDummyConnection(Request req) {
+		if (req instanceof CreateConnectionRequest) {
+			CreateConnectionRequest connectionRequest = (CreateConnectionRequest) req;
+			EditPart part = connectionRequest.getSourceEditPart();
+			if (part != null) {
+				if (part instanceof AbstractStructuredDataEditPart) {
+					String sid = ((AbstractStructuredDataEditPart) part)
+							.getSourceID();
+					String tid = ((AbstractStructuredDataEditPart) part)
+							.getTargetID();
+					ILineFigurePaintListener listener = LineFigurePaintListenerManager
+							.getInstance().getPaintListener(sid, tid);
+					if (listener != null) {
+						Connection connection = listener
+								.createDummyFigure(connectionRequest);
+						if (connection != null)
+							return connection;
+					}
+				}
+			}
+		}
+		return new CurveLineConnection(null);
+	}
+
 	protected EditPart findTheEditPart(Object model, GraphicalViewer viewer) {
 		EditPart rootEditPart = viewer.getContents();
 		EditPart resultEditPart = null;
@@ -47,7 +80,8 @@
 			EditPart childEditPart = (EditPart) iterator.next();
 			Object cm = childEditPart.getModel();
 			if (cm instanceof AbstractStructuredDataModel) {
-				if (((AbstractStructuredDataModel) cm).getReferenceEntityModel() == model) {
+				if (((AbstractStructuredDataModel) cm)
+						.getReferenceEntityModel() == model) {
 					resultEditPart = childEditPart;
 					break;
 				}
@@ -62,9 +96,10 @@
 		command.setSource(getHost().getModel());
 		request.setStartCommand(command);
 		try {
-			boolean cando = CommandProcessorFactory.getInstance().processGEFCommand(command,
-					getHost());
-			if(!cando) return null;
+			boolean cando = CommandProcessorFactory.getInstance()
+					.processGEFCommand(command, getHost());
+			if (!cando)
+				return null;
 		} catch (CoreException e) {
 			// ignore
 		}

Modified: trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/ui/gef/tools/TargetTreeDropTargetListener.java
===================================================================
--- trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/ui/gef/tools/TargetTreeDropTargetListener.java	2009-01-18 07:41:24 UTC (rev 13104)
+++ trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/ui/gef/tools/TargetTreeDropTargetListener.java	2009-01-18 07:45:38 UTC (rev 13105)
@@ -74,9 +74,12 @@
 			if (item == null)
 				return;
 			Object model = item.getData();
-
-			SmooksCustomConnectionCreationTool tool = (SmooksCustomConnectionCreationTool) this
-					.getGraphicalViewer().getEditDomain().getActiveTool();
+			Tool activeTool = getGraphicalViewer().getEditDomain()
+					.getActiveTool();
+			SmooksCustomConnectionCreationTool tool = null;
+			if (activeTool instanceof SmooksCustomConnectionCreationTool) {
+				tool = (SmooksCustomConnectionCreationTool) activeTool;
+			}
 			if (tool != null) {
 				tool.activeTargetEditPart(model, graphicalViewer);
 				Event temp = new Event();
@@ -97,8 +100,13 @@
 	public void drop(DropTargetEvent event) {
 		try {
 			Object source = TemplateTransfer.getInstance().getTemplate();
-			SmooksCustomConnectionCreationTool tool = (SmooksCustomConnectionCreationTool) this
-					.getGraphicalViewer().getEditDomain().getActiveTool();
+			Tool activeTool = getGraphicalViewer().getEditDomain()
+					.getActiveTool();
+			SmooksCustomConnectionCreationTool tool = null;
+			if (activeTool instanceof SmooksCustomConnectionCreationTool) {
+				tool = (SmooksCustomConnectionCreationTool) activeTool;
+			}
+			if(tool == null) return;
 			if (source == null) {
 				source = tool.getSourceModel();
 			}

Modified: trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/ui/modelparser/SmooksConfigurationFileGenerateContext.java
===================================================================
--- trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/ui/modelparser/SmooksConfigurationFileGenerateContext.java	2009-01-18 07:41:24 UTC (rev 13104)
+++ trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/ui/modelparser/SmooksConfigurationFileGenerateContext.java	2009-01-18 07:45:38 UTC (rev 13105)
@@ -17,6 +17,8 @@
 
 import org.eclipse.core.resources.IFile;
 import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.gef.EditDomain;
+import org.eclipse.gef.commands.CommandStack;
 import org.eclipse.jface.viewers.ITreeContentProvider;
 import org.eclipse.jface.viewers.LabelProvider;
 import org.eclipse.swt.widgets.Shell;
@@ -39,6 +41,16 @@
 	protected IFile smooksConfigFile = null;
 	protected EditingDomain domain;
 	
+	protected EditDomain gefDomain;
+
+	public EditDomain getGefDomain() {
+		return gefDomain;
+	}
+
+	public void setGefDomain(EditDomain gefDomain) {
+		this.gefDomain = gefDomain;
+	}
+
 	protected ITreeContentProvider sourceViewerProvider;
 	
 	protected ITreeContentProvider targetViewerProvider;

Modified: trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/utils/SmooksExtensionPointConstants.java
===================================================================
--- trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/utils/SmooksExtensionPointConstants.java	2009-01-18 07:41:24 UTC (rev 13104)
+++ trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/utils/SmooksExtensionPointConstants.java	2009-01-18 07:45:38 UTC (rev 13105)
@@ -28,8 +28,12 @@
 	
 	public static final String EXTENTION_POINT_LINEPAINT_LISTENER = "org.jboss.tools.smooks.ui.linePaintListener";
 	
+	public static final String EXTENTION_POINT_GRAPHICAL_MODEL_LISTENER = "org.jboss.tools.smooks.ui.graphicalModelListener";
+	
 	public static final String EXTENTION_POINT_ELEMENT_LINEPAINT_LISTENER = "linePaintListener";
 	
+	public static final String EXTENTION_POINT_ELEMENT_GRAPHICAL_MODEL_LISTENER = "graphicalModelListener";
+	
 	public static final String EXTENTION_POINT_ELEMENT_SOURCEMODEL_ANALYZER = "sourceModelAnalyzer";
 	
 	public static final String EXTENTION_POINT_ELEMENT_TARGETMODEL_ANALYZER = "targetModelAnalyzer";

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-18 07:41:24 UTC (rev 13104)
+++ trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/utils/UIUtils.java	2009-01-18 07:45:38 UTC (rev 13105)
@@ -9,10 +9,13 @@
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.runtime.Status;
+import org.eclipse.emf.common.command.Command;
 import org.eclipse.emf.ecore.EStructuralFeature;
 import org.eclipse.emf.ecore.util.ExtendedMetaData;
 import org.eclipse.emf.ecore.util.FeatureMap;
 import org.eclipse.emf.ecore.xml.type.AnyType;
+import org.eclipse.emf.edit.command.AddCommand;
+import org.eclipse.emf.edit.domain.EditingDomain;
 import org.eclipse.jdt.core.IJavaProject;
 import org.eclipse.jdt.core.JavaCore;
 import org.eclipse.jface.dialogs.ErrorDialog;
@@ -34,6 +37,7 @@
 import org.jboss.tools.smooks.javabean.model.JavaBeanModel;
 import org.jboss.tools.smooks.model.AbstractResourceConfig;
 import org.jboss.tools.smooks.model.ResourceConfigType;
+import org.jboss.tools.smooks.model.SmooksPackage;
 import org.jboss.tools.smooks.model.SmooksResourceListType;
 import org.jboss.tools.smooks.model.util.SmooksModelUtils;
 import org.jboss.tools.smooks.ui.IXMLStructuredObject;
@@ -67,6 +71,15 @@
 		return fill;
 	}
 
+	public synchronized static void addResourceConfigType(EditingDomain domain,
+			SmooksResourceListType list, ResourceConfigType obj) {
+		Command addResourceConfigCommand = AddCommand.create(domain, list,
+				SmooksPackage.eINSTANCE
+						.getSmooksResourceListType_AbstractResourceConfig(),
+				obj);
+		addResourceConfigCommand.execute();
+	}
+
 	public static AbstractXMLObject getRootTagXMLObject(AbstractXMLObject xmlObj) {
 		if (xmlObj == null)
 			return null;
@@ -149,11 +162,13 @@
 			}
 			if (ignore)
 				continue;
-			String pvalue = property.getValue();
-			binding.getAnyAttribute()
-					.add(
-							ExtendedMetaData.INSTANCE.demandFeature(null,
-									pname, false), pvalue);
+			Object obj = property.getValue();
+			if (obj != null) {
+				String pvalue = obj.toString();
+				binding.getAnyAttribute().add(
+						ExtendedMetaData.INSTANCE.demandFeature(null, pname,
+								false), pvalue);
+			}
 		}
 	}
 
@@ -610,36 +625,37 @@
 
 	public static IXMLStructuredObject getRootParent(IXMLStructuredObject child) {
 		IXMLStructuredObject parent = child.getParent();
-		if (parent == null)
+		if (parent == null || parent.isRootNode())
 			return child;
 		IXMLStructuredObject temp = parent;
-		while (temp != null) {
+		while (temp != null && !temp.isRootNode()) {
 			parent = temp;
 			temp = temp.getParent();
 		}
 		return parent;
 	}
 
-	public static String generatePath(IXMLStructuredObject node,
-			IXMLStructuredObject contextNode, final String sperator,
+	public static String generatePath(IXMLStructuredObject startNode,
+			IXMLStructuredObject stopNode, final String sperator,
 			boolean includeContext) {
-		IXMLStructuredObject parent = node.getParent();
-		String name = node.getNodeName();
+		String name = "";
 		List<IXMLStructuredObject> nodeList = new ArrayList<IXMLStructuredObject>();
-		if (parent == null) {
-
-		} else {
-			IXMLStructuredObject temp = parent;
-			
+		IXMLStructuredObject temp = startNode;
+		if (stopNode != null) {
+			while (temp != stopNode && temp != null) {
+				nodeList.add(temp);
+				temp = temp.getParent();
+			}
 		}
-		if(node.isAttribute()){
-			name = "@" + name;
-		}
-		for(int i = nodeList.size() ; i > 0 ; i --){
+		for (int i =0; i < nodeList.size(); i++) {
 			IXMLStructuredObject n = nodeList.get(i);
-			name = n.getNodeName() + sperator + name;
+			String nodeName = n.getNodeName();
+			if(n.isAttribute()){
+				nodeName = "@" + nodeName;
+			}
+			name = nodeName + sperator + name;
 		}
-		return "";
+		return name;
 	}
 
 	public static IXMLStructuredObject getChildNodeWithName(String name,

Modified: trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/xml/model/AbstractXMLObject.java
===================================================================
--- trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/xml/model/AbstractXMLObject.java	2009-01-18 07:41:24 UTC (rev 13104)
+++ trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/xml/model/AbstractXMLObject.java	2009-01-18 07:45:38 UTC (rev 13105)
@@ -112,6 +112,10 @@
 	public String getNodeName() {
 		return getName();
 	}
+
+	public boolean isRootNode() {
+		return false;
+	}
 	
 	
 }

Modified: trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/xml/model/TagList.java
===================================================================
--- trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/xml/model/TagList.java	2009-01-18 07:41:24 UTC (rev 13104)
+++ trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/xml/model/TagList.java	2009-01-18 07:45:38 UTC (rev 13105)
@@ -83,7 +83,16 @@
 	public AbstractXMLObject getParent() {
 		return null;
 	}
+
+
+
+	@Override
+	public boolean isRootNode() {
+		return true;
+	}
 	
 	
 	
+	
+	
 }

Modified: trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/xml/ui/AddXMLChildNodeAction.java
===================================================================
--- trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/xml/ui/AddXMLChildNodeAction.java	2009-01-18 07:41:24 UTC (rev 13104)
+++ trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/xml/ui/AddXMLChildNodeAction.java	2009-01-18 07:45:38 UTC (rev 13105)
@@ -7,10 +7,8 @@
 
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.viewers.TreeViewer;
 import org.jboss.tools.smooks.ui.popup.SmooksAction;
 import org.jboss.tools.smooks.xml.model.AbstractXMLObject;
-import org.jboss.tools.smooks.xml.model.TagList;
 import org.jboss.tools.smooks.xml.model.TagObject;
 import org.jboss.tools.smooks.xml.model.TagPropertyObject;
 

Modified: trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/xml/ui/XMLPropertiesSection.java
===================================================================
--- trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/xml/ui/XMLPropertiesSection.java	2009-01-18 07:41:24 UTC (rev 13104)
+++ trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/xml/ui/XMLPropertiesSection.java	2009-01-18 07:45:38 UTC (rev 13105)
@@ -35,11 +35,11 @@
 
 	public static final String MAPPING_TYPE = "mappingType";
 	public static final String SELECTOR_NAMESPACE = "selector-namespace";
-	
+
 	public static final String MAPPING = "mapping";
-	
+
 	public static final String BINDING = "binding";
-	
+
 	private Text namespaceText;
 	private Button checkButton;
 	private CCombo connectionTypeCombo;
@@ -124,12 +124,12 @@
 			List<PropertyModel> list = connection.getProperties();
 			for (Iterator iterator = list.iterator(); iterator.hasNext();) {
 				PropertyModel propertyModel = (PropertyModel) iterator.next();
-				if(propertyModel.getName().equals(MAPPING_TYPE)){
+				if (propertyModel.getName().equals(MAPPING_TYPE)) {
 					type = propertyModel;
 					break;
 				}
 			}
-			if(type == null){
+			if (type == null) {
 				type = new PropertyModel();
 				type.setName(MAPPING_TYPE);
 			}
@@ -166,9 +166,9 @@
 						}
 
 						if (propertyModel.getName().equals(MAPPING_TYPE)) {
-							String type = propertyModel.getValue();
-							if (type != null)
-								connectionTypeCombo.setText(type);
+							Object value = propertyModel.getValue();
+							if (value != null)
+								connectionTypeCombo.setText(value.toString());
 						}
 					}
 				}

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-18 07:41:24 UTC (rev 13104)
+++ trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/xml2java/analyzer/XML2JavaAnalyzer.java	2009-01-18 07:45:38 UTC (rev 13105)
@@ -158,9 +158,11 @@
 				.hasNext();) {
 			PropertyModel propertyModel = (PropertyModel) iterator.next();
 			if (propertyModel.getName().equals("selector-namespace")) {
-				resourceConfigType.setSelectorNamespace(propertyModel
-						.getValue());
+				Object value = propertyModel.getValue();
+				if (value != null)
+					resourceConfigType.setSelectorNamespace(value.toString());
 				break;
+
 			}
 		}
 		// create a resource and add it to resourceConfig
@@ -323,7 +325,8 @@
 		for (int i = startIndex; i < rlist.size(); i++) {
 			AbstractResourceConfig abstractRC = (AbstractResourceConfig) rlist
 					.get(i);
-			if(!(abstractRC instanceof ResourceConfigType)) continue;
+			if (!(abstractRC instanceof ResourceConfigType))
+				continue;
 			ResourceConfigType resourceConfig = (ResourceConfigType) abstractRC;
 			ResourceType resource = resourceConfig.getResource();
 			if (resource == null)
@@ -339,8 +342,9 @@
 				continue;
 			}
 			String selector = resourceConfig.getSelector();
-			AbstractXMLObject source = (AbstractXMLObject) UIUtils.localXMLNodeWithPath(selector, sourceRoot); 
-//			findXMLNodeWithSelector(selector,		sourceRoot);
+			AbstractXMLObject source = (AbstractXMLObject) UIUtils
+					.localXMLNodeWithPath(selector, sourceRoot);
+			// findXMLNodeWithSelector(selector, sourceRoot);
 			if (source == null) {
 				// TODO if can't find the root , throw exception
 				// MODIFY by Dart 2008.11.17
@@ -408,7 +412,8 @@
 		if (selector.equalsIgnoreCase(root.getName()))
 			return root;
 		if (root instanceof TagObject) {
-			List<AbstractXMLObject> children = ((TagObject) root).getXMLNodeChildren();
+			List<AbstractXMLObject> children = ((TagObject) root)
+					.getXMLNodeChildren();
 			List<TagPropertyObject> properties = ((TagObject) root)
 					.getProperties();
 			for (Iterator iterator = children.iterator(); iterator.hasNext();) {
@@ -548,8 +553,9 @@
 			String newSelector = processingResourceConfig.getSelector();
 			if (newSelector == null)
 				return;
-			AbstractXMLObject newRoot = (AbstractXMLObject) UIUtils.localXMLNodeWithPath(newSelector, root);
-//			findXMLNodeWithSelector(newSelector,root);
+			AbstractXMLObject newRoot = (AbstractXMLObject) UIUtils
+					.localXMLNodeWithPath(newSelector, root);
+			// findXMLNodeWithSelector(newSelector,root);
 			if (newRoot == null) {
 				// TODO If can't find the element , throw exception
 				// MODIFY by Dart , 2008.11.07
@@ -561,7 +567,8 @@
 					processingResourceConfig, newRoot, targetBean);
 		} else {
 
-			AbstractXMLObject source =  (AbstractXMLObject) UIUtils.localXMLNodeWithPath(selector, root);
+			AbstractXMLObject source = (AbstractXMLObject) UIUtils
+					.localXMLNodeWithPath(selector, root);
 			if (source == null) {
 				// TODO If can't find the element , throw exception
 				// MODIFY by Dart , 2008.11.07
@@ -622,8 +629,10 @@
 			SmooksResourceListType listType) {
 		List list = listType.getAbstractResourceConfig();
 		for (Iterator iterator = list.iterator(); iterator.hasNext();) {
-			AbstractResourceConfig abstractRC = (AbstractResourceConfig) iterator.next();
-			if(!(abstractRC instanceof ResourceConfigType)) continue;
+			AbstractResourceConfig abstractRC = (AbstractResourceConfig) iterator
+					.next();
+			if (!(abstractRC instanceof ResourceConfigType))
+				continue;
 			ResourceConfigType resource = (ResourceConfigType) abstractRC;
 			ResourceType rt = resource.getResource();
 			if (rt == null)

Added: trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/xml2java/analyzer/XML2JavaAnalyzer2.java
===================================================================
--- trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/xml2java/analyzer/XML2JavaAnalyzer2.java	                        (rev 0)
+++ trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/xml2java/analyzer/XML2JavaAnalyzer2.java	2009-01-18 07:45:38 UTC (rev 13105)
@@ -0,0 +1,25 @@
+/**
+ * 
+ */
+package org.jboss.tools.smooks.xml2java.analyzer;
+
+import org.jboss.tools.smooks.javabean.model.JavaBeanList;
+import org.jboss.tools.smooks.javabean.ui.BeanPopulatorMappingAnalyzer;
+import org.jboss.tools.smooks.xml.model.TagList;
+
+/**
+ * @author Dart
+ *
+ */
+public class XML2JavaAnalyzer2 extends BeanPopulatorMappingAnalyzer {
+
+	@Override
+	protected boolean checkSourceAndTarget(Object sourceObject,
+			Object targetObject) {
+		if(sourceObject instanceof TagList && targetObject instanceof JavaBeanList){
+			return true;
+		}
+		return false;
+	}
+
+}


Property changes on: trunk/smooks/plugins/org.jboss.tools.smooks.ui/src/org/jboss/tools/smooks/xml2java/analyzer/XML2JavaAnalyzer2.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain




More information about the jbosstools-commits mailing list