[jboss-svn-commits] JBoss Common SVN: r2110 - in jbossxb/trunk/src: main/java/org/jboss/xb/binding/sunday/unmarshalling test/java/org/jboss/test/xml test/resources/org/jboss/test/xml

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Sun Oct 8 08:33:22 EDT 2006


Author: adrian at jboss.org
Date: 2006-10-08 08:33:09 -0400 (Sun, 08 Oct 2006)
New Revision: 2110

Added:
   jbossxb/trunk/src/test/java/org/jboss/test/xml/GlobalGroupUnitTestCase.java
   jbossxb/trunk/src/test/java/org/jboss/test/xml/JBossXBTestSuite.java
   jbossxb/trunk/src/test/java/org/jboss/test/xml/SharedElementUnitTestCase.java
   jbossxb/trunk/src/test/resources/org/jboss/test/xml/GlobalGroup.xml
   jbossxb/trunk/src/test/resources/org/jboss/test/xml/GlobalGroup.xsd
   jbossxb/trunk/src/test/resources/org/jboss/test/xml/SharedElement.xsd
Modified:
   jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/ModelGroupBinding.java
   jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/SchemaBinding.java
   jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/XsdBinder.java
   jbossxb/trunk/src/test/java/org/jboss/test/xml/AbstractJBossXBTest.java
   jbossxb/trunk/src/test/java/org/jboss/test/xml/JBossXBTestDelegate.java
   jbossxb/trunk/src/test/java/org/jboss/test/xml/RepeatableTermsUnitTestCase.java
   jbossxb/trunk/src/test/java/org/jboss/test/xml/XIncludeUnitTestCase.java
   jbossxb/trunk/src/test/java/org/jboss/test/xml/XOPUnitTestCase.java
Log:
Add support for global groups.

Also created a testsuite so you can run all JBossXB tests
and made some more helpers available in AbstractJBossXBTest.

Modified: jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/ModelGroupBinding.java
===================================================================
--- jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/ModelGroupBinding.java	2006-10-05 12:01:55 UTC (rev 2109)
+++ jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/ModelGroupBinding.java	2006-10-08 12:33:09 UTC (rev 2110)
@@ -44,6 +44,9 @@
 {
    protected final Logger log = Logger.getLogger(getClass());
 
+   /** The qualifed name for global groups */
+   protected QName qName;
+
    protected boolean requiredParticle;
    protected ParticleHandler handler = DefaultHandlers.ELEMENT_HANDLER;
 
@@ -52,6 +55,29 @@
       super(schema);
    }
 
+   /**
+    * Get the qName.
+    * 
+    * @return the qName.
+    */
+   public QName getQName()
+   {
+      return qName;
+   }
+
+   /**
+    * Set the qName.
+    * 
+    * @param name the qName.
+    * @throws IllegalArgumentException for a null qName
+    */
+   public void setQName(QName name)
+   {
+      if (name == null)
+         throw new IllegalArgumentException("Null name");
+      qName = name;
+   }
+
    public ParticleHandler getHandler()
    {
       return handler;

Modified: jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/SchemaBinding.java
===================================================================
--- jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/SchemaBinding.java	2006-10-05 12:01:55 UTC (rev 2109)
+++ jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/SchemaBinding.java	2006-10-08 12:33:09 UTC (rev 2110)
@@ -124,6 +124,8 @@
    private Map types = new HashMap(SIMPLE_TYPES);
    /** Map<QName, ParticleBinding> for */
    private Map elements = new HashMap();
+   /** Map<QName, ModelGroupBinding> for */
+   private Map groups = new HashMap();
    /** The default package information */
    private PackageMetaData packageMetaData;
    /** Schema resolver to use for foreign namespaces */
@@ -245,6 +247,21 @@
       return Collections.unmodifiableCollection(types.values()).iterator();
    }
 
