Commit 137bb9df0a68e590f66dd0f7b3d8e3b8bf12ce58

Authored by perry.werneck@gmail.com
1 parent 21a36f03

Reimplementando plugin java de forma mais organizada

@@ -114,6 +114,10 @@ @@ -114,6 +114,10 @@
114 <Option target="Debug" /> 114 <Option target="Debug" />
115 <Option target="Release" /> 115 <Option target="Release" />
116 </Unit> 116 </Unit>
  117 + <Unit filename="src/java/call.cc">
  118 + <Option target="Debug" />
  119 + <Option target="Release" />
  120 + </Unit>
117 <Unit filename="src/java/clipboard.cc"> 121 <Unit filename="src/java/clipboard.cc">
118 <Option target="Debug" /> 122 <Option target="Debug" />
119 <Option target="Release" /> 123 <Option target="Release" />
@@ -174,6 +178,10 @@ @@ -174,6 +178,10 @@
174 <Option target="Debug" /> 178 <Option target="Debug" />
175 <Option target="Release" /> 179 <Option target="Release" />
176 </Unit> 180 </Unit>
  181 + <Unit filename="src/java/startstop.cc">
  182 + <Option target="Debug" />
  183 + <Option target="Release" />
  184 + </Unit>
177 <Unit filename="src/java/terminal.java"> 185 <Unit filename="src/java/terminal.java">
178 <Option target="Debug" /> 186 <Option target="Debug" />
179 <Option target="Release" /> 187 <Option target="Release" />
src/java/Makefile.in
@@ -26,7 +26,7 @@ @@ -26,7 +26,7 @@
26 26
27 PACKAGE_NAME=@PACKAGE_NAME@ 27 PACKAGE_NAME=@PACKAGE_NAME@
28 SOURCES=main.cc info.cc connect.cc getset.cc cursor.cc keyboard.cc actions.cc field.cc dialog.cc clipboard.cc 28 SOURCES=main.cc info.cc connect.cc getset.cc cursor.cc keyboard.cc actions.cc field.cc dialog.cc clipboard.cc
29 -PLUGIN_SRC=plugin.cc startstop.cc 29 +PLUGIN_SRC=plugin.cc startstop.cc call.cc
30 30
31 #---[ Paths ]------------------------------------------------------------------ 31 #---[ Paths ]------------------------------------------------------------------
32 32
src/java/call.cc 0 → 100644
@@ -0,0 +1,99 @@ @@ -0,0 +1,99 @@
  1 +/*
  2 + * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270
  3 + * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a
  4 + * aplicativos mainframe. Registro no INPI sob o nome G3270.
  5 + *
  6 + * Copyright (C) <2008> <Banco do Brasil S.A.>
  7 + *
  8 + * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob
  9 + * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela
  10 + * Free Software Foundation.
  11 + *
  12 + * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER
  13 + * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO
  14 + * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para
  15 + * obter mais detalhes.
  16 + *
  17 + * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este
  18 + * programa; se não, escreva para a Free Software Foundation, Inc., 59 Temple
  19 + * Place, Suite 330, Boston, MA, 02111-1307, USA
  20 + *
  21 + * Este programa está nomeado como call.cc e possui - linhas de código.
  22 + *
  23 + * Contatos:
  24 + *
  25 + * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck)
  26 + * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça)
  27 + *
  28 + */
  29 +
  30 +
  31 + #include "private.h"
  32 + #include <pw3270/v3270.h>
  33 +
  34 +
  35 +/*---[ Implement ]----------------------------------------------------------------------------------*/
  36 +
  37 +namespace PW3270_NAMESPACE {
  38 +
  39 +
  40 + void java::call(GtkWidget *widget, const char *filename) {
  41 +
  42 + if(!trylock()) {
  43 +
  44 + failed(widget, _( "Can't access java virtual machine" ), "%s", strerror(EBUSY));
  45 + return;
  46 +
  47 + }
  48 +
  49 + if(jvm || load_jvm(widget)) {
  50 +
  51 + v3270_set_script(widget,'J',TRUE);
  52 +
  53 + gchar * dirname = g_path_get_dirname(filename);
  54 + gchar * classname = g_path_get_basename(filename);
  55 +
  56 + gchar * ptr = strrchr(classname,'.');
  57 + if(ptr) {
  58 + *ptr = 0;
  59 + }
  60 +
  61 +
  62 +
  63 + try {
  64 +
  65 + jclass cls;
  66 + jmethodID mid;
  67 +
  68 + // Atualizar o classpath
  69 + cls = env->FindClass("java.lang.System");
  70 + if(!cls) {
  71 + throw exception( _( "Can't find class %s" ), "java.lang.System");
  72 + }
  73 +
  74 + mid = env->GetStaticMethodID(cls, "setProperty", "(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String");
  75 + if(!mid) {
  76 + throw exception( _( "Can't find method %s/%d" ), "java.lang.System","setProperty");
  77 + }
  78 +
  79 +
  80 +
  81 + } catch(std::exception &e) {
  82 +
  83 + failed(widget,_("Can't start java application"),"%s", e.what());
  84 +
  85 + }
  86 +
  87 + g_free(dirname);
  88 + g_free(classname);
  89 +
  90 + v3270_set_script(widget,'J',FALSE);
  91 +
  92 + }
  93 +
  94 + unlock();
  95 +
  96 +
  97 + }
  98 +
  99 +}
