[jboss-svn-commits] JBoss Common SVN: r3954 - in jbossxb/trunk/src: main/java/org/jboss/xb/binding/sunday/unmarshalling and 3 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Fri Jan 22 12:02:20 EST 2010


Author: alex.loubyansky at jboss.com
Date: 2010-01-22 12:02:19 -0500 (Fri, 22 Jan 2010)
New Revision: 3954

Removed:
   jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/NoopParticleHandler.java
   jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/NoopRepeatableParticleHandler.java
Modified:
   jbossxb/trunk/src/main/java/org/jboss/xb/binding/Constants.java
   jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/DefaultHandlers.java
   jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/ElementBinding.java
   jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/ModelGroupBinding.java
   jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/TermBinding.java
   jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/TypeBinding.java
   jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/WildcardBinding.java
   jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/XsdBinder.java
   jbossxb/trunk/src/main/java/org/jboss/xb/builder/JBossXBNoSchemaBuilder.java
   jbossxb/trunk/src/main/java/org/jboss/xb/builder/runtime/BuilderParticleHandler.java
   jbossxb/trunk/src/test/java/org/jboss/test/xml/GlobalGroupUnitTestCase.java
Log:
switched from not_set/true/false Boolean-based impl to int-based impl, from separate singleton (noop) handler classes to constants initialized to anonymous inner implementations of handlers

Modified: jbossxb/trunk/src/main/java/org/jboss/xb/binding/Constants.java
===================================================================
--- jbossxb/trunk/src/main/java/org/jboss/xb/binding/Constants.java	2010-01-22 16:12:09 UTC (rev 3953)
+++ jbossxb/trunk/src/main/java/org/jboss/xb/binding/Constants.java	2010-01-22 17:02:19 UTC (rev 3954)
@@ -97,4 +97,8 @@
    QName QNAME_XMIME_BASE64BINARY = new QName(NS_XML_MIME, "base64Binary");
    QName QNAME_XMIME_CONTENTTYPE = new QName(NS_XML_MIME, "contentType");
    QName QNAME_XOP_INCLUDE = new QName(Constants.NS_XOP_INCLUDE, "Include");
+   
+   int NOT_SET = 0;
+   int FALSE = 1;
+   int TRUE = 2;
 }

Modified: jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/DefaultHandlers.java
===================================================================
--- jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/DefaultHandlers.java	2010-01-22 16:12:09 UTC (rev 3953)
+++ jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/DefaultHandlers.java	2010-01-22 17:02:19 UTC (rev 3954)
@@ -21,6 +21,7 @@
 */
 package org.jboss.xb.binding.sunday.unmarshalling;
 
+import javax.xml.namespace.NamespaceContext;
 import javax.xml.namespace.QName;
 
 import org.jboss.xb.binding.sunday.unmarshalling.CharactersHandler.UnmarshalCharactersHandler;
@@ -28,6 +29,7 @@
 import org.jboss.xb.binding.sunday.unmarshalling.impl.runtime.RtCharactersHandler;
 import org.jboss.xb.binding.sunday.unmarshalling.impl.runtime.RtElementHandler;
 import org.jboss.xb.binding.sunday.xop.XOPElementHandler;