+   public ModelGroupBinding getGroup(QName name)
+   {
+      return (ModelGroupBinding) groups.get(name);
+   }
+
+   public void addGroup(QName name, ModelGroupBinding group)
+   {
+      groups.put(name, group);
+   }
+
+   public Iterator getGroups()
+   {
+      return groups.values().iterator();
+   }
+
    public PackageMetaData getPackageMetaData()
    {
       return packageMetaData;

Modified: jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/XsdBinder.java
===================================================================
--- jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/XsdBinder.java	2006-10-05 12:01:55 UTC (rev 2109)
+++ jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/XsdBinder.java	2006-10-08 12:33:09 UTC (rev 2110)
@@ -288,11 +288,18 @@
       XSNamedMap groups = model.getComponents(XSConstants.MODEL_GROUP_DEFINITION);
       if (ctx.trace)
          log.trace("Model groups: " + groups.getLength());
+      // First make sure we bind all the groups
       for(int i = 0; i < groups.getLength(); ++i)
       {
          XSModelGroupDefinition groupDef = (XSModelGroupDefinition)groups.item(i);
-         bindGlobalGroup(groupDef.getModelGroup(), ctx.sharedElements);
+         bindGlobalGroup(groupDef, ctx);
       }
+      // Now bind the particles which may have references to the other groups
+      for(int i = 0; i < groups.getLength(); ++i)
+      {
+         XSModelGroupDefinition groupDef = (XSModelGroupDefinition)groups.item(i);
+         bindGlobalGroupParticles(groupDef.getModelGroup(), ctx);
+      }
 
       XSNamedMap types = model.getComponents(XSConstants.TYPE_DEFINITION);
       if (ctx.trace)
@@ -833,41 +840,13 @@
             // todo: investigate this
             if(modelGroup.getParticles().getLength() > 0)
             {
-               ModelGroupBinding groupBinding;
-               switch(modelGroup.getCompositor())
-               {
-                  case XSModelGroup.COMPOSITOR_ALL:
-                     groupBinding = new AllBinding(ctx.schema);
-                     break;
-                  case XSModelGroup.COMPOSITOR_CHOICE:
-                     groupBinding = new ChoiceBinding(ctx.schema);
-                     break;
-                  case XSModelGroup.COMPOSITOR_SEQUENCE:
-                     groupBinding = new SequenceBinding(ctx.schema);
-                     break;
-                  default:
-                     throw new JBossXBRuntimeException("Unexpected model group: " + modelGroup.getCompositor());
-               }
+               ModelGroupBinding groupBinding = bindModelGroup(ctx, modelGroup);
 
                ParticleBinding particleBinding = new ParticleBinding(groupBinding);
                particleBinding.setMaxOccursUnbounded(particle.getMaxOccursUnbounded());
                particleBinding.setMinOccurs(particle.getMinOccurs());
                particleBinding.setMaxOccurs(particle.getMaxOccurs());
 
-               if (ctx.trace)
-               {
-                  log.trace("created model group " + groupBinding);
-               }
-
-               if (ctx.processAnnotations)
-               {
-                  XSAnnotation annotation = modelGroup.getAnnotation();
-                  if(annotation != null)
-                  {
-                     customizeTerm(annotation, groupBinding, ctx.trace);
-                  }
-               }
-
                Object o = ctx.peekTypeOrGroup();
                if(o instanceof ModelGroupBinding)
                {
@@ -889,7 +868,7 @@
                }
 
                ctx.pushModelGroup(groupBinding);
-               bindModelGroup(ctx, modelGroup);
+               bindModelGroupParticles(ctx, modelGroup);
                ctx.popModelGroup();
             }
             break;
@@ -909,6 +888,40 @@
       }
    }
 
+   private static ModelGroupBinding bindModelGroup(Context ctx, XSModelGroup modelGroup)
+   {
+      // Is this a global group?
+      ModelGroupBinding groupBinding = ctx.sharedElements.getGlobalGroup(modelGroup);
+      if (groupBinding != null)
+         return groupBinding;
+      
+      switch(modelGroup.getCompositor())
+      {
+         case XSModelGroup.COMPOSITOR_ALL:
+            groupBinding = new AllBinding(ctx.schema);
+            break;
+         case XSModelGroup.COMPOSITOR_CHOICE:
+            groupBinding = new ChoiceBinding(ctx.schema);
+            break;
+         case XSModelGroup.COMPOSITOR_SEQUENCE:
+            groupBinding = new SequenceBinding(ctx.schema);
+            break;
+         default:
+            throw new JBossXBRuntimeException("Unexpected model group: " + modelGroup.getCompositor());
+      }
+
+      if (ctx.trace)
+         log.trace("created model group " + groupBinding);
+
+      if (ctx.processAnnotations)
+      {
+         XSAnnotation annotation = modelGroup.getAnnotation();
+         if (annotation != null)
+            customizeTerm(annotation, groupBinding, ctx.trace);
+      }
+      return groupBinding;
+   }
+
    private static void bindWildcard(Context ctx, XSParticle particle)
    {
       WildcardBinding binding = new WildcardBinding(ctx.schema);
@@ -1047,7 +1060,7 @@
       return particle;
    }
 
-   private static void bindModelGroup(Context ctx, XSModelGroup modelGroup)
+   private static void bindModelGroupParticles(Context ctx, XSModelGroup modelGroup)
    {
       XSObjectList particles = modelGroup.getParticles();
       for(int i = 0; i < particles.getLength(); ++i)
@@ -1274,35 +1287,33 @@
       }
    }
 
