aboutsummaryrefslogtreecommitdiffstats
path: root/netx/net/sourceforge/jnlp/services/XBasicService.java
diff options
context:
space:
mode:
Diffstat (limited to 'netx/net/sourceforge/jnlp/services/XBasicService.java')
-rw-r--r--netx/net/sourceforge/jnlp/services/XBasicService.java232
1 files changed, 232 insertions, 0 deletions
diff --git a/netx/net/sourceforge/jnlp/services/XBasicService.java b/netx/net/sourceforge/jnlp/services/XBasicService.java
new file mode 100644
index 0000000..a7ef906
--- /dev/null
+++ b/netx/net/sourceforge/jnlp/services/XBasicService.java
@@ -0,0 +1,232 @@
+// Copyright (C) 2001 Jon A. Maxwell (JAM)
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+
+package net.sourceforge.jnlp.services;
+
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
+
+import javax.jnlp.BasicService;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+
+import net.sourceforge.jnlp.InformationDesc;
+import net.sourceforge.jnlp.JARDesc;
+import net.sourceforge.jnlp.JNLPFile;
+import net.sourceforge.jnlp.Launcher;
+import net.sourceforge.jnlp.runtime.ApplicationInstance;
+import net.sourceforge.jnlp.runtime.JNLPRuntime;
+import net.sourceforge.jnlp.util.PropertiesFile;
+
+/**
+ * The BasicService JNLP service.
+ *
+ * @author <a href="mailto:[email protected]">Jon A. Maxwell (JAM)</a> - initial author
+ * @version $Revision: 1.10 $
+ */
+class XBasicService implements BasicService {
+
+ /** command used to exec the native browser */
+ private String command = null;
+
+ /** whether the command was loaded / prompted for */
+ private boolean initialized = false;
+
+
+ protected XBasicService() {
+ }
+
+ /**
+ * Returns the codebase of the application, applet, or
+ * installer. If the codebase was not specified in the JNLP
+ * element then the main JAR's location is returned. If no main
+ * JAR was specified then the location of the JAR containing the
+ * main class is returned.
+ */
+ public URL getCodeBase() {
+ ApplicationInstance app = JNLPRuntime.getApplication();
+
+ if (app != null) {
+ JNLPFile file = app.getJNLPFile();
+
+ // return the codebase.
+ if (file.getCodeBase() != null)
+ return file.getCodeBase();
+
+ // else return the main JAR's URL.
+ JARDesc mainJar = file.getResources().getMainJAR();
+ if (mainJar != null)
+ return mainJar.getLocation();
+
+ // else find JAR where main class was defined.
+ //
+ // JNLPFile file = app.getJNLPFile();
+ // String mainClass = file.getLaunchInfo().getMainClass()+".class";
+ // URL jarUrl = app.getClassLoader().getResource(mainClass);
+ // go through list of JARDesc to find one matching jarUrl
+ }
+
+ return null;
+ }
+
+ /**
+ * Return true if the Environment is Offline
+ */
+ public boolean isOffline() {
+
+ URL url = findFirstURLFromJNLPFile();
+
+ try {
+ url.openConnection().getInputStream().close();
+ return false;
+ } catch (IOException exception) {
+ return true;
+ }
+ }
+
+ /**
+ * Return the first URL from the jnlp file
+ * Or a default URL if no url found in JNLP file
+ */
+ private URL findFirstURLFromJNLPFile() {
+
+ ApplicationInstance app = JNLPRuntime.getApplication();
+
+ if (app != null) {
+ JNLPFile jnlpFile = app.getJNLPFile();
+
+ URL sourceURL = jnlpFile.getSourceLocation();
+ if (sourceURL != null) {
+ return sourceURL;
+ }
+
+ URL codeBaseURL = jnlpFile.getCodeBase();
+ if (codeBaseURL != null) {
+ return codeBaseURL;
+ }
+
+ InformationDesc informationDesc = jnlpFile.getInformation();
+ URL homePage = informationDesc.getHomepage();
+ if (homePage != null) {
+ return homePage;
+ }
+
+ JARDesc[] jarDescs = jnlpFile.getResources().getJARs();
+ for (JARDesc jarDesc: jarDescs) {
+ return jarDesc.getLocation();
+ }
+ }
+
+ // this section is only reached if the jnlp file has no jars.
+ // that doesnt seem very likely.
+ URL arbitraryURL;
+ try {
+ arbitraryURL = new URL("http://icedtea.classpath.org");
+ } catch (MalformedURLException malformedURL) {
+ throw new RuntimeException(malformedURL);
+ }
+
+ return arbitraryURL;
+ }
+
+ /**
+ * Return true if a Web Browser is Supported
+ */
+ public boolean isWebBrowserSupported() {
+ initialize();
+
+ return command != null;
+ }
+
+ /**
+ * Show a document.
+ *
+ * @return whether the document was opened
+ */
+ public boolean showDocument(URL url) {
+ initialize();
+
+ if (url.toString().endsWith(".jnlp")) {
+ try {
+ new Launcher().launchExternal(url);
+ return true;
+ }
+ catch (Exception ex) {
+ return false;
+ }
+ }
+
+ if (command != null) {
+ try {
+ // this is bogus because the command may require options;
+ // should use a StreamTokenizer or similar to get tokens
+ // outside of quotes.
+ Runtime.getRuntime().exec(command + " " + url.toString());
+ //Runtime.getRuntime().exec(new String[]{command,url.toString()});
+
+ return true;
+ }
+ catch(IOException ex){
+ if (JNLPRuntime.isDebug())
+ ex.printStackTrace();
+ }
+ }
+
+ return false;
+ }
+
+ private void initialize() {
+ if (initialized)
+ return;
+ initialized = true;
+
+ if(isWindows()) {
+ command = "rundll32 url.dll,FileProtocolHandler ";
+ }
+ else {
+ PropertiesFile props = JNLPRuntime.getProperties();
+ command = props.getProperty("browser.command");
+
+ if(command == null) { // prompt & store
+ command = promptForCommand(null);
+
+ if(command != null) {
+ props.setProperty("browser.command", command);
+ props.store();
+ }
+ }
+ }
+ }
+
+ private boolean isWindows() {
+ String os = System.getProperty("os.name");
+ if(os != null && os.startsWith("Windows"))
+ return true;
+ else
+ return false;
+ }
+
+ private String promptForCommand(String cmd) {
+ return JOptionPane.showInputDialog(new JPanel(),
+ "Browser Location:",
+ "Specify Browser Location",
+ JOptionPane.PLAIN_MESSAGE
+ );
+ }
+
+}