+import org.xml.sax.Attributes;
 
 /**
  * The DefaultHandlers.
@@ -46,7 +48,8 @@
 
    public static ParticleHandler SIMPLE_HANDLER = new RtElementHandler()
    {
-      public Object startParticle(Object parent, QName qName, ParticleBinding particle)
+      @Override
+      public Object startParticle(Object parent, QName elementName, ParticleBinding particle, Attributes attrs, NamespaceContext nsCtx)
       {
          return null;
       }
@@ -67,9 +70,41 @@
       }
    };
    
-   //public static CharactersHandler CHARACTERS_HANDLER = RtCharactersHandler.INSTANCE;
-
    public static ParticleHandler XOP_HANDLER = new XOPElementHandler();
    
-   public static RepeatableParticleHandler REPEATABLE_HANDLER = NoopRepeatableParticleHandler.INSTANCE;
+   public static ParticleHandler NOOP_PARTICLE_HANDLER = new ParticleHandler()
+   {
+      public Object endParticle(Object o, QName elementName, ParticleBinding particle)
+      {
+         return o;
+      }
+
+      public void setParent(Object parent, Object o, QName elementName, ParticleBinding particle,
+            ParticleBinding parentParticle)
+      {
+      }
+
+      public Object startParticle(Object parent, QName elementName, ParticleBinding particle, Attributes attrs,
+            NamespaceContext nsCtx)
+      {
+         return parent;
+      }
+   };
+   
+   public static RepeatableParticleHandler REPEATABLE_HANDLER = new RepeatableParticleHandler()
+   {
+      public Object startRepeatableParticle(Object parent, QName startName, ParticleBinding particle)
+      {
+         return null;
+      }
+
+      public void endRepeatableParticle(Object parent, Object o, QName elementName, ParticleBinding particle, ParticleBinding parentParticle)
+      {
+      }
+
+      public void addTermValue(Object particleValue, Object termValue, QName elementName,
+            ParticleBinding particle, ParticleBinding parentParticle, ParticleHandler handler)
+      {
+      }
+   };
 }

Modified: jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/ElementBinding.java
===================================================================
--- jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/ElementBinding.java	2010-01-22 16:12:09 UTC (rev 3953)
+++ jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/ElementBinding.java	2010-01-22 17:02:19 UTC (rev 3954)
@@ -31,6 +31,7 @@
 import org.jboss.xb.binding.metadata.MapEntryMetaData;
 import org.jboss.xb.binding.metadata.PutMethodMetaData;
 import org.jboss.xb.binding.metadata.ValueMetaData;
+import org.jboss.xb.binding.Constants;
 import org.jboss.xb.binding.JBossXBRuntimeException;
 import org.jboss.xb.binding.sunday.marshalling.TermBeforeMarshallingCallback;
 import org.jboss.xb.binding.sunday.xop.XOPUnmarshaller;
@@ -47,7 +48,7 @@
 
    protected TypeBinding typeBinding;
    protected boolean nillable;
-   protected Boolean normalizeSpace;
+   protected int normalizeSpace;
 
    protected XOPUnmarshaller xopUnmarshaller;
 
@@ -68,6 +69,7 @@
          throw new JBossXBRuntimeException("Each element must have a non-null QName!");
       this.qName = qName;
    }
+   
    public List<ElementInterceptor> getInterceptors()
    {
       return interceptors;
@@ -99,7 +101,6 @@
             if( interceptors.contains(interceptor) == false )
                interceptors.add(interceptor);
          }
-
       }
    }
 
@@ -146,7 +147,7 @@
 
    public boolean isSkip()
    {
-      return skip == null ? typeBinding.isSkip() : skip.booleanValue();
+      return skip == Constants.NOT_SET ? typeBinding.isSkip() : skip == Constants.TRUE;
    }
 
    public ValueAdapter getValueAdapter()
@@ -199,16 +200,16 @@
       this.xopUnmarshaller = xopUnmarshaller;
    }
 
-   public void setNormalizeSpace(Boolean value)
+   public void setNormalizeSpace(boolean value)
    {
-      this.normalizeSpace = value;
+      this.normalizeSpace = value ? Constants.TRUE : Constants.FALSE;
    }
    
    public boolean isNormalizeSpace()
    {
-      if(normalizeSpace != null)
-         return normalizeSpace.booleanValue();      
-      return schema == null ? true : schema.isNormalizeSpace();
+      if(normalizeSpace == Constants.NOT_SET)
+         return schema == null ? true : schema.isNormalizeSpace();
+      return normalizeSpace == Constants.TRUE;
    }
    
    public String toString()

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	2010-01-22 16:12:09 UTC (rev 3953)
+++ jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/ModelGroupBinding.java	2010-01-22 17:02:19 UTC (rev 3954)
@@ -25,6 +25,7 @@
 
 import javax.xml.namespace.QName;
 
+import org.jboss.xb.binding.Constants;
 import org.xml.sax.Attributes;
 
 /**
@@ -104,7 +105,7 @@
 
    public boolean isSkip()
    {
-      return skip == null || skip;
+      return skip != Constants.FALSE;
    }
 
    public boolean isModelGroup()

Deleted: jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/NoopParticleHandler.java
===================================================================
--- jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/NoopParticleHandler.java	2010-01-22 16:12:09 UTC (rev 3953)
+++ jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/NoopParticleHandler.java	2010-01-22 17:02:19 UTC (rev 3954)
@@ -1,54 +0,0 @@
-/*
-* JBoss, Home of Professional Open Source
-* Copyright 2009, 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.xb.binding.sunday.unmarshalling;
-
-import javax.xml.namespace.NamespaceContext;
-import javax.xml.namespace.QName;
-
-import org.xml.sax.Attributes;
-
-/**
- * A NoopParticleHandler.
- * 
- * @author <a href="alex at jboss.com">Alexey Loubyansky</a>
- * @version $Revision: 1.1 $
- */
-public class NoopParticleHandler implements ParticleHandler
-{
-   public static final NoopParticleHandler INSTANCE = new NoopParticleHandler();
-   
-   public Object endParticle(Object o, QName elementName, ParticleBinding particle)
-   {
-      return o;
-   }
-
-   public void setParent(Object parent, Object o, QName elementName, ParticleBinding particle,
-         ParticleBinding parentParticle)
-   {
-   }
-
-   public Object startParticle(Object parent, QName elementName, ParticleBinding particle, Attributes attrs,
-         NamespaceContext nsCtx)
-   {
-      return parent;
-   }
-}