-   private static void bindGlobalGroup(XSModelGroup group, SharedElements sharedElements)
+   private static void bindGlobalGroup(XSModelGroupDefinition groupDef, Context ctx)
    {
-      XSObjectList particles = group.getParticles();
-      for(int j = 0; j < particles.getLength(); ++j)
-      {
-         XSParticle particle = (XSParticle)particles.item(j);
-         XSTerm term = particle.getTerm();
-         switch(term.getType())
-         {
-            case XSConstants.ELEMENT_DECLARATION:
-               XSElementDeclaration element = ((XSElementDeclaration)term);
-               sharedElements.add(element);
-               break;
-            case XSConstants.WILDCARD:
-               // todo is it actually possible?
-               break;
-            case XSConstants.MODEL_GROUP:
-               bindGlobalGroup((XSModelGroup)term, sharedElements);
-         }
-      }
+      QName groupName = new QName(groupDef.getNamespace(), groupDef.getName());
+      XSModelGroup group = groupDef.getModelGroup();
+      ModelGroupBinding groupBinding = bindModelGroup(ctx, group);
+      groupBinding.setQName(groupName);
+      ctx.sharedElements.addGlobalGroup(group, groupBinding);
+      ctx.schema.addGroup(groupName, groupBinding);
    }
 
+   private static void bindGlobalGroupParticles(XSModelGroup group, Context ctx)
+   {
+      ModelGroupBinding groupBinding = ctx.sharedElements.getGlobalGroup(group);
+      ctx.pushModelGroup(groupBinding);
+      bindModelGroupParticles(ctx, group);
+      ctx.popModelGroup();
+   }
 
+
    // Inner
 
    private static final class SharedElements
    {
       private Map elements = Collections.EMPTY_MAP;
 
+      private Map globalGroups = Collections.EMPTY_MAP;
+      
       public void add(XSElementDeclaration element)
       {
          switch(elements.size())
@@ -1340,6 +1351,25 @@
                elements.put(element, type);
          }
       }
+      
+      public void addGlobalGroup(XSModelGroup group, ModelGroupBinding groupBinding)
+      {
+         switch(globalGroups.size())
+         {
+            case 0:
+               globalGroups = Collections.singletonMap(group, groupBinding);
+               break;
+            case 1:
+               globalGroups = new HashMap(globalGroups);
+            default:
+               globalGroups.put(group, groupBinding);
+         }
+      }
+
+      public ModelGroupBinding getGlobalGroup(XSModelGroup group)
+      {
+         return (ModelGroupBinding) globalGroups.get(group);
+      }
    }
 
    private static final class Context

Modified: jbossxb/trunk/src/test/java/org/jboss/test/xml/AbstractJBossXBTest.java
===================================================================
--- jbossxb/trunk/src/test/java/org/jboss/test/xml/AbstractJBossXBTest.java	2006-10-05 12:01:55 UTC (rev 2109)
+++ jbossxb/trunk/src/test/java/org/jboss/test/xml/AbstractJBossXBTest.java	2006-10-08 12:33:09 UTC (rev 2110)
@@ -26,11 +26,8 @@
 import org.jboss.test.AbstractTestCaseWithSetup;
 import org.jboss.test.AbstractTestDelegate;
 import org.jboss.util.Classes;
-import org.jboss.xb.binding.Unmarshaller;
-import org.jboss.xb.binding.UnmarshallerFactory;
 import org.jboss.xb.binding.sunday.unmarshalling.SchemaBinding;
 import org.jboss.xb.binding.sunday.unmarshalling.SchemaBindingResolver;
-import org.jboss.xb.binding.sunday.unmarshalling.XsdBinder;
 
 /**
  * AbstractJBossXBTest.
@@ -136,13 +133,91 @@
     */
    protected Object unmarshal() throws Exception
    {
-      String testXsd = findXML(rootName + "_" + getName() + ".xsd");
-      SchemaBinding schema = XsdBinder.bind(testXsd, (SchemaBindingResolver)null);
+      String testXsd = rootName + "_" + getName() + ".xsd";
+      SchemaBinding schema = bind(testXsd);
       schema.setIgnoreUnresolvedFieldOrClass(false);
 
-      Unmarshaller unmarshaller = UnmarshallerFactory.newInstance().newUnmarshaller();
-      return unmarshaller.unmarshal(findXML(rootName + "_" + getName() + ".xml"), schema);
+      String name = rootName + "_" + getName() + ".xml";
+      return unmarshal(name, schema);
    }
