1 |
/* gcjwebplugin - Webbrowser plugin to execute Java (tm) applets. |
/* AppletViewer.java - |
2 |
Copyright (C) 2003 Thomas Fitzsimmons <fitzsim@redhat.com> |
Copyright (C) 2003 Thomas Fitzsimmons <fitzsim@redhat.com> |
3 |
|
|
4 |
This program is free software; you can redistribute it and/or modify |
This program is free software; you can redistribute it and/or modify |
36 |
|
|
37 |
package gnu.gcjwebplugin; |
package gnu.gcjwebplugin; |
38 |
|
|
39 |
|
import gnu.java.awt.EmbeddedWindow; |
40 |
import gnu.getopt.Getopt; |
import gnu.getopt.Getopt; |
41 |
import gnu.getopt.LongOpt; |
import gnu.getopt.LongOpt; |
42 |
import gnu.java.awt.EmbeddedWindow; |
import java.io.*; |
43 |
import java.applet.Applet; |
import java.applet.Applet; |
44 |
import java.awt.Frame; |
import java.awt.Frame; |
45 |
import java.io.BufferedReader; |
import java.util.Map; |
46 |
import java.io.BufferedWriter; |
import java.util.HashMap; |
47 |
import java.io.InputStreamReader; |
import java.util.List; |
48 |
import java.io.IOException; |
import java.util.Iterator; |
49 |
import java.io.OutputStreamWriter; |
import java.util.ArrayList; |
50 |
|
import java.net.URL; |
51 |
|
|
52 |
public class AppletViewer extends Frame |
public class AppletViewer extends Frame |
53 |
{ |
{ |
|
String code; |
|
|
String codebase; |
|
|
String archive; |
|
|
String documentbase; |
|
|
String parameters; |
|
|
int width = 200; |
|
|
int height = 200; |
|
|
int xid; |
|
|
boolean pluginmode; |
|
|
Frame frame; |
|
54 |
Applet applet; |
Applet applet; |
|
|
|
55 |
AppletLoader loader = new AppletLoader(); |
AppletLoader loader = new AppletLoader(); |
56 |
|
|
57 |
AppletViewer () |
URL documentbaseURL; |
|
{ |
|
|
} |
|
58 |
|
|
59 |
boolean pluginMode () |
AppletViewer () |
|
{ |
|
|
return pluginmode; |
|
|
} |
|
|
|
|
|
void createEmbeddedWindow (int xid) |
|
60 |
{ |
{ |
|
System.err.println ("appletviewer: set xid to " + xid); |
|
|
frame = new EmbeddedWindow (xid); |
|
|
frame.setSize(width,height); |
|
61 |
} |
} |
62 |
|
|
63 |
void loadApplet () |
void loadApplet () |
64 |
{ |
{ |
|
if (code != null) |
|
|
loader.setCode (code); |
|
|
if (codebase != null) |
|
|
loader.setCodeBase (codebase); |
|
|
if (archive != null) |
|
|
loader.setArchive (archive); |
|
|
if (documentbase != null) |
|
|
loader.setDocumentBase (documentbase); |
|
|
applet = loader.loadApplet(); |
|
65 |
applet.init(); |
applet.init(); |
66 |
} |
} |
67 |
|
|
68 |
void showApplet () |
public void show () |
69 |
{ |
{ |
70 |
if (frame != null) |
System.err.println ("appletviewer: show applet"); |
71 |
{ |
|
72 |
System.err.println ("appletviewer: show applet"); |
loader.setFrame (this); |
73 |
loader.setFrame (frame); |
|
74 |
frame.show(); |
super.show (); |
75 |
} |
|
76 |
applet.start(); |
applet.start(); |
77 |
} |
} |
78 |
|
|
79 |
void parseArgs (String [] args) |
public static void main (String[] args) |
80 |
|
throws IOException |
81 |
{ |
{ |
82 |
|
List appletTags = new ArrayList (); |
83 |
|
URL documentbase = null; |
84 |
|
|
85 |
LongOpt[] longOptions = new LongOpt[] |
LongOpt[] longOptions = new LongOpt[] |
86 |
{ |
{ |
87 |
new LongOpt ("code", LongOpt.REQUIRED_ARGUMENT, null, 0), |
new LongOpt ("code", LongOpt.REQUIRED_ARGUMENT, null, 0), |
91 |
new LongOpt ("parameters", LongOpt.REQUIRED_ARGUMENT, null, 0), |
new LongOpt ("parameters", LongOpt.REQUIRED_ARGUMENT, null, 0), |
92 |
new LongOpt ("width", LongOpt.REQUIRED_ARGUMENT, null, 0), |
new LongOpt ("width", LongOpt.REQUIRED_ARGUMENT, null, 0), |
93 |
new LongOpt ("height", LongOpt.REQUIRED_ARGUMENT, null, 0), |
new LongOpt ("height", LongOpt.REQUIRED_ARGUMENT, null, 0), |
|
new LongOpt ("plugin", LongOpt.NO_ARGUMENT, null, 0), |
|
94 |
}; |
}; |
95 |
|
|
96 |
|
Getopt opts = new Getopt("appletviewer", args, "", longOptions); |
97 |
|
|
98 |
|
// Parse command line, placing all option arguments at the start |
99 |
|
// of args, all non-options at the end, and setting optind to the |
100 |
|
// index of the first non-option argument. |
101 |
|
while (opts.getopt() != -1); |
102 |
|
|
103 |
|
// optind now points to the first non-option argument. |
104 |
|
System.out.println ("raw arguments:"); |
105 |
|
for (int i = 0; i < args.length; i++) |
106 |
|
{ |
107 |
|
System.out.println (" " + args[i]); |
108 |
|
} |
109 |
|
|
110 |
|
// Handle each file specified on the command line. |
111 |
|
for (int i = opts.getOptind (); i < args.length; i++) |
112 |
|
{ |
113 |
|
appletTags.addAll (AppletTag.parseAppletTags (args[i])); |
114 |
|
} |
115 |
|
|
116 |
|
System.out.println ("documentbase: " + documentbase); |
117 |
|
System.out.println ("parsed applet tags:"); |
118 |
|
for (int i = 0; i < appletTags.size(); i++) |
119 |
|
{ |
120 |
|
System.out.println (" tag " + i + ":"); |
121 |
|
System.out.println ((AppletTag) appletTags.get (i)); |
122 |
|
} |
123 |
|
|
124 |
|
/* |
125 |
int optVal; |
int optVal; |
126 |
String arg; |
String arg; |
127 |
int longIndex; |
int longIndex; |
136 |
switch (longIndex) |
switch (longIndex) |
137 |
{ |
{ |
138 |
case 0: |
case 0: |
139 |
code = opts.getOptarg(); |
if (!parseHTML) |
140 |
|
tag.code = opts.getOptarg(); |
141 |
break; |
break; |
142 |
case 1: |
case 1: |
143 |
codebase = opts.getOptarg(); |
if (!parseHTML) |
144 |
|
tag.codebase = opts.getOptarg(); |
145 |
break; |
break; |
146 |
case 2: |
case 2: |
147 |
archive = opts.getOptarg(); |
if (!parseHTML) |
148 |
|
tag.archives = opts.getOptarg(); |
149 |
break; |
break; |
150 |
case 3: |
case 3: |
151 |
documentbase = opts.getOptarg(); |
// FIXME: documentbase |
152 |
break; |
break; |
153 |
case 4: |
case 4: |
154 |
// FIXME: Handle multiple parameters. |
// FIXME: Handle multiple parameters. |
155 |
parameters = opts.getOptarg(); |
// tag.parameters = opts.getOptarg(); |
156 |
break; |
break; |
157 |
case 5: |
case 5: |
158 |
width = Integer.parseInt(opts.getOptarg()); |
tag.dimensions.width = Integer.parseInt(opts.getOptarg()); |
159 |
break; |
break; |
160 |
case 6: |
case 6: |
161 |
height = Integer.parseInt(opts.getOptarg()); |
tag.dimensions.height = Integer.parseInt(opts.getOptarg()); |
|
break; |
|
|
case 7: |
|
|
pluginmode = true; |
|
162 |
break; |
break; |
163 |
} |
} |
164 |
} |
} |
165 |
} |
} |
|
if (!pluginmode) |
|
|
{ |
|
|
System.err.println ("AppletViewer: standalone mode"); |
|
|
frame = this; |
|
|
} |
|
166 |
|
|
167 |
System.err.println ("AppletViewer:\n" + |
System.err.println ("AppletViewer:\n" + |
168 |
"code: " + code + "\n" + |
"code: " + tag.code + "\n" + |
169 |
"codebase: " + codebase + "\n" + |
"codebase: " + tag.codebase + "\n" + |
170 |
"archive: " + archive + "\n" + |
"archive: " + tag.archives + "\n" + |
171 |
"documentbase: " + documentbase + "\n" + |
"parameters: " + tag.parameters + "\n" + |
172 |
"parameters: " + parameters + "\n" + |
"width: " + tag.dimensions.width + "\n" + |
173 |
"width: " + width + "\n" + |
"height: " + tag.dimensions.height); |
174 |
"height: " + height + "\n" + |
*/ |
|
"pluginmode: " + pluginmode); |
|
|
} |
|
|
|
|
|
public static void main (String[] args) throws IOException |
|
|
{ |
|
|
BufferedReader stdin = new BufferedReader (new InputStreamReader (System.in)); |
|
|
BufferedWriter stdout = new BufferedWriter (new OutputStreamWriter (System.out)); |
|
|
String input; |
|
175 |
|
|
176 |
AppletViewer viewer = new AppletViewer (); |
AppletViewer viewer = new AppletViewer (); |
|
viewer.parseArgs(args); |
|
|
if (viewer.pluginMode()) |
|
|
{ |
|
|
// Tell plugin that we've started. |
|
|
stdout.write ("running", 0, "running".length()); |
|
|
stdout.newLine (); |
|
|
stdout.flush (); |
|
|
|
|
|
System.err.println ("appletviewer wrote running"); |
|
|
|
|
|
while (true) |
|
|
{ |
|
|
// Wait for input from plugin on stdin. |
|
|
input = stdin.readLine (); |
|
|
|
|
|
System.err.println (" PIPE: appletviewer read " + input); |
|
177 |
|
|
178 |
// Return confirmation string to plugin. |
viewer.loadApplet (); |
179 |
stdout.write (input, 0, input.length()); |
viewer.show (); |
|
stdout.newLine (); |
|
|
stdout.flush (); |
|
|
|
|
|
System.err.println (" PIPE: appletviewer wrote " + input); |
|
|
|
|
|
if (input.compareTo ("xid") == 0) |
|
|
{ |
|
|
input = stdin.readLine(); |
|
|
|
|
|
System.err.println (" PIPE: appletviewer read " + input); |
|
|
|
|
|
// Return confirmation string to plugin. |
|
|
stdout.write (input, 0, input.length()); |
|
|
stdout.newLine (); |
|
|
stdout.flush (); |
|
|
|
|
|
System.err.println (" PIPE: appletviewer wrote " + input); |
|
|
|
|
|
// Read the plugin window's xid in hexadecimal. |
|
|
int xid = Integer.decode(input).intValue(); |
|
|
viewer.createEmbeddedWindow (xid); |
|
|
viewer.loadApplet(); |
|
|
viewer.showApplet(); |
|
|
} |
|
|
else if (input.compareTo ("shutdown") == 0) |
|
|
{ |
|
|
System.err.println ("appletviewer: shutting down"); |
|
|
System.exit(0); |
|
|
} |
|
|
} |
|
|
} |
|
|
else |
|
|
{ |
|
|
viewer.loadApplet(); |
|
|
viewer.showApplet(); |
|
|
} |
|
180 |
} |
} |
181 |
} |
} |