Deleted: jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/NoopRepeatableParticleHandler.java
===================================================================
--- jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/NoopRepeatableParticleHandler.java	2010-01-22 16:12:09 UTC (rev 3953)
+++ jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/NoopRepeatableParticleHandler.java	2010-01-22 17:02:19 UTC (rev 3954)
@@ -1,48 +0,0 @@
-/*
-* JBoss, Home of Professional Open Source
-* Copyright 2009, 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.xb.binding.sunday.unmarshalling;
-
-import javax.xml.namespace.QName;
-
-/**
- * 
- * @author <a href="alex at jboss.com">Alexey Loubyansky</a>
- * @version $Revision: 1.1 $
- */
-public class NoopRepeatableParticleHandler implements RepeatableParticleHandler
-{
-   public static final NoopRepeatableParticleHandler INSTANCE = new NoopRepeatableParticleHandler();
-   
-   public Object startRepeatableParticle(Object parent, QName startName, ParticleBinding particle)
-   {
-      return null;
-   }
-
-   public void endRepeatableParticle(Object parent, Object o, QName elementName, ParticleBinding particle, ParticleBinding parentParticle)
-   {
-   }
-
-   public void addTermValue(Object particleValue, Object termValue, QName elementName,
-         ParticleBinding particle, ParticleBinding parentParticle, ParticleHandler handler)
-   {
-   }
-}
\ No newline at end of file

Modified: jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/TermBinding.java
===================================================================
--- jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/TermBinding.java	2010-01-22 16:12:09 UTC (rev 3953)
+++ jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/TermBinding.java	2010-01-22 17:02:19 UTC (rev 3954)
@@ -23,6 +23,7 @@
 
 import javax.xml.namespace.QName;
 
+import org.jboss.xb.binding.Constants;
 import org.jboss.xb.binding.metadata.ClassMetaData;
 import org.jboss.xb.binding.metadata.PropertyMetaData;
 import org.jboss.xb.binding.metadata.MapEntryMetaData;
@@ -49,7 +50,7 @@
    protected ValueMetaData valueMetaData;
    protected boolean mapEntryKey;
    protected boolean mapEntryValue;
-   protected Boolean skip;
+   protected int skip;
    protected ValueAdapter valueAdapter;
    protected TermBeforeMarshallingCallback beforeMarshallingCallback;
    protected TermBeforeSetParentCallback beforeSetParentCallback;
@@ -156,9 +157,9 @@
 
    public abstract boolean isSkip();
 