+   
+   /**
+    * Unmarshall some xml<p>
+    * 
+    * The xsd name is UnitTestClass_testName.xsd<p>
+    * 
+    * The xml name is UnitTestClass_testName.xml
+    * 
+    * @param expected the expected class
+    * @return the object
+    * @throws Exception for any problem
+    */
+   protected Object unmarshal(Class expected) throws Exception
+   {
+      Object object = unmarshal();
+      if (object == null)
+         fail("No object");
+      assertTrue("Object '" + object + "' cannot be assigned to " + expected.getName(), expected.isAssignableFrom(object.getClass()));
+      return object;
+   }
+   
+   /**
+    * Unmarshal some xml
+    * 
+    * @param name the name
+    * @param schema the schema
+    * @return the unmarshalled object
+    * @throws Exception for any error
+    */
+   protected Object unmarshal(String name, SchemaBinding schema) throws Exception
+   {
+      String url = findXML(name);
+      return getJBossXBDelegate().unmarshal(url, schema);
+   }
+   
+   /**
+    * Unmarshal some xml
+    * 
+    * @param name the name
+    * @param schema the schema
+    * @param expected the expected class
+    * @return the unmarshalled object
+    * @throws Exception for any error
+    */
+   protected Object unmarshal(String name, SchemaBinding schema, Class expected) throws Exception
+   {
+      Object object = unmarshal(name, schema);
+      if (object == null)
+         fail("No object for " + name);
+      assertTrue("Object '" + object + "' cannot be assigned to " + expected.getName(), expected.isAssignableFrom(object.getClass()));
+      return object;
+   }
+   
+   /**
+    * Bind a schema
+    * 
+    * @param name the name
+    * @return the object
+    * @throws Exception for any error
+    */
+   public SchemaBinding bind(String name) throws Exception
+   {
+      return bind(name, null);
+   }
+   
+   /**
+    * Bind a schema
+    * 
+    * @param name the name
+    * @param resolver the resolver
+    * @return the object
+    * @throws Exception for any error
+    */
+   public SchemaBinding bind(String name, SchemaBindingResolver resolver) throws Exception
+   {
+      String url = findXML(name);
+      return getJBossXBDelegate().bind(url, resolver);
+   }
 
    /**
     * Find the xml

Added: jbossxb/trunk/src/test/java/org/jboss/test/xml/GlobalGroupUnitTestCase.java
===================================================================
--- jbossxb/trunk/src/test/java/org/jboss/test/xml/GlobalGroupUnitTestCase.java	2006-10-05 12:01:55 UTC (rev 2109)
+++ jbossxb/trunk/src/test/java/org/jboss/test/xml/GlobalGroupUnitTestCase.java	2006-10-08 12:33:09 UTC (rev 2110)
@@ -0,0 +1,154 @@
+/*
+  * JBoss, Home of Professional Open Source
+  * Copyright 2005, JBoss Inc., and individual contributors as indicated
+  * by the @authors tag. See the copyright.txt in the distribution for a
+  * full listing of individual contributors.
+  *
+  * This is free software; you can redistribute it and/or modify it
+  * under the terms of the GNU Lesser General Public License as
+  * published by the Free Software Foundation; either version 2.1 of
+  * the License, or (at your option) any later version.
+  *
+  * This software is distributed in the hope that it will be useful,
+  * but WITHOUT ANY WARRANTY; without even the implied warranty of
+  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+  * Lesser General Public License for more details.
+  *
+  * You should have received a copy of the GNU Lesser General Public
+  * License along with this software; if not, write to the Free
+  * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+  * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+  */
+package org.jboss.test.xml;
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+import javax.xml.namespace.QName;
+
+import junit.framework.TestSuite;
+
+import org.jboss.xb.binding.metadata.ClassMetaData;
+import org.jboss.xb.binding.metadata.PropertyMetaData;
+import org.jboss.xb.binding.sunday.unmarshalling.ElementBinding;
+import org.jboss.xb.binding.sunday.unmarshalling.ModelGroupBinding;
+import org.jboss.xb.binding.sunday.unmarshalling.ParticleBinding;
+import org.jboss.xb.binding.sunday.unmarshalling.SchemaBinding;
+import org.jboss.xb.binding.sunday.unmarshalling.SequenceBinding;
+import org.jboss.xb.binding.sunday.unmarshalling.TermBinding;
+import org.jboss.xb.binding.sunday.unmarshalling.TypeBinding;
+
+/**
+ * GlobalGroupUnitTestCase.
+ * 
+ * @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @version $Revision: 1.1 $
+ */
+public class GlobalGroupUnitTestCase extends AbstractJBossXBTest
+{  
+   private static final String NS = "http://www.jboss.org/test/xml/globalGroup";
+   
+   public static final TestSuite suite()
+   {
+      return new TestSuite(GlobalGroupUnitTestCase.class);
+   }
+   
+   public GlobalGroupUnitTestCase(String name)
+   {
+      super(name);
+   }
+
+   public void testGlobalGroup() throws Exception
+   {
+      SchemaBinding schema = bind("GlobalGroup.xsd");
+      ModelGroupBinding group = schema.getGroup(new QName(NS, "global1"));
+      assertNotNull(group);
+      
+      ElementBinding element = schema.getElement(new QName(NS, "parent"));
+      assertNotNull(element);
+      TypeBinding type = element.getType();
+      assertNotNull(type);
+      ParticleBinding particle = type.getParticle();
+      assertNotNull(particle);
+      TermBinding term = particle.getTerm();
+      assertNotNull(term);
+      assertTrue(term instanceof SequenceBinding);
+      SequenceBinding sequence = (SequenceBinding) term;
+      Collection particles = sequence.getParticles();
+      assertNotNull(particles);
+      assertEquals(1, particles.size());
+      particle = (ParticleBinding) particles.iterator().next();
+      term = particle.getTerm();
+      assertTrue(group == term);
+   }
+
+   public void testGlobalGroupForwardsAndBackwardsRefs() throws Exception
+   {
+      SchemaBinding schema = bind("GlobalGroup.xsd");
+      ModelGroupBinding group2 = schema.getGroup(new QName(NS, "global2"));
+      assertNotNull(group2);
+      ModelGroupBinding group3 = schema.getGroup(new QName(NS, "global3"));
+      assertNotNull(group3);
+      ModelGroupBinding group4 = schema.getGroup(new QName(NS, "global4"));
+      assertNotNull(group4);
+      
+      // Forwards
+      Collection particles = group2.getParticles();
+      assertNotNull(particles);
+      assertEquals(1, particles.size());
+      ParticleBinding particle = (ParticleBinding) particles.iterator().next();
+      TermBinding term = particle.getTerm();
+      assertTrue(term == group3);
+      
+      // Backwards
+      particles = group4.getParticles();
+      assertNotNull(particles);
+      assertEquals(1, particles.size());
+      particle = (ParticleBinding) particles.iterator().next();
+      term = particle.getTerm();
+      assertTrue(term == group3);
+   }
+
+   public void testGlobalGroupSchemaBindingModel() throws Exception
+   {
+      SchemaBinding schema = bind("GlobalGroup.xsd");
+      schema.setIgnoreUnresolvedFieldOrClass(false);
+
+      ClassMetaData classMetaData = new ClassMetaData();
+      classMetaData.setImpl(Parent.class.getName());
+      ElementBinding element = schema.getElement(new QName(NS, "parent"));
+      assertNotNull(element);
+      element.setClassMetaData(classMetaData);
+
+      classMetaData = new ClassMetaData();
+      classMetaData.setImpl(Global1.class.getName());
+      ModelGroupBinding group = schema.getGroup(new QName(NS, "global1"));
+      assertNotNull(group);
+      group.setClassMetaData(classMetaData);
+      group.setSkip(Boolean.FALSE);
+
+      // TODO should be able to determine this from the global group name!
+      PropertyMetaData prop = new PropertyMetaData();
+      prop.setName("global1");
+      group.setPropertyMetaData(prop);
+      
+      Parent parent = (Parent) unmarshal("GlobalGroup.xml", schema, Parent.class);
+      assertNotNull(parent.global1);
+      assertEquals(2, parent.global1.child.size());
+      
+      ArrayList expected = new ArrayList();
+      expected.add("Hello");
+      expected.add("Goodbye");
+      assertEquals(expected, parent.global1.child);
+   }
+
+   public static class Parent
+   {
+      public Global1 global1;
+   }
+   
+   public static class Global1
+   {
+      public Collection child = new ArrayList();
+   }
+}