src/java/private.h
@@ -62,6 +62,7 @@ @@ -62,6 +62,7 @@
62 bool trylock(); 62 bool trylock();
63 63
64 #ifdef PW3270_PLUGIN 64 #ifdef PW3270_PLUGIN
  65 + bool load_jvm(GtkWidget *widget);
65 void call(GtkWidget *widget, const char *filename); 66 void call(GtkWidget *widget, const char *filename);
66 void failed(GtkWidget *widget, const char *msg, const char *format, ...); 67 void failed(GtkWidget *widget, const char *msg, const char *format, ...);
67 #endif // PW3270_PLUGIN 68 #endif // PW3270_PLUGIN
src/java/startstop.cc
@@ -120,7 +120,9 @@ extern &quot;C&quot; { @@ -120,7 +120,9 @@ extern &quot;C&quot; {
120 #if GTK_CHECK_VERSION(2,32,0) 120 #if GTK_CHECK_VERSION(2,32,0)
121 g_mutex_init(&mutex); 121 g_mutex_init(&mutex);
122 #endif // GTK_CHECK_VERSION 122 #endif // GTK_CHECK_VERSION
123 - set_java_session_factory(factory); 123 +
  124 + set_factory(factory);
  125 +
124 return 0; 126 return 0;
125 } 127 }
126 128
@@ -222,6 +224,84 @@ extern &quot;C&quot; { @@ -222,6 +224,84 @@ extern &quot;C&quot; {
222 #endif // GTK_CHECK_VERSION 224 #endif // GTK_CHECK_VERSION
223 } 225 }
224 226
  227 + void java::failed(GtkWidget *widget, const char *msg, const char *format, ...) {
  228 +
  229 + GtkWidget *dialog = gtk_message_dialog_new( GTK_WINDOW(gtk_widget_get_toplevel(widget)),
  230 + GTK_DIALOG_DESTROY_WITH_PARENT,
  231 + GTK_MESSAGE_ERROR,
  232 + GTK_BUTTONS_OK_CANCEL,
  233 + "%s", msg );
  234 +
  235 + gtk_window_set_title(GTK_WINDOW(dialog), _( "Java error" ));
  236 +
  237 + if(gtk_dialog_run(GTK_DIALOG (dialog)) == GTK_RESPONSE_CANCEL)
  238 + gtk_main_quit();
  239 + gtk_widget_destroy(dialog);
  240 +
  241 + }
  242 +
  243 +
  244 +#ifdef WIN32
  245 +
  246 + bool java::load_jvm(GtkWidget *widget) {
  247 +
  248 + #error Implementar
  249 +
  250 + }
  251 +
  252 +
  253 +
  254 +#else
  255 +
  256 + bool java::load_jvm(GtkWidget *widget) {
  257 +
  258 + if(jvm != NULL) {
  259 + return true;
  260 + }
  261 +
  262 + // Start JNI
  263 + JavaVMInitArgs vm_args;
  264 + JavaVMOption options[5];
  265 + jint rc = 0;
  266 +
  267 +
  268 + memset(&vm_args,0,sizeof(vm_args));
  269 + memset(options,0,sizeof(options));
  270 +
  271 + vm_args.version = JNI_VERSION_1_4;
  272 + vm_args.nOptions = 0;
  273 + vm_args.options = options;
  274 + vm_args.ignoreUnrecognized = JNI_FALSE;
  275 +
  276 + options[vm_args.nOptions].optionString = g_strdup("vfprintf");
  277 + options[vm_args.nOptions].extraInfo = (void *) jni_vfprintf;
  278 + vm_args.nOptions++;
  279 +
  280 +#if defined(DEBUG)
  281 +
  282 +// options[vm_args.nOptions++].optionString = g_strdup("-verbose");
  283 + options[vm_args.nOptions++].optionString = g_strdup_printf("-Djava.library.path=%s:.bin/Debug:.bin/Debug/lib",JNIDIR);
  284 +
  285 +#else
  286 +
  287 + options[vm_args.nOptions++].optionString = g_strdup_printf("-Djava.library.path=%s",JNIDIR);
  288 +
  289 +#endif // JNIDIR
  290 +
  291 + // Linux, just create JVM
  292 + rc = JNI_CreateJavaVM(&jvm,(void **)&env,&vm_args);
  293 +
  294 + if(rc) {
  295 + jvm = NULL;
  296 + failed(widget, _( "Can't create java virtual machine" ), _( "The return code was %d" ), (int) rc);
  297 + }
  298 +
  299 + return jvm != NULL;
  300 + }
  301 +
  302 +
  303 +#endif // WIN32
  304 +
225 } 305 }
226 306
227 307