Please can we make sure the ASF header is included on the source files.
--
Jeremy

On Sep 12, 2006, at 1:57 PM, [EMAIL PROTECTED] wrote:

Author: frankb
Date: Tue Sep 12 13:57:00 2006
New Revision: 442701

URL: http://svn.apache.org/viewvc?view=rev&rev=442701
Log:
Fix for TUSCANY-627

Added:
incubator/tuscany/java/sdo/impl/src/main/java/org/apache/ tuscany/sdo/helper/CrossScopeCopyHelperImpl.java incubator/tuscany/java/sdo/impl/src/test/java/org/apache/ tuscany/sdo/test/CrossScopeCopyTestCase.java
    incubator/tuscany/java/sdo/impl/src/test/resources/bank.xsd
Modified:
incubator/tuscany/java/sdo/impl/src/main/java/org/apache/ tuscany/sdo/util/SDOUtil.java

Added: incubator/tuscany/java/sdo/impl/src/main/java/org/apache/ tuscany/sdo/helper/CrossScopeCopyHelperImpl.java URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sdo/impl/ src/main/java/org/apache/tuscany/sdo/helper/ CrossScopeCopyHelperImpl.java?view=auto&rev=442701 ====================================================================== ======== --- incubator/tuscany/java/sdo/impl/src/main/java/org/apache/ tuscany/sdo/helper/CrossScopeCopyHelperImpl.java (added) +++ incubator/tuscany/java/sdo/impl/src/main/java/org/apache/ tuscany/sdo/helper/CrossScopeCopyHelperImpl.java Tue Sep 12 13:57:00 2006
@@ -0,0 +1,236 @@
+package org.apache.tuscany.sdo.helper;
+
+import java.util.Iterator;
+import java.util.Map;
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EReference;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.emf.ecore.util.FeatureMap;
+import org.eclipse.emf.ecore.util.FeatureMapUtil;
+import org.eclipse.emf.ecore.util.InternalEList;
+import org.eclipse.emf.ecore.util.EcoreUtil.Copier;
+
+import commonj.sdo.DataObject;
+import commonj.sdo.Type;
+import commonj.sdo.helper.CopyHelper;
+import commonj.sdo.helper.TypeHelper;
+
+/**
+ * A CopyHelper implementation that creates the copy objects in a specific metadata scope. + * The target scope must contain a compatible version of the Types needed to create the copy objects.
+ */
+public class CrossScopeCopyHelperImpl implements CopyHelper
+{
+  protected TypeHelper scope;
+
+  public CrossScopeCopyHelperImpl(TypeHelper targetScope)
+  {
+    scope = targetScope;
+  }
+
+  public DataObject copyShallow(DataObject dataObject)
+  {
+    Copier copier = new CrossScopeCopier()
+    {
+ protected void copyContainment(EReference eReference, EObject eObject, EObject copyEObject)
+      {
+      }
+ protected void copyAttribute(EAttribute eAttribute, EObject eObject, EObject copyEObject)
+      {
+ if (eObject.eIsSet(eAttribute) && ! FeatureMapUtil.isFeatureMap(eAttribute))
+               {
+                 super.copyAttribute(eAttribute,eObject,copyEObject);
+               }
+         }
+    };
+    EObject result = copier.copy((EObject)dataObject);
+    copier.copyReferences();
+    return (DataObject)result;
+  }
+
+  public DataObject copy(DataObject dataObject)
+  {
+    Copier copier = new CrossScopeCopier();
+    DataObject result = (DataObject)copier.copy((EObject)dataObject);
+    copier.copyReferences();
+    return (DataObject)result;
+  }
+
+  protected class CrossScopeCopier extends EcoreUtil.Copier
+  {
+    protected boolean useOriginalReferences = false;
+
+    protected EClass getTarget(EClass eClass)
+    {
+      EClass target = (EClass)get(eClass);
+      if (target == null)
+      {
+        Type type = (Type)eClass;
+ target = (EClass)scope.getType(type.getURI(), type.getName ());
+      }
+      return target;
+    }
+
+ protected EStructuralFeature getTarget(EStructuralFeature eStructuralFeature)
+    {
+ EClass eClass = getTarget (eStructuralFeature.getEContainingClass()); + EStructuralFeature targetEf = eClass.getEStructuralFeature (eStructuralFeature.getName());
+      return targetEf;
+    }
+
+    /**
+     * This Method WILL BE REMOVED when EMF 3.0 is available
+     */
+    public void copyReferences()
+    {
+      for (Iterator i = entrySet().iterator(); i.hasNext();)
+      {
+        Map.Entry entry = (Map.Entry)i.next();
+        EObject eObject = (EObject)entry.getKey();
+        EObject copyEObject = (EObject)entry.getValue();
+        EClass eClass = eObject.eClass();
+ for (int j = 0, size = eClass.getFeatureCount(); j < size; ++j)
+        {
+ EStructuralFeature eStructuralFeature = eClass.getEStructuralFeature(j); + if (eStructuralFeature.isChangeable() && ! eStructuralFeature.isDerived())
+          {
+            if (eStructuralFeature instanceof EReference)
+            {
+              EReference eReference = (EReference)eStructuralFeature;
+ if (!eReference.isContainment() && ! eReference.isContainer())
+              {
+                copyReference(eReference, eObject, copyEObject);
+              }
+            }
+            else if (FeatureMapUtil.isFeatureMap(eStructuralFeature))
+            {
+ FeatureMap featureMap = (FeatureMap)eObject.eGet (eStructuralFeature); + FeatureMap copyFeatureMap = (FeatureMap) copyEObject.eGet(getTarget(eStructuralFeature));
+              int copyFeatureMapSize = copyFeatureMap.size();
+ for (int k = 0, featureMapSize = featureMap.size(); k < featureMapSize; ++k)
+              {
+ EStructuralFeature feature = featureMap.getEStructuralFeature(k);
+                if (feature instanceof EReference)
+                {
+                  Object referencedEObject = featureMap.getValue(k);
+ Object copyReferencedEObject = get (referencedEObject); + if (copyReferencedEObject == null && referencedEObject != null)
+                  {
+                    EReference reference = (EReference)feature;
+ if (!useOriginalReferences || reference.isContainment() || reference.getEOpposite() != null)
+                    {
+                      continue;
+                    }
+                    copyReferencedEObject = referencedEObject;
+                  }
+ // If we can't add it, it must aleady be in the list so find it and move it to the end.
+                  //
+ if (!copyFeatureMap.add(feature, copyReferencedEObject))
+                  {
+                    for (int l = 0; l < copyFeatureMapSize; ++l)
+                    {
+ if (copyFeatureMap.getEStructuralFeature(l) == feature && copyFeatureMap.getValue(l) == copyReferencedEObject)
+                      {
+ copyFeatureMap.move(copyFeatureMap.size() - 1, l);
+                        --copyFeatureMapSize;
+                        break;
+                      }
+                    }
+                  }
+                }
+                else
+                {
+                  copyFeatureMap.add(featureMap.get(k));
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+
+    /**
+     * This Method WILL BE REMOVED when EMF 3.0 is available
+     */
+ protected void copyReference(EReference eReference, EObject eObject, EObject copyEObject)
+    {
+      if (eObject.eIsSet(eReference))
+      {
+        if (eReference.isMany())
+        {
+ InternalEList source = (InternalEList)eObject.eGet (eReference); + InternalEList target = (InternalEList)copyEObject.eGet (getTarget(eReference));
+          if (source.isEmpty())
+          {
+            target.clear();
+          }
+          else
+          {
+ boolean isBidirectional = eReference.getEOpposite() != null;
+            int index = 0;
+ for (Iterator k = resolveProxies ? source.iterator() : source.basicIterator(); k.hasNext();)
+            {
+              Object referencedEObject = k.next();
+              Object copyReferencedEObject = get(referencedEObject);
+              if (copyReferencedEObject == null)
+              {
+                if (useOriginalReferences && !isBidirectional)
+                {
+                  target.addUnique(index, referencedEObject);
+                  ++index;
+                }
+              }
+              else
+              {
+                if (isBidirectional)
+                {
+ int position = target.indexOf (copyReferencedEObject);
+                  if (position == -1)
+                  {
+                    target.addUnique(index, copyReferencedEObject);
+                  }
+                  else if (index != position)
+                  {
+                    target.move(index, copyReferencedEObject);
+                  }
+                }
+                else
+                {
+                  target.addUnique(index, copyReferencedEObject);
+                }
+                ++index;
+              }
+            }
+          }
+        }
+        else
+        {
+ Object referencedEObject = eObject.eGet(eReference, resolveProxies);
+          if (referencedEObject == null)
+          {
+            copyEObject.eSet(getTarget(eReference), null);
+          }
+          else
+          {
+            Object copyReferencedEObject = get(referencedEObject);
+            if (copyReferencedEObject == null)
+            {
+ if (useOriginalReferences && eReference.getEOpposite () == null)
+              {
+ copyEObject.eSet(getTarget(eReference), referencedEObject);
+              }
+            }
+            else
+            {
+ copyEObject.eSet(getTarget(eReference), copyReferencedEObject);
+            }
+          }
+        }
+      }
+    }
+  }
+}

Modified: incubator/tuscany/java/sdo/impl/src/main/java/org/apache/ tuscany/sdo/util/SDOUtil.java URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sdo/impl/ src/main/java/org/apache/tuscany/sdo/util/SDOUtil.java? view=diff&rev=442701&r1=442700&r2=442701 ====================================================================== ======== --- incubator/tuscany/java/sdo/impl/src/main/java/org/apache/ tuscany/sdo/util/SDOUtil.java (original) +++ incubator/tuscany/java/sdo/impl/src/main/java/org/apache/ tuscany/sdo/util/SDOUtil.java Tue Sep 12 13:57:00 2006
@@ -37,6 +37,7 @@
 import org.apache.tuscany.sdo.SDOExtendedMetaData;
 import org.apache.tuscany.sdo.SDOFactory;
 import org.apache.tuscany.sdo.SimpleAnyTypeDataObject;
+import org.apache.tuscany.sdo.helper.CrossScopeCopyHelperImpl;
 import org.apache.tuscany.sdo.helper.DataFactoryImpl;
 import org.apache.tuscany.sdo.helper.SDOExtendedMetaDataImpl;
 import org.apache.tuscany.sdo.helper.TypeHelperImpl;
@@ -72,6 +73,7 @@
 import commonj.sdo.Property;
 import commonj.sdo.Sequence;
 import commonj.sdo.Type;
+import commonj.sdo.helper.CopyHelper;
 import commonj.sdo.helper.DataFactory;
 import commonj.sdo.helper.TypeHelper;
 import commonj.sdo.helper.XMLHelper;
@@ -319,6 +321,16 @@
public static XMLStreamHelper createXMLStreamHelper(TypeHelper scope)
   {
     return new XMLStreamHelperImpl(scope);
+  }
+
+  /**
+   * Create a new cross scope CopyHelper.
+ * @param targetScope the TypeHelper containing the Types to use to create the copy objects.
+   * @return the new CopyHelper.
+   */
+ public static CopyHelper createCrossScopeCopyHelper(TypeHelper targetScope)
+  {
+    return new CrossScopeCopyHelperImpl(targetScope);
   }

   /**

Added: incubator/tuscany/java/sdo/impl/src/test/java/org/apache/ tuscany/sdo/test/CrossScopeCopyTestCase.java URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sdo/impl/ src/test/java/org/apache/tuscany/sdo/test/ CrossScopeCopyTestCase.java?view=auto&rev=442701 ====================================================================== ======== --- incubator/tuscany/java/sdo/impl/src/test/java/org/apache/ tuscany/sdo/test/CrossScopeCopyTestCase.java (added) +++ incubator/tuscany/java/sdo/impl/src/test/java/org/apache/ tuscany/sdo/test/CrossScopeCopyTestCase.java Tue Sep 12 13:57:00 2006
@@ -0,0 +1,450 @@
+package org.apache.tuscany.sdo.test;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.math.BigDecimal;
+import java.net.URL;
+import java.util.Iterator;
+import java.util.Vector;
+
+import junit.framework.TestCase;
+
+import org.apache.tuscany.sdo.util.SDOUtil;
+
+import commonj.sdo.DataObject;
+import commonj.sdo.Property;
+import commonj.sdo.Type;
+import commonj.sdo.helper.CopyHelper;
+import commonj.sdo.helper.DataFactory;
+import commonj.sdo.helper.TypeHelper;
+
+public class CrossScopeCopyTestCase extends TestCase
+{
+   // Literals
+ private static final String TEST_NAMESPACE = "http:// www.example.com/bank";
+   private static final String BANK_MODEL      = "/bank.xsd";
+   private static final String BANK_TYPE       = "bankType";
+   private static final String BRANCH_TYPE     = "branchType";
+   private static final String SERVICE_TYPE    = "serviceType";
+   private static final String ACCOUNT_TYPE    = "accountType";
+   private static final String CUSTOMER_TYPE   = "customerType";
+   private static final String ADDRESS_TYPE    = "addressType";
+   private static final String DYNAMIC_TYPE    = "dynamicType";
+
+   // SDO model objects
+   private TypeHelper scopeA;
+   private TypeHelper scopeB;
+
+   // SDO instance objects
+   private DataObject bankSDO;
+   private DataObject branchSDO1;
+   private DataObject branchSDO2;
+   private DataObject serviceSDO1;
+   private DataObject serviceSDO2;
+   private DataObject serviceSDO3;
+   private DataObject customerSDO1;
+   private DataObject customerSDO2;
+   private DataObject customerSDO3;
+   private DataObject customerSDO4;
+
+   private int indent = 0;
+
+   public void testCrossScopeCopy() throws IOException
+   {
+ CopyHelper copyHelperB = SDOUtil.createCrossScopeCopyHelper (scopeB);
+
+       // Perform Shallow Copy Test
+       DataObject copiedSDO = copyHelperB.copyShallow(bankSDO);
+       shallowCopyAssertions(bankSDO, copiedSDO);
+
+       // Perform Deep Copy Test
+       copiedSDO = copyHelperB.copy(bankSDO);
+       deepCopyAssertions(bankSDO, copiedSDO);
+
+       // Inter-Reference Copy
+       copiedSDO = copyHelperB.copy(customerSDO1);
+       DataObject prop = (DataObject)copiedSDO.get("HomeBranch");
+       assertTrue(prop==null);
+
+       // Perform invalid namespace test
+ DataObject sdo = SDOUtil.createDataFactory(scopeA).create (TEST_NAMESPACE, DYNAMIC_TYPE );
+       sdo.set("custNum", "099" );
+       sdo.set("firstName", "John");
+       sdo.set("lastName", "Doe");
+       boolean failed = false;
+       try
+       {
+           // In this case, we are copying an object to a scope
+           // where the object's type has not been defined.  That
+           // will generate a null pointer exception what we will
+           // catch.
+           copyHelperB.copy(sdo);
+       }
+       catch(java.lang.NullPointerException ex)
+       {
+           failed = true;
+       }
+       assertTrue(failed);
+   }
+
+   protected void setUp() throws Exception
+   {
+       super.setUp();
+
+       // Create Two Scopes
+       scopeA = SDOUtil.createTypeHelper();
+       scopeB = SDOUtil.createTypeHelper();
+
+       // Populate scopes with bank model now
+       URL url = getClass().getResource(BANK_MODEL);
+       InputStream inputStream = url.openStream();
+ SDOUtil.createXSDHelper(scopeA).define(inputStream, url.toString());
+       inputStream.close();
+       inputStream = url.openStream();
+ SDOUtil.createXSDHelper(scopeB).define(inputStream, url.toString());
+       inputStream.close();
+
+       // Now Populate scopeA with some dynamic models
+       populateScopeWithDynamicTypes(scopeA);
+
+       // Construct Source Tree
+       constructSourceTree(SDOUtil.createDataFactory(scopeA));
+   }
+
+ private void shallowCopyAssertions(DataObject sdo, DataObject copiedSdo)
+   {
+ assertEquals(sdo.getType().getName(), copiedSdo.getType ().getName()); + assertEquals(sdo.getType().getURI(), copiedSdo.getType ().getURI());
+       assertNotSame(sdo.getType(), copiedSdo.getType());
+       assertEquals(sdo.getInstanceProperties().size(), copiedSdo
+                    .getInstanceProperties().size());
+
+ for(Iterator it = sdo.getInstanceProperties().iterator(), it2 = copiedSdo
+           .getInstanceProperties().iterator(); it.hasNext();)
+       {
+ Property p1 = (Property) it.next(), p2 = (Property) it2.next();
+           assertEquals(p1.getName(), p2.getName());
+           Object o1 = sdo.get(p1), o2 = copiedSdo.get(p2);
+           if(p1.getType().isDataType())
+           {
+               assertEquals(o1, o2);
+ // TODO is there a way I can distinguish between mutable and
+               // immutable types
+               // so that I can do some "same object" tests
+           }
+           else
+           {
+               assertNotSame(p1, p2);
+               if(p2.isMany())
+               {
+                   assertEquals(copiedSdo.getList(p2).size(), 0);
+               }
+               else
+               {
+                   assertNull(copiedSdo.get(p2));
+               }
+           }
+           try
+           {
+               sdo.get(p2);
+               assertTrue(false);
+           }
+           catch(Exception e)
+           {
+               // expected route
+           }
+           try
+           {
+               copiedSdo.get(p1);
+               assertTrue(false);
+           }
+           catch(Exception e2)
+           {
+               // expected route
+           }
+       }
+   }
+
+ private void deepCopyAssertions(DataObject sdo, DataObject copiedSdo)
+   {
+       //indent();
+
+       //System.out.println("checking objects of types: "
+       //                   + sdo.getType().getName() + ", "
+       //                   + copiedSdo.getType().getName());
+       indent++;
+
+ assertEquals(sdo.getType().getName(), copiedSdo.getType ().getName()); + assertEquals(sdo.getType().getURI(), copiedSdo.getType ().getURI());
+       assertNotSame(sdo.getType(), copiedSdo.getType());
+       assertEquals(sdo.getInstanceProperties().size(), copiedSdo
+                    .getInstanceProperties().size());
+
+ for(Iterator it = sdo.getInstanceProperties().iterator(), it2 = copiedSdo
+           .getInstanceProperties().iterator(); it.hasNext();)
+       {
+ Property p1 = (Property) it.next(), p2 = (Property) it2.next();
+           assertEquals(p1.getName(), p2.getName());
+           Object o1 = sdo.get(p1), o2 = copiedSdo.get(p2);
+           if(p1.getType().isDataType())
+           {
+               assertEquals(o1, o2);
+ // TODO is there a way I can distinguish between mutable and
+               // immutable types
+               // so that I can do some "same object" tests
+           }
+           else
+           {
+               assertNotSame(p1, p2);
+               if(p2.isMany())
+               {
+ assertEquals(sdo.getList(p1).size(), copiedSdo.getList(p2)
+                                .size());
+ for(Iterator it3 = sdo.getList(p1).iterator(), it4 = copiedSdo
+                       .getList(p2).iterator(); it3.hasNext();)
+                   {
+                       deepCopyAssertions((DataObject) it3.next(),
+                                          (DataObject) it4.next());
+                   }
+               }
+               else
+               {
+ deepCopyAssertions(sdo.getDataObject(p1), copiedSdo
+                                      .getDataObject(p2));
+               }
+           }
+           try
+           {
+               sdo.get(p2);
+               assertTrue(false);
+           }
+           catch(Exception e)
+           {
+               // expected route
+           }
+           try
+           {
+               copiedSdo.get(p1);
+               assertTrue(false);
+           }
+           catch(Exception e2)
+           {
+               // expected route
+           }
+       }
+
+       indent--;
+   }
+
+   /*
+   private void indent()
+   {
+       for(int i=0; i <indent; i++) System.out.print(" ");
+   }
+   */
+
+   protected void constructSourceTree(DataFactory df)
+   {
+       // Create Instances
+       bankSDO      = df.create(TEST_NAMESPACE, BANK_TYPE );
+       branchSDO1   = df.create(TEST_NAMESPACE, BRANCH_TYPE );
+       branchSDO2   = df.create(TEST_NAMESPACE, BRANCH_TYPE );
+       serviceSDO1  = df.create(TEST_NAMESPACE, SERVICE_TYPE );
+       serviceSDO2  = df.create(TEST_NAMESPACE, SERVICE_TYPE );
+       serviceSDO3  = df.create(TEST_NAMESPACE, SERVICE_TYPE );
+       customerSDO1 = df.create(TEST_NAMESPACE, CUSTOMER_TYPE );
+       customerSDO2 = df.create(TEST_NAMESPACE, CUSTOMER_TYPE );
+       customerSDO3 = df.create(TEST_NAMESPACE, CUSTOMER_TYPE );
+       customerSDO4 = df.create(TEST_NAMESPACE, CUSTOMER_TYPE );
+
+       // Populate the Bank Instance
+       bankSDO.set("name", "Fourth National");
+       Vector v = new Vector();
+       v.add(branchSDO1);
+       v.add(branchSDO2);
+       bankSDO.set("Branch",v);
+       v.removeAllElements();
+       v.add(serviceSDO1);
+       v.add(serviceSDO2);
+       v.add(serviceSDO3);
+       bankSDO.set("Service",v);
+       v.removeAllElements();
+       v.add(customerSDO1);
+       v.add(customerSDO2);
+       v.add(customerSDO3);
+       v.add(customerSDO4);
+       bankSDO.set("Customer",v);
+       v.removeAllElements();
+
+       // Populate Branch Instances
+       // Branch 1
+       branchSDO1.set("ID", "BR100");
+       DataObject addr = df.create(TEST_NAMESPACE, ADDRESS_TYPE );
+       addr.set("Street", "1302 Money Street");
+       addr.set("City",   "Apex");
+       addr.set("State", "NC");
+       addr.set("Zip", "27502");
+       branchSDO1.set("Address", addr);
+       v.add("If you are north, head south");
+       v.add("If you are south, head north");
+       branchSDO1.set("Directions", v);
+       v.removeAllElements();
+ DataObject account1 = df.create(TEST_NAMESPACE, ACCOUNT_TYPE );
+       account1.set("ID", "0000 1200 0001");
+       account1.set("Service",  serviceSDO1 );
+       account1.setBigDecimal("Balance", new BigDecimal("3124.12"));
+       v.add(account1);
+ DataObject account2 = df.create(TEST_NAMESPACE, ACCOUNT_TYPE );
+       account2.set("ID", "0000 8899 0001");
+       account2.set("Service",  serviceSDO1 );
+       account2.setBigDecimal("Balance", new BigDecimal("20.00"));
+       v.add(account2);
+ DataObject account3 = df.create(TEST_NAMESPACE, ACCOUNT_TYPE );
+       account3.set("ID", "0000 3110 0020");
+       account3.set("Service",  serviceSDO3 );
+       account3.setBigDecimal("Balance", new BigDecimal("5000.00"));
+       v.add(account3);
+       branchSDO1.set("Account", v);
+       v.removeAllElements();
+       // Branch 2
+       branchSDO2.set("ID", "BR200");
+       addr = df.create(TEST_NAMESPACE, ADDRESS_TYPE );
+       addr.set("Street", "1207 Cash Court");
+       addr.set("City",  "Raleigh");
+       addr.set("State", "NC");
+       addr.set("Zip", "27701");
+       branchSDO2.set("Address", addr);
+       v.add("If you are east, head west");
+       v.add("If you are west, head east");
+       branchSDO2.set("Directions", v);
+       v.removeAllElements();
+ DataObject account4 = df.create(TEST_NAMESPACE, ACCOUNT_TYPE );
+       account4.set("ID", "0000 0011 0001");
+       account4.set("Service",  serviceSDO1 );
+       account4.setBigDecimal("Balance", new BigDecimal("99.12"));
+       v.add(account4);
+ DataObject account5 = df.create(TEST_NAMESPACE, ACCOUNT_TYPE );
+       account5.set("ID", "0000 9911 0001");
+       account5.set("Service",  serviceSDO2 );
+       account5.setBigDecimal("Balance", new BigDecimal("820.00"));
+       v.add(account5);
+ DataObject account6 = df.create(TEST_NAMESPACE, ACCOUNT_TYPE );
+       account6.set("ID", "0000 0001 0020");
+       account6.set("Service",  serviceSDO3 );
+       account6.setBigDecimal("Balance", new BigDecimal("9000.00"));
+       v.add(account6);
+       branchSDO2.set("Account", v);
+       v.removeAllElements();
+
+       // Populate Service Instances
+       serviceSDO1.set("ID", "SRV01");
+       serviceSDO1.set("Name", "Checking");
+       serviceSDO1.setBigDecimal("Fee", new BigDecimal("0.00"));
+       serviceSDO2.set("ID", "SRV02");
+       serviceSDO2.set("Name", "Savings");
+       serviceSDO2.setBigDecimal("Fee", new BigDecimal("0.00"));
+       serviceSDO3.set("ID", "SRV03");
+       serviceSDO3.set("Name", "Loan");
+       serviceSDO3.setBigDecimal("Fee", new BigDecimal("0.00"));
+
+       // Populate Customer Instances
+       // Customer 1
+       customerSDO1.set("ID", "CUST01");
+       customerSDO1.set("First", "James");
+       customerSDO1.set("Last", "Madison");
+       addr = df.create(TEST_NAMESPACE, ADDRESS_TYPE );
+       addr.set("Street", "1234 Easy Street");
+       addr.set("City",  "New York");
+       addr.set("State", "NY");
+       addr.set("Zip", "27511");
+       customerSDO1.set("Address", addr);
+       customerSDO1.set("HomeBranch", branchSDO1);
+       v.add(account1);
+       customerSDO1.set("Account", v);
+       v.removeAllElements();
+       v.add(customerSDO2);
+       v.add(customerSDO3);
+       customerSDO1.set("Related", v);
+       v.removeAllElements();
+       // Customer 2
+       customerSDO2.set("ID", "CUST02");
+       customerSDO2.set("First", "George");
+       customerSDO2.set("Last", "Washington");
+       addr = df.create(TEST_NAMESPACE, ADDRESS_TYPE );
+       addr.set("Street", "1776 Potomac Avenue");
+       addr.set("City",  "Washington");
+       addr.set("State", "DC");
+       addr.set("Zip", "50555");
+       customerSDO2.set("Address", addr);
+       customerSDO2.set("HomeBranch", branchSDO1);
+       v.add(account2);
+       v.add(account3);
+       customerSDO2.set("Account", v);
+       v.removeAllElements();
+       // Customer 3
+       customerSDO3.set("ID", "CUST03");
+       customerSDO3.set("First", "Thomas");
+       customerSDO3.set("Last", "Jefferson");
+       addr = df.create(TEST_NAMESPACE, ADDRESS_TYPE );
+       addr.set("Street", "1492 Columbus Avenue");
+       addr.set("City",  "Charlottesville");
+       addr.set("State", "VA");
+       addr.set("Zip", "20121");
+       customerSDO3.set("Address", addr);
+       customerSDO3.set("HomeBranch", branchSDO2);
+       v.add(account4);
+       customerSDO3.set("Account", v);
+       v.removeAllElements();
+       // Customer 4
+       customerSDO4.set("ID", "CUST04");
+       customerSDO4.set("First", "Benjamin");
+       customerSDO4.set("Last", "Franklin");
+       addr = df.create(TEST_NAMESPACE, ADDRESS_TYPE );
+       addr.set("Street", "99 Light Street");
+       addr.set("City",  "Philadelphia");
+       addr.set("State", "PA");
+       addr.set("Zip", "19251");
+       customerSDO4.set("Address", addr);
+       customerSDO4.set("HomeBranch", branchSDO2);
+       v.add(account5);
+       v.add(account6);
+       customerSDO4.set("Account", v);
+       v.removeAllElements();
+
+   }
+
+   private void populateScopeWithDynamicTypes(TypeHelper scope)
+   {
+       Type stringType = scope.getType("commonj.sdo", "String");
+ DataObject customerType = DataFactory.INSTANCE.create ("commonj.sdo", "Type");
+       customerType.set("uri", TEST_NAMESPACE);
+       customerType.set("name", DYNAMIC_TYPE );
+ DataObject custNumProperty = customerType.createDataObject ("property");
+       custNumProperty.set("name", "custNum");
+       custNumProperty.set("type", stringType);
+ DataObject firstNameProperty = customerType.createDataObject ("property");
+       firstNameProperty.set("name", "firstName");
+       firstNameProperty.set("type", stringType);
+ DataObject lastNameProperty = customerType.createDataObject ("property");
+       lastNameProperty.set("name", "lastName");
+       lastNameProperty.set("type", stringType);
+       scope.define(customerType);
+   }
+
+   /*
+   private void dumpObject(DataObject sdo, String node )
+   {
+       try
+       {
+           ByteArrayOutputStream baos = new ByteArrayOutputStream();
+           SDOUtil.createXMLHelper(scopeA).save(sdo, TEST_NAMESPACE,
+                                   node, baos);
+           System.out.println(baos.toString());
+       }
+       catch (IOException e)
+       {
+           e.printStackTrace();
+       }
+   }
+   */
+}

Added: incubator/tuscany/java/sdo/impl/src/test/resources/bank.xsd
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sdo/impl/ src/test/resources/bank.xsd?view=auto&rev=442701 ====================================================================== ======== --- incubator/tuscany/java/sdo/impl/src/test/resources/bank.xsd (added) +++ incubator/tuscany/java/sdo/impl/src/test/resources/bank.xsd Tue Sep 12 13:57:00 2006
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Copyright (c) 2005-2006 The Apache Software Foundation or its licensors, as applicable.
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and
+ *  limitations under the License.
+ -->
+<xsd:schema targetNamespace="http://www.example.com/bank";
+                 xmlns:bank="http://www.example.com/bank";
+            xmlns:xsd="http://www.w3.org/2001/XMLSchema";
+            xmlns:sdoXML="commonj.sdo/xml">
+
+    <xsd:element name="bank" type="bank:bankType"/>
+
+    <xsd:complexType name="bankType">
+        <xsd:sequence>
+ <xsd:element name="Branch" type="bank:branchType" maxOccurs="unbounded" /> + <xsd:element name="Service" type="bank:serviceType" maxOccurs="unbounded" /> + <xsd:element name="Customer" type="bank:customerType" maxOccurs="unbounded" />
+        </xsd:sequence>
+           <xsd:attribute name="name" type="xsd:string"/>
+    </xsd:complexType>
+
+    <xsd:complexType name="branchType">
+        <xsd:sequence>
+            <xsd:element name="Address" type="bank:addressType"/>
+ <xsd:element name="Directions" type="xsd:string" maxOccurs="unbounded" /> + <xsd:element name="Account" type="bank:accountType" maxOccurs="unbounded" />
+        </xsd:sequence>
+        <xsd:attribute name="ID" type="xsd:ID"/>
+    </xsd:complexType>
+
+    <xsd:complexType name="serviceType">
+        <xsd:attribute name="ID" type="xsd:ID"/>
+        <xsd:attribute name="Name" type="xsd:string"/>
+        <xsd:attribute name="Fee" type="xsd:decimal"/>
+    </xsd:complexType>
+
+    <xsd:complexType name="accountType">
+        <xsd:attribute name="ID" type="xsd:ID"/>
+ <xsd:attribute name="Service" type="xsd:IDREF" sdoXML:propertyType="bank:serviceType" />
+        <xsd:attribute name="Balance" type="xsd:decimal" />
+    </xsd:complexType>
+
+    <xsd:complexType name="customerType">
+        <xsd:sequence>
+            <xsd:element name="First" type="xsd:string" />
+            <xsd:element name="Last" type="xsd:string" />
+            <xsd:element name="Address" type="bank:addressType"/>
+ <xsd:element name="HomeBranch" type="xsd:IDREF" sdoXML:propertyType="bank:branchType" /> + <xsd:element name="Account" type="xsd:IDREF" sdoXML:propertyType="bank:accountType" maxOccurs="unbounded" />
+        </xsd:sequence>
+        <xsd:attribute name="ID" type="xsd:ID"/>
+ <xsd:attribute name="Related" type="xsd:IDREFS" sdoXML:propertyType="bank:customerType" />
+    </xsd:complexType>
+
+    <xsd:complexType name="addressType">
+        <xsd:sequence>
+            <xsd:element name="Street" type="xsd:string"/>   
+            <xsd:element name="City" type="xsd:string"/>
+            <xsd:element name="State" type="xsd:string"/>            
+            <xsd:element name="Zip" type="xsd:string"/>              
+        </xsd:sequence>
+    </xsd:complexType>
+
+ </xsd:schema>



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to