Class jrpcgen

java.lang.Object
org.acplt.oncrpc.apps.jrpcgen.jrpcgen

public class jrpcgen extends Object
The class jrpcgen implements a Java-based rpcgen RPC protocol compiler. jrpcgen is a Java-based tool that generates source code of Java classes to implement an RPC protocol. The input to jrpcgen is a language similiar to C (but more probably much more similiar to FORTRAN) known as the RPC language (Remote Procedure Call Language).
Version:
$Revision: 1.6 $ $Date: 2007/05/29 19:38:30 $ $State: Exp $ $Locker: $
Author:
Harald Albrecht
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    static String
    Name of class containing global constants.
    private static String[]
    Java base data types for which are XDR encoding and decoding helper methods available.
    static boolean
    Clamp version and program number in client method stubs to the version and program number specified in the x-file.
    static String
    Name of class containing the ONC/RPC client stubs.
    static String
    Full name of the current source code file.
    static Writer
    Current FileWriter object receiving generated source code.
    Current PrintWriter object sitting on top of the currentFileWriter object receiving generated source code.
    static boolean
    Enable diagnostic messages when parsing the x-file.
    static File
    Destination directory where to place the generated files.
    static Hashtable
    Contains all global identifiers for type, structure and union specifiers as well as for constants and enumeration members.
    static boolean
    Enable automatic initialization of String with empty Strings instead of null reference.
    static boolean
    Enable generation of accessors in order to use XDR classes as beans.
    static boolean
    Enable tagging of XDR classes as being Serializable
    static boolean
    Disable automatic backup of old source code files, if true.
    static boolean
    Do not generate source code for the client proxy stub if true.
    static boolean
    Do not generate source code for the server proxy stub if true.
    static String
    Specifies package name for generated source code, if not null.
    static final int
    A remote procedure expects more than one parameter and thus needs an XDR wrapping class.
    static final int
    A remote procedure expects only a single parameter, which is a complex type (class).
    static final int
    A remote procedure expects only a single parameter, which is of a base type, like integer, boolean, string, et cetera.
    static final int
    A remote procedure has no parameters and thus needs to use the XDR void wrapper class as a dummy.
    static boolean
    Parse x-file only but do not create source code files if set to true.
    static Vector
    Holds information about the remote program defined in the jrpcgen x-file.
    static String
    Name of class containing the ONC/RPC server stubs.
    static final String
    String containing date/time when a jrpcgen run was started.
    static boolean
    Verbosity flag.
    static final String
    Current version of jrpcgen.
    static boolean
    Supply (additional) call information to server method stubs.
    static File
    The x-file to parse (not: the X Files, the latter ones are something completely different).
  • Constructor Summary

    Constructors
    Constructor
    Description
     
  • Method Summary

    Modifier and Type
    Method
    Description
    Return the en-/decoding syllable XXX appropriate for a base data type including arrays of base data types.
    static String
    Checks whether a given value references an identifier and then returns the qualified identifier (interface where the value is defined in) or simply the value in case of an integer literal.
    static String
    Checks whether a given data type identifier refers to an enumeration type and then returns Java's int data type instead.
    static void
    Closes the source code file previously opened with createJavaSourceFile.
    static String
    codingMethod(JrpcgenDeclaration decl, boolean encode)
    Return en- or decoding method appropriate for a struct or union member.
    static String
    codingMethod(JrpcgenDeclaration decl, boolean encode, String oref)
    Return en- or decoding method appropriate for a struct or union member.
    Creates a new source code file for a Java class based on its class name.
    createJavaSourceFile(String classname, boolean emitImports)
    Creates a new source code file for a Java class based on its class name.
    static JrpcgenSHA
    createSHA(String classname)
    Create a new hash function object and initialize it using a class and package name.
    static void
    The real parsing and code generation part.
    static void
    Generate source code files for all structures, unions and enumerations as well as constants.
    static void
    Generate source code for the client stub proxy object.
    static void
    Generate source code for client-side stub methods for a particular remote program version.
    static void
    Dump the value of a constant and optionally first dump all constants it depends on.
    static void
    Generate source code file containing all constants defined in the x-file as well as all implicitely defined constants, like program, version and procedure numbers, etc.
    static void
    Generate a source code file containing all elements of an enumeration defined in a x-file.
    static void
    Create the source code files based on the parsed information from the x-file.
    static void
     
    static void
     
    static void
    Generate public abstract method signatures for all remote procedure calls.
    static void
    Generate a source code file containing all elements of a struct defined in a x-file.
    static void
    Generate a source code file containing a wrapper class for a typedef defined in a x-file.
    static void
    Generate a source code file containing all elements of a union defined in a x-file.
    static void
    main(String[] args)
    The main part of jrpcgen where all things start.
    static void
    Print the help message describing the available command line options.
    static String
    Given a name of a data type return the name of the equivalent Java data type (if it exists), otherwise return null.

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

    • VERSION

      public static final String VERSION
      Current version of jrpcgen.
      See Also:
    • PARAMS_VOID

      public static final int PARAMS_VOID
      A remote procedure has no parameters and thus needs to use the XDR void wrapper class as a dummy.
      See Also:
    • PARAMS_SINGLE

      public static final int PARAMS_SINGLE
      A remote procedure expects only a single parameter, which is a complex type (class).
      See Also:
    • PARAMS_SINGLE_BASETYPE

      public static final int PARAMS_SINGLE_BASETYPE
      A remote procedure expects only a single parameter, which is of a base type, like integer, boolean, string, et cetera.
      See Also:
    • PARAMS_MORE

      public static final int PARAMS_MORE
      A remote procedure expects more than one parameter and thus needs an XDR wrapping class.
      See Also:
    • startDate

      public static final String startDate
      String containing date/time when a jrpcgen run was started. This string is used in the headers of the generated source code files.
    • globalIdentifiers

      public static Hashtable globalIdentifiers
      Contains all global identifiers for type, structure and union specifiers as well as for constants and enumeration members. This static attribute is directly manipulated by the parser.
    • noBackups

      public static boolean noBackups
      Disable automatic backup of old source code files, if true.
    • programInfos

      public static Vector programInfos
      Holds information about the remote program defined in the jrpcgen x-file.
    • clampProgAndVers

      public static boolean clampProgAndVers
      Clamp version and program number in client method stubs to the version and program number specified in the x-file.
    • withCallInfo

      public static boolean withCallInfo
      Supply (additional) call information to server method stubs.
    • debug

      public static boolean debug
      Enable diagnostic messages when parsing the x-file.
    • verbose

      public static boolean verbose
      Verbosity flag. If true, then jrpcgen will report about the steps it is taking when generating all the source code files.
    • parseOnly

      public static boolean parseOnly
      Parse x-file only but do not create source code files if set to true.
    • xFile

      public static File xFile
      The x-file to parse (not: the X Files, the latter ones are something completely different).
    • destinationDir

      public static File destinationDir
      Destination directory where to place the generated files.
    • currentFileWriter

      public static Writer currentFileWriter
      Current FileWriter object receiving generated source code.
    • currentPrintWriter

      public static PrintWriter currentPrintWriter
      Current PrintWriter object sitting on top of the currentFileWriter object receiving generated source code.
    • currentFilename

      public static String currentFilename
      Full name of the current source code file.
    • packageName

      public static String packageName
      Specifies package name for generated source code, if not null. If null, then no package statement is emitted.
    • baseClassname

      public static String baseClassname
      Name of class containing global constants. It is derived from the filename with the extension (".x") and path removed.
    • noClient

      public static boolean noClient
      Do not generate source code for the client proxy stub if true.
    • noServer

      public static boolean noServer
      Do not generate source code for the server proxy stub if true.
    • serverClass

      public static String serverClass
      Name of class containing the ONC/RPC server stubs.
    • clientClass

      public static String clientClass
      Name of class containing the ONC/RPC client stubs.
    • makeSerializable

      public static boolean makeSerializable
      Enable tagging of XDR classes as being Serializable
    • makeBean

      public static boolean makeBean
      Enable generation of accessors in order to use XDR classes as beans.
    • initStrings

      public static boolean initStrings
      Enable automatic initialization of String with empty Strings instead of null reference.
    • baseTypes

      private static String[] baseTypes
      Java base data types for which are XDR encoding and decoding helper methods available.
  • Constructor Details

    • jrpcgen

      public jrpcgen()
  • Method Details

    • printHelp

      public static void printHelp()
      Print the help message describing the available command line options.
    • createJavaSourceFile

      public static PrintWriter createJavaSourceFile(String classname)
      Creates a new source code file for a Java class based on its class name. Same as createJavaSourceFile(String, boolean) with the emitImport parameter set to true.
      Parameters:
      classname - Name of Java class to generate. Must not contain a file extension -- especially ".java" is invalid. When the source code file is created, ".java" is appended automatically.
      Returns:
      PrintWriter to send source code to.
    • createJavaSourceFile

      public static PrintWriter createJavaSourceFile(String classname, boolean emitImports)
      Creates a new source code file for a Java class based on its class name. If an old version of the source file exists, it is renamed first. The backup will have the same name as the original file with "~" appended.
      Parameters:
      classname - Name of Java class to generate. Must not contain a file extension -- especially ".java" is invalid. When the source code file is created, ".java" is appended automatically.
      emitImports - if true, then import statements for the remotetea ONC/RPC package and IOExceptions.
      Returns:
      PrintWriter to send source code to.
    • createSHA

      public static JrpcgenSHA createSHA(String classname)
      Create a new hash function object and initialize it using a class and package name.
      Parameters:
      classname - Name of class.
      Returns:
      hash function object.
    • closeJavaSourceFile

      public static void closeJavaSourceFile()
      Closes the source code file previously opened with createJavaSourceFile. This method writes a trailer before closing the file.
    • dumpConstantAndDependency

      public static void dumpConstantAndDependency(PrintWriter out, JrpcgenConst c)
      Dump the value of a constant and optionally first dump all constants it depends on.
    • dumpConstants

      public static void dumpConstants()
      Generate source code file containing all constants defined in the x-file as well as all implicitely defined constants, like program, version and procedure numbers, etc. This method creates a public interface with the constants as public static final integers.
    • dumpEnum

      public static void dumpEnum(JrpcgenEnum e)
      Generate a source code file containing all elements of an enumeration defined in a x-file.
      Parameters:
      e - Description of XDR enumeration.
    • xdrBaseType

      public static String xdrBaseType(String type)
      Given a name of a data type return the name of the equivalent Java data type (if it exists), otherwise return null. NOTE: "opaque" is considered like "byte" to be a base type... FIXME: char/byte?
      Returns:
      Name of Java base data type or null if the given data type is not equivalent to one of Java's base data types.
    • baseEnDecodingSyllable

      public static JrpcgenEnDecodingInfo baseEnDecodingSyllable(JrpcgenDeclaration decl)
      Return the en-/decoding syllable XXX appropriate for a base data type including arrays of base data types.
      Parameters:
      decl - declaration of a member of RPC struct or union.
      Returns:
      null, if the declaration does not specify a base data type. Otherwise a three-element String array, with [0] containing the type syllable for base type (including arrays), [1] containing parameter options when encoding (like maximum sizes, etc), and [2] containing options for decoding.
    • codingMethod

      public static String codingMethod(JrpcgenDeclaration decl, boolean encode)
      Return en- or decoding method appropriate for a struct or union member.
    • codingMethod

      public static String codingMethod(JrpcgenDeclaration decl, boolean encode, String oref)
      Return en- or decoding method appropriate for a struct or union member.
      Parameters:
      decl - declaration for which the en-/decoding Java source code be returned.
      encode - true if encoding method should be returned, false if decoding method is to be returned.
      oref - name of object reference or null if "this" should be used instead.
    • checkForSpecials

      public static String checkForSpecials(String dataType)
      Checks whether a given data type identifier refers to an enumeration type and then returns Java's int data type instead. In case of the pseudo-type "opaque" return Java's byte data type. For all other data types, the data type identifier is returned unaltered.
      Parameters:
      dataType - data type identifier to check.
      Returns:
      data type identifier.
    • checkForEnumValue

      public static String checkForEnumValue(String value)
      Checks whether a given value references an identifier and then returns the qualified identifier (interface where the value is defined in) or simply the value in case of an integer literal.
      Parameters:
      value - Either an identifier to resolve or an integer literal.
      Returns:
      Integer literal or qualified identifier.
    • dumpStruct

      public static void dumpStruct(JrpcgenStruct s)
      Generate a source code file containing all elements of a struct defined in a x-file.
      Parameters:
      s - Description of XDR struct.
    • dumpUnion

      public static void dumpUnion(JrpcgenUnion u)
      Generate a source code file containing all elements of a union defined in a x-file.
      Parameters:
      u - Description of XDR union.
    • dumpTypedef

      public static void dumpTypedef(JrpcgenDeclaration d)
      Generate a source code file containing a wrapper class for a typedef defined in a x-file.
      Parameters:
      d - Description of XDR typedef.
    • dumpClasses

      public static void dumpClasses()
      Generate source code files for all structures, unions and enumerations as well as constants. All constants, which do not belong to enumerations, are emitted to a single interface.
    • dumpClientStubMethods

      public static void dumpClientStubMethods(PrintWriter out, JrpcgenVersionInfo versionInfo)
      Generate source code for client-side stub methods for a particular remote program version. The client-side stub methods take the parameter(s) from the caller, encode them and throw them over to the server. After receiving a reply, they will unpack and return it as the outcome of the method call.
      Parameters:
      out - Printer writer to send source code to.
      versionInfo - Information about the remote program version for which source code is to be generated.
    • dumpClient

      public static void dumpClient(JrpcgenProgramInfo programInfo)
      Generate source code for the client stub proxy object. This client stub proxy object is then used by client applications to make remote procedure (aka method) calls to an ONC/RPC server.
    • dumpServerStubMethodCall

      public static void dumpServerStubMethodCall(PrintWriter out, JrpcgenProcedureInfo proc)
    • dumpServerStubMethods

      public static void dumpServerStubMethods(PrintWriter out, JrpcgenVersionInfo versionInfo)
      Generate public abstract method signatures for all remote procedure calls. This ensures that they have to be implemented before any derived server class gets usefull.
    • dumpServer

      public static void dumpServer(JrpcgenProgramInfo programInfo)
    • dumpFiles

      public static void dumpFiles()
      Create the source code files based on the parsed information from the x-file.
    • main

      public static void main(String[] args)
      The main part of jrpcgen where all things start.
    • doParse

      public static void doParse() throws FileNotFoundException, Exception
      The real parsing and code generation part. This has been factored out of main() in order to make it available as an Ant task.
      Throws:
      FileNotFoundException
      Exception