home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / ool.zip / OOL / source / xjavaenv.cpp < prev    next >
C/C++ Source or Header  |  1997-04-04  |  18KB  |  485 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.  
  107. /*@ XJavaEnvironment::XJavaEnvironment(XJavaConsoleMessageHandler * phnd, int argc, char **argv)
  108. @group constructors/destructors
  109. @remarks The constructor of XJavaEnvironment initializes the Java virtual machines.
  110. @parameters XJavaConsoleMessageHandler* phnd Pointer to a console message handler object;
  111.                                             if NULL is passed, then a default message handler is beeing installed.
  112.            int argc     Number of arguments that shall be passed to the
  113.                         Java runtime system.
  114.            char** argv  Array with strings containing the parameters; possible
  115.                         parameters are:
  116.                         -v|-verbose                                             turn on verbose mode
  117.                         -debug                                                  enable remote Java debugging
  118.                         -noasyncgc                                              don't allow asynchronous gc's
  119.                         -verbosegc                                              print a message when gc occur
  120.                         -ss<em>number</em>                                      set the C stack size of a process
  121.                         -oss<em>number</em>                                     set the JAVA stack size of a process
  122.                         -ms<em>number</em>                                      set the initial Java heap size
  123.                         -mx<em>number</em>                                      set the maximum Java heap size
  124.                         -classpath <em>directories separated by semicolons</em> list directories in which to look for classes
  125.                         -prof                                                   output profiling data to ./java.prof
  126.                         -verify                                                 verify all classes when read in
  127.                         -verifyremote                                           verify classes read in over the network [default]
  128.                         -noverify                                               do not verify any class
  129. */
  130. XJavaEnvironment::XJavaEnvironment(XJavaConsoleMessageHandler * phnd, int argc, char **argv):XObject()
  131. {
  132.     int rc;
  133.  
  134.     if (NULL != pJEnv)
  135.     {
  136.         XMessageBox("There already exists an Java environment "
  137.                     "in this application.");
  138.         return;
  139.     }                            // if
  140.  
  141.     // initialize java runtime system
  142.     if ((0 != argc) && (NULL != argv))
  143.         rc = (int) jeInitJavaRuntimeEx(argc, argv);
  144.     else
  145.         rc = (int) jeInitJavaRuntime();
  146.     if (JAVA_OK != rc)
  147.     {
  148.         DisplayError("jeInitJavaRuntime", rc);
  149.         return;
  150.     }
  151.  
  152.     // register console function
  153.     if (phnd)
  154.         rc = SetMessageHandler(phnd);
  155.     else
  156.         rc = SetMessageHandler(new XJavaConsoleMessageHandler());
  157. /*        if( JAVA_OK != rc )
  158.         {
  159.                 DisplayError( "jeShowConsoleFnPtr", rc );
  160.                 return;
  161.         }*/
  162.  
  163.     pJEnv = this;
  164. }
  165.  
  166.  
  167.  
  168. /*@ XJavaEnvironment :: ~XJavaEnvironment()
  169. @group constructors/destructors
  170. @remarks Constructor for the XJavaEnvironment class.
  171. */
  172. XJavaEnvironment :: ~XJavaEnvironment()
  173. {
  174.     pJEnv = NULL;
  175. }
  176.  
  177.  
  178.  
  179. /*@ XJavaEnvironment::DisplayError(char *msg, int rc)
  180. @group java/misc
  181. @remarks Opens a message box and displays an error message
  182. @parameters int rc Error number; possible values are:
  183.                   <b>JAVA_OK</b>                  no error
  184.                   <b>JAVA_INVALID_APPLET</b>      inavlid applet code given
  185.                   <b>JAVA_INVALID_CONTEXT</b>     inavlid applet context given
  186.                   <b>JAVA_INVALID_PARAMETER</b>   invalid parameter
  187.                   <b>JAVA_ALREADY_INITIALIZED</b> Java runtime system already initialized
  188.                   <b>JAVA_OUT_OF_MEMORY</b>       out of memory
  189.                   <b>JAVA_EXCEPTION_OCCURRED</b>  Java exception occurred
  190.                   <b>JAVA_NOT_INITIALIZED</b>     Java runtime system not initialized
  191.                   <b>JAVA_INTERNAL_ERROR</b>      internal Java error
  192. */
  193. void XJavaEnvironment::DisplayError(char *msg, int rc)
  194. {
  195.     XString str;
  196.  
  197.     switch (rc)
  198.     {
  199.     case JAVA_OK:
  200.         return;
  201.  
  202.     case JAVA_INVALID_APPLET:
  203.         str = "Invalid Java applet.";
  204.         break;
  205.  
  206.     case JAVA_INVALID_CONTEXT:
  207.         str = "Invalid Java applet context.";
  208.         break;
  209.  
  210.     case JAVA_INVALID_PARAMETER:
  211.         str = "Invalid parameter passed to Java.";
  212.         break;
  213.  
  214.     case JAVA_ALREADY_INITIALIZED:
  215.         str = "Java runtime system is already initialized";
  216.         break;
  217.  
  218.     case JAVA_OUT_OF_MEMORY:
  219.         str = "Out of memory.";
  220.         break;
  221.  
  222.     case JAVA_EXCEPTION_OCCURRED:
  223.         str = "An Java exception occurred.";
  224.         break;
  225.  
  226.     case JAVA_NOT_INITIALIZED:
  227.         str = "Java runtime system not initialized.";
  228.         break;
  229.  
  230.     case JAVA_INTERNAL_ERROR:
  231.         str = "Internal Java error.";
  232.         break;
  233.  
  234.     default:
  235.         str += "Unknown Java error (";
  236.         str += (XString) rc;
  237.         str += ")";
  238.     }                            // switch
  239.  
  240.     XMessageBox m((char *) str, msg);
  241. }
  242.  
  243.  
  244.  
  245. /*@ XJavaEnvironment::Get(void)
  246. @group java/misc
  247. @remarks Queries the pointer to the actual Java environment object.
  248. @returns XJavaEnvironment* pJEnv pointer to the actual Java environment object.
  249. */
  250. XJavaEnvironment * XJavaEnvironment::Get(void)
  251. {
  252.     return pJEnv;
  253. }
  254.  
  255.  
  256.  
  257. /*@ XJavaEnvironment::Iconify(XWindow * win)
  258. @group java/misc
  259. @remarks Notifies the applets of a window that the window has been minimized.
  260. @parameters XWindow* pOwnerWnd - Owner window of the applets
  261. @returns An error code is return; possible values are:
  262.                   <b>JAVA_OK</b>                  no error
  263.                   <b>JAVA_INVALID_APPLET</b>      inavlid applet code given
  264.                   <b>JAVA_INVALID_CONTEXT</b>     inavlid applet context given
  265.                   <b>JAVA_INVALID_PARAMETER</b>   invalid parameter
  266.                   <b>JAVA_ALREADY_INITIALIZED</b> Java runtime system already initialized
  267.                   <b>JAVA_OUT_OF_MEMORY</b>       out of memory
  268.                   <b>JAVA_EXCEPTION_OCCURRED</b>  Java exception occurred
  269.                   <b>JAVA_NOT_INITIALIZED</b>     Java runtime system not initialized
  270.                   <b>JAVA_INTERNAL_ERROR</b>      internal Java error
  271. */
  272. int XJavaEnvironment::Iconify(XWindow * win)    
  273. {
  274.     return (int) jeAppletsIconify((JECONTEXTID) win->GetHandle());
  275. }
  276.  
  277.  
  278.  
  279. /*@ XJavaEnvironment::Uniconify(XWindow * win)
  280. @group java/misc
  281. @remarks Notifies the applets of a window that the window has been restored.
  282. @parameters XWindow* pOwnerWnd - Owner window of the applets
  283. @returns An error code is return; possible values are:
  284.                   <b>JAVA_OK</b>                  no error
  285.                   <b>JAVA_INVALID_APPLET</b>      inavlid applet code given
  286.                   <b>JAVA_INVALID_CONTEXT</b>     inavlid applet context given
  287.                   <b>JAVA_INVALID_PARAMETER</b>   invalid parameter
  288.                   <b>JAVA_ALREADY_INITIALIZED</b> Java runtime system already initialized
  289.                   <b>JAVA_OUT_OF_MEMORY</b>       out of memory
  290.                   <b>JAVA_EXCEPTION_OCCURRED</b>  Java exception occurred
  291.                   <b>JAVA_NOT_INITIALIZED</b>     Java runtime system not initialized
  292.                   <b>JAVA_INTERNAL_ERROR</b>      internal Java error
  293. */
  294. int XJavaEnvironment::Uniconify(XWindow * win)
  295. {
  296.     return (int) jeAppletsUniconify((JECONTEXTID) win->GetHandle());
  297. }
  298.  
  299.  
  300.  
  301.  
  302. /*@ XJavaEnvironment::GetMessageHandler()
  303. @group java/misc
  304. @remarks Queries the pointer to the actual console message handler object.
  305. @returns XJavaConsoleMessageHandler* pMsgHandler Pointer to the actual console message handler object.
  306. */
  307.  
  308.  
  309.  
  310.  
  311. /*@ XJavaEnvironment::SetMessageHandler()
  312. @group java/misc
  313. @remarks Sets a new console message handler object. Please remember to delete the old
  314.         message handler object if there is one.
  315. @parameters XJavaConsoleMessageHandler* handler  pointer to the handler object
  316. @returns An error code is return; possible values are:
  317.                   <b>JAVA_OK</b>                  no error
  318.                   <b>JAVA_INVALID_APPLET</b>      inavlid applet code given
  319.                   <b>JAVA_INVALID_CONTEXT</b>     inavlid applet context given
  320.                   <b>JAVA_INVALID_PARAMETER</b>   invalid parameter
  321.                   <b>JAVA_ALREADY_INITIALIZED</b> Java runtime system already initialized
  322.                   <b>JAVA_OUT_OF_MEMORY</b>       out of memory
  323.                   <b>JAVA_EXCEPTION_OCCURRED</b>  Java exception occurred
  324.                   <b>JAVA_NOT_INITIALIZED</b>     Java runtime system not initialized
  325.                   <b>JAVA_INTERNAL_ERROR</b>      internal Java error
  326. */
  327. int XJavaEnvironment::SetMessageHandler(XJavaConsoleMessageHandler * phnd)
  328. {
  329.     int rc;
  330.  
  331.     pMsgHandler = phnd;
  332.     rc = (int) jeRegisterShowConsole((jeShowConsoleFnPtr) & myShowConsoleMsg);
  333.  
  334.     return rc;
  335. }
  336.  
  337.  
  338. /*@ XJavaEnvironment::SetShowURLHandler(XWindow * owner, XJavaShowURLHandler * hnd)
  339. @group java/misc
  340. @remarks Sets a new console url show handler object. Please remember to delete the old
  341.         handler object if there is one.
  342. @parameters XWindow* wnd  pointer to the window object that holds an applet
  343.            XJavaShowURLHandler* hnd   pointer to the handler object
  344. @returns An error code is return; possible values are:
  345.                   <b>JAVA_OK</b>                  no error
  346.                   <b>JAVA_INVALID_APPLET</b>      inavlid applet code given
  347.                   <b>JAVA_INVALID_CONTEXT</b>     inavlid applet context given
  348.                   <b>JAVA_INVALID_PARAMETER</b>   invalid parameter
  349.                   <b>JAVA_ALREADY_INITIALIZED</b> Java runtime system already initialized
  350.                   <b>JAVA_OUT_OF_MEMORY</b>       out of memory
  351.                   <b>JAVA_EXCEPTION_OCCURRED</b>  Java exception occurred
  352.                   <b>JAVA_NOT_INITIALIZED</b>     Java runtime system not initialized
  353.                   <b>JAVA_INTERNAL_ERROR</b>      internal Java error
  354. */
  355. int XJavaEnvironment::SetShowURLHandler(XWindow * owner, XJavaShowURLHandler * hnd)
  356. {
  357.     url_handlers.remove_handler(owner);
  358.     url_handlers.add_handler(owner, hnd);
  359.     return (int) jeRegisterShowDocument((jeShowDocumentFnPtr) & myShowURL);
  360. }
  361.  
  362.  
  363. /*@ XJavaEnvironment::GetShowURLHandler(XWindow * w)
  364. @group java/misc
  365. @parameters XWindow* owner Pointer to the window object to which the handler belongs to.
  366. @remarks Queries the pointer to the actual url show handler object.
  367. @returns Pointer to the actual url show handler object.
  368. */
  369. XJavaShowURLHandler * XJavaEnvironment::GetShowURLHandler(XWindow * w)
  370. {
  371.     return (XJavaShowURLHandler *) url_handlers.get_handler(w->GetHandle());
  372. }
  373.  
  374.  
  375.  
  376.  
  377. /*@ XJavaEnvironment::SetStatusMsgHandler(XWindow * owner, XJavaStatusMsgHandler * hnd)
  378. @group java/misc
  379. @remarks Sets a new status message handler object. Please remember to delete the old
  380.         handler object if there is one.
  381. @parameters XWindow* wnd  pointer to the window object that holds an applet
  382.            XJavaStatusMsgHandler* hnd   pointer to the handler object
  383. @returns An error code is return; possible values are:
  384.                   <b>JAVA_OK</b>                  no error
  385.                   <b>JAVA_INVALID_APPLET</b>      inavlid applet code given
  386.                   <b>JAVA_INVALID_CONTEXT</b>     inavlid applet context given
  387.                   <b>JAVA_INVALID_PARAMETER</b>   invalid parameter
  388.                   <b>JAVA_ALREADY_INITIALIZED</b> Java runtime system already initialized
  389.                   <b>JAVA_OUT_OF_MEMORY</b>       out of memory
  390.                   <b>JAVA_EXCEPTION_OCCURRED</b>  Java exception occurred
  391.                   <b>JAVA_NOT_INITIALIZED</b>     Java runtime system not initialized
  392.                   <b>JAVA_INTERNAL_ERROR</b>      internal Java error
  393. */
  394. int XJavaEnvironment::SetStatusMsgHandler(XWindow * owner, XJavaStatusMsgHandler * hnd)
  395. {
  396.     smsg_handlers.remove_handler(owner);
  397.     smsg_handlers.add_handler(owner, hnd);
  398.     return (int) jeRegisterShowStatus((jeShowStatusFnPtr) & myShowStatMsg);
  399. }
  400.  
  401.  
  402. /*@ XJavaEnvironment::GetStatusMsgHandler(XWindow * w)
  403. @group java/misc
  404. @parameters XWindow* owner Pointer to the window object to which the handler belongs to.
  405. @remarks Queries the pointer to the actual status message handler object.
  406. @returns Pointer to the actual status message handler.
  407. */
  408. XJavaStatusMsgHandler * XJavaEnvironment::GetStatusMsgHandler(XWindow * w)
  409. {
  410.     return (XJavaStatusMsgHandler *) smsg_handlers.get_handler(w->GetHandle());
  411. }
  412.  
  413.  
  414. /*@ XJavaEnvironment::GetVersion(int *piMajor, int *piMinor)
  415. @group java/misc
  416. @remarks Queries the version of J-Empower.
  417. @returns int* piMajor The major version number.
  418.         int* piMinor The Minor version number.
  419.         An error code is return; possible values are:
  420.                   <b>JAVA_OK</b>                  no error
  421.                   <b>JAVA_INVALID_APPLET</b>      inavlid applet code given
  422.                   <b>JAVA_INVALID_CONTEXT</b>     inavlid applet context given
  423.                   <b>JAVA_INVALID_PARAMETER</b>   invalid parameter
  424.                   <b>JAVA_ALREADY_INITIALIZED</b> Java runtime system already initialized
  425.                   <b>JAVA_OUT_OF_MEMORY</b>       out of memory
  426.                   <b>JAVA_EXCEPTION_OCCURRED</b>  Java exception occurred
  427.                   <b>JAVA_NOT_INITIALIZED</b>     Java runtime system not initialized
  428.                   <b>JAVA_INTERNAL_ERROR</b>      internal Java error
  429. */
  430. void XJavaEnvironment::GetVersion(int *piMajor, int *piMinor)
  431. {
  432.     jeVersion(piMajor, piMinor);
  433. }
  434.  
  435.  
  436. /*@ XJavaEnvironment::SetProperty(const char *key, const char *value)
  437. @group java/misc
  438. @remarks Sets a property value of the Java runtime system.
  439. @parameters const char* key     Name of the key (refer to the Java documentation)
  440.                  char* value   New value that the key has
  441. @returns An error code is return; possible values are:
  442.                   <b>JAVA_OK</b>                  no error
  443.                   <b>JAVA_INVALID_APPLET</b>      inavlid applet code given
  444.                   <b>JAVA_INVALID_CONTEXT</b>     inavlid applet context given
  445.                   <b>JAVA_INVALID_PARAMETER</b>   invalid parameter
  446.                   <b>JAVA_ALREADY_INITIALIZED</b> Java runtime system already initialized
  447.                   <b>JAVA_OUT_OF_MEMORY</b>       out of memory
  448.                   <b>JAVA_EXCEPTION_OCCURRED</b>  Java exception occurred
  449.                   <b>JAVA_NOT_INITIALIZED</b>     Java runtime system not initialized
  450.                   <b>JAVA_INTERNAL_ERROR</b>      internal Java error
  451. */
  452. int XJavaEnvironment::SetProperty(const char *key, const char *value)
  453. {
  454.     return (int) jeSetProperty(key, value);
  455. }
  456.  
  457.  
  458. /*@ XJavaEnvironment::GetProperty(const char *key, XString * value)
  459. @group java/misc
  460. @remarks Queries a property value from the Java runtime system.
  461. @parameters const char* key     Name of the key (refer to the Java documentation)
  462.                  char* value   Value that the key has
  463.                  int   buflen  Length of the buffer for the value
  464.                  int*  pvallen Real length of the key value
  465. @returns An error code is return; possible values are:
  466.                   <b>JAVA_OK</b>                  no error
  467.                   <b>JAVA_INVALID_APPLET</b>      inavlid applet code given
  468.                   <b>JAVA_INVALID_CONTEXT</b>     inavlid applet context given
  469.                   <b>JAVA_INVALID_PARAMETER</b>   invalid parameter
  470.                   <b>JAVA_ALREADY_INITIALIZED</b> Java runtime system already initialized
  471.                   <b>JAVA_OUT_OF_MEMORY</b>       out of memory
  472.                   <b>JAVA_EXCEPTION_OCCURRED</b>  Java exception occurred
  473.                   <b>JAVA_NOT_INITIALIZED</b>     Java runtime system not initialized
  474.                   <b>JAVA_INTERNAL_ERROR</b>      internal Java error
  475. */
  476. int XJavaEnvironment::GetProperty(const char *key, XString * value)
  477. {
  478.     int result, pvallen;
  479.  
  480.     result = jeGetProperty(key, value->GetBuffer(1024), 1024, &pvallen);
  481.     value->ReleaseBuffer(pvallen);
  482.     return result;
  483. }
  484.  
  485.