Modified: jbossxb/trunk/src/test/java/org/jboss/test/xml/JBossXBTestDelegate.java
===================================================================
--- jbossxb/trunk/src/test/java/org/jboss/test/xml/JBossXBTestDelegate.java	2006-10-05 12:01:55 UTC (rev 2109)
+++ jbossxb/trunk/src/test/java/org/jboss/test/xml/JBossXBTestDelegate.java	2006-10-08 12:33:09 UTC (rev 2110)
@@ -29,7 +29,9 @@
 import org.jboss.xb.binding.Unmarshaller;
 import org.jboss.xb.binding.UnmarshallerFactory;
 import org.jboss.xb.binding.sunday.unmarshalling.DefaultSchemaResolver;
+import org.jboss.xb.binding.sunday.unmarshalling.SchemaBinding;
 import org.jboss.xb.binding.sunday.unmarshalling.SchemaBindingResolver;
+import org.jboss.xb.binding.sunday.unmarshalling.XsdBinder;
 
 /**
  * JBossXBTestDelegate.
@@ -125,4 +127,43 @@
          throw e;
       }
    }
+   
+   /**
+    * Unmarshal an object
+    * 
+    * @param url the url
+    * @param schema the schema
+    * @return the object
+    * @throws Exception for any error
+    */
+   public Object unmarshal(String url, SchemaBinding schema) throws Exception
+   {
+      long start = System.currentTimeMillis();
+      Unmarshaller unmarshaller = unmarshallerFactory.newUnmarshaller();
+      log.debug("Initialized parsing in " + (System.currentTimeMillis() - start) + "ms");
+      try
+      {
+         Object result = unmarshaller.unmarshal(url, schema);
+         log.debug("Total parse for " + url + " took " + (System.currentTimeMillis() - start) + "ms");
+         return result;
+      }
+      catch (Exception e)
+      {
+         log.debug("Error during parsing: " + url, e);
+         throw e;
+      }
+   }
+   
+   /**
+    * Bind a schema
+    * 
+    * @param url the url
+    * @param resolver the resolver
+    * @return the object
+    * @throws Exception for any error
+    */
+   public SchemaBinding bind(String url, SchemaBindingResolver resolver) throws Exception
+   {
+      return XsdBinder.bind(url, resolver);
+   }
 }

