You are viewing a plain text version of this content. The canonical link for it is here.
Posted to yoko-commits@incubator.apache.org by dm...@apache.org on 2006/08/21 14:35:17 UTC

svn commit: r433254 [2/2] - in /incubator/yoko/trunk/bindings/src: main/java/org/apache/yoko/bindings/corba/ main/java/org/apache/yoko/bindings/corba/extensions/ main/java/org/apache/yoko/bindings/corba/types/ test/java/org/apache/yoko/bindings/corba/ ...

Modified: incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/CorbaObjectWriter.java
URL: http://svn.apache.org/viewvc/incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/CorbaObjectWriter.java?rev=433254&r1=433253&r2=433254&view=diff
==============================================================================
--- incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/CorbaObjectWriter.java (original)
+++ incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/CorbaObjectWriter.java Mon Aug 21 07:35:15 2006
@@ -25,8 +25,16 @@
 import org.apache.schemas.yoko.bindings.corba.Enumerator;
 import org.apache.schemas.yoko.bindings.corba.Exception;
 import org.apache.schemas.yoko.bindings.corba.Fixed;
+import org.apache.yoko.bindings.corba.types.CorbaArrayHandler;
+import org.apache.yoko.bindings.corba.types.CorbaEnumHandler;
+import org.apache.yoko.bindings.corba.types.CorbaExceptionHandler;
+import org.apache.yoko.bindings.corba.types.CorbaFixedHandler;
+import org.apache.yoko.bindings.corba.types.CorbaObjectHandler;
+import org.apache.yoko.bindings.corba.types.CorbaPrimitiveHandler;
+import org.apache.yoko.bindings.corba.types.CorbaSequenceHandler;
+import org.apache.yoko.bindings.corba.types.CorbaStructHandler;
+import org.apache.yoko.bindings.corba.types.CorbaUnionHandler;
 
-import org.omg.CORBA.Any;
 import org.omg.CORBA.TCKind;
 import org.omg.CORBA.portable.OutputStream;
 
@@ -38,51 +46,51 @@
         stream = outStream;
     }
 