-   public void setSkip(Boolean skip)
+   public void setSkip(boolean skip)
    {
-      this.skip = skip;
+      this.skip = skip ? Constants.TRUE : Constants.FALSE;
    }
 
    public ValueAdapter getValueAdapter()

Modified: jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/TypeBinding.java
===================================================================
--- jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/TypeBinding.java	2010-01-22 16:12:09 UTC (rev 3953)
+++ jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/TypeBinding.java	2010-01-22 17:02:19 UTC (rev 3954)
@@ -49,7 +49,7 @@
  * @version <tt>$Revision$</tt>
  */
 public class TypeBinding
-{
+{   
    protected QName qName;
    /** Map<QName, AttributeBinding>  */
    private Map<QName, AttributeBinding> attrs;
@@ -69,9 +69,9 @@
    private TermBeforeMarshallingCallback beforeMarshallingCallback;
    private TermBeforeSetParentCallback beforeSetParentCallback;
    
-   private Boolean startElementCreatesObject;
-   private int simple; // 0 - not set, 1 - false, 2 - true
-   private Boolean ignoreEmptyString;
+   private int startElementCreatesObject;
+   private int simple;
+   private int ignoreEmptyString;
 
    private WildcardBinding wildcard;
    private ParticleBinding particle;
@@ -87,7 +87,7 @@
    /** Map<QName, List<ElementInterceptor>>
     * these are local element interceptors that are "added" to the interceptor stack
     * defined in the element binding */
-   private Map<QName, List<ElementInterceptor>> interceptors = Collections.emptyMap();
+   private Map<QName, List<ElementInterceptor>> interceptors;
    
    public TypeBinding()
    {
@@ -346,25 +346,21 @@
    {
       ElementBinding el = getElement(qName);
       if(el == null)
-      {
          el = addElement(qName, new TypeBinding());
+      
+      if(interceptors == null)
+      {
+         interceptors = Collections.singletonMap(qName, Collections.singletonList(interceptor));
+         return;
       }
-      //el.pushInterceptor(interceptor);
       
       List<ElementInterceptor> intList = (List<ElementInterceptor>) interceptors.get(qName);
       if(intList == null)
       {
          intList = Collections.singletonList(interceptor);
-         switch(interceptors.size())
-         {
-            case 0:
-               interceptors = Collections.singletonMap(qName, intList);
-               break;
-            case 1:
-               interceptors = new HashMap<QName, List<ElementInterceptor>>(interceptors);
-            default:
-               interceptors.put(qName, intList);
-         }
+         if(interceptors.size() == 1)
+            interceptors = new HashMap<QName, List<ElementInterceptor>>(interceptors);            
+         interceptors.put(qName, intList);
       }
       else
       {
@@ -387,6 +383,8 @@
     */
    public List<ElementInterceptor> getInterceptors(QName qName)
    {
+      if(interceptors == null)
+         return Collections.<ElementInterceptor>emptyList();
       List<ElementInterceptor> list = interceptors.get(qName);
       return list == null ? Collections.<ElementInterceptor>emptyList() : list;
    }
@@ -406,12 +404,12 @@
       // actually, a type can be complex when the particle is null and
       // there are no attributes. But the XsdBinder will set the value of simple
       // to false. This check is for schema bindings created programmatically
-      return simple == 0 ? particle == null && attrs == null : simple == 2;
+      return simple == Constants.NOT_SET ? particle == null && attrs == null : simple == Constants.TRUE;
    }
 
    public void setSimple(boolean simple)
    {
-      this.simple = simple ? 2 : 1;
+      this.simple = simple ? Constants.TRUE : Constants.FALSE;
    }
 
    public boolean isTextContentAllowed()
@@ -520,8 +518,8 @@
     */
    public boolean isStartElementCreatesObject()
    {
-      return startElementCreatesObject == null ?
-         particle != null || attrs != null : startElementCreatesObject;
+      return startElementCreatesObject == Constants.NOT_SET ?
+         particle != null || attrs != null : startElementCreatesObject == Constants.TRUE;
    }
 
    /**
@@ -535,7 +533,7 @@
     */
    public void setStartElementCreatesObject(boolean startElementCreatesObject)
    {
-      this.startElementCreatesObject = startElementCreatesObject;
+      this.startElementCreatesObject = startElementCreatesObject ? Constants.TRUE : Constants.FALSE;
    }
 
    private boolean initializedWildcard;
@@ -676,12 +674,12 @@
 
    public boolean isIgnoreEmptyString()
    {
-      return ignoreEmptyString == null ? !isSimple() : ignoreEmptyString;
+      return ignoreEmptyString == Constants.NOT_SET ? !isSimple() : ignoreEmptyString == Constants.TRUE;
    }
    
    public void setIgnoreEmptyString(boolean value)
    {
-      this.ignoreEmptyString = value;
+      this.ignoreEmptyString = value ? Constants.TRUE : Constants.FALSE;
    }
    
    public AnyAttributeBinding getAnyAttribute()

Modified: jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/WildcardBinding.java
===================================================================
--- jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/WildcardBinding.java	2010-01-22 16:12:09 UTC (rev 3953)
+++ jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/WildcardBinding.java	2010-01-22 17:02:19 UTC (rev 3954)
@@ -22,6 +22,8 @@
 package org.jboss.xb.binding.sunday.unmarshalling;
 
 import javax.xml.namespace.QName;
+
+import org.jboss.xb.binding.Constants;
 import org.jboss.xb.binding.JBossXBRuntimeException;
 import org.jboss.xb.binding.ObjectLocalMarshaller;
 import org.jboss.xb.binding.Util;
@@ -213,7 +215,7 @@
 
             ElementBinding element = new ElementBinding(schema, qName, type);
             // this is unresolved element we don't care about
-            element.setSkip(Boolean.TRUE);
+            element.setSkip(true);
             return element;
          }
       }
@@ -256,7 +258,7 @@
    
    public boolean isSkip()
    {
-      return skip == null ? true : skip.booleanValue();
+      return skip != Constants.FALSE;
    }
 
    public boolean isModelGroup()
@@ -329,7 +331,7 @@
       @Override
       protected ParticleHandler getHandler()
       {
-         return NoopParticleHandler.INSTANCE;
+         return DefaultHandlers.NOOP_PARTICLE_HANDLER;
       }
    }
 }

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	2010-01-22 16:12:09 UTC (rev 3953)
+++ jbossxb/trunk/src/main/java/org/jboss/xb/binding/sunday/unmarshalling/XsdBinder.java	2010-01-22 17:02:19 UTC (rev 3954)
@@ -1448,7 +1448,7 @@
                msg += ": will be skipped, it's attributes, character content and children will be set on the parent";
                log.trace(msg);
             }
