/** print an IDL operation */ public void printOperation(org.omg.CORBA.OperationDescription op, int indentation) { indent(indentation); String mode = ""; if (op.mode.equals(org.omg.CORBA.OperationMode.OP_ONEWAY)) mode = "oneway "; print(mode + TypeCode.idlTypeName(op.result) + " " + op.name + "("); indent(0); for (int i = 0; i < op.parameters.length - 1; i++) { printParameter(op.parameters[i], ","); } if (op.parameters.length > 0) printParameter(op.parameters[op.parameters.length - 1], ""); print(")"); if (op.exceptions.length > 0) { print(" raises ("); print(TypeCode.idlTypeName(op.exceptions[0].type)); for (int i = 1; i < op.exceptions.length; i++) { print(TypeCode.idlTypeName(op.exceptions[0].type) + ","); } print(")"); } print(";" + "\n"); indent(indentation); }
public void printParameter(org.omg.CORBA.ParameterDescription p, String separator) { if (p.mode.equals(org.omg.CORBA.ParameterMode.PARAM_OUT)) print("out "); else if (p.mode.equals(org.omg.CORBA.ParameterMode.PARAM_INOUT)) print("inout "); else print("in "); print(TypeCode.idlTypeName(p.type) + " " + p.name); print(separator); }
/** print an IDL struct def */ public void printStruct(org.omg.CORBA.TypeDescription t, int indentation) { org.omg.CORBA.StructDef s_def = org.omg.CORBA.StructDefHelper.narrow(ir.lookup_id(t.id)); if (s_def != null) { org.omg.CORBA.StructMember[] members = s_def.members(); org.omg.CORBA.Contained[] contents = s_def.contents(org.omg.CORBA.DefinitionKind.dk_all, false); indent(indentation); print("struct " + s_def.name() + " {" + "\n"); indent(indentation + 3); for (int i = 0; i < members.length; i++) { print(TypeCode.idlTypeName(members[i].type) + " " + members[i].name + ";" + "\n"); } for (int i = 0; i < contents.length; i++) { printContained(contents[i], indentation); } indent(indentation); print("};" + "\n\n"); } else { logger.error("Error, could not find struct " + t.id + " in IR "); } }
/** print an IDL alias */ public void printAlias(org.omg.CORBA.TypeDescription t, int indentation) { org.omg.CORBA.AliasDef adef = org.omg.CORBA.AliasDefHelper.narrow(ir.lookup_id(t.id)); indent(indentation); String originalTypeName = TypeCode.idlTypeName(adef.original_type_def().type()); print("typedef " + originalTypeName + " " + adef.name() + ";\n\n"); }
/** * check that a type is a legal member type (cf. CORBA 2.4 chapter 10, section 7.3 * * @throws org.omg.CORBA.BAD_PARAM */ private void checkTCMemberType(TypeCode typeCode) throws BAD_TYPECODE { if (!org.jacorb.orb.TypeCode.isRecursive(typeCode) && (typeCode == null || typeCode.kind().value() == TCKind._tk_null || typeCode.kind().value() == TCKind._tk_void || typeCode.kind().value() == TCKind._tk_except)) { throw new BAD_TYPECODE("Illegal member TypeCode", 2, CompletionStatus.COMPLETED_NO); } }
/** print an IDL const */ public void printConstant(org.omg.CORBA.ConstantDescription c, int indentation) { indent(indentation); StringBuffer sb = new StringBuffer("const " + TypeCode.idlTypeName(c.type) + " " + c.name + " = "); switch (c.type.kind().value()) { case org.omg.CORBA.TCKind._tk_string: sb.append("\"" + c.value.extract_string() + "\""); break; case org.omg.CORBA.TCKind._tk_wstring: sb.append("\"" + c.value.extract_wstring() + "\""); break; case org.omg.CORBA.TCKind._tk_boolean: sb.append(c.value.extract_boolean()); break; case org.omg.CORBA.TCKind._tk_long: sb.append(c.value.extract_long()); break; case org.omg.CORBA.TCKind._tk_ulong: sb.append(c.value.extract_ulong()); break; case org.omg.CORBA.TCKind._tk_longlong: sb.append(c.value.extract_longlong()); break; case org.omg.CORBA.TCKind._tk_ulonglong: sb.append(c.value.extract_ulonglong()); break; case org.omg.CORBA.TCKind._tk_short: sb.append(c.value.extract_short()); break; case org.omg.CORBA.TCKind._tk_ushort: sb.append(c.value.extract_ushort()); break; case org.omg.CORBA.TCKind._tk_float: sb.append(c.value.extract_float()); break; case org.omg.CORBA.TCKind._tk_octet: sb.append(c.value.extract_octet()); break; case org.omg.CORBA.TCKind._tk_char: sb.append("\'" + c.value.extract_char() + "\'"); break; case org.omg.CORBA.TCKind._tk_wchar: sb.append("\'" + c.value.extract_wchar() + "\'"); break; case org.omg.CORBA.TCKind._tk_fixed: sb.append(c.value.extract_fixed()); break; } print(sb.toString() + ";\n\n"); }
/** print an IDL exception def */ public void printException(org.omg.CORBA.ExceptionDescription e, int indentation) { org.omg.CORBA.ExceptionDef e_def = org.omg.CORBA.ExceptionDefHelper.narrow(ir.lookup_id(e.id)); if (e_def != null) { org.omg.CORBA.StructMember[] members = e_def.members(); indent(indentation); print("exception " + e.name + " {" + "\n"); indent(indentation + 3); for (int i = 0; i < members.length; i++) { print(TypeCode.idlTypeName(members[i].type) + " " + members[i].name + ";" + "\n"); } indent(indentation); print("};" + "\n\n"); } else { logger.error("Error, could not find exception " + e.id + " in IR "); } }
@Override public TypeCode get_primitive_tc(org.omg.CORBA.TCKind tcKind) { return org.jacorb.orb.TypeCode.get_primitive_tc(tcKind.value()); }
/** * Allows the possibility of not checking the name when creating this typecode. This is to cater * for compact typecodes where the name may not be set. Checking of the name will always be true * for user driven requests * * @param id the id * @param name the name * @param discriminator_type the discriminator_type * @param members the members * @param checkName the check name * @return the type code */ public TypeCode create_union_tc( String id, String name, TypeCode discriminator_type, org.omg.CORBA.UnionMember[] members, boolean checkName) { checkTCRepositoryId(id); checkTCName(name, true); // check discriminator type TypeCode disc_tc = org.jacorb.orb.TypeCode.originalType(discriminator_type); if (disc_tc == null || !(disc_tc.kind().value() == TCKind._tk_short || disc_tc.kind().value() == TCKind._tk_long || disc_tc.kind().value() == TCKind._tk_longlong || disc_tc.kind().value() == TCKind._tk_ushort || disc_tc.kind().value() == TCKind._tk_ulong || disc_tc.kind().value() == TCKind._tk_ulonglong || disc_tc.kind().value() == TCKind._tk_char || disc_tc.kind().value() == TCKind._tk_boolean || disc_tc.kind().value() == TCKind._tk_enum)) { throw new BAD_PARAM("Illegal union discriminator type", 20, CompletionStatus.COMPLETED_NO); } // check that member names are legal (they do not need to be unique) for (int i = 0; i < members.length; i++) { checkTCMemberType(members[i].type); if (checkName) { try { checkTCName(members[i].name); } catch (BAD_PARAM e) { logger.debug("Typecode name check failed", e); throw new BAD_PARAM( "Illegal union member name: " + members[i].name, 17, CompletionStatus.COMPLETED_NO); } } // check that member type matches discriminator type or is default org.omg.CORBA.Any label = members[i].label; if (!discriminator_type.equivalent(label.type()) && !(label.type().kind().value() == TCKind._tk_octet && label.extract_octet() == (byte) 0)) { throw new BAD_PARAM( "Label type does not match discriminator type", 19, CompletionStatus.COMPLETED_NO); } // check that member labels are unique for (int j = 0; j < i; j++) { if (label.equal(members[j].label)) { throw new BAD_PARAM("Duplicate union case label", 18, CompletionStatus.COMPLETED_NO); } } } org.jacorb.orb.TypeCode typeCode = new org.jacorb.orb.TypeCode(id, name, discriminator_type, members); // resolve any recursive references to this TypeCode in its members return typeCode; }
/** print an IDL Union */ public void printUnion(org.omg.CORBA.TypeDescription t, int indentation) { org.omg.CORBA.UnionDef u_def = org.omg.CORBA.UnionDefHelper.narrow(ir.lookup_id(t.id)); if (u_def != null) { org.omg.CORBA.UnionMember[] members = u_def.members(); indent(indentation); print( "union " + u_def.name() + " switch ( " + TypeCode.idlTypeName(u_def.discriminator_type()) + " )\n"); print("{\n"); indent(indentation + 4); int def_idx = -1; for (int i = 0; i < members.length; i++) { if (members[i].label.type().kind() == org.omg.CORBA.TCKind.tk_octet && (members[i].label.extract_octet() == (byte) 0)) { def_idx = i; } else if (members[i].label.type().kind() == org.omg.CORBA.TCKind.tk_char) { print( "case \'" + members[i].label.extract_char() + "\' : " + TypeCode.idlTypeName(members[i].type) + " " + members[i].name + ";" + "\n"); } else if (members[i].label.type().kind() == org.omg.CORBA.TCKind.tk_enum) { // int val = members[i].label.extract_long(); try { DynEnum dEnum = DynEnumHelper.narrow(factory.create_dyn_any(members[i].label)); // print("case " + members[i].label.type().member_name(val) + " : " + print( "case " + dEnum.get_as_string() + " : " + TypeCode.idlTypeName(members[i].type) + " " + members[i].name + ";" + "\n"); } catch (Exception bk) { logger.error("unexpected exception", bk); } } else print( "case " + members[i].label.type() + " : " + TypeCode.idlTypeName(members[i].type) + " " + members[i].name + ";" + "\n"); } if (def_idx != -1) { print( "default : " + TypeCode.idlTypeName(members[def_idx].type) + " " + members[def_idx].name + ";" + "\n"); } indent(indentation); print("};" + "\n\n"); } else { logger.error("Error, could not find union " + t.id + " in IR "); } }
/** print an IDL attribute */ public void printAttribute(org.omg.CORBA.AttributeDescription a, int indentation) { indent(indentation); String mode = ""; if (a.mode.equals(org.omg.CORBA.AttributeMode.ATTR_READONLY)) mode = "readonly "; print(mode + "attribute " + TypeCode.idlTypeName(a.type) + " " + a.name + ";" + "\n"); }
public void testCreateDynamicTypeCode() throws Exception { TypeCode typeCode = org.jacorb.orb.TypeCode.create_tc(MyClass.class); assertEquals(2, typeCode.member_count()); assertEquals(typeCode.member_type(0).type_modifier(), typeCode.member_type(1).type_modifier()); }