home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / ool_main.zip / ool / source / xjavaenv.cpp < prev    next >
C/C++ Source or Header  |  1998-01-20  |  18KB  |  491 lines

  1. #include <xheaders.h>
  2. #include "xmsgbox.h"
  3. #include "xjavaenv.h"
  4. #include "xjvcmsgh.h"
  5. #include "xjvsurlh.h"
  6. #include "xjvsmsgh.h"
  7. #include <list.h>
  8.  
  9.  
  10.  
  11. static XJavaEnvironment *pJEnv = NULL;
  12.  
  13.  
  14. class handler_list
  15. {
  16.    private:
  17.    typedef struct
  18.    {
  19.       XWindow *w;
  20.       XObject *h;
  21.    }   item;
  22.  
  23.        list < item * >handlers;
  24.  
  25.        public:
  26.    // ctor/dtor
  27.        handler_list(void)
  28.    {
  29.    }
  30.       ~handler_list()
  31.    {
  32.    }
  33.  
  34.    // add a new handler to the list
  35.    void add_handler(XWindow * w, XObject * h)
  36.    {
  37.       item *i = new item;
  38.  
  39.           i->w = w;
  40.           i->h = h;
  41.           handlers.push_back(i);
  42.    }
  43.  
  44.    // remove a handler from the list
  45.    void remove_handler(XWindow * w)
  46.    {
  47.       list < item * >::iterator i;
  48.  
  49.       for (i = handlers.begin(); i != handlers.end(); i++)
  50.          if ((*i)->w == w)
  51.          {
  52.             handlers.erase(i);
  53.             break;
  54.          }               // if
  55.    }
  56.  
  57.    // returns a pointer to a handler
  58.    XObject *get_handler(JECONTEXTID id)
  59.    {
  60.       list < item * >::iterator i;
  61.  
  62.       for (i = handlers.begin(); i != handlers.end(); i++)
  63.          if ((*i)->w->GetHandle() == id)
  64.             return (*i)->h;
  65.  
  66.       return (XObject *) NULL;
  67.    }
  68. };
  69.  
  70.  
  71. handler_list url_handlers;
  72. handler_list smsg_handlers;
  73.  
  74.  
  75. int APIENTRY myShowConsoleMsg(char *msg)
  76. {
  77.    XString str(msg);
  78.  
  79.    XJavaEnvironment :: Get()->GetMessageHandler()->ShowMessage(str);
  80.  
  81.    return 0;
  82. }
  83.  
  84.  
  85.  
  86. void APIENTRY myShowURL(JECONTEXTID contextID, const char *url, const char *target)
  87. {
  88.    XString xurl(url), xtgt(target);
  89.    XJavaShowURLHandler *hnd = (XJavaShowURLHandler *) url_handlers.get_handler(contextID);
  90.  
  91.    hnd->ShowURL(xurl, xtgt);
  92. }
  93.  
  94.  
  95.  
  96. void APIENTRY myShowStatMsg(JECONTEXTID contextID, const char *msg)
  97. {
  98.    XString xmsg(msg);
  99.    XJavaStatusMsgHandler *hnd = (XJavaStatusMsgHandler *) smsg_handlers.get_handler(contextID);
  100.  
  101.    hnd->ShowStatusMessage(xmsg);
  102. }
  103.  
  104.  
  105. /*@
  106. @class XJavaEnvironment
  107. @parent XObject
  108. @type overview
  109. @symbol _
  110. */
  111.  
  112.  
  113. /*@ XJavaEnvironment::XJavaEnvironment(XJavaConsoleMessageHandler * phnd, int argc, char **argv)
  114. @group constructors/destructors
  115. @remarks The constructor of XJavaEnvironment initializes the Java virtual machines.
  116. @parameters XJavaConsoleMessageHandler* phnd Pointer to a console message handler object;
  117.                                             if NULL is passed, then a default message handler is beeing installed.
  118.            int argc     Number of arguments that shall be passed to the
  119.                         Java runtime system.
  120.            char** argv  Array with strings containing the parameters; possible
  121.                         parameters are:
  122.                         -v|-verbose                                             turn on verbose mode
  123.                         -debug                                                  enable remote Java debugging
  124.                         -noasyncgc                                              don't allow asynchronous gc's
  125.                         -verbosegc                                              print a message when gc occur
  126.                         -ss<em>number</em>                                      set the C stack size of a process
  127.                         -oss<em>number</em>                                     set the JAVA stack size of a process
  128.                         -ms<em>number</em>                                      set the initial Java heap size
  129.                         -mx<em>number</em>                                      set the maximum Java heap size
  130.                         -classpath <em>directories separated by semicolons</em> list directories in which to look for classes
  131.                         -prof                                                   output profiling data to ./java.prof
  132.                         -verify                                                 verify all classes when read in
  133.                         -verifyremote                                           verify classes read in over the network [default]
  134.                         -noverify                                               do not verify any class
  135. */
  136. XJavaEnvironment::XJavaEnvironment(XJavaConsoleMessageHandler * phnd, int argc, char **argv):XObject()
  137. {
  138.    int rc;
  139. /*
  140.    if (NULL != pJEnv)
  141.    {
  142.       XMessageBox("There already exists an Java environment "
  143.                "in this application.");
  144.       return;
  145.    }                     // if
  146. */
  147.    // initialize java runtime system
  148.    if ((0 != argc) && (NULL != argv))
  149.       rc = (int) jeInitJavaRuntimeEx(argc, argv);
  150.    else
  151.       rc = (int) jeInitJavaRuntime();
  152.    if (JAVA_OK != rc)
  153.    {
  154.       DisplayError("jeInitJavaRuntime", rc);
  155.       return;
  156.    }
  157.  
  158.    // register console function
  159.    if (phnd)
  160.       rc = SetMessageHandler(phnd);
  161.    else
  162.       rc = SetMessageHandler(new XJavaConsoleMessageHandler());
  163. /*        if( JAVA_OK != rc )
  164.         {
  165.                 DisplayError( "jeShowConsoleFnPtr", rc );
  166.                 return;
  167.         }*/
  168.  
  169.    pJEnv = this;
  170. }
  171.  
  172.  
  173.  
  174. /*@ XJavaEnvironment :: ~XJavaEnvironment()
  175. @group constructors/destructors
  176. @remarks Constructor for the XJavaEnvironment class.
  177. */
  178. XJavaEnvironment :: ~XJavaEnvironment()
  179. {
  180.    pJEnv = NULL;
  181. }
  182.  
  183.  
  184.  
  185. /*@ XJavaEnvironment::DisplayError(char *msg, int rc)
  186. @group java/misc
  187. @remarks Opens a message box and displays an error message
  188. @parameters int rc Error number; possible values are:
  189.                   <b>JAVA_OK</b>                  no error
  190.                   <b>JAVA_INVALID_APPLET</b>      inavlid applet code given
  191.                   <b>JAVA_INVALID_CONTEXT</b>     inavlid applet context given
  192.                   <b>JAVA_INVALID_PARAMETER</b>   invalid parameter
  193.                   <b>JAVA_ALREADY_INITIALIZED</b> Java runtime system already initialized
  194.                   <b>JAVA_OUT_OF_MEMORY</b>       out of memory
  195.                   <b>JAVA_EXCEPTION_OCCURRED</b>  Java exception occurred
  196.                   <b>JAVA_NOT_INITIALIZED</b>     Java runtime system not initialized
  197.                   <b>JAVA_INTERNAL_ERROR</b>      internal Java error
  198. */
  199. void XJavaEnvironment::DisplayError(char *msg, int rc)
  200. {
  201.    XString str;
  202.  
  203.    switch (rc)
  204.    {
  205.    case JAVA_OK:
  206.       return;
  207.  
  208.    case JAVA_INVALID_APPLET:
  209.       str = "Invalid Java applet.";
  210.       break;
  211.  
  212.    case JAVA_INVALID_CONTEXT:
  213.       str = "Invalid Java applet context.";
  214.       break;
  215.  
  216.    case JAVA_INVALID_PARAMETER:
  217.       str = "Invalid parameter passed to Java.";
  218.       break;
  219.  
  220.    case JAVA_ALREADY_INITIALIZED:
  221.       str = "Java runtime system is already initialized";
  222.       break;
  223.  
  224.    case JAVA_OUT_OF_MEMORY:
  225.       str = "Out of memory.";
  226.       break;
  227.  
  228.    case JAVA_EXCEPTION_OCCURRED:
  229.       str = "An Java exception occurred.";
  230.       break;
  231.  
  232.    case JAVA_NOT_INITIALIZED:
  233.       str = "Java runtime system not initialized.";
  234.       break;
  235.  
  236.    case JAVA_INTERNAL_ERROR:
  237.       str = "Internal Java error.";
  238.       break;
  239.  
  240.    default:
  241.       str += "Unknown Java error (";
  242.       str += (XString) rc;
  243.       str += ")";
  244.    }                     // switch
  245.  
  246.    XMessageBox m((char *) str, msg);
  247. }
  248.  
  249.  
  250.  
  251. /*@ XJavaEnvironment::Get(void)
  252. @group java/misc
  253. @remarks Queries the pointer to the actual Java environment object.
  254. @returns XJavaEnvironment* pJEnv pointer to the actual Java environment object.
  255. */
  256. XJavaEnvironment * XJavaEnvironment::Get(void)
  257. {
  258.    return pJEnv;
  259. }
  260.  
  261.  
  262.  
  263. /*@ XJavaEnvironment::Iconify(XWindow * win)
  264. @group java/misc
  265. @remarks Notifies the applets of a window that the window has been minimized.
  266. @parameters XWindow* pOwnerWnd - Owner window of the applets
  267. @returns An error code is return; possible values are:
  268.                   <b>JAVA_OK</b>                  no error
  269.                   <b>JAVA_INVALID_APPLET</b>      inavlid applet code given
  270.                   <b>JAVA_INVALID_CONTEXT</b>     inavlid applet context given
  271.                   <b>JAVA_INVALID_PARAMETER</b>   invalid parameter
  272.                   <b>JAVA_ALREADY_INITIALIZED</b> Java runtime system already initialized
  273.                   <b>JAVA_OUT_OF_MEMORY</b>       out of memory
  274.                   <b>JAVA_EXCEPTION_OCCURRED</b>  Java exception occurred
  275.                   <b>JAVA_NOT_INITIALIZED</b>     Java runtime system not initialized
  276.                   <b>JAVA_INTERNAL_ERROR</b>      internal Java error
  277. */
  278. int XJavaEnvironment::Iconify(XWindow * win)
  279. {
  280.    return (int) jeAppletsIconify((JECONTEXTID) win->GetHandle());
  281. }
  282.  
  283.  
  284.  
  285. /*@ XJavaEnvironment::Uniconify(XWindow * win)
  286. @group java/misc
  287. @remarks Notifies the applets of a window that the window has been restored.
  288. @parameters XWindow* pOwnerWnd - Owner window of the applets
  289. @returns An error code is return; possible values are:
  290.                   <b>JAVA_OK</b>                  no error
  291.                   <b>JAVA_INVALID_APPLET</b>      inavlid applet code given
  292.                   <b>JAVA_INVALID_CONTEXT</b>     inavlid applet context given
  293.                   <b>JAVA_INVALID_PARAMETER</b>   invalid parameter
  294.                   <b>JAVA_ALREADY_INITIALIZED</b> Java runtime system already initialized
  295.                   <b>JAVA_OUT_OF_MEMORY</b>       out of memory
  296.                   <b>JAVA_EXCEPTION_OCCURRED</b>  Java exception occurred
  297.                   <b>JAVA_NOT_INITIALIZED</b>     Java runtime system not initialized
  298.                   <b>JAVA_INTERNAL_ERROR</b>      internal Java error
  299. */
  300. int XJavaEnvironment::Uniconify(XWindow * win)
  301. {
  302.    return (int) jeAppletsUniconify((JECONTEXTID) win->GetHandle());
  303. }
  304.  
  305.  
  306.  
  307.  
  308. /*@ XJavaEnvironment::GetMessageHandler()
  309. @group java/misc
  310. @remarks Queries the pointer to the actual console message handler object.
  311. @returns XJavaConsoleMessageHandler* pMsgHandler Pointer to the actual console message handler object.
  312. */
  313.  
  314.  
  315.  
  316.  
  317. /*@ XJavaEnvironment::SetMessageHandler()
  318. @group java/misc
  319. @remarks Sets a new console message handler object. Please remember to delete the old
  320.         message handler object if there is one.
  321. @parameters XJavaConsoleMessageHandler* handler  pointer to the handler object
  322. @returns An error code is return; possible values are:
  323.                   <b>JAVA_OK</b>                  no error
  324.                   <b>JAVA_INVALID_APPLET</b>      inavlid applet code given
  325.                   <b>JAVA_INVALID_CONTEXT</b>     inavlid applet context given
  326.                   <b>JAVA_INVALID_PARAMETER</b>   invalid parameter
  327.                   <b>JAVA_ALREADY_INITIALIZED</b> Java runtime system already initialized
  328.                   <b>JAVA_OUT_OF_MEMORY</b>       out of memory
  329.                   <b>JAVA_EXCEPTION_OCCURRED</b>  Java exception occurred
  330.                   <b>JAVA_NOT_INITIALIZED</b>     Java runtime system not initialized
  331.                   <b>JAVA_INTERNAL_ERROR</b>      internal Java error
  332. */
  333. int XJavaEnvironment::SetMessageHandler(XJavaConsoleMessageHandler * phnd)
  334. {
  335.    int rc;
  336.  
  337.    pMsgHandler = phnd;
  338.    rc = (int) jeRegisterShowConsole((jeShowConsoleFnPtr) & myShowConsoleMsg);
  339.  
  340.    return rc;
  341. }
  342.  
  343.  
  344. /*@ XJavaEnvironment::SetShowURLHandler(XWindow * owner, XJavaShowURLHandler * hnd)
  345. @group java/misc
  346. @remarks Sets a new console url show handler object. Please remember to delete the old
  347.         handler object if there is one.
  348. @parameters XWindow* wnd  pointer to the window object that holds an applet
  349.            XJavaShowURLHandler* hnd   pointer to the handler object
  350. @returns An error code is return; possible values are:
  351.                   <b>JAVA_OK</b>                  no error
  352.                   <b>JAVA_INVALID_APPLET</b>      inavlid applet code given
  353.                   <b>JAVA_INVALID_CONTEXT</b>     inavlid applet context given
  354.                   <b>JAVA_INVALID_PARAMETER</b>   invalid parameter
  355.                   <b>JAVA_ALREADY_INITIALIZED</b> Java runtime system already initialized
  356.                   <b>JAVA_OUT_OF_MEMORY</b>       out of memory
  357.                   <b>JAVA_EXCEPTION_OCCURRED</b>  Java exception occurred
  358.                   <b>JAVA_NOT_INITIALIZED</b>     Java runtime system not initialized
  359.                   <b>JAVA_INTERNAL_ERROR</b>      internal Java error
  360. */
  361. int XJavaEnvironment::SetShowURLHandler(XWindow * owner, XJavaShowURLHandler * hnd)
  362. {
  363.    url_handlers.remove_handler(owner);
  364.    url_handlers.add_handler(owner, hnd);
  365.    return (int) jeRegisterShowDocument((jeShowDocumentFnPtr) & myShowURL);
  366. }
  367.  
  368.  
  369. /*@ XJavaEnvironment::GetShowURLHandler(XWindow * w)
  370. @group java/misc
  371. @parameters XWindow* owner Pointer to the window object to which the handler belongs to.
  372. @remarks Queries the pointer to the actual url show handler object.
  373. @returns Pointer to the actual url show handler object.
  374. */
  375. XJavaShowURLHandler * XJavaEnvironment::GetShowURLHandler(XWindow * w)
  376. {
  377.    return (XJavaShowURLHandler *) url_handlers.get_handler(w->GetHandle());
  378. }
  379.  
  380.  
  381.  
  382.  
  383. /*@ XJavaEnvironment::SetStatusMsgHandler(XWindow * owner, XJavaStatusMsgHandler * hnd)
  384. @group java/misc
  385. @remarks Sets a new status message handler object. Please remember to delete the old
  386.         handler object if there is one.
  387. @parameters XWindow* wnd  pointer to the window object that holds an applet
  388.            XJavaStatusMsgHandler* hnd   pointer to the handler object
  389. @returns An error code is return; possible values are:
  390.                   <b>JAVA_OK</b>                  no error
  391.                   <b>JAVA_INVALID_APPLET</b>      inavlid applet code given
  392.                   <b>JAVA_INVALID_CONTEXT</b>     inavlid applet context given
  393.                   <b>JAVA_INVALID_PARAMETER</b>   invalid parameter
  394.                   <b>JAVA_ALREADY_INITIALIZED</b> Java runtime system already initialized
  395.                   <b>JAVA_OUT_OF_MEMORY</b>       out of memory
  396.                   <b>JAVA_EXCEPTION_OCCURRED</b>  Java exception occurred
  397.                   <b>JAVA_NOT_INITIALIZED</b>     Java runtime system not initialized
  398.                   <b>JAVA_INTERNAL_ERROR</b>      internal Java error
  399. */
  400. int XJavaEnvironment::SetStatusMsgHandler(XWindow * owner, XJavaStatusMsgHandler * hnd)
  401. {
  402.    smsg_handlers.remove_handler(owner);
  403.    smsg_handlers.add_handler(owner, hnd);
  404.    return (int) jeRegisterShowStatus((jeShowStatusFnPtr) & myShowStatMsg);
  405. }
  406.  
  407.  
  408. /*@ XJavaEnvironment::GetStatusMsgHandler(XWindow * w)
  409. @group java/misc
  410. @parameters XWindow* owner Pointer to the window object to which the handler belongs to.
  411. @remarks Queries the pointer to the actual status message handler object.
  412. @returns Pointer to the actual status message handler.
  413. */
  414. XJavaStatusMsgHandler * XJavaEnvironment::GetStatusMsgHandler(XWindow * w)
  415. {
  416.    return (XJavaStatusMsgHandler *) smsg_handlers.get_handler(w->GetHandle());
  417. }
  418.  
  419.  
  420. /*@ XJavaEnvironment::GetVersion(int *piMajor, int *piMinor)
  421. @group java/misc
  422. @remarks Queries the version of J-Empower.
  423. @returns int* piMajor The major version number.
  424.         int* piMinor The Minor version number.
  425.         An error code is return; possible values are:
  426.                   <b>JAVA_OK</b>                  no error
  427.                   <b>JAVA_INVALID_APPLET</b>      inavlid applet code given
  428.                   <b>JAVA_INVALID_CONTEXT</b>     inavlid applet context given
  429.                   <b>JAVA_INVALID_PARAMETER</b>   invalid parameter
  430.                   <b>JAVA_ALREADY_INITIALIZED</b> Java runtime system already initialized
  431.                   <b>JAVA_OUT_OF_MEMORY</b>       out of memory
  432.                   <b>JAVA_EXCEPTION_OCCURRED</b>  Java exception occurred
  433.                   <b>JAVA_NOT_INITIALIZED</b>     Java runtime system not initialized
  434.                   <b>JAVA_INTERNAL_ERROR</b>      internal Java error
  435. */
  436. void XJavaEnvironment::GetVersion(int *piMajor, int *piMinor)
  437. {
  438.    jeVersion(piMajor, piMinor);
  439. }
  440.  
  441.  
  442. /*@ XJavaEnvironment::SetProperty(const char *key, const char *value)
  443. @group java/misc
  444. @remarks Sets a property value of the Java runtime system.
  445. @parameters const char* key     Name of the key (refer to the Java documentation)
  446.                  char* value   New value that the key has
  447. @returns An error code is return; possible values are:
  448.                   <b>JAVA_OK</b>                  no error
  449.                   <b>JAVA_INVALID_APPLET</b>      inavlid applet code given
  450.                   <b>JAVA_INVALID_CONTEXT</b>     inavlid applet context given
  451.                   <b>JAVA_INVALID_PARAMETER</b>   invalid parameter
  452.                   <b>JAVA_ALREADY_INITIALIZED</b> Java runtime system already initialized
  453.                   <b>JAVA_OUT_OF_MEMORY</b>       out of memory
  454.                   <b>JAVA_EXCEPTION_OCCURRED</b>  Java exception occurred
  455.                   <b>JAVA_NOT_INITIALIZED</b>     Java runtime system not initialized
  456.                   <b>JAVA_INTERNAL_ERROR</b>      internal Java error
  457. */
  458. int XJavaEnvironment::SetProperty(const char *key, const char *value)
  459. {
  460.    return (int) jeSetProperty(key, value);
  461. }
  462.  
  463.  
  464. /*@ XJavaEnvironment::GetProperty(const char *key, XString * value)
  465. @group java/misc
  466. @remarks Queries a property value from the Java runtime system.
  467. @parameters const char* key     Name of the key (refer to the Java documentation)
  468.                  char* value   Value that the key has
  469.                  int   buflen  Length of the buffer for the value
  470.                  int*  pvallen Real length of the key value
  471. @returns An error code is return; possible values are:
  472.                   <b>JAVA_OK</b>                  no error
  473.                   <b>JAVA_INVALID_APPLET</b>      inavlid applet code given
  474.                   <b>JAVA_INVALID_CONTEXT</b>     inavlid applet context given
  475.                   <b>JAVA_INVALID_PARAMETER</b>   invalid parameter
  476.                   <b>JAVA_ALREADY_INITIALIZED</b> Java runtime system already initialized
  477.                   <b>JAVA_OUT_OF_MEMORY</b>       out of memory
  478.                   <b>JAVA_EXCEPTION_OCCURRED</b>  Java exception occurred
  479.                   <b>JAVA_NOT_INITIALIZED</b>     Java runtime system not initialized
  480.                   <b>JAVA_INTERNAL_ERROR</b>      internal Java error
  481. */
  482. int XJavaEnvironment::GetProperty(const char *key, XString * value)
  483. {
  484.    int result, pvallen;
  485.  
  486.    result = jeGetProperty(key, value->GetBuffer(1024), 1024, &pvallen);
  487.    value->ReleaseBuffer(pvallen);
  488.    return result;
  489. }
  490.  
  491.