Added: jbossxb/trunk/src/test/java/org/jboss/test/xml/JBossXBTestSuite.java
===================================================================
--- jbossxb/trunk/src/test/java/org/jboss/test/xml/JBossXBTestSuite.java	2006-10-05 12:01:55 UTC (rev 2109)
+++ jbossxb/trunk/src/test/java/org/jboss/test/xml/JBossXBTestSuite.java	2006-10-08 12:33:09 UTC (rev 2110)
@@ -0,0 +1,53 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2006, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+package org.jboss.test.xml;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+import junit.textui.TestRunner;
+
+/**
+ * JBossXB TestSuite.
+ * 
+ * @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @version $Revision: 1.1 $
+ */
+public class JBossXBTestSuite extends TestSuite
+{
+   public static void main(String[] args)
+   {
+      TestRunner.run(suite());
+   }
+
+   public static Test suite()
+   {
+      TestSuite suite = new TestSuite("JBossXB Tests");
+
+      suite.addTest(GlobalGroupUnitTestCase.suite());
+      suite.addTest(RepeatableTermsUnitTestCase.suite());
+      suite.addTest(SharedElementUnitTestCase.suite());
+      suite.addTest(XIncludeUnitTestCase.suite());
+      suite.addTest(XOPUnitTestCase.suite());
+
+      return suite;
+   }
+}

Modified: jbossxb/trunk/src/test/java/org/jboss/test/xml/RepeatableTermsUnitTestCase.java
===================================================================
--- jbossxb/trunk/src/test/java/org/jboss/test/xml/RepeatableTermsUnitTestCase.java	2006-10-05 12:01:55 UTC (rev 2109)
+++ jbossxb/trunk/src/test/java/org/jboss/test/xml/RepeatableTermsUnitTestCase.java	2006-10-08 12:33:09 UTC (rev 2110)
@@ -23,6 +23,8 @@
 
 import java.util.Arrays;
 
