User: reverbel
  Date: 01/08/28 15:07:53

  Modified:    iiop/src/main/org/jboss/ejb/plugins/iiop CDRStream.java
  Log:
  CDRStream modified to support client stub generation. IIOPContainerInvoker
  _all_interfaces() methods now return a clone of the id array.
  
  Revision  Changes    Path
  1.2       +206 -2    contrib/iiop/src/main/org/jboss/ejb/plugins/iiop/CDRStream.java
  
  Index: CDRStream.java
  ===================================================================
  RCS file: 
/cvsroot/jboss/contrib/iiop/src/main/org/jboss/ejb/plugins/iiop/CDRStream.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- CDRStream.java    2001/08/14 21:01:34     1.1
  +++ CDRStream.java    2001/08/28 22:07:53     1.2
  @@ -13,7 +13,6 @@
   import javax.rmi.CORBA.Util;
   import org.omg.CORBA_2_3.portable.InputStream;
   import org.omg.CORBA_2_3.portable.OutputStream;
  -import org.jboss.ejb.plugins.iiop.RmiIdlUtil;
   
   /**
    * Utility class with static methods to:
  @@ -27,11 +26,213 @@
    * defined by <code>CDRStream</code>.
    *
    * @author  <a href="mailto:[EMAIL PROTECTED]";>Francisco Reverbel</a>
  - * @version $Revision: 1.1 $
  + * @version $Revision: 1.2 $
    */
   public class CDRStream 
   {
      /**
  +    * Returns the abbreviated name of the marshaller for given 
  +    * <code>Class</code>.
  +    * 
  +    * <p>Abbreviated names of marshallers for basic types follow the usual 
  +    * Java convention:
  +    * <br>
  +    * <pre>
  +    *    type           abbrev name
  +    *    boolean           "Z"
  +    *    byte              "B"
  +    *    char              "C"
  +    *    double            "D"
  +    *    float             "F"
  +    *    int               "I"
  +    *    long              "J"
  +    *    short             "S"
  +    *    void              "V"
  +    * </pre>
  +    *
  +    * <p>The abbreviated names of marshallers for object types are:
  +    * <br>
  +    * <pre>
  +    *    java.lang.String            "G" (strinG)
  +    *    RMI/IDL remote interface    "R"
  +    *    RMI/IDL abstract interface  "A"
  +    *    serializable                "E" (sErializablE)
  +    *    valuetype                   "L" + className
  +    *    externalizable              "X" (eXternalizable)
  +    *    org.omg.CORBA.Object        "M" (oMg)
  +    *    java.lang.Object            "O"
  +    * </pre>
  +    *
  +    * <p>As an example: the abbreviated name of a marshaller for a valuetype 
  +    * class named <code>Foo</code> is the string <code>"LFoo"</code>.
  +    */
  +   public static String abbrevFor(Class clz) 
  +   {
  +      if (clz == Boolean.TYPE) {
  +         return "Z";
  +      }
  +      else if (clz == Byte.TYPE) {
  +         return "B";
  +      }
  +      else if (clz == Character.TYPE) {
  +         return "C";
  +      }
  +      else if (clz == Double.TYPE) {
  +         return "D";
  +      }
  +      else if (clz == Float.TYPE) {
  +         return "F";
  +      }
  +      else if (clz == Integer.TYPE) {
  +         return "I";
  +      }
  +      else if (clz == Long.TYPE) {
  +         return "J";
  +      }
  +      else if (clz == Short.TYPE) {
  +         return "S";
  +      }
  +      else if (clz == Void.TYPE) {
  +         return "V";
  +      }
  +      else if (clz == String.class) {
  +         return "G"; // strinG
  +      }
  +      else if (RmiIdlUtil.isRMIIDLRemoteInterface(clz)) {
  +         return "R"; // Remote interface
  +      }
  +      else if (isAbstractInterface(clz)) {
  +         return "A"; // Abstract interface
  +      }
  +      else if (Serializable.class.isAssignableFrom(clz)) {
  +         if (clz == Serializable.class) {
  +            return "E"; // sErializablE
  +         }
  +         else { 
  +            return "L" + clz.getName(); // vaLuetype
  +         }
  +      }
  +      else if (Externalizable.class.isAssignableFrom(clz)) {
  +         return "X"; // eXternalizable
  +      }
  +      else if (clz == org.omg.CORBA.Object.class) {
  +         return "M"; // oMg (CORBA Object)
  +      }
  +      else if (clz == Object.class) {
  +         return "O"; // Object
  +      }
  +      else {
  +         return "L" + clz.getName(); // vaLuetype
  +      }
  +   }
  +
  +   /**
  +    * Returns a <code>CDRStreamReader</code> given an abbreviated name
  +    * and a <code>ClassLoader</code> for valuetype classes.
  +    */
  +   public static CDRStreamReader readerFor(String s, ClassLoader cl) 
  +   {
  +      switch (s.charAt(0)) {
  +
  +      case 'A':
  +         return AbstractInterfaceReader.instance;
  +      case 'B':
  +         return BooleanReader.instance;
  +      case 'C':
  +         return CharReader.instance;
  +      case 'D':
  +         return DoubleReader.instance;
  +      case 'E':
  +         return SerializableReader.instance;
  +      case 'F':
  +         return FloatReader.instance;
  +      case 'G':
  +         return StringReader.instance;
  +      case 'I':
  +         return IntReader.instance;
  +      case 'J':
  +         return LongReader.instance;
  +      case 'L':
  +         try {
  +            return new ValuetypeReader(cl.loadClass(s.substring(1)));
  +         }
  +         catch (ClassNotFoundException e) {
  +            throw new RuntimeException("Error loading class " 
  +                                       + s.substring(1) + ": " + e);
  +         }
  +      case 'M':
  +         return CorbaObjectReader.instance;
  +      case 'O':
  +         return ObjectReader.instance;
  +      case 'R':
  +         return RemoteReader.instance;
  +      case 'S':
  +         return ShortReader.instance;
  +      case 'V':
  +         return null;
  +      case 'X': 
  +         return ExternalizableReader.instance;
  +      case 'Z':
  +         return BooleanReader.instance;
  +      default:
  +         return null;
  +      }
  +   }
  +
  +   /**
  +    * Returns a <code>CDRStreamWriter</code> given an abbreviated name
  +    * and a <code>ClassLoader</code> for valuetype classes.
  +    */
  +   public static CDRStreamWriter writerFor(String s, ClassLoader cl) 
  +   {
  +      switch (s.charAt(0)) {
  +
  +      case 'A':
  +         return AbstractInterfaceWriter.instance;
  +      case 'B':
  +         return BooleanWriter.instance;
  +      case 'C':
  +         return CharWriter.instance;
  +      case 'D':
  +         return DoubleWriter.instance;
  +      case 'E':
  +         return SerializableWriter.instance;
  +      case 'F':
  +         return FloatWriter.instance;
  +      case 'G':
  +         return StringWriter.instance;
  +      case 'I':
  +         return IntWriter.instance;
  +      case 'J':
  +         return LongWriter.instance;
  +      case 'L':  
  +         try {
  +            return new ValuetypeWriter(cl.loadClass(s.substring(1)));
  +         }
  +         catch (ClassNotFoundException e) {
  +            throw new RuntimeException("Error loading class " 
  +                                       + s.substring(1) + ": " + e);
  +         }
  +      case 'M':
  +         return CorbaObjectWriter.instance;
  +      case 'O':
  +         return ObjectWriter.instance;
  +      case 'R':
  +         return RemoteWriter.instance;
  +      case 'S':
  +         return ShortWriter.instance;
  +      case 'V':
  +         return null;
  +      case 'X': 
  +         return ExternalizableWriter.instance;
  +      case 'Z':
  +         return BooleanWriter.instance;
  +      default:
  +         return null;
  +      }
  +   }
  +
  +   /**
       * Returns the <code>CDRStreamReader</code> for a given <code>Class</code>.
       */
      public static CDRStreamReader readerFor(Class clz) 
  @@ -59,6 +260,9 @@
         }
         else if (clz == Short.TYPE) {
            return ShortReader.instance;
  +      }
  +      else if (clz == Void.TYPE) {
  +         return null;
         }
         else if (clz == String.class) {
            return StringReader.instance;
  
  
  

_______________________________________________
Jboss-development mailing list
[EMAIL PROTECTED]
http://lists.sourceforge.net/lists/listinfo/jboss-development

Reply via email to