-    public void write(CorbaObjectHolder obj) {
+    public void write(CorbaObjectHandler obj) {
         assert obj != null;
 
-        switch (obj.getType().kind().value()) {
+        switch (obj.getTypeCode().kind().value()) {
         case TCKind._tk_boolean:
-            this.writeBoolean((Boolean) obj.getValue());
+            this.writeBoolean((Boolean)((CorbaPrimitiveHandler)obj).getValue());
             break;
         case TCKind._tk_char:
-            this.writeChar((Character) obj.getValue());
+            this.writeChar((Character)((CorbaPrimitiveHandler)obj).getValue());
             break;
         case TCKind._tk_wchar:
-            this.writeWChar((Character) obj.getValue());
+            this.writeWChar((Character)((CorbaPrimitiveHandler)obj).getValue());
             break;
         case TCKind._tk_octet:
-            this.writeOctet((Byte) obj.getValue());
+            this.writeOctet((Byte)((CorbaPrimitiveHandler)obj).getValue());
             break;
         case TCKind._tk_short:
-            this.writeShort((Short) obj.getValue());
+            this.writeShort((Short)((CorbaPrimitiveHandler)obj).getValue());
             break;
         case TCKind._tk_ushort:
-            this.writeUShort((Short) obj.getValue());
+            this.writeUShort((Short)((CorbaPrimitiveHandler)obj).getValue());
             break;
         case TCKind._tk_long:
-            this.writeLong((Long) obj.getValue());
+            this.writeLong((Long)((CorbaPrimitiveHandler)obj).getValue());
             break;
         case TCKind._tk_ulong:
-            this.writeULong((BigInteger) obj.getValue());
+            this.writeULong((BigInteger)((CorbaPrimitiveHandler)obj).getValue());
             break;
         case TCKind._tk_longlong:
-            this.writeLongLong((BigInteger) obj.getValue());
+            this.writeLongLong((BigInteger)((CorbaPrimitiveHandler)obj).getValue());
             break;
         case TCKind._tk_ulonglong:
-            this.writeULongLong((BigInteger) obj.getValue());
+            this.writeULongLong((BigInteger)((CorbaPrimitiveHandler)obj).getValue());
             break;
         case TCKind._tk_float:
-            this.writeFloat((Float) obj.getValue());
+            this.writeFloat((Float)((CorbaPrimitiveHandler)obj).getValue());
             break;
         case TCKind._tk_double:
-            this.writeDouble((Double) obj.getValue());
+            this.writeDouble((Double)((CorbaPrimitiveHandler)obj).getValue());
             break;
         case TCKind._tk_string:
-            this.writeString((String) obj.getValue());
+            this.writeString((String)((CorbaPrimitiveHandler)obj).getValue());
             break;
         case TCKind._tk_wstring:
-            this.writeWString((String) obj.getValue());
+            this.writeWString((String)((CorbaPrimitiveHandler)obj).getValue());
             break;
 
         // Now for the complex types
@@ -104,6 +112,9 @@
         case TCKind._tk_fixed:
             this.writeFixed(obj);
             break;
+        case TCKind._tk_union:
+            this.writeUnion(obj);
+            break;
         default:
         // TODO: Provide Implementation. Do we throw an exception.
         }
@@ -166,21 +177,16 @@
         stream.write_wstring(s);
     }
 
-    public void writeAny(Any a) throws CorbaBindingException {
+    public void writeAny(CorbaObjectHandler obj) throws CorbaBindingException {
         // TODO: provide implementation
         throw new CorbaBindingException("CorbaObjectWriter: writeAny not yet implemented");
     }
 
     // -- complex types --
-    public void writeConstant(CorbaObjectHolder type) throws CorbaBindingException {
-        // TODO: provide implementation - does this one make sense for the
-        // binding
-        throw new CorbaBindingException("CorbaObjectWriter: writeConstant not yet implemented");
-    }
-
-    public void writeEnum(CorbaObjectHolder type) throws CorbaBindingException {
-        Enum enumType = (Enum)type.getTypeDefinition();
-        String enumLabel = type.getValueData();
+    public void writeEnum(CorbaObjectHandler obj) throws CorbaBindingException {
+        CorbaEnumHandler enumHandler = (CorbaEnumHandler)obj;
+        Enum enumType = (Enum)enumHandler.getType();
+        String enumLabel = enumHandler.getValue();
         List<Enumerator> enumerators = enumType.getEnumerator();
         
         for (int i = 0; i < enumerators.size(); ++i) {
@@ -193,22 +199,19 @@
         throw new CorbaBindingException("CorbaObjectWriter: unable to find enumeration label");
     }
 
-    public void writeEnumLabel(String label) throws CorbaBindingException {
-        // TODO: provide implementation
-        throw new CorbaBindingException("CorbaObjectWriter: writeEnumLabel not yet implemented");
-    }
-
-    public void writeStruct(CorbaObjectHolder obj) throws CorbaBindingException {
-        List<CorbaObjectHolder> structElements = obj.getNestedObjects();
+    public void writeStruct(CorbaObjectHandler obj) throws CorbaBindingException {
+        CorbaStructHandler structHandler = (CorbaStructHandler)obj;
+        List<CorbaObjectHandler> structElements = structHandler.getMembers();
 
         for (int i = 0; i < structElements.size(); ++i) {
             this.write(structElements.get(i));
         }
     }
 
-    public void writeException(CorbaObjectHolder type) throws CorbaBindingException {
-        Exception exType = (Exception)type.getTypeDefinition();
-        List<CorbaObjectHolder> exMembers = type.getNestedObjects();
+    public void writeException(CorbaObjectHandler obj) throws CorbaBindingException {
+        CorbaExceptionHandler exHandler = (CorbaExceptionHandler)obj;
+        Exception exType = (Exception)exHandler.getType();
+        List<CorbaObjectHandler> exMembers = exHandler.getMembers();
     
         stream.write_string(exType.getRepositoryID());
         for (int i = 0; i < exMembers.size(); ++i) {
@@ -216,34 +219,37 @@
         }
     }
 
-    public void writeFixed(CorbaObjectHolder type) throws CorbaBindingException {
-        Fixed fixedType = (Fixed)type.getTypeDefinition();
+    public void writeFixed(CorbaObjectHandler obj) throws CorbaBindingException {
+        CorbaFixedHandler fixedHandler = (CorbaFixedHandler)obj;
+        Fixed fixedType = (Fixed)fixedHandler.getType();
         long scale = fixedType.getScale();
         
-        java.math.BigDecimal fixedValue = new java.math.BigDecimal(type.getValueData());
-        stream.write_fixed(fixedValue.movePointRight((int)scale));
-    }
-
-    public void writeUnion(CorbaObjectHolder type) throws CorbaBindingException {
-        // TODO: provide implementation
-        throw new CorbaBindingException("CorbaObjectWriter: writeUnion not yet implemented");
+        //java.math.BigDecimal fixedValue = new java.math.BigDecimal(fixedHandler.getValueData());
+        //stream.write_fixed(fixedValue.movePointRight((int)scale));
+        stream.write_fixed(fixedHandler.getValue().movePointRight((int)scale));
     }
 
-    public void writeTypeDef(CorbaObjectHolder type) throws CorbaBindingException {
-        // TODO: provide implementation
-        throw new CorbaBindingException("CorbaObjectWriter: writeTypeDef not yet implemented");
+    public void writeUnion(CorbaObjectHandler obj) throws CorbaBindingException {
+        CorbaObjectHandler discriminator = ((CorbaUnionHandler)obj).getDiscriminator();
+        this.write(discriminator);
+        CorbaObjectHandler unionValue = ((CorbaUnionHandler)obj).getValue();
+        this.write(unionValue);
+        
+//        throw new CorbaBindingException("CorbaObjectWriter: writeUnion not yet implemented");
     }
 
-    public void writeArray(CorbaObjectHolder obj) throws CorbaBindingException {
-        List<CorbaObjectHolder> arrayElements = obj.getNestedObjects();
+    public void writeArray(CorbaObjectHandler obj) throws CorbaBindingException {
+        CorbaArrayHandler arrayHandler = (CorbaArrayHandler)obj;
+        List<CorbaObjectHandler> arrayElements = arrayHandler.getElements();
 
         for (int i = 0; i < arrayElements.size(); ++i) {
             this.write(arrayElements.get(i));
         }
     }
 
-    public void writeSequence(CorbaObjectHolder obj) throws CorbaBindingException {
-        List<CorbaObjectHolder> seqElements = obj.getNestedObjects();
+    public void writeSequence(CorbaObjectHandler obj) throws CorbaBindingException {
+        CorbaSequenceHandler seqHandler = (CorbaSequenceHandler)obj;
+        List<CorbaObjectHandler> seqElements = seqHandler.getElements();
         int length = seqElements.size();
 
         stream.write_ulong(length);
@@ -252,14 +258,4 @@
             this.write(seqElements.get(i));
         }
     }
-
-    public void writeObject(CorbaObjectHolder type) throws CorbaBindingException {
-        // TODO: provide implementation
-        throw new CorbaBindingException("CorbaObjectWriter: writeObject not yet implemented");
-    }
-
-    public boolean isEnum() {
-        // TODO: Provide complete implementation
-        return false; 
-    }
-}
+}
\ No newline at end of file

Modified: incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/CorbaStreamable.java
URL: http://svn.apache.org/viewvc/incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/CorbaStreamable.java?rev=433254&r1=433253&r2=433254&view=diff
==============================================================================
--- incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/CorbaStreamable.java (original)
+++ incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/CorbaStreamable.java Mon Aug 21 07:35:15 2006
@@ -20,6 +20,8 @@
 
 import javax.xml.namespace.QName;
 
+import org.apache.yoko.bindings.corba.types.CorbaObjectHandler;
+
 import org.omg.CORBA.TypeCode;
 import org.omg.CORBA.portable.InputStream;
 import org.omg.CORBA.portable.OutputStream;
@@ -27,15 +29,15 @@
 
 public class CorbaStreamable implements Streamable {
 
-    private CorbaObjectHolder value;
+    private CorbaObjectHandler value;
     private QName name;
     private int mode;
     private TypeCode typecode;
 
-    public CorbaStreamable(CorbaObjectHolder obj, QName elName) {
+    public CorbaStreamable(CorbaObjectHandler obj, QName elName) {
         value = obj;
         name = elName;
-        typecode = obj.getType();
+        typecode = obj.getTypeCode();
 
         mode = org.omg.CORBA.ARG_OUT.value;
     }
@@ -62,16 +64,11 @@
         return typecode;
     }
 
-    public CorbaObjectHolder getObject() {
+    public CorbaObjectHandler getObject() {
         return value;
     }
 
-    public void setObject(CorbaObjectHolder obj) {
-        // TODO: This will need to handle more complex situations. For now,
-        // this is just its basic implementation
-        if (obj == null) {
-            // TODO: throw an exception
-        }
+    public void setObject(CorbaObjectHandler obj) {
         value = obj;
     }
 

Modified: incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/CorbaUtils.java
URL: http://svn.apache.org/viewvc/incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/CorbaUtils.java?rev=433254&r1=433253&r2=433254&view=diff
==============================================================================
--- incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/CorbaUtils.java (original)
+++ incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/CorbaUtils.java Mon Aug 21 07:35:15 2006
@@ -23,6 +23,7 @@
 import java.io.PrintWriter;
 import java.util.HashMap;
 import java.util.Iterator;
+import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.logging.Logger;
@@ -42,6 +43,7 @@
 import org.apache.schemas.yoko.bindings.corba.Anonwstring;
 import org.apache.schemas.yoko.bindings.corba.Array;
 import org.apache.schemas.yoko.bindings.corba.BindingType;
+import org.apache.schemas.yoko.bindings.corba.CaseType;
 import org.apache.schemas.yoko.bindings.corba.Const;
 import org.apache.schemas.yoko.bindings.corba.CorbaType;
 import org.apache.schemas.yoko.bindings.corba.Enum;
@@ -55,6 +57,16 @@
 import org.apache.schemas.yoko.bindings.corba.Struct;
 import org.apache.schemas.yoko.bindings.corba.TypeMappingType;
 import org.apache.schemas.yoko.bindings.corba.Union;
+import org.apache.schemas.yoko.bindings.corba.Unionbranch;
+import org.apache.yoko.bindings.corba.types.CorbaArrayHandler;
+import org.apache.yoko.bindings.corba.types.CorbaEnumHandler;
+import org.apache.yoko.bindings.corba.types.CorbaExceptionHandler;
+import org.apache.yoko.bindings.corba.types.CorbaFixedHandler;
+import org.apache.yoko.bindings.corba.types.CorbaObjectHandler;
+import org.apache.yoko.bindings.corba.types.CorbaPrimitiveHandler;
+import org.apache.yoko.bindings.corba.types.CorbaSequenceHandler;
+import org.apache.yoko.bindings.corba.types.CorbaStructHandler;
+import org.apache.yoko.bindings.corba.types.CorbaUnionHandler;
 import org.apache.yoko.wsdl.CorbaTypeImpl;
 
 import org.objectweb.celtix.Bus;
@@ -67,6 +79,7 @@
 import org.omg.CORBA.StructMember;
 import org.omg.CORBA.TCKind;
 import org.omg.CORBA.TypeCode;
+import org.omg.CORBA.UnionMember;
 
 public class CorbaUtils {
 
@@ -129,8 +142,10 @@
 
         TypeCode tc = null;
         
+        // Split all of these up into separate get*** methods.  One big method will not satisfy checkstyle
+        // rules
         if (obj instanceof Alias) {
-            Alias aliasType = (Alias) obj;
+            Alias aliasType = (Alias)obj;
             tc = getTypeCode(orb, aliasType.getBasetype(), typeMaps);
         } else if (obj instanceof Anonarray) {
             // TODO: Implement
@@ -148,14 +163,14 @@
             // TODO: Implement
             // Should be similar to a wstring
         } else if (obj instanceof Array) {
-            Array arrayType = (Array) obj;
+            Array arrayType = (Array)obj;
             tc = orb.create_array_tc((int) arrayType.getBound(), 
                                      getTypeCode(orb, arrayType.getElemtype(), typeMaps));
         } else if (obj instanceof Const) {
-            Const constType = (Const) obj;
+            Const constType = (Const)obj;
             tc = getTypeCode(orb, constType.getIdltype(), typeMaps);
         } else if (obj instanceof Enum) {
-            Enum enumType = (Enum) obj;
+            Enum enumType = (Enum)obj;
             String name = enumType.getName();
             List enums = enumType.getEnumerator();
             String[] members = new String[enums.size()];
@@ -165,7 +180,7 @@
             }
             tc = orb.create_enum_tc(enumType.getRepositoryID(), name, members);
         } else if (obj instanceof Exception) {
-            Exception exceptType = (Exception) obj;
+            Exception exceptType = (Exception)obj;
 
             // TODO: check to see if this is a recursive type.
             List list = exceptType.getMember();
@@ -181,11 +196,11 @@
             Fixed fixedType = (Fixed) obj;
             tc = orb.create_fixed_tc((short) fixedType.getDigits(), (short) fixedType.getScale());
         } else if (obj instanceof Sequence) {
-            Sequence seqType = (Sequence) obj;
+            Sequence seqType = (Sequence)obj;
             tc = orb.create_sequence_tc((int) seqType.getBound(), 
                                         getTypeCode(orb, seqType.getElemtype(), typeMaps));
         } else if (obj instanceof Struct) {
-            Struct structType = (Struct) obj;
+            Struct structType = (Struct)obj;
 
             // TODO: check to see if this is a recursive type.
             List list = structType.getMember();
@@ -198,10 +213,74 @@
             String name = structType.getName();
             tc = orb.create_struct_tc(structType.getRepositoryID(), name, members);
         } else if (obj instanceof Union) {
-            // TODO: Implement
+            tc = getUnionTypeCode(orb, obj, typeMaps);
         }
         return tc;
     }
+    
+    public static TypeCode getUnionTypeCode(ORB orb, Object obj, List<CorbaTypeMap> typeMaps) {
+        Union unionType = (Union)obj;
+        
+        TypeCode discTC = getTypeCode(orb, unionType.getDiscriminator(), typeMaps);
+        Map<String, UnionMember> members = new LinkedHashMap<String, UnionMember>();
+        List<Unionbranch> branches = unionType.getUnionbranch();
+        for (Iterator<Unionbranch> branchIter = branches.iterator(); branchIter.hasNext();) {
+            Unionbranch branch = branchIter.next();
+            List<CaseType> cases = branch.getCase();
+            for (Iterator<CaseType> caseIter = cases.iterator(); caseIter.hasNext();) {
+                CaseType cs = caseIter.next();
+                UnionMember member = new UnionMember();
+                member.name = branch.getName();
+                member.type = getTypeCode(orb, branch.getIdltype(), typeMaps);
+                member.label = orb.create_any();
+                
+                // We need to insert the labels in a way that depends on the type of the discriminator.  
+                // According to the CORBA specification, the following types are permissable as 
+                // discriminator types:
+                //    * signed & unsigned short
+                //    * signed & unsigned long
+                //    * signed & unsigned long long
+                //    * char
+                //    * boolean
+                switch (discTC.kind().value()) {
+                case TCKind._tk_short:
+                    member.label.insert_short(Short.parseShort(cs.getLabel()));
+                    break;
+                case TCKind._tk_ushort:
+                    member.label.insert_ushort(Short.parseShort(cs.getLabel()));
+                    break;
+                case TCKind._tk_long:
+                    member.label.insert_long(Integer.parseInt(cs.getLabel()));
+                    break;
+                case TCKind._tk_ulong:
+                    member.label.insert_ulong(Integer.parseInt(cs.getLabel()));
+                    break;
+                case TCKind._tk_longlong:
+                    member.label.insert_longlong(Long.parseLong(cs.getLabel()));
+                    break;
+                case TCKind._tk_ulonglong:
+                    member.label.insert_ulonglong(Long.parseLong(cs.getLabel()));
+                    break;
+                case TCKind._tk_char:
+                    member.label.insert_char(cs.getLabel().charAt(0));
+                    break;
+                case TCKind._tk_boolean:
+                    member.label.insert_boolean(Boolean.parseBoolean(cs.getLabel()));
+                    break;
+                default:
+                    // TODO: Throw exception since this is an unsupported discriminator type
+                }
+                // Yoko orb is strict on how the case labels are stored for each member.  So we can't
+                // simply insert the labels as strings
+                //member.label.insert_string(cs.getLabel());
+                members.put(cs.getLabel(), member);
+            }
+        }
+        return orb.create_union_tc(unionType.getRepositoryID(), 
+                                   unionType.getName(), 
+                                   discTC, 
+                                   (UnionMember[])members.values().toArray(new UnionMember[members.size()]));
+    }
 
     public static boolean isPrimitiveIdlType(QName idltype) {
         TCKind kind = PRIMITIVE_TYPECODES.get(idltype);
@@ -484,6 +563,46 @@
             throw new RuntimeException(ex);
         }
         return result;
+    }
+    
+    public static CorbaObjectHandler createTypeHandler(ORB orb, QName name, 
+                                                       QName idlType, List<CorbaTypeMap> typeMaps) {
+        CorbaObjectHandler handler = null;
+        
+        TypeCode tc = CorbaUtils.getTypeCode(orb, idlType, typeMaps);
+        if (isPrimitiveIdlType(idlType)) {
+            handler = new CorbaPrimitiveHandler(name, idlType, tc, null);
+        } else {
+            NamedType type = getCorbaType(idlType, typeMaps);
+            
+            switch (tc.kind().value()) {
+            case TCKind._tk_array:
+                handler = new CorbaArrayHandler(name, idlType, tc, type);
+                break;
+            case TCKind._tk_enum:
+                handler = new CorbaEnumHandler(name, idlType, tc, type);
+                break;
+            case TCKind._tk_except:
+                handler = new CorbaExceptionHandler(name, idlType, tc, type);
+                break;
+            case TCKind._tk_fixed:
+                handler = new CorbaFixedHandler(name, idlType, tc, type);
+                break;
+            case TCKind._tk_sequence:
+                handler = new CorbaSequenceHandler(name, idlType, tc, type);
+                break;
+            case TCKind._tk_struct:
+                handler = new CorbaStructHandler(name, idlType, tc, type);
+                break;
+            case TCKind._tk_union:
+                handler = new CorbaUnionHandler(name, idlType, tc, type);
+                break;
+            default:
+                handler = new CorbaObjectHandler(name, idlType, tc, type);                
+            }
+        }
+        
+        return handler;
     }
 
     static {

Modified: incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/extensions/CorbaTypesExtensionHelper.java
URL: http://svn.apache.org/viewvc/incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/extensions/CorbaTypesExtensionHelper.java?rev=433254&r1=433253&r2=433254&view=diff
==============================================================================
--- incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/extensions/CorbaTypesExtensionHelper.java (original)
+++ incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/extensions/CorbaTypesExtensionHelper.java Mon Aug 21 07:35:15 2006
@@ -114,6 +114,9 @@
             } else if (currentNode.getNodeName().equals("corba:anonstring")) {
                 Anonstring anonstringType = getAnonStringDefinition(currentNode, def);
                 mappingType.getStructOrExceptionOrUnion().add(anonstringType);
+            } else if (currentNode.getNodeName().equals("corba:anonwstring")) {
+                Anonstring anonstringType = getAnonWStringDefinition(currentNode, def);
+                mappingType.getStructOrExceptionOrUnion().add(anonstringType);
             } else if (currentNode.getNodeName().equals("corba:anonfixed")) {
                 Anonfixed anonfixedType = getAnonFixedDefinition(currentNode, def);
                 mappingType.getStructOrExceptionOrUnion().add(anonfixedType);
@@ -327,7 +330,11 @@
             if (branchAttributes.item(i).getNodeName().equals("name")) {
                 branchType.setName(branchAttributes.item(i).getNodeValue());
             } else if (branchAttributes.item(i).getNodeName().equals("idltype")) {
-                branchType.setName(branchAttributes.item(i).getNodeValue());
+                String idlType = branchAttributes.item(i).getNodeValue();
+                int seperatorIndex = idlType.indexOf(':');
+                String prefix = idlType.substring(0, seperatorIndex);
+                String localPart = idlType.substring(seperatorIndex + 1, idlType.length());
+                branchType.setIdltype(new QName(def.getNamespace(prefix), localPart, prefix));
             } else if (branchAttributes.item(i).getNodeName().equals("default")) {
                 Boolean defaultValue = new Boolean(branchAttributes.item(i).getNodeValue());
                 branchType.setDefault(defaultValue);
@@ -342,7 +349,7 @@
                 CaseType caseType = new CaseType();
                 NamedNodeMap caseAttributes = currentNode.getAttributes();
                 
-                for (int j = 0; i < caseAttributes.getLength(); ++j) {
+                for (int j = 0; j < caseAttributes.getLength(); ++j) {
                     if (caseAttributes.item(j).getNodeName().equals("label")) {
                         caseType.setLabel(caseAttributes.item(j).getNodeValue());
                     }
@@ -422,6 +429,21 @@
     }
 
     public Anonstring getAnonStringDefinition(Node node, Definition def) {
+        Anonstring anonStringType = new Anonstring();
+
+        // Store information about the fixed type
+        NamedNodeMap anonStringAttributes = node.getAttributes();
+        for (int i = 0; i < anonStringAttributes.getLength(); ++i) {
+            if (anonStringAttributes.item(i).getNodeName().equals("name")) {
+                anonStringType.setName(anonStringAttributes.item(i).getNodeValue());
+            } else if (anonStringAttributes.item(i).getNodeName().equals("bound")) {
+                anonStringType.setBound(new Long(anonStringAttributes.item(i).getNodeValue()));
+            }
+        }
+        return anonStringType;
+    }
+
+    public Anonstring getAnonWStringDefinition(Node node, Definition def) {
         Anonstring anonStringType = new Anonstring();
 
         // Store information about the fixed type

Added: incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/types/CorbaArrayHandler.java
URL: http://svn.apache.org/viewvc/incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/types/CorbaArrayHandler.java?rev=433254&view=auto
==============================================================================
--- incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/types/CorbaArrayHandler.java (added)
+++ incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/types/CorbaArrayHandler.java Mon Aug 21 07:35:15 2006
@@ -0,0 +1,51 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.yoko.bindings.corba.types;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.xml.namespace.QName;
+
+import org.omg.CORBA.TypeCode;
+
+public class CorbaArrayHandler extends CorbaObjectHandler {
+
+    private List<CorbaObjectHandler> elements = new ArrayList<CorbaObjectHandler>();
+    
+    public CorbaArrayHandler(QName arrayName, QName arrayIdlType, TypeCode arrayTC, Object arrayType) {
+        super(arrayName, arrayIdlType, arrayTC, arrayType);
+    }
+    
+    public void addElement(CorbaObjectHandler el) {
+        elements.add(el);
+    }
+    
+    public int getNumberOfElements() {
+        return elements.size();
+    }
+    
+    public List<CorbaObjectHandler> getElements() {
+        return elements;
+    }
+    
+    public CorbaObjectHandler getElement(int index) {
+        return elements.get(index);
+    }    
+}

Added: incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/types/CorbaEnumHandler.java
URL: http://svn.apache.org/viewvc/incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/types/CorbaEnumHandler.java?rev=433254&view=auto
==============================================================================
--- incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/types/CorbaEnumHandler.java (added)
+++ incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/types/CorbaEnumHandler.java Mon Aug 21 07:35:15 2006
@@ -0,0 +1,60 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.yoko.bindings.corba.types;
+
+import java.util.List;
+
+import javax.xml.namespace.QName;
+
+import org.apache.schemas.yoko.bindings.corba.Enum;
+import org.apache.schemas.yoko.bindings.corba.Enumerator;
+import org.omg.CORBA.TypeCode;
+
+public class CorbaEnumHandler extends CorbaObjectHandler {
+
+    private String value;
+    private long index;
+    
+    public CorbaEnumHandler(QName enumName, QName enumIdlType, TypeCode enumTC, Object enumType) {
+        super(enumName, enumIdlType, enumTC, enumType);
+    }
+    
+    public String getValue() {
+        return value;
+    }
+    
+    public void setValue(String val) {
+        value = val;
+        
+        Enum enumType = (Enum)this.type;
+        List<Enumerator> enumerators = enumType.getEnumerator();
+        index = -1;
+        for (int i = 0; i < enumerators.size(); ++i) {
+            Enumerator e = enumerators.get(i);
+            if (e.getValue().equals(val)) {
+                index = i;
+                break;
+            }
+        }
+    }
+    
+    public long getIndex() {
+        return index;
+    }
+}

Added: incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/types/CorbaExceptionHandler.java
URL: http://svn.apache.org/viewvc/incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/types/CorbaExceptionHandler.java?rev=433254&view=auto
==============================================================================
--- incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/types/CorbaExceptionHandler.java (added)
+++ incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/types/CorbaExceptionHandler.java Mon Aug 21 07:35:15 2006
@@ -0,0 +1,77 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.yoko.bindings.corba.types;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.xml.namespace.QName;
+
+import org.apache.schemas.yoko.bindings.corba.NamedType;
+import org.omg.CORBA.TypeCode;
+
+public class CorbaExceptionHandler extends CorbaObjectHandler {
+
+    List<CorbaObjectHandler> members = new ArrayList<CorbaObjectHandler>();
+    String id;
+    
+    public CorbaExceptionHandler(QName exName, QName exIdlType, TypeCode exTC, Object exType) {
+        name = exName;
+        idlType = exIdlType;
+        typeCode = exTC;
+        type = (NamedType)exType;
+    }
+    
+    public void addMember(CorbaObjectHandler member) {
+        members.add(member);
+    }
+    
+    public List<CorbaObjectHandler> getMembers() {
+        return members;
+    }
+    
+    public CorbaObjectHandler getMember(int index) {
+        return members.get(index);
+    }
+    
+    public CorbaObjectHandler getMemberByName(String name) {
+        CorbaObjectHandler member = null;
+        
+        for (Iterator<CorbaObjectHandler> iterator = members.iterator(); iterator.hasNext();) {
+            CorbaObjectHandler current = iterator.next();
+            if (current.getName().getLocalPart().equals(name)) {
+                member = current;
+                break;
+            }
+        }
+        
+        return member;
+    }
+    
+    public String getId() {
+        return id;
+    }
+    
+    public void setId(String eid) {
+        id = eid;
+    }
+    
+    // TODO: Can we add the features that exist in the main package here?
+}

Added: incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/types/CorbaFixedHandler.java
URL: http://svn.apache.org/viewvc/incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/types/CorbaFixedHandler.java?rev=433254&view=auto
==============================================================================
--- incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/types/CorbaFixedHandler.java (added)
+++ incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/types/CorbaFixedHandler.java Mon Aug 21 07:35:15 2006
@@ -0,0 +1,50 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.yoko.bindings.corba.types;
+
+import java.math.BigDecimal;
+
+import javax.xml.namespace.QName;
+
+import org.omg.CORBA.TypeCode;
+
+public class CorbaFixedHandler extends CorbaObjectHandler {
+
+    private BigDecimal value;
+    
+    public CorbaFixedHandler(QName fixedName, QName fixedIdlType, TypeCode fixedTC, Object fixedType) {
+        super(fixedName, fixedIdlType, fixedTC, fixedType);
+    }
+    
+    public BigDecimal getValue() {
+        return value;
+    }
+    
+    public String getValueData() {
+        return value.toString();
+    }
+    
+    public void setValue(BigDecimal val) {
+        value = val;
+    }
+    
+    public void setValueFromData(String data) {
+        value = new BigDecimal(data);
+    }
+}

Added: incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/types/CorbaObjectHandler.java
URL: http://svn.apache.org/viewvc/incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/types/CorbaObjectHandler.java?rev=433254&view=auto
==============================================================================
--- incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/types/CorbaObjectHandler.java (added)
+++ incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/types/CorbaObjectHandler.java Mon Aug 21 07:35:15 2006
@@ -0,0 +1,70 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.yoko.bindings.corba.types;
+
+import javax.xml.namespace.QName;
+
+import org.apache.schemas.yoko.bindings.corba.NamedType;
+
+import org.omg.CORBA.TCKind;
+import org.omg.CORBA.TypeCode;
+
+// This class serves as a base for all other specific object type handlers and 
+// provides basic functionality that is common for all objects.
+public class CorbaObjectHandler {
+
+    protected QName name;
+    protected QName idlType;
+    protected TypeCode typeCode;
+    protected NamedType type;
+    
+    public CorbaObjectHandler() {
+    }
+    
+    public CorbaObjectHandler(QName objName, QName objIdlType, TypeCode objTC, Object objType) {
+        name = objName;
+        idlType = objIdlType;
+        typeCode = objTC;
+        type = (NamedType)objType;
+    }
+    
+    public QName getName() {
+        return name;
+    }
+    
+    public String getSimpleName() {
+        return name.getLocalPart();
+    }
+    
+    public QName getIdlType() {
+        return idlType;
+    }
+    
+    public TypeCode getTypeCode() {
+        return typeCode;
+    }
+    
+    public TCKind getTypeCodeKind() {
+        return typeCode.kind();
+    }
+    
+    public NamedType getType() {
+        return type;
+    }
+}

Added: incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/types/CorbaPrimitiveHandler.java
URL: http://svn.apache.org/viewvc/incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/types/CorbaPrimitiveHandler.java?rev=433254&view=auto
==============================================================================
--- incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/types/CorbaPrimitiveHandler.java (added)
+++ incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/types/CorbaPrimitiveHandler.java Mon Aug 21 07:35:15 2006
@@ -0,0 +1,139 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.yoko.bindings.corba.types;
+
+import javax.xml.namespace.QName;
+
+import org.omg.CORBA.TCKind;
+import org.omg.CORBA.TypeCode;
+
+public class CorbaPrimitiveHandler extends CorbaObjectHandler {
+
+    private Object value;
+    
+    public CorbaPrimitiveHandler(QName primName, QName primIdlType, TypeCode primTC, Object primType) {
+        super(primName, primIdlType, primTC, primType);
+    }
+    
+    public Object getValue() {
+        return value;
+    }
+    
+    public String getValueData() {
+        String data = "";
+
+        switch (this.typeCode.kind().value()) {
+
+        case TCKind._tk_boolean:
+            data = ((Boolean)value).toString();
+            break;
+        case TCKind._tk_char:
+            char charValue = ((Character)value).charValue();
+            data = Byte.toString((byte) charValue);
+            break;
+        case TCKind._tk_wchar:
+            data = ((Character)value).toString();
+            break;
+        case TCKind._tk_octet:
+            data = ((Byte)value).toString();
+            break;
+        case TCKind._tk_short:
+        case TCKind._tk_ushort:
+            data = ((Short)value).toString();
+            break;
+        case TCKind._tk_long:
+            data = ((Long)value).toString();
+            break;
+        case TCKind._tk_ulong:
+        case TCKind._tk_longlong:
+        case TCKind._tk_ulonglong:
+            data = ((java.math.BigInteger)value).toString();
+            break;
+        case TCKind._tk_float:
+            data = ((Float)value).toString();
+            break;
+        case TCKind._tk_double:
+            data = ((Double)value).toString();
+            break;
+        case TCKind._tk_string:
+        case TCKind._tk_wstring:
+            data = (String)value;
+            break;
+        default:
+            // Default: assume that whatever stored the data will also know how to convert it into what 
+            // it needs.
+            data = (String)value;
+        }
+        
+        return data;
+    }
+    
+    public void setValue(Object obj) {
+        value = obj;
+    }
+    
+    public void setValueFromData(String data) {
+        switch (typeCode.kind().value()) {
+
+        case TCKind._tk_boolean:
+            value = new Boolean(data);
+            break;
+        case TCKind._tk_char:
+            // A char is mapped to a byte, we need it as a character
+            Byte byteValue = new Byte(data);
+            value = new Character((char) byteValue.byteValue());
+            break;
+        case TCKind._tk_wchar:
+            // A wide char is mapped to a string, we need it as a character
+            value = new Character(data.charAt(0));
+            break;
+        case TCKind._tk_octet:
+            // An octet is mapped to a short, we need it as a byte
+            Short shortValue = new Short(data);
+            value = new Byte(shortValue.byteValue());
+            break;
+        case TCKind._tk_short:
+        case TCKind._tk_ushort:
+            value = new Short(data);
+            break;
+        case TCKind._tk_long:
+            value = new Long(data);
+            break;
+        case TCKind._tk_ulong:
+        case TCKind._tk_longlong:
+        case TCKind._tk_ulonglong:
+            value = new java.math.BigInteger(data);
+            break;
+        case TCKind._tk_float:
+            value = new Float(data);
+            break;
+        case TCKind._tk_double:
+            value = new Double(data);
+            break;
+        case TCKind._tk_string:
+        case TCKind._tk_wstring:
+            value = data;
+            break;
+        default:
+            // Default: just store the data we were given.  We'll expect that whatever stored the data
+            // will also know how to convert it into what it needs.
+            value = data;
+        }
+    }
+}

Added: incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/types/CorbaSequenceHandler.java
URL: http://svn.apache.org/viewvc/incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/types/CorbaSequenceHandler.java?rev=433254&view=auto
==============================================================================
--- incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/types/CorbaSequenceHandler.java (added)
+++ incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/types/CorbaSequenceHandler.java Mon Aug 21 07:35:15 2006
@@ -0,0 +1,62 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.yoko.bindings.corba.types;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.xml.namespace.QName;
+
+import org.omg.CORBA.TypeCode;
+
+public class CorbaSequenceHandler extends CorbaObjectHandler {
+
+    private List<CorbaObjectHandler> elements = new ArrayList<CorbaObjectHandler>();
+    private CorbaObjectHandler templateElement;
+    
+    public CorbaSequenceHandler(QName seqName, QName seqIdlType, TypeCode seqTC, Object seqType) {
+        super(seqName, seqIdlType, seqTC, seqType);
+    }
+    
+    public void addElement(CorbaObjectHandler el) {
+        elements.add(el);
+    }
+    
+    public int getNumberOfElements() {
+        return elements.size();
+    }
+    
+    public List<CorbaObjectHandler> getElements() {
+        return elements;
+    }
+    
+    public CorbaObjectHandler getElement(int index) {
+        return elements.get(index);
+    }
+    
+    // These handle the case where we have an unbounded sequence and we need to 
+    // construct Corba objects during the reading of an object.
+    public CorbaObjectHandler getTemplateElement() {
+        return templateElement;
+    }
+
+    public void setTemplateElement(CorbaObjectHandler el) {
+        templateElement = el;
+    }
+}

Added: incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/types/CorbaStructHandler.java
URL: http://svn.apache.org/viewvc/incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/types/CorbaStructHandler.java?rev=433254&view=auto
==============================================================================
--- incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/types/CorbaStructHandler.java (added)
+++ incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/types/CorbaStructHandler.java Mon Aug 21 07:35:15 2006
@@ -0,0 +1,62 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.yoko.bindings.corba.types;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.xml.namespace.QName;
+
+import org.omg.CORBA.TypeCode;
+
+public class CorbaStructHandler extends CorbaObjectHandler {
+
+    List<CorbaObjectHandler> members = new ArrayList<CorbaObjectHandler>();
+    
+    public CorbaStructHandler(QName structName, QName structIdlType, TypeCode structTC, Object structType) {
+        super(structName, structIdlType, structTC, structType);
+    }
+    
+    public void addMember(CorbaObjectHandler member) {
+        members.add(member);
+    }
+    
+    public List<CorbaObjectHandler> getMembers() {
+        return members;
+    }
+    
+    public CorbaObjectHandler getMember(int index) {
+        return members.get(index);
+    }
+    
+    public CorbaObjectHandler getMemberByName(String name) {
+        CorbaObjectHandler member = null;
+        
+        for (Iterator<CorbaObjectHandler> iterator = members.iterator(); iterator.hasNext();) {
+            CorbaObjectHandler current = iterator.next();
+            if (current.getName().getLocalPart().equals(name)) {
+                member = current;
+                break;
+            }
+        }
+        
+        return member;
+    }
+}

Added: incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/types/CorbaUnionHandler.java
URL: http://svn.apache.org/viewvc/incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/types/CorbaUnionHandler.java?rev=433254&view=auto
==============================================================================
--- incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/types/CorbaUnionHandler.java (added)
+++ incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/types/CorbaUnionHandler.java Mon Aug 21 07:35:15 2006
@@ -0,0 +1,201 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.yoko.bindings.corba.types;
+
+import java.util.ArrayList;
+//import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+//import java.util.Map;
+
+import javax.xml.namespace.QName;
+
+import org.apache.schemas.yoko.bindings.corba.CaseType;
+import org.apache.schemas.yoko.bindings.corba.Enum;
+import org.apache.schemas.yoko.bindings.corba.Enumerator;
+import org.apache.schemas.yoko.bindings.corba.Union;
+import org.apache.schemas.yoko.bindings.corba.Unionbranch;
+
+import org.omg.CORBA.TCKind;
+import org.omg.CORBA.TypeCode;
+
+public class CorbaUnionHandler extends CorbaObjectHandler {
+
+    private CorbaObjectHandler discriminator;
+    private CorbaObjectHandler value;
+    private List<CorbaObjectHandler> cases = new ArrayList<CorbaObjectHandler>();
+    private int defaultIndex;
+    private List<String> labels = new ArrayList<String>();
+    //private Map<String, CorbaObject
+    
+
+    public CorbaUnionHandler(QName unionName, QName unionIdlType, TypeCode unionTC, Object unionType) {
+        super(unionName, unionIdlType, unionTC, unionType);
+        
+        // Build a list of labels.  This will be used to generate a discriminator value for the 
+        // default case (since we are not provided with one from the Stax stream of the Celtix object)
+        Union union = (Union)unionType;
+        List<Unionbranch> branches = union.getUnionbranch();
+        int index = 0;
+        for (Iterator<Unionbranch> branchesIter = branches.iterator(); branchesIter.hasNext();) {
+            Unionbranch branch = branchesIter.next();
+            List<CaseType> branchCases = branch.getCase();
+            if (branchCases.size() == 0) {
+                defaultIndex = index;
+            } else {
+                for (Iterator<CaseType> casesIter = branchCases.iterator(); casesIter.hasNext();) {
+                    CaseType ct = casesIter.next();
+                    labels.add(ct.getLabel());
+                }
+            }
+            
+            index++;
+        }
+    }
+    
+    public CorbaObjectHandler getDiscriminator() {
+        return discriminator;
+    }
+    
+    public String getDisciminatorValueData() {
+        String result = null;
+        // The discriminator is handled by either the enum handler or the primitive handler.
+        if (discriminator.getTypeCodeKind().value() == TCKind._tk_enum) {
+            CorbaEnumHandler enumHandler = (CorbaEnumHandler)discriminator;
+            result = enumHandler.getValue();
+        } else {
+            CorbaPrimitiveHandler primitiveHandler = (CorbaPrimitiveHandler)discriminator;
+            result = primitiveHandler.getValueData();
+        }
+        return result;        
+    }
+    
+    public void setDiscriminator(CorbaObjectHandler disc) {
+        discriminator = disc;
+    }
+    
+    public void setDiscriminatorValueFromData(String data) {
+        // The discriminator is handled by either the enum handler or the primitive handler.
+        if (discriminator.getTypeCodeKind().value() == TCKind._tk_enum) {
+            CorbaEnumHandler enumHandler = (CorbaEnumHandler)discriminator;
+            enumHandler.setValue(data);
+        } else {
+            CorbaPrimitiveHandler primitiveHandler = (CorbaPrimitiveHandler)discriminator;
+            primitiveHandler.setValueFromData(data);
+        }
+    }
+    
+    public List<CorbaObjectHandler> getCases() {
+        return cases;
+    }
+    
+    public CorbaObjectHandler getBranchByName(String caseName) {
+        for (Iterator<CorbaObjectHandler> caseIter = cases.iterator(); caseIter.hasNext();) {
+            CorbaObjectHandler obj = caseIter.next();
+            if (obj.getName().getLocalPart().equals(caseName)) {
+                return obj;
+            }
+        }
+        
+        return null;
+    }
+    
+    public void addCase(CorbaObjectHandler unionCase) {
+        cases.add(unionCase);
+    }
+    
+    public CorbaObjectHandler getValue() {
+        return value;
+    }
+    
+    public void setValue(String caseName, CorbaObjectHandler val) {
+        value = val;
+    }
+    
+    public int getDefaultIndex() {
+        // TODO: What will this be used for?
+        return defaultIndex;
+    }
+    
+    public String createDefaultDiscriminatorLabel() {
+        String label = null;
+
+        // According to the CORBA specification, an enumeration discriminator can be one of the 
+        // following types:
+        //   - *integer* (short, long, ulong, either signed or unsigned)
+        //   - boolean
+        //   - character
+        //   - enumeration
+        // So when we need to create a default discriminator to accomodate for the lack of a 
+        // discriminator in the Celtix object, these are the four cases we must check for.
+        if (discriminator.getTypeCodeKind().value() == TCKind._tk_boolean) {
+            // We can only have a default case with a boolean discriminator if we have
+            // only one case, either TRUE or FALSE.  Therefore, we only need to check
+            // against the first label, if there is one.
+            if (labels.isEmpty()) {
+                label = "false";
+            } else {
+                boolean boolValue = Boolean.parseBoolean(labels.get(0));
+                label = String.valueOf(!boolValue);
+            }
+        } else if (discriminator.getTypeCodeKind().value() == TCKind._tk_char) {
+            if (labels.isEmpty()) {
+                label = String.valueOf('0');
+            } else {
+                char charValue = labels.get(0).charAt(0);
+                while (labels.contains(String.valueOf(charValue))) {
+                    charValue++;
+                }
+                label = String.valueOf(value);
+            }
+        } else if (discriminator.getTypeCodeKind().value() == TCKind._tk_enum) {
+            // Get the list of possible enumerations in the enumerator and compare these to the
+            // labels we obtained from the Union definition.  In order for the union/enum 
+            // combination to be syntactically correct, there must be one enumeration not included
+            // as a case for the default case to be valid.
+            Enum enumType = (Enum)discriminator.getType();
+            List<Enumerator> enumerators = enumType.getEnumerator();
+            if (labels.isEmpty()) {
+                // Any value will do since we only have a default case.
+                label = enumerators.get(0).getValue();                  
+            } else {
+                String enumLabel = null;
+                for (Iterator<Enumerator> enumIter = enumerators.iterator(); enumIter.hasNext();) {
+                    enumLabel = ((Enumerator)enumIter.next()).getValue();
+                    if (!labels.contains(enumLabel)) {
+                        label = enumLabel;
+                        break;
+                    }
+                }
+            }
+        } else {
+            // this is some sort of integer (short, long, ulong)
+            if (labels.isEmpty()) {
+                label = String.valueOf(0);   
+            } else {
+                long longValue = Long.parseLong(labels.get(0));
+                while (labels.contains(String.valueOf(longValue))) {
+                    longValue++;
+                }   
+                label = String.valueOf(value);
+            }
+        }
+        return label;
+    }
+}

Modified: incubator/yoko/trunk/bindings/src/test/java/org/apache/yoko/bindings/corba/CorbaBindingImplTest.java
URL: http://svn.apache.org/viewvc/incubator/yoko/trunk/bindings/src/test/java/org/apache/yoko/bindings/corba/CorbaBindingImplTest.java?rev=433254&r1=433253&r2=433254&view=diff
==============================================================================
--- incubator/yoko/trunk/bindings/src/test/java/org/apache/yoko/bindings/corba/CorbaBindingImplTest.java (original)
+++ incubator/yoko/trunk/bindings/src/test/java/org/apache/yoko/bindings/corba/CorbaBindingImplTest.java Mon Aug 21 07:35:15 2006
@@ -22,6 +22,9 @@
 
 import junit.framework.TestCase;
 
+import org.apache.yoko.bindings.corba.types.CorbaObjectHandler;
+import org.apache.yoko.bindings.corba.types.CorbaPrimitiveHandler;
+
 import org.omg.CORBA.ORB;
 import org.omg.CORBA.TypeCode;
 
@@ -104,9 +107,9 @@
         CorbaStreamable[] arguments = msg.getStreamableArguments();
         assertTrue(arguments.length == 1);
         
-        CorbaObjectHolder arg = arguments[0].getObject();
+        CorbaObjectHandler arg = arguments[0].getObject();
         assertNotNull(arg);
-        assertTrue(arg.getValueData().equals("TestString"));
+        assertTrue(((CorbaPrimitiveHandler)arg).getValueData().equals("TestString"));
     }
     
     public void testUnmarshal() throws Exception {
@@ -125,8 +128,8 @@
         QName paramName = new QName("param1");
         QName paramIdlType = CorbaConstants.NT_CORBA_STRING;
         TypeCode paramTC = CorbaUtils.getPrimitiveTypeCode(orb, paramIdlType);
-        CorbaObjectHolder obj = new CorbaObjectHolder(paramName, paramIdlType, paramTC, null);
-        obj.setObjectValueFromData("TestString");
+        CorbaPrimitiveHandler obj = new CorbaPrimitiveHandler(paramName, paramIdlType, paramTC, null);
+        obj.setValueFromData("TestString");
         CorbaStreamable streamable = new CorbaStreamable(obj, paramName);
         CorbaMessage msg = new CorbaMessage();
         msg.addStreamableArgument(streamable);

Modified: incubator/yoko/trunk/bindings/src/test/java/org/apache/yoko/bindings/corba/CorbaMessageTest.java
URL: http://svn.apache.org/viewvc/incubator/yoko/trunk/bindings/src/test/java/org/apache/yoko/bindings/corba/CorbaMessageTest.java?rev=433254&r1=433253&r2=433254&view=diff
==============================================================================
--- incubator/yoko/trunk/bindings/src/test/java/org/apache/yoko/bindings/corba/CorbaMessageTest.java (original)
+++ incubator/yoko/trunk/bindings/src/test/java/org/apache/yoko/bindings/corba/CorbaMessageTest.java Mon Aug 21 07:35:15 2006
@@ -22,6 +22,8 @@
 
 import junit.framework.TestCase;
 
+import org.apache.yoko.bindings.corba.types.CorbaPrimitiveHandler;
+
 import org.omg.CORBA.ORB;
 import org.omg.CORBA.TCKind;
 import org.omg.CORBA.TypeCode;
@@ -63,13 +65,13 @@
         QName param1Name = new QName("param1");
         QName param1IdlType = new QName(CorbaConstants.NU_WSDL_CORBA, "long", CorbaConstants.NP_WSDL_CORBA);
         TypeCode param1TypeCode = orb.get_primitive_tc(TCKind.tk_long);
-        CorbaObjectHolder param1 = new CorbaObjectHolder(param1Name, param1IdlType, param1TypeCode, null);
+        CorbaPrimitiveHandler param1 = new CorbaPrimitiveHandler(param1Name, param1IdlType, param1TypeCode, null);
         CorbaStreamable p1 = new CorbaStreamable(param1, param1Name);
         
         QName param2Name = new QName("param2");
         QName param2IdlType = new QName(CorbaConstants.NU_WSDL_CORBA, "string", CorbaConstants.NP_WSDL_CORBA);
         TypeCode param2TypeCode = orb.get_primitive_tc(TCKind.tk_string);
-        CorbaObjectHolder param2 = new CorbaObjectHolder(param2Name, param2IdlType, param2TypeCode, null);
+        CorbaPrimitiveHandler param2 = new CorbaPrimitiveHandler(param2Name, param2IdlType, param2TypeCode, null);
         CorbaStreamable p2 = new CorbaStreamable(param2, param2Name);
         
         msg.addStreamableArgument(p1);
@@ -83,7 +85,7 @@
         QName returnName = new QName("param2");
         QName returnIdlType = new QName(CorbaConstants.NU_WSDL_CORBA, "boolean", CorbaConstants.NP_WSDL_CORBA);
         TypeCode returnTypeCode = orb.get_primitive_tc(TCKind.tk_boolean);
-        CorbaObjectHolder returnValue = new CorbaObjectHolder(returnName, returnIdlType, returnTypeCode, null);
+        CorbaPrimitiveHandler returnValue = new CorbaPrimitiveHandler(returnName, returnIdlType, returnTypeCode, null);
         CorbaStreamable ret = new CorbaStreamable(returnValue, returnName);
         
         msg.setStreamableReturn(ret);

Modified: incubator/yoko/trunk/bindings/src/test/java/org/apache/yoko/bindings/corba/CorbaObjectReaderTest.java
URL: http://svn.apache.org/viewvc/incubator/yoko/trunk/bindings/src/test/java/org/apache/yoko/bindings/corba/CorbaObjectReaderTest.java?rev=433254&r1=433253&r2=433254&view=diff
==============================================================================
--- incubator/yoko/trunk/bindings/src/test/java/org/apache/yoko/bindings/corba/CorbaObjectReaderTest.java (original)
+++ incubator/yoko/trunk/bindings/src/test/java/org/apache/yoko/bindings/corba/CorbaObjectReaderTest.java Mon Aug 21 07:35:15 2006
@@ -36,6 +36,15 @@
 import org.apache.schemas.yoko.bindings.corba.MemberType;
 import org.apache.schemas.yoko.bindings.corba.Sequence;
 import org.apache.schemas.yoko.bindings.corba.Struct;
+import org.apache.yoko.bindings.corba.types.CorbaArrayHandler;
+//import org.apache.yoko.bindings.corba.types.CorbaEnumHandler;
+import org.apache.yoko.bindings.corba.types.CorbaExceptionHandler;
+//import org.apache.yoko.bindings.corba.types.CorbaFixedHandler;
+import org.apache.yoko.bindings.corba.types.CorbaObjectHandler;
+import org.apache.yoko.bindings.corba.types.CorbaPrimitiveHandler;
+import org.apache.yoko.bindings.corba.types.CorbaSequenceHandler;
+import org.apache.yoko.bindings.corba.types.CorbaStructHandler;
+//import org.apache.yoko.bindings.corba.types.CorbaUnionHandler;
 import org.apache.yoko.orb.CORBA.OutputStream;
 import org.apache.yoko.orb.OCI.Buffer;
 
@@ -261,18 +270,19 @@
 
         // build the object holder for an array.
         TypeCode arrayTC = orb.create_array_tc(data.length, orb.get_primitive_tc(TCKind.tk_long));
-        CorbaObjectHolder obj = new CorbaObjectHolder(new QName("Array"), arrayIdlType, arrayTC, arrayType);
+        CorbaArrayHandler obj = new CorbaArrayHandler(new QName("Array"), arrayIdlType, arrayTC, arrayType);
         for (int i = 0; i < data.length; ++i) {
-            CorbaObjectHolder nestedObj =
-                new CorbaObjectHolder(new QName("item"), longIdlType, 
+            CorbaObjectHandler nestedObj =
+                new CorbaPrimitiveHandler(new QName("item"), longIdlType, 
                                       orb.get_primitive_tc(TCKind.tk_long), null);
-            obj.addNestedObject(nestedObj);
+            obj.addElement(nestedObj);
         }
         
         reader.readArray(obj);
-        int length = obj.getNestedObjects().size();
+        int length = obj.getElements().size();
         for (int i = 0; i < length; ++i) {
-            assertTrue(new Long(obj.getNestedObject(i).getValueData()).intValue() == data[i]); 
+            assertTrue(new Long(((CorbaPrimitiveHandler)obj.getElement(i)).getValueData()).intValue() 
+                       == data[i]); 
         }
     }
     
@@ -300,18 +310,18 @@
 
         // build the object holder for a sequence.
         TypeCode seqTC = orb.create_sequence_tc(data.length, orb.get_primitive_tc(TCKind.tk_string));
-        CorbaObjectHolder obj = new CorbaObjectHolder(new QName("Seq"), seqIdlType, seqTC, seqType);
+        CorbaSequenceHandler obj = new CorbaSequenceHandler(new QName("Seq"), seqIdlType, seqTC, seqType);
         for (int i = 0; i < data.length; ++i) {
-            CorbaObjectHolder nestedObj =
-                new CorbaObjectHolder(new QName("item"), stringIdlType, 
+            CorbaPrimitiveHandler nestedObj =
+                new CorbaPrimitiveHandler(new QName("item"), stringIdlType, 
                                       orb.get_primitive_tc(TCKind.tk_string), null);
-            obj.addNestedObject(nestedObj);
+            obj.addElement(nestedObj);
         }
         
         reader.readSequence(obj);
-        int length = obj.getNestedObjects().size();
+        int length = obj.getElements().size();
         for (int i = 0; i < length; ++i) {
-            assertTrue(obj.getNestedObject(i).getValueData().equals(data[i]));
+            assertTrue(((CorbaPrimitiveHandler)obj.getElement(i)).getValueData().equals(data[i]));
         }
     }
     
@@ -363,21 +373,23 @@
         structMembers[2] = new StructMember("member3", orb.get_primitive_tc(TCKind.tk_boolean), null);
         TypeCode structTC = orb.create_struct_tc("IDL:org.apache.yoko.TestStruct/1.0", "TestStruct", 
                                                  structMembers);
-        CorbaObjectHolder obj = new CorbaObjectHolder(new QName("TestStruct"), structIdlType, 
+        CorbaStructHandler obj = new CorbaStructHandler(new QName("TestStruct"), structIdlType, 
                                                       structTC, structType);
-        obj.addNestedObject(
-                new CorbaObjectHolder(new QName("member1"), longIdlType, structMembers[0].type, null));
-        obj.addNestedObject(
-                new CorbaObjectHolder(new QName("member2"), stringIdlType, structMembers[1].type, null));
-        obj.addNestedObject(
-                new CorbaObjectHolder(new QName("member3"), boolIdlType, structMembers[2].type, null));
+        obj.addMember(
+                new CorbaPrimitiveHandler(new QName("member1"), longIdlType, structMembers[0].type, null));
+        obj.addMember(
+                new CorbaPrimitiveHandler(new QName("member2"), stringIdlType, structMembers[1].type, null));
+        obj.addMember(
+                new CorbaPrimitiveHandler(new QName("member3"), boolIdlType, structMembers[2].type, null));
         
         reader.readStruct(obj);
         
-        List<CorbaObjectHolder> nestedObjs = obj.getNestedObjects();
-        assertTrue(new Integer(nestedObjs.get(0).getValueData()).intValue() == member1);
-        assertTrue(nestedObjs.get(1).getValueData().equals(member2));
-        assertTrue(new Boolean(nestedObjs.get(2).getValueData()).booleanValue() == member3);
+        List<CorbaObjectHandler> nestedObjs = obj.getMembers();
+        assertTrue(new Integer(((CorbaPrimitiveHandler)nestedObjs.get(0)).getValueData()).intValue() 
+                   == member1);
+        assertTrue(((CorbaPrimitiveHandler)nestedObjs.get(1)).getValueData().equals(member2));
+        assertTrue(new Boolean(((CorbaPrimitiveHandler)nestedObjs.get(2)).getValueData()).booleanValue()
+                   == member3);
     }
   
     public void testReadException() {
@@ -420,17 +432,17 @@
         exceptMembers[1] = new StructMember("message", orb.get_primitive_tc(TCKind.tk_string), null);
         TypeCode exceptTC = orb.create_exception_tc("IDL:org.apache.yoko.TestException/1.0", "TestException", 
                                                     exceptMembers);
-        CorbaObjectHolder obj = new CorbaObjectHolder(new QName("TestException"), exceptIdlType, 
-                                                      exceptTC, exceptType);
-        obj.addNestedObject(
-                new CorbaObjectHolder(new QName("code"), shortIdlType, exceptMembers[0].type, null));
-        obj.addNestedObject(
-                new CorbaObjectHolder(new QName("message"), stringIdlType, exceptMembers[1].type, null));
+        CorbaExceptionHandler obj = new CorbaExceptionHandler(new QName("TestException"), exceptIdlType, 
+                                                              exceptTC, exceptType);
+        obj.addMember(
+                new CorbaPrimitiveHandler(new QName("code"), shortIdlType, exceptMembers[0].type, null));
+        obj.addMember(
+                new CorbaPrimitiveHandler(new QName("message"), stringIdlType, exceptMembers[1].type, null));
         
         reader.readException(obj);
         
-        List<CorbaObjectHolder> nestedObjs = obj.getNestedObjects();
-        assertTrue(new Short(nestedObjs.get(0).getValueData()).shortValue() == code);
-        assertTrue(nestedObjs.get(1).getValueData().equals(message));
+        List<CorbaObjectHandler> nestedObjs = obj.getMembers();
+        assertTrue(new Short(((CorbaPrimitiveHandler)nestedObjs.get(0)).getValueData()).shortValue() == code);
+        assertTrue(((CorbaPrimitiveHandler)nestedObjs.get(1)).getValueData().equals(message));
     } 
 }

Modified: incubator/yoko/trunk/bindings/src/test/java/org/apache/yoko/bindings/corba/CorbaObjectWriterTest.java
URL: http://svn.apache.org/viewvc/incubator/yoko/trunk/bindings/src/test/java/org/apache/yoko/bindings/corba/CorbaObjectWriterTest.java?rev=433254&r1=433253&r2=433254&view=diff
==============================================================================
--- incubator/yoko/trunk/bindings/src/test/java/org/apache/yoko/bindings/corba/CorbaObjectWriterTest.java (original)
+++ incubator/yoko/trunk/bindings/src/test/java/org/apache/yoko/bindings/corba/CorbaObjectWriterTest.java Mon Aug 21 07:35:15 2006
@@ -35,6 +35,14 @@
 import org.apache.schemas.yoko.bindings.corba.MemberType;
 import org.apache.schemas.yoko.bindings.corba.Sequence;
 import org.apache.schemas.yoko.bindings.corba.Struct;
+import org.apache.yoko.bindings.corba.types.CorbaArrayHandler;
+//import org.apache.yoko.bindings.corba.types.CorbaEnumHandler;
+import org.apache.yoko.bindings.corba.types.CorbaExceptionHandler;
+//import org.apache.yoko.bindings.corba.types.CorbaFixedHandler;
+import org.apache.yoko.bindings.corba.types.CorbaPrimitiveHandler;
+import org.apache.yoko.bindings.corba.types.CorbaSequenceHandler;
+import org.apache.yoko.bindings.corba.types.CorbaStructHandler;
+//import org.apache.yoko.bindings.corba.types.CorbaUnionHandler;
 import org.apache.yoko.orb.CORBA.OutputStream;
 import org.apache.yoko.orb.OCI.Buffer;
 
@@ -252,13 +260,13 @@
 
         // build the object holder for an array.
         TypeCode arrayTC = orb.create_array_tc(data.length, orb.get_primitive_tc(TCKind.tk_long));
-        CorbaObjectHolder obj = new CorbaObjectHolder(new QName("Array"), arrayIdlType, arrayTC, arrayType);
+        CorbaArrayHandler obj = new CorbaArrayHandler(new QName("Array"), arrayIdlType, arrayTC, arrayType);
         for (int i = 0; i < data.length; ++i) {
-            CorbaObjectHolder nestedObj =
-                new CorbaObjectHolder(new QName("item"), longIdlType, 
+            CorbaPrimitiveHandler nestedObj =
+                new CorbaPrimitiveHandler(new QName("item"), longIdlType, 
                                       orb.get_primitive_tc(TCKind.tk_long), null);
-            nestedObj.setObjectValueFromData(Integer.toString(data[i]));
-            obj.addNestedObject(nestedObj);
+            nestedObj.setValueFromData(Integer.toString(data[i]));
+            obj.addElement(nestedObj);
         }
 
         Buffer buf = new Buffer();
@@ -287,13 +295,13 @@
 
         // build the object holder for a sequence.
         TypeCode seqTC = orb.create_sequence_tc(data.length, orb.get_primitive_tc(TCKind.tk_string));
-        CorbaObjectHolder obj = new CorbaObjectHolder(new QName("Seq"), seqIdlType, seqTC, seqType);
+        CorbaSequenceHandler obj = new CorbaSequenceHandler(new QName("Seq"), seqIdlType, seqTC, seqType);
         for (int i = 0; i < data.length; ++i) {
-            CorbaObjectHolder nestedObj =
-                new CorbaObjectHolder(new QName("item"), stringIdlType, 
+            CorbaPrimitiveHandler nestedObj =
+                new CorbaPrimitiveHandler(new QName("item"), stringIdlType, 
                                       orb.get_primitive_tc(TCKind.tk_string), null);
-            nestedObj.setObjectValueFromData(data[i]);
-            obj.addNestedObject(nestedObj);
+            nestedObj.setValueFromData(data[i]);
+            obj.addElement(nestedObj);
         }
         
         Buffer buf = new Buffer();
@@ -347,22 +355,22 @@
         structMembers[2] = new StructMember("member3", orb.get_primitive_tc(TCKind.tk_boolean), null);
         TypeCode structTC = orb.create_struct_tc("IDL:org.apache.yoko.TestStruct/1.0", "TestStruct", 
                                                  structMembers);
-        CorbaObjectHolder obj = new CorbaObjectHolder(new QName("TestStruct"), structIdlType, 
-                                                      structTC, structType);
-        CorbaObjectHolder memberObj1 = 
-            new CorbaObjectHolder(new QName("member1"), longIdlType, structMembers[0].type, null);
-        CorbaObjectHolder memberObj2 = 
-            new CorbaObjectHolder(new QName("member2"), stringIdlType, structMembers[1].type, null);
-        CorbaObjectHolder memberObj3 = 
-            new CorbaObjectHolder(new QName("member3"), boolIdlType, structMembers[2].type, null);
-        
-        memberObj1.setObjectValueFromData(Integer.toString(member1));
-        memberObj2.setObjectValueFromData(member2);
-        memberObj3.setObjectValueFromData(Boolean.toString(member3));
-        
-        obj.addNestedObject(memberObj1);
-        obj.addNestedObject(memberObj2);
-        obj.addNestedObject(memberObj3);
+        CorbaStructHandler obj = new CorbaStructHandler(new QName("TestStruct"), structIdlType, 
+                                                        structTC, structType);
+        CorbaPrimitiveHandler memberObj1 = 
+            new CorbaPrimitiveHandler(new QName("member1"), longIdlType, structMembers[0].type, null);
+        CorbaPrimitiveHandler memberObj2 = 
+            new CorbaPrimitiveHandler(new QName("member2"), stringIdlType, structMembers[1].type, null);
+        CorbaPrimitiveHandler memberObj3 = 
+            new CorbaPrimitiveHandler(new QName("member3"), boolIdlType, structMembers[2].type, null);
+        
+        memberObj1.setValueFromData(Integer.toString(member1));
+        memberObj2.setValueFromData(member2);
+        memberObj3.setValueFromData(Boolean.toString(member3));
+        
+        obj.addMember(memberObj1);
+        obj.addMember(memberObj2);
+        obj.addMember(memberObj3);
         
         Buffer buf = new Buffer();
         OutputStream oStream = new OutputStream(buf);
@@ -409,15 +417,17 @@
         exceptMembers[0] = new StructMember("code", orb.get_primitive_tc(TCKind.tk_short), null);
         exceptMembers[1] = new StructMember("message", orb.get_primitive_tc(TCKind.tk_string), null);
         TypeCode exceptTC = orb.create_exception_tc(reposID, "TestException", exceptMembers);
-        CorbaObjectHolder obj = new CorbaObjectHolder(new QName("TestException"), exceptIdlType, 
-                                                      exceptTC, exceptType);
+        CorbaExceptionHandler obj = new CorbaExceptionHandler(new QName("TestException"), exceptIdlType, 
+                                                              exceptTC, exceptType);
         
-        CorbaObjectHolder member1 = new CorbaObjectHolder(new QName("code"), shortIdlType, exceptMembers[0].type, null);
-        member1.setObjectValueFromData(Short.toString(code));
-        CorbaObjectHolder member2 = new CorbaObjectHolder(new QName("message"), stringIdlType, exceptMembers[1].type, null);
-        member2.setObjectValueFromData(message);
-        obj.addNestedObject(member1);
-        obj.addNestedObject(member2);
+        CorbaPrimitiveHandler member1 = 
+            new CorbaPrimitiveHandler(new QName("code"), shortIdlType, exceptMembers[0].type, null);
+        member1.setValueFromData(Short.toString(code));
+        CorbaPrimitiveHandler member2 = 
+            new CorbaPrimitiveHandler(new QName("message"), stringIdlType, exceptMembers[1].type, null);
+        member2.setValueFromData(message);
+        obj.addMember(member1);
+        obj.addMember(member2);
 
         Buffer buf = new Buffer();
         OutputStream oStream = new OutputStream(buf);

Modified: incubator/yoko/trunk/bindings/src/test/java/org/apache/yoko/bindings/corba/CorbaStreamableTest.java
URL: http://svn.apache.org/viewvc/incubator/yoko/trunk/bindings/src/test/java/org/apache/yoko/bindings/corba/CorbaStreamableTest.java?rev=433254&r1=433253&r2=433254&view=diff
==============================================================================
--- incubator/yoko/trunk/bindings/src/test/java/org/apache/yoko/bindings/corba/CorbaStreamableTest.java (original)
+++ incubator/yoko/trunk/bindings/src/test/java/org/apache/yoko/bindings/corba/CorbaStreamableTest.java Mon Aug 21 07:35:15 2006
@@ -27,6 +27,7 @@
 
 import junit.framework.TestCase;
 
+import org.apache.yoko.bindings.corba.types.CorbaPrimitiveHandler;
 import org.apache.yoko.orb.CORBA.OutputStream;
 import org.apache.yoko.orb.OCI.Buffer;
 
@@ -66,7 +67,7 @@
         QName objName = new QName("object");
         QName objIdlType = new QName(CorbaConstants.NU_WSDL_CORBA, "short", CorbaConstants.NP_WSDL_CORBA);
         TypeCode objTypeCode = orb.get_primitive_tc(TCKind.tk_short);
-        CorbaObjectHolder obj = new CorbaObjectHolder(objName, objIdlType, objTypeCode, null);
+        CorbaPrimitiveHandler obj = new CorbaPrimitiveHandler(objName, objIdlType, objTypeCode, null);
         CorbaStreamable streamable = new CorbaStreamable(obj, objName);       
 
         assertNotNull(streamable);
@@ -76,13 +77,13 @@
         QName objName = new QName("object");
         QName objIdlType = new QName(CorbaConstants.NU_WSDL_CORBA, "float", CorbaConstants.NP_WSDL_CORBA);
         TypeCode objTypeCode = orb.get_primitive_tc(TCKind.tk_float);
-        CorbaObjectHolder obj = new CorbaObjectHolder(objName, objIdlType, objTypeCode, null);
+        CorbaPrimitiveHandler obj = new CorbaPrimitiveHandler(objName, objIdlType, objTypeCode, null);
         CorbaStreamable streamable = new CorbaStreamable(obj, objName);       
 
         TypeCode type = streamable._type();
         assertTrue(type.kind().value() == objTypeCode.kind().value());
         
-        CorbaObjectHolder storedObj = streamable.getObject();
+        CorbaPrimitiveHandler storedObj = (CorbaPrimitiveHandler)streamable.getObject();
         assertNotNull(storedObj);
         
         int mode = streamable.getMode();
@@ -96,7 +97,7 @@
         QName objName = new QName("object");
         QName objIdlType = new QName(CorbaConstants.NU_WSDL_CORBA, "boolean", CorbaConstants.NP_WSDL_CORBA);
         TypeCode objTypeCode = orb.get_primitive_tc(TCKind.tk_boolean);
-        CorbaObjectHolder obj = new CorbaObjectHolder(objName, objIdlType, objTypeCode, null);
+        CorbaPrimitiveHandler obj = new CorbaPrimitiveHandler(objName, objIdlType, objTypeCode, null);
         CorbaStreamable streamable = new CorbaStreamable(obj, objName);       
 
         streamable.setMode(org.omg.CORBA.ARG_IN.value);
@@ -108,7 +109,7 @@
         QName objName = new QName("object");
         QName objIdlType = new QName(CorbaConstants.NU_WSDL_CORBA, "char", CorbaConstants.NP_WSDL_CORBA);
         TypeCode objTypeCode = orb.get_primitive_tc(TCKind.tk_char);
-        CorbaObjectHolder obj = new CorbaObjectHolder(objName, objIdlType, objTypeCode, null);
+        CorbaPrimitiveHandler obj = new CorbaPrimitiveHandler(objName, objIdlType, objTypeCode, null);
         CorbaStreamable streamable = new CorbaStreamable(obj, objName); 
         
         Buffer buf = new Buffer();
@@ -117,7 +118,7 @@
         
         InputStream iStream = oStream.create_input_stream();
         streamable._read(iStream);
-        CorbaObjectHolder streamableObj = streamable.getObject();
+        CorbaPrimitiveHandler streamableObj = (CorbaPrimitiveHandler)streamable.getObject();
         Object o = streamableObj.getValue();
         
         assertTrue(o instanceof Character);
@@ -129,8 +130,8 @@
         QName objName = new QName("object");
         QName objIdlType = new QName(CorbaConstants.NU_WSDL_CORBA, "wstring", CorbaConstants.NP_WSDL_CORBA);
         TypeCode objTypeCode = orb.get_primitive_tc(TCKind.tk_wstring);
-        CorbaObjectHolder obj = new CorbaObjectHolder(objName, objIdlType, objTypeCode, null);
-        obj.setObjectValueFromData("TestWString");
+        CorbaPrimitiveHandler obj = new CorbaPrimitiveHandler(objName, objIdlType, objTypeCode, null);
+        obj.setValueFromData("TestWString");
         CorbaStreamable streamable = new CorbaStreamable(obj, objName);
         
         Buffer buf = new Buffer();

Added: incubator/yoko/trunk/bindings/src/test/java/org/apache/yoko/bindings/corba/types/CorbaObjectHandlerTest.java
URL: http://svn.apache.org/viewvc/incubator/yoko/trunk/bindings/src/test/java/org/apache/yoko/bindings/corba/types/CorbaObjectHandlerTest.java?rev=433254&view=auto
==============================================================================
--- incubator/yoko/trunk/bindings/src/test/java/org/apache/yoko/bindings/corba/types/CorbaObjectHandlerTest.java (added)
+++ incubator/yoko/trunk/bindings/src/test/java/org/apache/yoko/bindings/corba/types/CorbaObjectHandlerTest.java Mon Aug 21 07:35:15 2006
@@ -0,0 +1,92 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.yoko.bindings.corba.types;
+
+import javax.xml.namespace.QName;
+
+import junit.framework.TestCase;
+
+import org.apache.yoko.bindings.corba.CorbaConstants;
+
+import org.omg.CORBA.ORB;
+import org.omg.CORBA.TCKind;
+import org.omg.CORBA.TypeCode;
+
+public class CorbaObjectHandlerTest extends TestCase {
+
+    private ORB orb;
+    
+    public CorbaObjectHandlerTest(String arg0) {
+        super(arg0);
+    }
+    
+    public static void main(String[] args) {
+        junit.textui.TestRunner.run(CorbaObjectHandlerTest.class);
+    }
+    
+    protected void setUp() throws Exception {
+        super.setUp();
+        
+        java.util.Properties props = System.getProperties();
+        props.put("org.omg.CORBA.ORBClass", "org.apache.yoko.orb.CORBA.ORB");
+        props.put("org.omg.CORBA.ORBSingletonClass", "org.apache.yoko.orb.CORBA.ORBSingleton");
+        props.put("yoko.orb.id", "Yoko-Server-Binding");
+        orb = ORB.init(new String[0], props);
+    }
+    
+    protected void tearDown() throws Exception {
+        if (orb != null) {
+            try {
+                orb.destroy();
+            } catch (Exception ex) {
+                // Do nothing.  Throw an Exception?
+            }
+        }
+    }
+    
+    public void testCreateCorbaObjectHandler() {
+        QName objName = new QName("object");
+        QName objIdlType = new QName(CorbaConstants.NU_WSDL_CORBA, "long", CorbaConstants.NP_WSDL_CORBA);
+        TypeCode objTypeCode = orb.get_primitive_tc(TCKind.tk_long);
+        CorbaObjectHandler obj = new CorbaObjectHandler(objName, objIdlType, objTypeCode, null);
+        assertNotNull(obj);
+    }
+    
+    public void testGetObjectAttributes() {
+        QName objName = new QName("object");
+        QName objIdlType = new QName(CorbaConstants.NU_WSDL_CORBA, "long", CorbaConstants.NP_WSDL_CORBA);
+        TypeCode objTypeCode = orb.get_primitive_tc(TCKind.tk_long);
+        CorbaObjectHandler obj = new CorbaObjectHandler(objName, objIdlType, objTypeCode, null);
+
+        QName name = obj.getName();
+        assertNotNull(name);
+        assertTrue(name.equals(objName));
+        
+        QName idlType = obj.getIdlType();
+        assertNotNull(idlType);
+        assertTrue(idlType.equals(objIdlType));
+        
+        TypeCode tc = obj.getTypeCode();
+        assertNotNull(tc);
+        assertTrue(tc.kind().value() == objTypeCode.kind().value());
+        
+        Object objDef = obj.getType();
+        assertNull(objDef);
+    }
+}