+import junit.framework.TestSuite;
+
 /**
  * @author <a href="mailto:alex at jboss.org">Alexey Loubyansky</a>
  * @version <tt>$Revision: $</tt>
@@ -34,6 +36,11 @@
    {
       super(name);
    }
+   
+   public static final TestSuite suite()
+   {
+      return new TestSuite(RepeatableTermsUnitTestCase.class);
+   }
 
    protected void configureLogging()
    {

Added: jbossxb/trunk/src/test/java/org/jboss/test/xml/SharedElementUnitTestCase.java
===================================================================
--- jbossxb/trunk/src/test/java/org/jboss/test/xml/SharedElementUnitTestCase.java	2006-10-05 12:01:55 UTC (rev 2109)
+++ jbossxb/trunk/src/test/java/org/jboss/test/xml/SharedElementUnitTestCase.java	2006-10-08 12:33:09 UTC (rev 2110)
@@ -0,0 +1,110 @@
+/*
+  * JBoss, Home of Professional Open Source
+  * Copyright 2005, JBoss Inc., and individual contributors as indicated
+  * by the @authors tag. See the copyright.txt in the distribution for a
+  * full listing of individual contributors.
+  *
+  * This is free software; you can redistribute it and/or modify it
+  * under the terms of the GNU Lesser General Public License as
+  * published by the Free Software Foundation; either version 2.1 of
+  * the License, or (at your option) any later version.
+  *
+  * This software is distributed in the hope that it will be useful,
+  * but WITHOUT ANY WARRANTY; without even the implied warranty of
+  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+  * Lesser General Public License for more details.
+  *
+  * You should have received a copy of the GNU Lesser General Public
+  * License along with this software; if not, write to the Free
+  * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+  * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+  */
+package org.jboss.test.xml;
+
+import java.util.Collection;
+import java.util.Iterator;
+
+import javax.xml.namespace.QName;
+
+import junit.framework.TestSuite;
+
+import org.jboss.xb.binding.sunday.unmarshalling.ElementBinding;
+import org.jboss.xb.binding.sunday.unmarshalling.ModelGroupBinding;
+import org.jboss.xb.binding.sunday.unmarshalling.ParticleBinding;
+import org.jboss.xb.binding.sunday.unmarshalling.SchemaBinding;
+import org.jboss.xb.binding.sunday.unmarshalling.SequenceBinding;
+import org.jboss.xb.binding.sunday.unmarshalling.TermBinding;
+import org.jboss.xb.binding.sunday.unmarshalling.TypeBinding;
+
+/**
+ * GlobalGroupUnitTestCase.
+ * 
+ * @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @version $Revision: 1.1 $
+ */
+public class SharedElementUnitTestCase extends AbstractJBossXBTest
+{  
+   private static final String NS = "http://www.jboss.org/test/xml/sharedElement";
+   
+   public static final TestSuite suite()
+   {
+      return new TestSuite(SharedElementUnitTestCase.class);
+   }
+
+   public SharedElementUnitTestCase(String name)
+   {
+      super(name);
+   }
+
+   public void testSharedElementForwardsAndBackwards() throws Exception
+   {
+      SchemaBinding schema = bind("SharedElement.xsd");
+      ElementBinding element1 = schema.getElement(new QName(NS, "element1"));
+      assertNotNull(element1);
+      ElementBinding element2 = schema.getElement(new QName(NS, "element2"));
+      assertNotNull(element2);
+      ElementBinding element3 = schema.getElement(new QName(NS, "element3"));
+      assertNotNull(element3);
+      
+      TypeBinding type = element2.getType();
+      assertNotNull(type);
+      ParticleBinding particle = type.getParticle();
+      assertNotNull(particle);
+      TermBinding term = particle.getTerm();
+      assertNotNull(term);
+      assertTrue(term instanceof SequenceBinding);
+      SequenceBinding sequence = (SequenceBinding) term;
+      Collection particles = sequence.getParticles();
+      assertNotNull(particles);
+      assertEquals(2, particles.size());
+      Iterator iterator = particles.iterator();
+      particle = (ParticleBinding) iterator.next();
+      term = particle.getTerm();
+      assertTrue(element1 == term);
+      particle = (ParticleBinding) iterator.next();
+      term = particle.getTerm();
+      assertTrue(element3 == term);
+   }
+
+   public void testSharedElementGroupForwardsAndBackwards() throws Exception
+   {
+      SchemaBinding schema = bind("SharedElement.xsd");
+      ElementBinding element1 = schema.getElement(new QName(NS, "element1"));
+      assertNotNull(element1);
+      ModelGroupBinding group = schema.getGroup(new QName(NS, "globalGroup"));
+      assertNotNull(group);
+      ElementBinding element3 = schema.getElement(new QName(NS, "element3"));
+      assertNotNull(element3);
+      
+      Collection particles = group.getParticles();
+      assertNotNull(particles);
+      assertEquals(2, particles.size());
+      Iterator iterator = particles.iterator();
+      ParticleBinding particle = (ParticleBinding) iterator.next();
+      TermBinding term = particle.getTerm();
+      assertTrue(element1 == term);
+      particle = (ParticleBinding) iterator.next();
+      term = particle.getTerm();
+      assertTrue(element3 == term);
+   }
+}

Modified: jbossxb/trunk/src/test/java/org/jboss/test/xml/XIncludeUnitTestCase.java
===================================================================
--- jbossxb/trunk/src/test/java/org/jboss/test/xml/XIncludeUnitTestCase.java	2006-10-05 12:01:55 UTC (rev 2109)
+++ jbossxb/trunk/src/test/java/org/jboss/test/xml/XIncludeUnitTestCase.java	2006-10-08 12:33:09 UTC (rev 2110)
@@ -21,6 +21,8 @@
   */
 package org.jboss.test.xml;
 
