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);
+ }
+}