-            term.setSkip(skipAnnotation ? Boolean.TRUE : Boolean.FALSE);
+            term.setSkip(skipAnnotation);
          }
       }
    }

Modified: jbossxb/trunk/src/main/java/org/jboss/xb/builder/JBossXBNoSchemaBuilder.java
===================================================================
--- jbossxb/trunk/src/main/java/org/jboss/xb/builder/JBossXBNoSchemaBuilder.java	2010-01-22 16:12:09 UTC (rev 3953)
+++ jbossxb/trunk/src/main/java/org/jboss/xb/builder/JBossXBNoSchemaBuilder.java	2010-01-22 17:02:19 UTC (rev 3954)
@@ -103,9 +103,9 @@
 import org.jboss.xb.binding.sunday.unmarshalling.CharactersHandler;
 import org.jboss.xb.binding.sunday.unmarshalling.ChoiceBinding;
 import org.jboss.xb.binding.sunday.unmarshalling.DefaultElementInterceptor;
+import org.jboss.xb.binding.sunday.unmarshalling.DefaultHandlers;
 import org.jboss.xb.binding.sunday.unmarshalling.ElementBinding;
 import org.jboss.xb.binding.sunday.unmarshalling.ModelGroupBinding;
-import org.jboss.xb.binding.sunday.unmarshalling.NoopParticleHandler;
 import org.jboss.xb.binding.sunday.unmarshalling.ParticleBinding;
 import org.jboss.xb.binding.sunday.unmarshalling.ParticleHandler;
 import org.jboss.xb.binding.sunday.unmarshalling.RepeatableParticleHandler;