+import junit.framework.TestSuite;
+
 /***
  * XIncludeUnitTestCase.
  * 
@@ -29,6 +31,11 @@
  */
 public class XIncludeUnitTestCase extends AbstractJBossXBTest
 {  
+   public static final TestSuite suite()
+   {
+      return new TestSuite(XIncludeUnitTestCase.class);
+   }
+
    public XIncludeUnitTestCase(String name)
    {
       super(name);

Modified: jbossxb/trunk/src/test/java/org/jboss/test/xml/XOPUnitTestCase.java
===================================================================
--- jbossxb/trunk/src/test/java/org/jboss/test/xml/XOPUnitTestCase.java	2006-10-05 12:01:55 UTC (rev 2109)
+++ jbossxb/trunk/src/test/java/org/jboss/test/xml/XOPUnitTestCase.java	2006-10-08 12:33:09 UTC (rev 2110)
@@ -44,14 +44,21 @@
 import java.io.StringWriter;
 import java.util.Arrays;
 
+import junit.framework.TestSuite;
 
+
 /**
  * @author <a href="mailto:alex at jboss.org">Alexey Loubyansky</a>
  * @version <tt>$Revision$</tt>
  */
 public class XOPUnitTestCase
     extends AbstractJBossXBTest
-{
+{   
+   public static final TestSuite suite()
+   {
+      return new TestSuite(XOPUnitTestCase.class);
+   }
+
    public XOPUnitTestCase(String name)
    {
       super(name);

Added: jbossxb/trunk/src/test/resources/org/jboss/test/xml/GlobalGroup.xml
===================================================================
--- jbossxb/trunk/src/test/resources/org/jboss/test/xml/GlobalGroup.xml	2006-10-05 12:01:55 UTC (rev 2109)
+++ jbossxb/trunk/src/test/resources/org/jboss/test/xml/GlobalGroup.xml	2006-10-08 12:33:09 UTC (rev 2110)
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<parent xmlns='http://www.jboss.org/test/xml/globalGroup'>
+   <child>Hello</child>
+   <child>Goodbye</child>
+</parent>

Added: jbossxb/trunk/src/test/resources/org/jboss/test/xml/GlobalGroup.xsd
===================================================================
--- jbossxb/trunk/src/test/resources/org/jboss/test/xml/GlobalGroup.xsd	2006-10-05 12:01:55 UTC (rev 2109)
+++ jbossxb/trunk/src/test/resources/org/jboss/test/xml/GlobalGroup.xsd	2006-10-08 12:33:09 UTC (rev 2110)
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+            targetNamespace="http://www.jboss.org/test/xml/globalGroup"
+            xmlns="http://www.jboss.org/test/xml/globalGroup"
+            elementFormDefault="qualified"
+            attributeFormDefault="unqualified"
+            version="1.0">
+
+   <xsd:group name="global1">
+      <xsd:sequence>
+         <xsd:element ref="child" maxOccurs="unbounded"/>
+      </xsd:sequence>
+   </xsd:group>
+
+   <xsd:group name="global2">
+      <xsd:sequence>
+         <xsd:group ref="global3"/>
+      </xsd:sequence>
+   </xsd:group>
+
+   <xsd:group name="global3">
+      <xsd:sequence>
+         <xsd:element ref="child"/>
+      </xsd:sequence>
+   </xsd:group>
+
+   <xsd:group name="global4">
+      <xsd:sequence>
+         <xsd:group ref="global3"/>
+      </xsd:sequence>
+   </xsd:group>
+
+   <xsd:element name="parent">
+      <xsd:complexType>
+         <xsd:sequence>
+            <xsd:group ref="global1"/>
+         </xsd:sequence>
+      </xsd:complexType>
+   </xsd:element>
+   
+   <xsd:element name="child" type="xsd:string"/>
+   
+</xsd:schema>

Added: jbossxb/trunk/src/test/resources/org/jboss/test/xml/SharedElement.xsd
===================================================================
--- jbossxb/trunk/src/test/resources/org/jboss/test/xml/SharedElement.xsd	2006-10-05 12:01:55 UTC (rev 2109)
+++ jbossxb/trunk/src/test/resources/org/jboss/test/xml/SharedElement.xsd	2006-10-08 12:33:09 UTC (rev 2110)
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+            targetNamespace="http://www.jboss.org/test/xml/sharedElement"
+            xmlns="http://www.jboss.org/test/xml/sharedElement"
+            elementFormDefault="qualified"
+            attributeFormDefault="unqualified"
+            version="1.0">
+   
+   <xsd:element name="element1" type="xsd:string"/>
+   
+   <xsd:element name="element2">
+      <xsd:complexType>
+         <xsd:sequence>
+            <xsd:element ref="element1"/>
+            <xsd:element ref="element3"/>
+         </xsd:sequence>
+      </xsd:complexType>
+   </xsd:element>
+   
+   <xsd:group name="globalGroup">
+      <xsd:sequence>
+         <xsd:element ref="element1"/>
+         <xsd:element ref="element3"/>
+      </xsd:sequence>
+   </xsd:group>
+   
+   <xsd:element name="element3" type="xsd:string"/>
+   
+</xsd:schema>




More information about the jboss-svn-commits mailing list