Beispiel #1
0
  /** 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);
  }
Beispiel #2
0
 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);
 }
Beispiel #3
0
  /** 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 ");
    }
  }
Beispiel #4
0
  /** 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");
  }
Beispiel #5
0
 /**
  * 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);
   }
 }
Beispiel #6
0
  /** 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");
  }
Beispiel #7
0
  /** 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 ");
    }
  }
Beispiel #8
0
 @Override
 public TypeCode get_primitive_tc(org.omg.CORBA.TCKind tcKind) {
   return org.jacorb.orb.TypeCode.get_primitive_tc(tcKind.value());
 }
Beispiel #9
0
  /**
   * 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;
  }
Beispiel #10
0
  /** 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 ");
    }
  }
Beispiel #11
0
 /** 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");
 }
Beispiel #12
0
  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());
  }