@@ -1140,7 +1140,7 @@
       if (trace)
          log.trace(model.getGroupType() + " model group for type=" + beanInfo.getName());
 
-      model.setHandler(BuilderParticleHandler.INSTANCE);
+      model.setHandler(BuilderParticleHandler.PARENT_ELEMENT);
       ParticleBinding typeParticle = new ParticleBinding(model);
       typeParticle.setMinOccurs(1);
       typeParticle.setMaxOccurs(1);
@@ -1447,7 +1447,7 @@
       if (elements.length > 1)
       {
          ChoiceBinding choice = new ChoiceBinding(schemaBinding);
-         choice.setHandler(BuilderParticleHandler.INSTANCE);
+         choice.setHandler(BuilderParticleHandler.PARENT_GROUP);
          ParticleBinding particleBinding = new ParticleBinding(choice);
          particleBinding.setMinOccurs(0);
          // WARN normally maxOccursUnbounded should be set to true in this case
@@ -1558,7 +1558,7 @@
                }
                else
                {
-                  elementTypeBinding.setHandler(BuilderParticleHandler.INSTANCE);
+                  elementTypeBinding.setHandler(BuilderParticleHandler.PARENT_GROUP);
                }
                elementTypeBinding.setSchemaBinding(schemaBinding);
                ElementBinding elementBinding = createElementBinding(localPropertyType, elementTypeBinding, propertyQName, false);
@@ -1571,7 +1571,7 @@
 
                // Setup the child model
                ChoiceBinding childModel = new ChoiceBinding(schemaBinding);
-               childModel.setHandler(BuilderParticleHandler.INSTANCE);
+               childModel.setHandler(BuilderParticleHandler.PARENT_ELEMENT);
                ParticleBinding particleBinding = new ParticleBinding(childModel);
                particleBinding.setMinOccurs(0);
                particleBinding.setMaxOccurs(1);
@@ -1874,7 +1874,7 @@
                log.trace("Property order for " + annotation.kind() + " property " + property.getName() + ": " + Arrays.asList(memberOrder));
 
             group = createModelGroup(annotation.kind(), groupType, memberOrder.length > 1 && propOrderMissing, annotation.propOrder());
-            group.setSkip(Boolean.FALSE);
+            group.setSkip(false);
             group.setHandler(propHandler);
 
             // bind model group members
