Exemplo n.º 1
0
  /** Writes the DII-based Body of the Method for the stub */
  private void printDIIBody(
      PrintWriter ps, String classname, String idl_name, boolean is_local, boolean is_abstract) {
    ps.println("\t\torg.omg.CORBA.Request _request = _request( \"" + idl_name + "\" );");
    ps.println("");

    // set return type
    if (opAttribute == NO_ATTRIBUTE && !(opTypeSpec.typeSpec() instanceof VoidTypeSpec)) {
      // old version
      // ps.println( "\t\t_r.set_return_type(" + opTypeSpec.typeSpec().getTypeCodeExpression() +
      // ");");
      // new version, distinguishes different types
      if (opTypeSpec.typeSpec() instanceof BaseType) {
        BaseType bt = (BaseType) opTypeSpec.typeSpec();
        ps.println("\t\t_request.set_return_type( " + bt.getTypeCodeExpression() + " );");
      } else if (opTypeSpec.typeSpec() instanceof StringType) {
        StringType st = (StringType) opTypeSpec.typeSpec();
        ps.println("\t\t_request.set_return_type( " + st.getTypeCodeExpression() + " );");
      } else {
        try {
          // if there is a helper-class, use it to get the TypeCode for the return value
          String helperName = opTypeSpec.typeSpec().helperName();
          ps.println("\t\t_request.set_return_type(" + helperName + ".type()" + ");");
        } catch (NoHelperException e) {
          // otherwise use typeCodeExpression
          // (the old version)
          ps.println(
              "\t\t_request.set_return_type("
                  + opTypeSpec.typeSpec().getTypeCodeExpression()
                  + ");");
        }
      }
    } else {
      // return type void
      ps.println(
          "\t\t_request.set_return_type(_orb().get_primitive_tc(org.omg.CORBA.TCKind.tk_void));");
    }
    ps.println("");

    // put parameters into the request
    for (Enumeration e2 = paramDecls.elements(); e2.hasMoreElements(); ) {
      ParamDecl p = ((ParamDecl) e2.nextElement());
      p.printAddArgumentStatement(ps, "_request");
      ps.println("");
    }

    // add exceptions
    if (!raisesExpr.empty()) {
      String[] exceptions = raisesExpr.getExceptionClassNames();
      for (int i = 0; i < exceptions.length; i++) {
        ps.println("\t\t_request.exceptions().add(" + exceptions[i] + "Helper.type());");
      }
      ps.println("");
    }

    // invoke
    ps.println("\t\t_request.invoke();");
    ps.println("");

    // get Exception
    ps.println("\t\tjava.lang.Exception _exception = _request.env().exception();");
    ps.println("\t\tif (_exception != null)");
    ps.println("\t\t{");
    if (!raisesExpr.empty()) {
      ps.println("\t\t\tif(_exception instanceof org.omg.CORBA.UnknownUserException)");
      ps.println("\t\t\t{");
      ps.println(
          "\t\t\t\torg.omg.CORBA.UnknownUserException _userException = (org.omg.CORBA.UnknownUserException) _exception;");
      ps.print("\t\t\t\t");
      String[] raisesExceptions = raisesExpr.getExceptionClassNames();
      for (int i = 0; i < raisesExceptions.length; i++) {
        ps.println(
            "if (_userException.except.type().equals(" + raisesExceptions[i] + "Helper.type()))");
        ps.println("\t\t\t\t{");
        ps.println(
            "\t\t\t\t\tthrow " + raisesExceptions[i] + "Helper.extract(_userException.except);");
        ps.println("\t\t\t\t}");
        ps.println("\t\t\t\telse");
      }
      ps.println("\t\t\t\t{");
      ps.println("\t\t\t\t\tthrow new org.omg.CORBA.UNKNOWN();");
      ps.println("\t\t\t\t}");
      ps.println("\t\t\t}");
    }

    ps.println("\t\t\tthrow (org.omg.CORBA.SystemException) _exception;");
    ps.println("\t\t}");
    ps.println("");

    // Get out and inout parameters!
    for (Enumeration e = paramDecls.elements(); e.hasMoreElements(); ) {
      ParamDecl p = ((ParamDecl) e.nextElement());
      if (p.paramAttribute != ParamDecl.MODE_IN) {
        p.printExtractArgumentStatement(ps);
      }
    }

    // get the result
    if (opAttribute == NO_ATTRIBUTE && !(opTypeSpec.typeSpec() instanceof VoidTypeSpec)) {
      ps.println("\t\t" + opTypeSpec.toString() + " _result;");
      opTypeSpec
          .typeSpec()
          .printExtractResult(ps, "_result", "_request.return_value()", opTypeSpec.toString());
      ps.println("\t\treturn _result;");
    } else ps.println("\t\treturn;");
  }