Hi Wesley,

Yes, before we can call this done-done, we need a unit test also; again see 
test/src/xmlobject/extensions for how the extension interfaces are tested and 
go from there.

To aswer your other question, all I am suggesting is that the code that you 
added to StscJavaizer.assignGlobalJavaNames() be moved to its own method (which 
would then be called from assignGlobalJavaNames()) - really simple.

By the way, do you have a newer version of the patch? The one I have is from 
3/23.

Thanks,
Radu

> -----Original Message-----
> From: Wesley Leggette [mailto:wlegge...@cleversafe.com] 
> Sent: Sunday, March 29, 2009 2:46 AM
> To: Radu Preotiuc
> Subject: Re: [PATCH] User static types try #2
> 
> 
> Radu,
> 
> Submitted #4. Should I be including any unit testing here?
> 
> Wesley
> 
> 
> On 3/25/09 18:59, "Radu Preotiuc" 
> <radu.preotiuc-pie...@oracle.com> wrote:
> 
> >
> > StscJavaizer:
> > - one of my original comments, the new code in 
> assignGlobalJavaNames() 
> > needs to be refactored in its own method.
> 
> Still haven't done this. I'm not sure exactly what you're 
> suggesting here.
> 
> 
> 
> > - Simpl.setUserType(true) needs to be deleted
> >
> > SchemaTypeCodePrinter:
> > - in printJGetArrayValue() ".decode" + stype.getShortJavaName() I 
> > think it's incorrect. What you need is a "short" Java name derived 
> > from
> > stype.getUserTypeName() (not from stype.getFullJavaName())
> > - same comment for printJGetValue(), printJSetValue(),
> > printSetterImpls()
> 
> It was actually supposed to be the unqualified (local part 
> of) Qname. Fixed.
> 
> 
> > - also in printSetterImpls() else if (prop.getJavaTypeCode() ==
> > SchemaProperty.JAVA_USER) - not necessary anymore
> 
> Not sure which block you mean specifically here. Some of them 
> are necessary, but I think I got rid of the ones you pointed 
> out below.
> 
> 
> > - in printSetterImpls(), there are two 'else if 
> > (prop.getJavaTypeCode() == SchemaProperty.JAVA_USER)' 
> blocks of code; 
> > the first one is inside an 'if ( xmltype )', so it will 
> never get executed, it can be deleted.
> > - in printSetterImpls() one more time, the second of the blocks of 
> > code mentioned above. The branches of 'if (!isSubstGroup)' 
> and 'else' 
> > are identical, the isSubstGroup case needs to pass the additional 
> > parameter to arraySetterHelper()
> >
> > Thanks,
> > Radu
> >
> > On Tue, 2009-03-24 at 15:21 -0400, Wesley Leggette wrote:
> >> Radu,
> >>
> >> I thought I addressed everything. I realize now that I forgot to 
> >> eliminate the changing of the xsdconfig schema namespace, 
> so I will 
> >> fix that. But as far as the second email you sent, I'm not 
> sure what I'm missing.
> >>
> >> Wesley
> >>
> >>
> >>
> >> On 3/24/09 11:54, "Radu Preotiuc-Pietro" 
> >> <radu.preotiuc-pie...@oracle.com>
> >> wrote:
> >>
> >>> Hi Wesley,
> >>>
> >>> Did you look at my previouso comments? I don't really see those 
> >>> incorporated in this second patch.
> >>>
> >>> Radu
> >>>
> >>>> -----Original Message-----
> >>>> From: Wesley Leggette [mailto:wlegge...@cleversafe.com]
> >>>> Sent: Monday, March 23, 2009 5:12 PM
> >>>> To: dev@xmlbeans.apache.org
> >>>> Subject: [PATCH] User static types try #2
> >>>>
> >>>>
> >>>> This patch now supports mutiple value properties, which 
> I think I 
> >>>> did correctly.
> >>>>
> >>>> I also decided to eliminate the whole reflection thing. 
> It was (1) 
> >>>> too difficult to debug, (2) somewhat arbitrary anyway since the 
> >>>> custom type itself can't be done by reflection.
> >>>>
> >>>>
> >>>> -----------------
> >>>>
> >>>> Added custom user type support.
> >>>>
> >>>> diff -r 5471ba2f2541 src/configschema/schema/xmlconfig.xsd
> >>>> --- a/src/configschema/schema/xmlconfig.xsd    Sun Mar 22
> >>>> 15:07:07 2009
> >>>> -0500
> >>>> +++ b/src/configschema/schema/xmlconfig.xsd    Sun Mar 22
> >>>> 15:24:27 2009
> >>>> -0500
> >>>> @@ -13,8 +13,8 @@
> >>>>       limitations under the License. -->  <xs:schema
> >>>>     xmlns:xs="http://www.w3.org/2001/XMLSchema";
> >>>> -   
> xmlns:xb="http://xml.apache.org/xmlbeans/2004/02/xbean/config";
> >>>> -
> >>>> 
> targetNamespace="http://xml.apache.org/xmlbeans/2004/02/xbean/config";
> >>>> +   
> xmlns:xb="http://xml.apache.org/xmlbeans/2009/03/xbean/config";
> >>>> +
> >>>> 
> targetNamespace="http://xml.apache.org/xmlbeans/2009/03/xbean/config";
> >>>>     elementFormDefault="qualified">
> >>>>
> >>>>    <xs:import namespace="http://www.w3.org/2001/XMLSchema"/>
> >>>> @@ -58,6 +58,15 @@
> >>>>            </xs:annotation>
> >>>>          </xs:element>
> >>>>
> >>>> +        <xs:element name="usertype" type="xb:usertypeconfig">
> >>>> +          <xs:annotation>
> >>>> +              <xs:documentation>
> >>>> +                  Specifies a custom java type mapping for a 
> >>>> + derived simple
> >>>> type.
> >>>> +                  A static handler must be specified 
> that converts 
> >>>> + between
> >>>> the
> >>>> +                  custom java type and the built-in 
> simple type it 
> >>>> + derives
> >>>> from.
> >>>> +              </xs:documentation>
> >>>> +          </xs:annotation>
> >>>> +        </xs:element>
> >>>>        </xs:choice>
> >>>>      </xs:complexType>
> >>>>    </xs:element>
> >>>> @@ -172,6 +181,30 @@
> >>>>      </xs:union>
> >>>>     </xs:simpleType>
> >>>>
> >>>> +    <xs:complexType name="usertypeconfig">
> >>>> +       <xs:sequence>
> >>>> +           <xs:choice>
> >>>> +               <xs:element name="staticHandler" 
> type="xs:string">
> >>>> +                   <xs:annotation>
> >>>> +                       <xs:documentation>
> >>>> +                           The name of the handler class for
> >>>> this user
> >>>> type.
> >>>> +                           The handler must contain 
> public static 
> >>>> + methods
> >>>> for
> >>>> +                           translating the user type to 
> and from 
> >>>> + the
> >>>> derived simple type.
> >>>> +                           Example:
> >>>> +                           - qname example:uuid 
> restricts xs:string
> >>>> +                           - javaname is java.util.UUID
> >>>> +                           - handler interface must 
> have signatures:
> >>>> +                                public String 
> encodeUuid(UUID obj)
> >>>> +                                public UUID 
> decodeUuid(String enc)
> >>>> +                       </xs:documentation>
> >>>> +                   </xs:annotation>
> >>>> +               </xs:element>
> >>>> +           </xs:choice>
> >>>> +       </xs:sequence>
> >>>> +       <xs:attribute name="name" type="xs:QName"/>
> >>>> +       <xs:attribute name="javaname" type="xs:string"/>
> >>>> +    </xs:complexType>
> >>>> +
> >>>>      <xs:complexType name="extensionconfig">
> >>>>         <xs:sequence>
> >>>>            <xs:element name="interface" minOccurs="0"
> >>>> maxOccurs="unbounded"
> >>>>>
> >>>> diff -r 5471ba2f2541 src/configschema/schema/xmlconfig.xsdconfig
> >>>> --- a/src/configschema/schema/xmlconfig.xsdconfig    Sun Mar
> >>>> 22 15:07:07
> >>>> 2009 -0500
> >>>> +++ b/src/configschema/schema/xmlconfig.xsdconfig    Sun Mar
> >>>> 22 15:24:27
> >>>> 2009 -0500
> >>>> @@ -10,7 +10,7 @@
> >>>>       limitations under the License. -->
> >>>>
> >>>>  <xb:config
> >>>> xmlns:xb="http://xml.apache.org/xmlbeans/2004/02/xbean/config";>
> >>>>
> >>>>
> >>>>
> >>>> -  <xb:namespace
> >>>> uri="http://xml.apache.org/xmlbeans/2004/02/xbean/config";>
> >>>>
> >>>> +  <xb:namespace
> >>>> + uri="http://xml.apache.org/xmlbeans/2009/03/xbean/config";>
> >>>>
> >>>>      
> <xb:package>org.apache.xmlbeans.impl.xb.xmlconfig</xb:package>
> >>>>
> >>>>    </xb:namespace>
> >>>>
> >>>>
> >>>>
> >>>> diff -r 5471ba2f2541
> >>>> src/typeimpl/org/apache/xmlbeans/impl/schema/SchemaTypeCodePri
> >>>> nter.java
> >>>> ---
> >>>> a/src/typeimpl/org/apache/xmlbeans/impl/schema/SchemaTypeCodeP
> >>>> rinter.java
> >>>> Sun Mar 22 15:07:07 2009 -0500
> >>>> +++
> >>>> b/src/typeimpl/org/apache/xmlbeans/impl/schema/SchemaTypeCodeP
> >>>> rinter.java
> >>>> Sun Mar 22 15:24:27 2009 -0500
> >>>> @@ -17,6 +17,7 @@
> >>>>
> >>>>  import java.io.Writer;
> >>>>  import java.io.IOException;
> >>>> +import java.lang.reflect.InvocationTargetException;
> >>>>  import java.nio.charset.CharacterCodingException;
> >>>>  import java.nio.charset.Charset;
> >>>>  import java.nio.charset.CharsetEncoder; @@ -31,10 
> +32,12 @@ import 
> >>>> org.apache.xmlbeans.impl.common.NameUtil;
> >>>>  import org.apache.xmlbeans.PrePostExtension;
> >>>>  import org.apache.xmlbeans.InterfaceExtension;
> >>>> +import org.apache.xmlbeans.QNameSet;
> >>>>  import org.apache.xmlbeans.SchemaType;  import 
> >>>> org.apache.xmlbeans.SchemaTypeSystem;
> >>>>  import org.apache.xmlbeans.SchemaProperty;
> >>>>  import org.apache.xmlbeans.SchemaStringEnumEntry;
> >>>> +import org.apache.xmlbeans.SimpleValue;
> >>>>  import org.apache.xmlbeans.SystemProperties;
> >>>>  import org.apache.xmlbeans.XmlObject;  import 
> >>>> org.apache.xmlbeans.XmlOptions; @@ -1011,12 +1014,19 @@
> >>>>
> >>>>      String javaTypeForProperty(SchemaProperty sProp)
> >>>>      {
> >>>> +        // TODO: This is where to insert handler-specific type
> >>>> +
> >>>>          // The type to use is the XML object....
> >>>>          if (sProp.getJavaTypeCode() == 
> SchemaProperty.XML_OBJECT)
> >>>>          {
> >>>>              SchemaType sType = sProp.javaBasedOnType();
> >>>>              return findJavaType(sType).replace('$', '.');
> >>>>          }
> >>>> +
> >>>> +        if (sProp.getJavaTypeCode() == SchemaProperty.JAVA_USER)
> >>>> +        {
> >>>> +            return
> >>>> ((SchemaTypeImpl)sProp.getType()).getUserTypeName();
> >>>> +        }
> >>>>
> >>>>          switch (sProp.getJavaTypeCode())
> >>>>          {
> >>>> @@ -1446,7 +1456,7 @@
> >>>>          }
> >>>>      }
> >>>>
> >>>> -    void printJGetArrayValue(int javaType, String type)
> >>>> throws IOException
> >>>> {
> >>>> +    void printJGetArrayValue(int javaType, String type,
> >>>> SchemaTypeImpl
> >>>> stype) throws IOException {
> >>>>          switch (javaType)
> >>>>          {
> >>>>              case SchemaProperty.XML_OBJECT:
> >>>> @@ -1568,10 +1578,19 @@
> >>>>                  emit("    result[i] =
> >>>> ((org.apache.xmlbeans.SimpleValue)targetList.get(i)).getObject
> >>>> Value();");
> >>>>                  break;
> >>>>
> >>>> +            case SchemaProperty.JAVA_USER:
> >>>> +                emit(stype.getUserTypeName() + "[] 
> result = new " 
> >>>> + +
> >>>> stype.getUserTypeName() + "[targetList.size()];");
> >>>> +                emit("for (int i = 0, len =
> >>>> targetList.size() ; i < len
> >>>> + ;
> >>>> i++)");
> >>>> +                emit("    result[i] = " +
> >>>> stype.getUserTypeHandlerName() +
> >>>> ".decode" + stype.getShortJavaName()
> >>>> +                        +
> >>>> "((org.apache.xmlbeans.SimpleValue)targetList.get(i));");
> >>>> +                break;
> >>>> +
> >>>> +            default:
> >>>> +                throw new IllegalStateException();
> >>>>          }
> >>>>          emit("return result;");
> >>>>      }
> >>>> -    void printJGetValue(int javaType, String type) throws
> >>>> IOException {
> >>>> +    void printJGetValue(int javaType, String type, 
> SchemaTypeImpl
> >>>> + stype)
> >>>> throws IOException {
> >>>>          switch (javaType)
> >>>>          {
> >>>>          case SchemaProperty.XML_OBJECT:
> >>>> @@ -1633,72 +1652,83 @@
> >>>>
> >>>>          case SchemaProperty.JAVA_OBJECT:
> >>>>              emit("return target.getObjectValue();"); break;
> >>>> +
> >>>> +        case SchemaProperty.JAVA_USER:
> >>>> +            emit("return " + stype.getUserTypeHandlerName() 
> >>>> + ".decode"
> >>>> + +
> >>>> stype.getShortJavaName()
> >>>> +                    + "(target);");
> >>>> +            break;
> >>>> +
> >>>> +        default:
> >>>> +            throw new IllegalStateException();
> >>>>          }
> >>>>      }
> >>>> -
> >>>> -    String jsetMethod(int javaType) throws IOException
> >>>> -    {
> >>>> +    void printJSetValue(int javaType, String safeVarName, 
> >>>> + SchemaType
> >>>> + type)
> >>>> throws IOException {
> >>>>          switch (javaType)
> >>>>          {
> >>>>              case SchemaProperty.XML_OBJECT:
> >>>> -                return "target.set";
> >>>> +                emit("target.set(" + safeVarName + ");"); break;
> >>>>
> >>>>              case SchemaProperty.JAVA_BOOLEAN:
> >>>> -                return "target.setBooleanValue";
> >>>> +                emit("target.setBooleanValue(" + safeVarName + 
> >>>> + ");");
> >>>> break;
> >>>>
> >>>>              case SchemaProperty.JAVA_FLOAT:
> >>>> -                return "target.setFloatValue";
> >>>> +                emit("target.setFloatValue(" + safeVarName + 
> >>>> + ");"); break;
> >>>>
> >>>>              case SchemaProperty.JAVA_DOUBLE:
> >>>> -                return "target.setDoubleValue";
> >>>> +                emit("target.setDoubleValue(" + safeVarName + 
> >>>> + ");"); break;
> >>>>
> >>>>              case SchemaProperty.JAVA_BYTE:
> >>>> -                return "target.setByteValue";
> >>>> +                emit("target.setByteValue(" + 
> safeVarName + ");"); 
> >>>> + break;
> >>>>
> >>>>              case SchemaProperty.JAVA_SHORT:
> >>>> -                return "target.setShortValue";
> >>>> +                emit("target.setShortValue(" + safeVarName + 
> >>>> + ");"); break;
> >>>>
> >>>>              case SchemaProperty.JAVA_INT:
> >>>> -                return "target.setIntValue";
> >>>> +                emit("target.setIntValue(" + 
> safeVarName + ");"); 
> >>>> + break;
> >>>>
> >>>>              case SchemaProperty.JAVA_LONG:
> >>>> -                return "target.setLongValue";
> >>>> +                emit("target.setLongValue(" + 
> safeVarName + ");"); 
> >>>> + break;
> >>>>
> >>>>              case SchemaProperty.JAVA_BIG_DECIMAL:
> >>>> -                return "target.setBigDecimalValue";
> >>>> +                emit("target.setBigDecimalValue(" + 
> safeVarName + 
> >>>> + ");");
> >>>> break;
> >>>>
> >>>>              case SchemaProperty.JAVA_BIG_INTEGER:
> >>>> -                return "target.setBigIntegerValue";
> >>>> +                emit("target.setBigIntegerValue(" + 
> safeVarName + 
> >>>> + ");");
> >>>> break;
> >>>>
> >>>>              case SchemaProperty.JAVA_STRING:
> >>>> -                return "target.setStringValue";
> >>>> +                emit("target.setStringValue(" + safeVarName + 
> >>>> + ");"); break;
> >>>>
> >>>>              case SchemaProperty.JAVA_BYTE_ARRAY:
> >>>> -                return "target.setByteArrayValue";
> >>>> +                emit("target.setByteArrayValue(" +
> >>>> safeVarName + ");");
> >>>> break;
> >>>>
> >>>>              case SchemaProperty.JAVA_GDATE:
> >>>> -                return "target.setGDateValue";
> >>>> +                emit("target.setGDateValue(" + safeVarName + 
> >>>> + ");"); break;
> >>>>
> >>>>              case SchemaProperty.JAVA_GDURATION:
> >>>> -                return "target.setGDurationValue";
> >>>> +                emit("target.setGDurationValue(" +
> >>>> safeVarName + ");");
> >>>> break;
> >>>>
> >>>>              case SchemaProperty.JAVA_CALENDAR:
> >>>> -                return "target.setCalendarValue";
> >>>> +                emit("target.setCalendarValue(" +
> >>>> safeVarName + ");");
> >>>> break;
> >>>>
> >>>>              case SchemaProperty.JAVA_DATE:
> >>>> -                return "target.setDateValue";
> >>>> +                emit("target.setDateValue(" + 
> safeVarName + ");"); 
> >>>> + break;
> >>>>
> >>>>              case SchemaProperty.JAVA_QNAME:
> >>>> -                return "target.setQNameValue";
> >>>> +                emit("target.setQNameValue(" + safeVarName + 
> >>>> + ");"); break;
> >>>>
> >>>>              case SchemaProperty.JAVA_LIST:
> >>>> -                return "target.setListValue";
> >>>> +                emit("target.setListValue(" + 
> safeVarName + ");"); 
> >>>> + break;
> >>>>
> >>>>              case SchemaProperty.JAVA_ENUM:
> >>>> -                return "target.setEnumValue";
> >>>> +                emit("target.setEnumValue(" + 
> safeVarName + ");"); 
> >>>> + break;
> >>>>
> >>>>              case SchemaProperty.JAVA_OBJECT:
> >>>> -                return "target.setObjectValue";
> >>>> +                emit("target.setObjectValue(" + safeVarName + 
> >>>> + ");"); break;
> >>>> +
> >>>> +            case SchemaProperty.JAVA_USER:
> >>>> +
> >>>> emit(((SchemaTypeImpl)type).getUserTypeHandlerName() + 
> ".encode" + 
> >>>> type.getShortJavaName()
> >>>> +                        + "(" + safeVarName + ", target);");
> >>>> +                break;
> >>>>
> >>>>              default:
> >>>>                  throw new IllegalStateException(); @@
> >>>> -1868,6 +1898,8 @@
> >>>>                         String xtype)
> >>>>          throws IOException
> >>>>      {
> >>>> +        // TODO: THIS IS WHERE TO PUT EXTERNAL GET 
> TARGET HANDLER
> >>>> +
> >>>>          assert setIdentifier != null && identifier != null;
> >>>>
> >>>>          emit(xtype + " target = null;"); @@ -1986,6 +2018,8 @@
> >>>>          boolean xmltype = (javaType == 
> SchemaProperty.XML_OBJECT);
> >>>>          String jtargetType = (isunion || !xmltype) ?
> >>>> "org.apache.xmlbeans.SimpleValue" : xtype;
> >>>>
> >>>> +        // TODO: there is if(singleton), if(optional), 
> etc. Maybe 
> >>>> + a
> >>>> if(external_handler)?
> >>>> +
> >>>>          if (singleton)
> >>>>          {
> >>>>              // Value getProp()
> >>>> @@ -2009,8 +2043,9 @@
> >>>>              makeMissingValue(javaType);
> >>>>              endBlock();
> >>>>
> >>>> -
> >>>> -            printJGetValue(javaType, type);
> >>>> +
> >>>> +            printJGetValue(javaType, type, 
> >>>> + (SchemaTypeImpl)prop.getType());
> >>>> +
> >>>>
> >>>>              emitImplementationPostamble();
> >>>>
> >>>> @@ -2023,6 +2058,7 @@
> >>>>                  emit("public " + xtype + " xget" + 
> propertyName + 
> >>>> "()");
> >>>>                  startBlock();
> >>>>                  emitImplementationPreamble();
> >>>> +                // TODO: This is where we could choose 
> to emit a 
> >>>> + get
> >>>> handler target instead
> >>>>                  emitGetTarget(setIdentifier, 
> identifier, isAttr, 
> >>>> "0", NOTHING, xtype);
> >>>>
> >>>>                  if (isAttr && (prop.hasDefault() == 
> >>>> SchemaProperty.CONSISTENTLY || @@ -2046,6 +2082,7 @@
> >>>>                  emit("public boolean isNil" + 
> propertyName + "()");
> >>>>                  startBlock();
> >>>>                  emitImplementationPreamble();
> >>>> +                // TODO: This is where we could choose 
> to emit a 
> >>>> + get
> >>>> handler target instead
> >>>>                  emitGetTarget(setIdentifier, 
> identifier, isAttr, 
> >>>> "0", NOTHING, xtype);
> >>>>
> >>>>                  emit("if (target == null) return false;"); @@ 
> >>>> -2109,7 +2146,7 @@
> >>>>                  emit("java.util.List targetList = new 
> >>>> java.util.ArrayList();");
> >>>>              emit("get_store().find_all_element_users(" + 
> >>>> setIdentifier + ", targetList);");
> >>>>
> >>>> -            printJGetArrayValue(javaType, type);
> >>>> +            printJGetArrayValue(javaType, type,
> >>>> (SchemaTypeImpl)prop.getType());
> >>>>
> >>>>              emitImplementationPostamble();
> >>>>              endBlock();
> >>>> @@ -2121,7 +2158,7 @@
> >>>>              emitImplementationPreamble();
> >>>>
> >>>>              emitGetTarget(setIdentifier, identifier, 
> isAttr, "i", 
> >>>> THROW_EXCEPTION, jtargetType);
> >>>> -            printJGetValue(javaType, type);
> >>>> +            printJGetValue(javaType, type, 
> >>>> + (SchemaTypeImpl)prop.getType());
> >>>>
> >>>>              emitImplementationPostamble();
> >>>>              endBlock();
> >>>> @@ -2194,7 +2231,7 @@
> >>>>          }
> >>>>      }
> >>>>
> >>>> -    void printSetterImpls(QName qName, boolean isAttr,
> >>>> +    void printSetterImpls(QName qName, SchemaProperty prop, 
> >>>> + boolean isAttr,
> >>>>                         String propertyName, int 
> javaType, String 
> >>>> type, String xtype,
> >>>>                         boolean nillable, boolean 
> optional, boolean 
> >>>> several, boolean singleton,
> >>>>                         boolean isunion, String 
> identifier, String 
> >>>> setIdentifier, SchemaType sType) @@ -2209,7 +2246,6 @@
> >>>>          boolean xmltype = (javaType == 
> SchemaProperty.XML_OBJECT);
> >>>>          boolean isobj = (javaType == 
> SchemaProperty.JAVA_OBJECT);
> >>>>          boolean isSubstGroup = identifier != setIdentifier;
> >>>> -        String jSet = jsetMethod(javaType);
> >>>>          String jtargetType = (isunion || !xmltype) ?
> >>>> "org.apache.xmlbeans.SimpleValue" : xtype;
> >>>>
> >>>>          String propdesc = "\"" + qName.getLocalPart() + "\""
> >>>> + (isAttr ? "
> >>>> attribute" : " element");
> >>>> @@ -2232,7 +2268,7 @@
> >>>>                  emitImplementationPreamble();
> >>>>                  emitPre(sType,
> >>>> PrePostExtension.OPERATION_SET, identifier, isAttr, several ?
> >>>> "0" : "-1");
> >>>>                  emitGetTarget(setIdentifier, 
> identifier, isAttr, 
> >>>> "0", ADD_NEW_VALUE, jtargetType);
> >>>> -                emit(jSet + "(" + safeVarName + ");");
> >>>> +                printJSetValue(javaType, safeVarName,
> >>>> (SchemaTypeImpl)prop.getType());
> >>>>                  emitPost(sType,
> >>>> PrePostExtension.OPERATION_SET, identifier, isAttr, several ?
> >>>> "0" : "-1");
> >>>>                  emitImplementationPostamble();
> >>>>              }
> >>>> @@ -2322,6 +2358,25 @@
> >>>>                      else
> >>>>                          emit("unionArraySetterHelper(" + 
> >>>> safeVarName + "Array" + ", " + identifier + ", " + 
> setIdentifier + 
> >>>> ");" );
> >>>>                  }
> >>>> +                else if (prop.getJavaTypeCode() ==
> >>>> SchemaProperty.JAVA_USER)
> >>>> +                {
> >>>> +                    if (!isSubstGroup)
> >>>> +                    {
> >>>> +
> >>>> emit("org.apache.xmlbeans.SimpleValue[] dests = 
> arraySetterHelper(" 
> >>>> + safeVarName + "Array.length, " + identifier + ");" );
> >>>> +                        emit("for ( int i = 0 ; i <
> >>>> dests.length ; i++
> >>>> + )
> >>>> {");
> >>>> +                        emit("    " +
> >>>> ((SchemaTypeImpl)prop.getType()).getUserTypeHandlerName() + 
> >>>> ".encode" +
> >>>> prop.getType().getShortJavaName()
> >>>> +                                + "(" + safeVarName + "Array[i],
> >>>> dests[i]);");
> >>>> +                        emit("}");
> >>>> +                    }
> >>>> +                    else
> >>>> +                    {
> >>>> +
> >>>> emit("org.apache.xmlbeans.SimpleValue[] dests = 
> arraySetterHelper(" 
> >>>> + safeVarName + "Array.length" + ", " + setIdentifier + ");" );
> >>>> +                        emit("for ( int i = 0 ; i <
> >>>> dests.length ; i++
> >>>> + )
> >>>> {");
> >>>> +                        emit("    " +
> >>>> ((SchemaTypeImpl)prop.getType()).getUserTypeHandlerName() + 
> >>>> ".encode" +
> >>>> prop.getType().getShortJavaName()
> >>>> +                                + "(" + safeVarName + "Array[i],
> >>>> dests[i]);");
> >>>> +                        emit("}");
> >>>> +                    }
> >>>> +                }
> >>>>                  else
> >>>>                  {
> >>>>                      if (!isSubstGroup) @@ -2349,6 +2404,25 @@
> >>>>                      else
> >>>>                          emit("unionArraySetterHelper(" + 
> >>>> safeVarName + "Array" + ", " + identifier + ", " + 
> setIdentifier + 
> >>>> ");" );
> >>>>                  }
> >>>> +                else if (prop.getJavaTypeCode() ==
> >>>> SchemaProperty.JAVA_USER)
> >>>> +                {
> >>>> +                    if (!isSubstGroup)
> >>>> +                    {
> >>>> +
> >>>> emit("org.apache.xmlbeans.SimpleValue[] dests = 
> arraySetterHelper(" 
> >>>> + safeVarName + "Array.length, " + identifier + ");" );
> >>>> +                        emit("for ( int i = 0 ; i <
> >>>> dests.length ; i++
> >>>> + )
> >>>> {");
> >>>> +                        emit("    " +
> >>>> ((SchemaTypeImpl)prop.getType()).getUserTypeHandlerName() + 
> >>>> ".encode" +
> >>>> prop.getType().getShortJavaName()
> >>>> +                                + "(" + safeVarName + "Array[i],
> >>>> dests[i]);");
> >>>> +                        emit("}");
> >>>> +                    }
> >>>> +                    else
> >>>> +                    {
> >>>> +
> >>>> emit("org.apache.xmlbeans.SimpleValue[] dests = 
> arraySetterHelper(" 
> >>>> + safeVarName + "Array.length" + ", " + setIdentifier + ");" );
> >>>> +                        emit("for ( int i = 0 ; i <
> >>>> dests.length ; i++
> >>>> + )
> >>>> {");
> >>>> +                        emit("    " +
> >>>> ((SchemaTypeImpl)prop.getType()).getUserTypeHandlerName() + 
> >>>> ".encode" +
> >>>> prop.getType().getShortJavaName()
> >>>> +                                + "(" + safeVarName + "Array[i],
> >>>> dests[i]);");
> >>>> +                        emit("}");
> >>>> +                    }
> >>>> +                }
> >>>>                  else
> >>>>                  {
> >>>>                      if (!isSubstGroup) @@ -2372,12 +2446,21 @@
> >>>>
> >>>> "org.apache.xmlbeans.impl.values.XmlObjectBase.KIND_SETTERHELP
> >>>> ER_ARRAYITEM);
> >>>> ");
> >>>>                  emitPost(sType,
> >>>> PrePostExtension.OPERATION_SET, identifier, isAttr, "i");
> >>>>              }
> >>>> +            else if (prop.getJavaTypeCode() ==
> >>>> SchemaProperty.JAVA_USER)
> >>>> +            {
> >>>> +                emitImplementationPreamble();
> >>>> +                emitPre(sType, PrePostExtension.OPERATION_SET, 
> >>>> + identifier,
> >>>> isAttr, "i");
> >>>> +                emitGetTarget(setIdentifier, 
> identifier, isAttr, 
> >>>> + "i",
> >>>> THROW_EXCEPTION, jtargetType);
> >>>> +                printJSetValue(javaType, safeVarName,
> >>>> (SchemaTypeImpl)prop.getType());
> >>>> +                emitPost(sType, PrePostExtension.OPERATION_SET, 
> >>>> + identifier,
> >>>> isAttr, "i");
> >>>> +                emitImplementationPostamble();
> >>>> +            }
> >>>>              else
> >>>>              {
> >>>>                  emitImplementationPreamble();
> >>>>                  emitPre(sType,
> >>>> PrePostExtension.OPERATION_SET, identifier, isAttr, "i");
> >>>>                  emitGetTarget(setIdentifier, 
> identifier, isAttr, 
> >>>> "i", THROW_EXCEPTION, jtargetType);
> >>>> -                emit(jSet + "(" + safeVarName + ");");
> >>>> +                printJSetValue(javaType, safeVarName,
> >>>> (SchemaTypeImpl)prop.getType());
> >>>>                  emitPost(sType,
> >>>> PrePostExtension.OPERATION_SET, identifier, isAttr, "i");
> >>>>                  emitImplementationPostamble();
> >>>>              }
> >>>> @@ -2436,7 +2519,7 @@
> >>>>                      emit ("(" + jtargetType
> >>>> +")get_store().insert_element_user(" + setIdentifier + ", " +
> >>>>                              identifier + ", i);");
> >>>>                  outdent();
> >>>> -                emit(jSet + "(" + safeVarName + ");");
> >>>> +                printJSetValue(javaType, safeVarName,
> >>>> (SchemaTypeImpl)prop.getType());
> >>>>                  emitPost(sType, 
> PrePostExtension.OPERATION_INSERT,
> >>>> identifier, isAttr, "i");
> >>>>                  emitImplementationPostamble();
> >>>>                  endBlock();
> >>>> @@ -2448,7 +2531,7 @@
> >>>>                  emitDeclareTarget(true, jtargetType);
> >>>>                    emitPre(sType, 
> >>>> PrePostExtension.OPERATION_INSERT,
> >>>> identifier, isAttr);
> >>>>                  emitAddTarget(identifier, isAttr, true, 
> jtargetType);
> >>>> -                emit(jSet + "(" + safeVarName + ");");
> >>>> +                printJSetValue(javaType, safeVarName,
> >>>> (SchemaTypeImpl)prop.getType());
> >>>>                  emitPost(sType, 
> PrePostExtension.OPERATION_INSERT,
> >>>> identifier, isAttr);
> >>>>                  emitImplementationPostamble();
> >>>>                  endBlock();
> >>>> @@ -2602,6 +2685,7 @@
> >>>>                  {
> >>>>                      printSetterImpls(
> >>>>                          name,
> >>>> +                        prop,
> >>>>                          prop.isAttribute(),
> >>>>                          prop.getJavaPropertyName(),
> >>>>                          prop.getJavaTypeCode(), diff -r
> >>>> 5471ba2f2541
> >>>> src/typeimpl/org/apache/xmlbeans/impl/schema/SchemaTypeImpl.java
> >>>> --- 
> >>>> 
> a/src/typeimpl/org/apache/xmlbeans/impl/schema/SchemaTypeImpl.java
> >>>> Sun Mar 22 15:07:07 2009 -0500
> >>>> +++ 
> b/src/typeimpl/org/apache/xmlbeans/impl/schema/SchemaTypeImpl.j
> >>>> +++ ava
> >>>> Sun Mar 22 15:24:27 2009 -0500
> >>>> @@ -100,6 +100,8 @@
> >>>>      private volatile Constructor _javaImplConstructor;
> >>>>      private volatile Constructor _javaImplConstructor2;
> >>>>      private volatile boolean _implNotAvailable;
> >>>> +    private volatile Class _userTypeClass;
> >>>> +    private volatile Class _userTypeHandlerClass;
> >>>>
> >>>>      // user data objects not persisted
> >>>>      private volatile Object _userData; @@ -140,6 +142,10 @@
> >>>>      private int _baseDepth; // how many inheritance 
> steps to AnyType
> >>>>      private int _derivationType;
> >>>>
> >>>> +    // user type support
> >>>> +    private String _userTypeName;
> >>>> +    private String _userTypeHandler;
> >>>> +
> >>>>      // for complex types with simple content
> >>>>      private SchemaType.Ref _contentBasedOnTyperef;
> >>>>
> >>>> @@ -577,7 +583,29 @@
> >>>>      public String getFullJavaImplName() { return 
> _fullJavaImplName;}
> >>>>      public String getShortJavaImplName() { return 
> >>>> _shortJavaImplName;}
> >>>>
> >>>> -    public void setInterfaceExtensions(InterfaceExtension[]
> >>>> interfaces)
> >>>> +    public String getUserTypeName()
> >>>> +    {
> >>>> +        return _userTypeName;
> >>>> +    }
> >>>> +
> >>>> +    public void setUserTypeName(String userTypeName)
> >>>> +    {
> >>>> +        _userTypeName = userTypeName;
> >>>> +    }
> >>>> +
> >>>> +    public String getUserTypeHandlerName()
> >>>> +    {
> >>>> +        return _userTypeHandler;
> >>>> +    }
> >>>> +
> >>>> +    public void setUserTypeHandlerName(String typeHandler)
> >>>> +    {
> >>>> +        _userTypeHandler = typeHandler;
> >>>> +    }
> >>>> +
> >>>> +
> >>>> +
> >>>> +    public void setInterfaceExtensions(InterfaceExtension[]
> >>>> interfaces)
> >>>>      {
> >>>>          assertResolved();
> >>>>          _interfaces = interfaces;
> >>>> @@ -1717,6 +1745,46 @@
> >>>>
> >>>>          return _javaImplClass;
> >>>>      }
> >>>> +
> >>>> +      public Class getUserTypeClass()
> >>>> +      {
> >>>> +        // This field is declared volatile and Class is 
> immutable 
> >>>> + so this
> >>>> is
> >>>> +        // allowed.
> >>>> +        if (_userTypeClass == null && getUserTypeName() != null)
> >>>> +        {
> >>>> +            try
> >>>> +            {
> >>>> +                _userTypeClass = 
> Class.forName(_userTypeName, false,
> >>>> +                        getTypeSystem().getClassLoader());
> >>>> +            }
> >>>> +            catch (ClassNotFoundException e)
> >>>> +            {
> >>>> +                _userTypeClass = null;
> >>>> +            }
> >>>> +        }
> >>>> +
> >>>> +        return _userTypeClass;
> >>>> +    }
> >>>> +
> >>>> +    public Class getUserTypeHandlerClass()
> >>>> +    {
> >>>> +        // This field is declared volatile and Class is 
> immutable 
> >>>> + so this
> >>>> is
> >>>> +        // allowed.
> >>>> +        if (_userTypeHandlerClass == null &&
> >>>> getUserTypeHandlerName()
> >>>> + !=
> >>>> null)
> >>>> +        {
> >>>> +            try
> >>>> +            {
> >>>> +                _userTypeHandlerClass =
> >>>> Class.forName(_userTypeHandler,
> >>>> false,
> >>>> +                        getTypeSystem().getClassLoader());
> >>>> +            }
> >>>> +            catch (ClassNotFoundException e)
> >>>> +            {
> >>>> +                _userTypeHandlerClass = null;
> >>>> +            }
> >>>> +        }
> >>>> +
> >>>> +        return _userTypeHandlerClass;
> >>>> +    }
> >>>>
> >>>>      public Constructor getJavaImplConstructor()
> >>>>      {
> >>>> diff -r 5471ba2f2541
> >>>> src/typeimpl/org/apache/xmlbeans/impl/schema/StscJavaizer.java
> >>>> ---
> >>>> a/src/typeimpl/org/apache/xmlbeans/impl/schema/StscJavaizer.ja
> >>>> va    Sun
> >>>> Mar 22 15:07:07 2009 -0500
> >>>> +++
> >>>> b/src/typeimpl/org/apache/xmlbeans/impl/schema/StscJavaizer.ja
> >>>> va    Sun
> >>>> Mar 22 15:24:27 2009 -0500
> >>>> @@ -22,6 +22,7 @@
> >>>>  import org.apache.xmlbeans.SchemaParticle;
> >>>>  import org.apache.xmlbeans.SchemaProperty;
> >>>>  import org.apache.xmlbeans.QNameSet;
> >>>> +import org.apache.xmlbeans.UserType;
> >>>>  import org.apache.xmlbeans.XmlAnySimpleType;
> >>>>  import org.apache.xmlbeans.SchemaStringEnumEntry;
> >>>>  import org.apache.xmlbeans.XmlByte; @@ -98,6 +99,15 @@
> >>>>              {
> >>>>
> >>>> sImpl.setFullJavaName(pickFullJavaClassName(usedNames,
> >>>> findTopName(sImpl), pickedName, sImpl.isDocumentType(), 
> >>>> sImpl.isAttributeType()));
> >>>>
> >>>> sImpl.setFullJavaImplName(pickFullJavaImplName(usedNames,
> >>>> sImpl.getFullJavaName()));
> >>>> +
> >>>> +                UserType utype =
> >>>> StscState.get().getBindingConfig().lookupUserTypeForQName(sImp
> >>>> l.getName());
> >>>> +                if (utype != null)
> >>>> +                {
> >>>> +                    sImpl.setUserType(true);
> >>>> +                    sImpl.setUserTypeName(utype.getJavaName());
> >>>> +
> >>>> sImpl.setUserTypeHandlerName(utype.getStaticHandler());
> >>>> +                }
> >>>> +
> >>>>                  setExtensions(sImpl, state);
> >>>>              }
> >>>>          }
> >>>> @@ -531,6 +541,9 @@
> >>>>          if (!sType.isSimpleType())
> >>>>              return SchemaProperty.XML_OBJECT;
> >>>>
> >>>> +        if 
> (((SchemaTypeImpl)sType).getUserTypeHandlerName() != null)
> >>>> +            return SchemaProperty.JAVA_USER;
> >>>> +
> >>>>          if (sType.getSimpleVariety() == SchemaType.UNION)
> >>>>          {
> >>>>              // see if we can find an interesting common 
> base type, 
> >>>> e.g., for string enums diff -r 5471ba2f2541 
> >>>> src/typeimpl/org/apache/xmlbeans/impl/values/XmlComplexContent
> >>>> Impl.java
> >>>> ---
> >>>> a/src/typeimpl/org/apache/xmlbeans/impl/values/XmlComplexConte
> >>>> ntImpl.java
> >>>> Sun Mar 22 15:07:07 2009 -0500
> >>>> +++
> >>>> b/src/typeimpl/org/apache/xmlbeans/impl/values/XmlComplexConte
> >>>> ntImpl.java
> >>>> Sun Mar 22 15:24:27 2009 -0500
> >>>> @@ -160,7 +160,59 @@
> >>>>              ((XmlObjectBase) user).objectSet( sources[ i ] );
> >>>>          }
> >>>>      }
> >>>> +
> >>>> +    protected SimpleValue[] arraySetterHelper ( int 
> sourcesLength, 
> >>>> + QName
> >>>> elemName )
> >>>> +    {
> >>>> +        SimpleValue[] dests = new SimpleValue[sourcesLength];
> >>>>
> >>>> +        TypeStore store = get_store();
> >>>> +
> >>>> +        int m = store.count_elements( elemName );
> >>>> +
> >>>> +        for ( ; m > sourcesLength ; m-- )
> >>>> +            store.remove_element( elemName, m - 1 );
> >>>> +
> >>>> +        for ( int i = 0 ; i < sourcesLength ; i++ )
> >>>> +        {
> >>>> +            TypeStoreUser user;
> >>>> +
> >>>> +            if (i >= m)
> >>>> +                user = store.add_element_user( elemName );
> >>>> +            else
> >>>> +                user = store.find_element_user( elemName, i );
> >>>> +
> >>>> +            dests[i] = (SimpleValue) user;
> >>>> +        }
> >>>> +
> >>>> +        return dests;
> >>>> +    }
> >>>> +
> >>>> +    protected SimpleValue[] arraySetterHelper ( int 
> sourcesLength, 
> >>>> + QName
> >>>> elemName, QNameSet set )
> >>>> +    {
> >>>> +        SimpleValue[] dests = new SimpleValue[sourcesLength];
> >>>> +
> >>>> +        TypeStore store = get_store();
> >>>> +
> >>>> +        int m = store.count_elements( set );
> >>>> +
> >>>> +        for ( ; m > sourcesLength ; m-- )
> >>>> +            store.remove_element( set, m - 1 );
> >>>> +
> >>>> +        for ( int i = 0 ; i < sourcesLength ; i++ )
> >>>> +        {
> >>>> +            TypeStoreUser user;
> >>>> +
> >>>> +            if (i >= m)
> >>>> +                user = store.add_element_user( elemName );
> >>>> +            else
> >>>> +                user = store.find_element_user( set, i );
> >>>> +
> >>>> +            dests[i] = (SimpleValue) user;
> >>>> +        }
> >>>> +
> >>>> +        return dests;
> >>>> +    }
> >>>> +
> >>>>      protected void arraySetterHelper ( boolean[] sources, QName 
> >>>> elemName )
> >>>>      {
> >>>>          int n = sources == null ? 0 : sources.length; diff -r 
> >>>> 5471ba2f2541 
> >>>> src/xmlcomp/org/apache/xmlbeans/impl/tool/SchemaCompiler.java
> >>>> ---
> >>>> 
> a/src/xmlcomp/org/apache/xmlbeans/impl/tool/SchemaCompiler.java    Sun
> >>>> Mar 22 15:07:07 2009 -0500
> >>>> +++
> >>>> 
> b/src/xmlcomp/org/apache/xmlbeans/impl/tool/SchemaCompiler.java    Sun
> >>>> Mar 22 15:24:27 2009 -0500
> >>>> @@ -1258,12 +1258,14 @@
> >>>>          return false;
> >>>>      }
> >>>>
> >>>> -    private static final String CONFIG_URI =
> >>>> "http://xml.apache.org/xmlbeans/2004/02/xbean/config";;
> >>>> -    private static final String COMPATIBILITY_CONFIG_URI =
> >>>> "http://www.bea.com/2002/09/xbean/config";;
> >>>> +    private static final String CONFIG_URI =
> >>>> "http://xml.apache.org/xmlbeans/2009/03/xbean/config";;
> >>>> +    private static final String COMPATIBILITY_CONFIG_URI =
> >>>> "http://xml.apache.org/xmlbeans/2004/02/xbean/config";;
> >>>> +    private static final String COMPATIBILITY_CONFIG_URI2 =
> >>>> "http://www.bea.com/2002/09/xbean/config";;
> >>>>      private static final Map MAP_COMPATIBILITY_CONFIG_URIS;
> >>>>      static
> >>>>      {
> >>>>          MAP_COMPATIBILITY_CONFIG_URIS = new HashMap();
> >>>>          
> >>>> MAP_COMPATIBILITY_CONFIG_URIS.put(COMPATIBILITY_CONFIG_URI,
> >>>> CONFIG_URI);
> >>>> +        
> >>>> + MAP_COMPATIBILITY_CONFIG_URIS.put(COMPATIBILITY_CONFIG_URI2,
> >>>> CONFIG_URI);
> >>>>      }
> >>>>  }
> >>>> diff -r 5471ba2f2541
> >>>> 
> src/xmlconfig/org/apache/xmlbeans/impl/config/BindingConfigImpl.jav
> >>>> a
> >>>> ---
> >>>> 
> a/src/xmlconfig/org/apache/xmlbeans/impl/config/BindingConfigImpl.j
> >>>> ava
> >>>> Sun Mar 22 15:07:07 2009 -0500
> >>>> +++
> >>>> 
> b/src/xmlconfig/org/apache/xmlbeans/impl/config/BindingConfigImpl.j
> >>>> a
> >>>> +++ va
> >>>> Sun Mar 22 15:24:27 2009 -0500
> >>>> @@ -20,7 +20,9 @@
> >>>>  import org.apache.xmlbeans.impl.xb.xmlconfig.Nsconfig;
> >>>>  import org.apache.xmlbeans.impl.xb.xmlconfig.Qnameconfig;
> >>>>  import org.apache.xmlbeans.impl.xb.xmlconfig.Qnametargetenum;
> >>>> +import org.apache.xmlbeans.impl.xb.xmlconfig.Usertypeconfig;
> >>>>  import org.apache.xmlbeans.BindingConfig;
> >>>> +import org.apache.xmlbeans.UserType;
> >>>>  import org.apache.xmlbeans.XmlObject;  import 
> >>>> org.apache.xmlbeans.XmlError;  import 
> >>>> org.apache.xmlbeans.InterfaceExtension;
> >>>> @@ -54,6 +56,7 @@
> >>>>
> >>>>      private List _interfaceExtensions;
> >>>>      private List _prePostExtensions;
> >>>> +    private List _userTypes;
> >>>>
> >>>>      private BindingConfigImpl()
> >>>>      {
> >>>> @@ -69,6 +72,7 @@
> >>>>          _qnameAttMap = Collections.EMPTY_MAP;
> >>>>          _interfaceExtensions = new ArrayList();
> >>>>          _prePostExtensions = new ArrayList();
> >>>> +        _userTypes = new ArrayList();
> >>>>      }
> >>>>
> >>>>      public static BindingConfig forConfigDocuments(Config[] 
> >>>> configs, File[] javaFiles, File[] classpath) @@ -90,6 +94,7 @@
> >>>>          _qnameAttMap = new LinkedHashMap();
> >>>>          _interfaceExtensions = new ArrayList();
> >>>>          _prePostExtensions = new ArrayList();
> >>>> +        _userTypes = new ArrayList();
> >>>>
> >>>>          for (int i = 0; i < configs.length; i++)
> >>>>          {
> >>>> @@ -137,6 +142,13 @@
> >>>>              {
> >>>>                  recordExtensionSetting(javaFiles, 
> classpath, ext[j]);
> >>>>              }
> >>>> +
> >>>> +            Usertypeconfig[] utypes = config.getUsertypeArray();
> >>>> +            for (int j = 0; j < utypes.length; j++)
> >>>> +            {
> >>>> +                JamClassLoader jamLoader = 
> getJamLoader(javaFiles,
> >>>> classpath);
> >>>> +                
> _userTypes.add(UserTypeImpl.newInstance(jamLoader,
> >>>> utypes[j]));
> >>>> +            }
> >>>>          }
> >>>>
> >>>>          secondPhaseValidation();
> >>>> @@ -354,6 +366,7 @@
> >>>>
> >>>>      public String lookupJavanameForQName(QName qname, int kind)
> >>>>      {
> >>>> +        // TODO: Want to return user type java name if 
> applicable
> >>>>          switch (kind)
> >>>>          {
> >>>>          case QNAME_TYPE:
> >>>> @@ -367,6 +380,28 @@
> >>>>          }
> >>>>          return null;
> >>>>      }
> >>>> +
> >>>> +
> >>>> +    public UserType lookupUserTypeForQName(QName qname)
> >>>> +    {
> >>>> +        if (qname == null)
> >>>> +            return null;
> >>>> +
> >>>> +        for (Iterator i = _userTypes.iterator(); i.hasNext();)
> >>>> +        {
> >>>> +            UserType utype = (UserType) i.next();
> >>>> +            if (qname.equals(utype.getName()))
> >>>> +                return utype;
> >>>> +        }
> >>>> +
> >>>> +        return null;
> >>>> +    }
> >>>> +
> >>>> +    public UserType[] getUserTypes()
> >>>> +    {
> >>>> +        return (UserType[]) _interfaceExtensions
> >>>> +                .toArray(new 
> UserType[_interfaceExtensions.size()]);
> >>>> +    }
> >>>>
> >>>>      public InterfaceExtension[] getInterfaceExtensions()
> >>>>      {
> >>>> diff -r 5471ba2f2541
> >>>> src/xmlconfig/org/apache/xmlbeans/impl/config/UserTypeImpl.java
> >>>> --- /dev/null    Thu Jan 01 00:00:00 1970 +0000
> >>>> +++
> >>>> b/src/xmlconfig/org/apache/xmlbeans/impl/config/UserTypeImpl.j
> >>>> ava    Sun
> >>>> Mar 22 15:24:27 2009 -0500
> >>>> @@ -0,0 +1,46 @@
> >>>> +package org.apache.xmlbeans.impl.config;
> >>>> +
> >>>> +import javax.xml.namespace.QName;
> >>>> +
> >>>> +import org.apache.xmlbeans.UserType; import 
> >>>> +org.apache.xmlbeans.impl.jam.JamClassLoader;
> >>>> +import org.apache.xmlbeans.impl.xb.xmlconfig.Usertypeconfig;
> >>>> +
> >>>> +public class UserTypeImpl implements UserType {
> >>>> +
> >>>> +    private QName _name;
> >>>> +    private String _javaName;
> >>>> +    private String _staticHandler;
> >>>> +
> >>>> +
> >>>> +    static UserTypeImpl newInstance(JamClassLoader loader, 
> >>>> + Usertypeconfig
> >>>> cfgXO)
> >>>> +    {
> >>>> +        UserTypeImpl result = new UserTypeImpl();
> >>>> +
> >>>> +        result._name = cfgXO.getName();
> >>>> +        result._javaName = cfgXO.getJavaname();
> >>>> +        result._staticHandler = cfgXO.getStaticHandler();
> >>>> +
> >>>> +        // We don't validate here because we're just using
> >>>> reflection in
> >>>> +        // the implementation. However, in the future we
> >>>> might want to add
> >>>> +        // the option of directly using the static handler
> >>>> in generated
> >>>> code
> >>>> +
> >>>> +        return result;
> >>>> +    }
> >>>> +
> >>>> +
> >>>> +    public String getJavaName()
> >>>> +    {
> >>>> +        return _javaName;
> >>>> +    }
> >>>> +
> >>>> +    public QName getName() {
> >>>> +        return _name;
> >>>> +    }
> >>>> +
> >>>> +    public String getStaticHandler() {
> >>>> +        return _staticHandler;
> >>>> +    }
> >>>> +
> >>>> +
> >>>> +}
> >>>> diff -r 5471ba2f2541
> >>>> src/xmlpublic/org/apache/xmlbeans/BindingConfig.java
> >>>> --- a/src/xmlpublic/org/apache/xmlbeans/BindingConfig.java
> >>>> Sun Mar 22
> >>>> 15:07:07 2009 -0500
> >>>> +++ b/src/xmlpublic/org/apache/xmlbeans/BindingConfig.java
> >>>> Sun Mar 22
> >>>> 15:24:27 2009 -0500
> >>>> @@ -27,6 +27,7 @@
> >>>>  {
> >>>>      private static final InterfaceExtension[] 
> >>>> EMPTY_INTERFACE_EXT_ARRAY = new InterfaceExtension[0];
> >>>>      private static final PrePostExtension[] 
> >>>> EMPTY_PREPOST_EXT_ARRAY = new PrePostExtension[0];
> >>>> +    private static final UserType[] EMPTY_USER_TYPE_ARRY = new 
> >>>> + UserType[0];
> >>>>
> >>>>      public static final int QNAME_TYPE = 1;
> >>>>      public static final int QNAME_DOCUMENT_TYPE = 2; @@
> >>>> -84,5 +85,16 @@
> >>>>       * type generated from schema compilation or null.
> >>>>       */
> >>>>      public PrePostExtension getPrePostExtension(String
> >>>> fullJavaName) { return null; }
> >>>> +
> >>>> +    /**
> >>>> +     * Returns all defined user types.
> >>>> +     */
> >>>> +    public UserType[] getUserTypes() { return 
> >>>> + EMPTY_USER_TYPE_ARRY; }
> >>>> +
> >>>> +    /**
> >>>> +     * Returns a user defined Java type for a given QName.
> >>>> +     */
> >>>> +    public UserType lookupUserTypeForQName(QName qname) {
> >>>> return null;
> >>>> + }
> >>>> +
> >>>>
> >>>>  }
> >>>> diff -r 5471ba2f2541
> >>>> src/xmlpublic/org/apache/xmlbeans/SchemaProperty.java
> >>>> --- a/src/xmlpublic/org/apache/xmlbeans/SchemaProperty.java
> >>>>  Sun Mar 22
> >>>> 15:07:07 2009 -0500
> >>>> +++ b/src/xmlpublic/org/apache/xmlbeans/SchemaProperty.java
> >>>>  Sun Mar 22
> >>>> 15:24:27 2009 -0500
> >>>> @@ -210,6 +210,9 @@
> >>>>      static final int JAVA_ENUM = 18;
> >>>>      /** A {...@link java.lang.Object}, used for some simple type 
> >>>> unions. See {...@link #getJavaTypeCode}. */
> >>>>      static final int JAVA_OBJECT = 19; // for some unions
> >>>> +
> >>>> +    /** A user specified type. */
> >>>> +    static final int JAVA_USER = 20;
> >>>>
> >>>>      /**
> >>>>       * Returns the default or fixed value, diff -r
> >>>> 5471ba2f2541 src/xmlpublic/org/apache/xmlbeans/UserType.java
> >>>> --- /dev/null    Thu Jan 01 00:00:00 1970 +0000
> >>>> +++ b/src/xmlpublic/org/apache/xmlbeans/UserType.java    Sun
> >>>> Mar 22 15:24:27
> >>>> 2009 -0500
> >>>> @@ -0,0 +1,13 @@
> >>>> +package org.apache.xmlbeans;
> >>>> +
> >>>> +import javax.xml.namespace.QName;
> >>>> +
> >>>> +public interface UserType {
> >>>> +
> >>>> +    QName getName();
> >>>> +
> >>>> +    String getJavaName();
> >>>> +
> >>>> +    String getStaticHandler();
> >>>> +
> >>>> +}
> >>>>
> >>>>
> >>>> 
> -------------------------------------------------------------------
> >>>> -- To unsubscribe, e-mail: dev-unsubscr...@xmlbeans.apache.org
> >>>> For additional commands, e-mail: dev-h...@xmlbeans.apache.org
> >>>>
> >>>>
> >>>>
> >>>
> >>>
> >>> 
> --------------------------------------------------------------------
> >>> - To unsubscribe, e-mail: dev-unsubscr...@xmlbeans.apache.org
> >>> For additional commands, e-mail: dev-h...@xmlbeans.apache.org
> >>>
> >>
> >
> 
> 
>


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@xmlbeans.apache.org
For additional commands, e-mail: dev-h...@xmlbeans.apache.org

Reply via email to