@@ -1966,14 +1966,14 @@
    {
       TypeBinding wrapperType = new TypeBinding();
       SequenceBinding seq = new SequenceBinding(schemaBinding);
-      seq.setHandler(BuilderParticleHandler.INSTANCE);
+      seq.setHandler(BuilderParticleHandler.PARENT_ELEMENT);
       ParticleBinding particle = new ParticleBinding(seq);
       wrapperType.setParticle(particle);
-      wrapperType.setHandler(NoopParticleHandler.INSTANCE);
+      wrapperType.setHandler(DefaultHandlers.NOOP_PARTICLE_HANDLER);
 
       ElementBinding wrapperElement = createElementBinding(propertyType, wrapperType, wrapperQName, false);
       wrapperElement.setNillable(annotation.nillable());
-      wrapperElement.setSkip(Boolean.TRUE);
+      wrapperElement.setSkip(true);
       particle = new ParticleBinding(wrapperElement, annotation.required() ? 1 : 0, 1, propertyType.isCollection() || propertyType.isArray());
       parentModel.addParticle(particle);
 
@@ -2252,7 +2252,7 @@
             keyValueSequence = new SequenceBinding(schemaBinding);                     
             if(entryType == null)
             {
-               keyValueSequence.setSkip(Boolean.FALSE);
+               keyValueSequence.setSkip(false);
                keyValueSequence.setQName(propertyQName);
                schemaBinding.addGroup(keyValueSequence.getQName(), keyValueSequence);
                ParticleBinding keyValueParticle = new ParticleBinding(keyValueSequence, 0, -1, true);

Modified: jbossxb/trunk/src/main/java/org/jboss/xb/builder/runtime/BuilderParticleHandler.java
===================================================================
--- jbossxb/trunk/src/main/java/org/jboss/xb/builder/runtime/BuilderParticleHandler.java	2010-01-22 16:12:09 UTC (rev 3953)
+++ jbossxb/trunk/src/main/java/org/jboss/xb/builder/runtime/BuilderParticleHandler.java	2010-01-22 17:02:19 UTC (rev 3954)
@@ -42,6 +42,58 @@
    /** The singleton instance */
    public static final BuilderParticleHandler INSTANCE = new BuilderParticleHandler();
    
+   public static final ParticleHandler PARENT_ELEMENT = new ParticleHandler()
+   {
+      public Object endParticle(Object o, QName elementName, ParticleBinding particle)
+      {
+         return o;
+      }
+
+      public void setParent(Object parent, Object o, QName elementName, ParticleBinding particle, ParticleBinding parentParticle)
+      {
+         if (particle.getTerm().isElement())
+         {
+            ParticleHandler particleHandler = ((ElementBinding)parentParticle.getTerm()).getType().getHandler();
+            if(particleHandler != null)
+               particleHandler.setParent(parent, o, elementName, particle, parentParticle);
+         }
+      }
+
+      public Object startParticle(Object parent, QName elementName, ParticleBinding particle, Attributes attrs,
+            NamespaceContext nsCtx)
+      {
+         return parent;
+      }
+   };
+
+   public static final ParticleHandler PARENT_GROUP = new ParticleHandler()
+   {
+      public Object endParticle(Object o, QName elementName, ParticleBinding particle)
+      {
+         return o;
+      }
+
+      public void setParent(Object parent, Object o, QName elementName, ParticleBinding particle, ParticleBinding parentParticle)
+      {
+         if (particle.getTerm().isElement())
+         {
+            TermBinding parentTerm = parentParticle.getTerm();
+            if (!parentTerm.isSkip())
+            {
+               ParticleHandler particleHandler = ((ModelGroupBinding)parentTerm).getHandler();
+               if(particleHandler != null)
+                  particleHandler.setParent(parent, o, elementName, particle, parentParticle);
+            }
+         }
+      }
+
+      public Object startParticle(Object parent, QName elementName, ParticleBinding particle, Attributes attrs,
+            NamespaceContext nsCtx)
+      {
+         return parent;
+      }
+   };
+
    public Object startParticle(Object parent, QName elementName, ParticleBinding particle, Attributes attrs, NamespaceContext nsCtx)
    {
       return parent;
@@ -49,11 +101,10 @@
 
    public void setParent(Object parent, Object o, QName elementName, ParticleBinding particle, ParticleBinding parentParticle)
    {
-      TermBinding term = particle.getTerm();
-      TermBinding parentTerm = parentParticle.getTerm();
-      if (term.isModelGroup() == false)
+      if (particle.getTerm().isModelGroup() == false)
       {
          ParticleHandler particleHandler = null;
+         TermBinding parentTerm = parentParticle.getTerm();
          if(parentTerm.isElement())
          {
             particleHandler = ((ElementBinding)parentTerm).getType().getHandler();            

Modified: jbossxb/trunk/src/test/java/org/jboss/test/xml/GlobalGroupUnitTestCase.java
===================================================================
--- jbossxb/trunk/src/test/java/org/jboss/test/xml/GlobalGroupUnitTestCase.java	2010-01-22 16:12:09 UTC (rev 3953)
+++ jbossxb/trunk/src/test/java/org/jboss/test/xml/GlobalGroupUnitTestCase.java	2010-01-22 17:02:19 UTC (rev 3954)
@@ -125,7 +125,7 @@
       ModelGroupBinding group = schema.getGroup(new QName(NS, "global1"));
       assertNotNull(group);
       group.setClassMetaData(classMetaData);
-      group.setSkip(Boolean.FALSE);
+      group.setSkip(false);
 
       // TODO should be able to determine this from the global group name!
       PropertyMetaData prop = new PropertyMetaData();



More information about the jboss-svn-commits mailing list