+++ /dev/null
-package com.itmill.toolkit.launcher;\r
-\r
-import java.io.IOException;\r
-\r
-/**\r
- * This class opens default browser for ITMillDesktopLaunch class. Default\r
- * browser is detected by the operating system.\r
- * \r
- */\r
-public class BrowserLauncher {\r
-\r
- /**\r
- * Open browser on specified URL.\r
- * \r
- * @param url\r
- */\r
- public static void openBrowser(String url) {\r
-\r
- Runtime runtime = Runtime.getRuntime();\r
- boolean started = false;\r
-\r
- String os = System.getProperty("os.name", "windows").toLowerCase();\r
-\r
- // Linux\r
- if (os.indexOf("linux") >= 0) {\r
-\r
- // Try x-www-browser\r
- if (!started) {\r
- try {\r
- runtime.exec("x-www-browser " + url);\r
- started = true;\r
- } catch (IOException e) {\r
- }\r
- }\r
-\r
- // Try firefox\r
- if (!started) {\r
- try {\r
- runtime.exec("firefox " + url);\r
- started = true;\r
- } catch (IOException e) {\r
- }\r
- }\r
-\r
- // Try mozilla\r
- if (!started) {\r
- try {\r
- runtime.exec("mozilla " + url);\r
- started = true;\r
- } catch (IOException e) {\r
- }\r
- }\r
-\r
- // Try konqueror\r
- if (!started) {\r
- try {\r
- runtime.exec("konqueror " + url);\r
- started = true;\r
- } catch (IOException e) {\r
- }\r
- }\r
- }\r
-\r
- // OS X\r
- if (os.indexOf("mac os x") >= 0) {\r
-\r
- // Try open\r
- if (!started) {\r
- try {\r
- runtime.exec("open " + url);\r
- started = true;\r
- } catch (IOException e) {\r
- }\r
- }\r
- }\r
-\r
- // Try cmd /start command on windows\r
- if (os.indexOf("win") >= 0) {\r
- if (!started) {\r
- try {\r
- runtime.exec("cmd /c start " + url);\r
- started = true;\r
- } catch (IOException e) {\r
- }\r
- }\r
- }\r
-\r
- if (!started)\r
- System.out.println("Failed to open browser. Please go to " + url);\r
- }\r
-\r
-}\r
+++ /dev/null
-package com.itmill.toolkit.launcher;\r
-\r
-import java.awt.FlowLayout;\r
-import java.awt.Rectangle;\r
-import java.awt.event.ActionEvent;\r
-import java.awt.event.ActionListener;\r
-import java.awt.event.MouseAdapter;\r
-import java.awt.event.MouseEvent;\r
-import java.awt.event.WindowAdapter;\r
-import java.awt.event.WindowEvent;\r
-import java.io.File;\r
-import java.io.FileOutputStream;\r
-import java.io.IOException;\r
-import java.io.InputStream;\r
-import java.io.OutputStream;\r
-import java.util.Map;\r
-\r
-import javax.swing.JButton;\r
-import javax.swing.JFrame;\r
-import javax.swing.JLabel;\r
-import javax.swing.JPanel;\r
-\r
-/**\r
- * This class starts servlet container and opens a simple control dialog.\r
- * \r
- */\r
-public class ITMillDesktopLaunch {\r
-\r
- public static void main(String[] args) {\r
-\r
- Map serverArgs = ITMillWebModeLaunch.parseArguments(args);\r
- boolean deployed = false;\r
- try {\r
- // Default deployment: embedded.war\r
- deployed = deployEmbeddedWarfile(serverArgs);\r
- } catch (IOException e1) {\r
- e1.printStackTrace();\r
- deployed = false;\r
- }\r
-\r
- // Check if deployment was succesful\r
- if (!deployed && !serverArgs.containsKey("webroot")) {\r
- // Default deployment failed, try other means\r
- if (new File("WebContent").exists()) {\r
- // Using WebContent directory as webroot\r
- serverArgs.put("webroot", "WebContent");\r
- } else {\r
- System.err.print("Failed to deploy Toolkit application. "\r
- + "Please add --webroot parameter. Exiting.");\r
- return;\r
- }\r
- }\r
-\r
- // Start the Winstone servlet container\r
- String url = ITMillWebModeLaunch.runServer(serverArgs);\r
-\r
- // Open browser into application URL\r
- if (url != null) {\r
- BrowserLauncher.openBrowser(url);\r
- }\r
-\r
- // Open control dialog\r
- if (url != null) {\r
- openServerControlDialog(url);\r
- }\r
-\r
- }\r
-\r
- /**\r
- * Open a control dialog for embedded server.\r
- * \r
- * @param applicationUrl\r
- * Application URL\r
- */\r
- private static void openServerControlDialog(final String applicationUrl) {\r
-\r
- // Main frame\r
- final String title = "Desktop Server";\r
- final JFrame frame = new JFrame(title);\r
- frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);\r
-\r
- // Create link label and listen mouse click\r
- final JLabel link = new JLabel("<html>"\r
- + "<center>Desktop Server is running at: <br>" + "<a href=\""\r
- + applicationUrl + "\">" + applicationUrl\r
- + "</a><br>Close this window to shutdown the server.</center>"\r
- + "</html>");\r
- link.addMouseListener(new MouseAdapter() {\r
- public void mouseClicked(MouseEvent e) {\r
- BrowserLauncher.openBrowser(applicationUrl);\r
- }\r
- });\r
-\r
- // Create a panel and add components to it.\r
- final JPanel contentPane = new JPanel(new FlowLayout());\r
- frame.setContentPane(contentPane);\r
- contentPane.add(link);\r
-\r
- // Close confirmation\r
- final JLabel question = new JLabel(\r
- "This will stop the server. Are you sure?");\r
- final JButton okButton = new JButton("OK");\r
- final JButton cancelButton = new JButton("Cancel");\r
-\r
- // List for close verify buttons\r
- ActionListener buttonListener = new ActionListener() {\r
- public void actionPerformed(ActionEvent e) {\r
- if (e.getSource() == okButton) {\r
- System.exit(0);\r
- } else {\r
- Rectangle bounds = frame.getBounds();\r
- frame.setTitle(title);\r
- contentPane.removeAll();\r
- contentPane.add(link);\r
- contentPane.setBounds(bounds);\r
- frame.setBounds(bounds);\r
- frame.setVisible(true);\r
- frame.repaint();\r
- }\r
- }\r
- };\r
- okButton.addActionListener(buttonListener);\r
- cancelButton.addActionListener(buttonListener);\r
-\r
- frame.addWindowListener(new WindowAdapter() {\r
- public void windowClosing(WindowEvent e) {\r
- Rectangle bounds = frame.getBounds();\r
- frame.setTitle("Confirm close");\r
- contentPane.removeAll();\r
- contentPane.add(question);\r
- contentPane.add(okButton);\r
- contentPane.add(cancelButton);\r
- frame.setBounds(bounds);\r
- frame.setVisible(true);\r
- frame.repaint();\r
- }\r
- });\r
-\r
- // Position the window nicely\r
- java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit()\r
- .getScreenSize();\r
- int w = 270;\r
- int h = 95;\r
- int margin = 20;\r
- frame.setBounds(new Rectangle(screenSize.width - w - margin,\r
- screenSize.height - h - margin * 2, w, h));\r
- frame.toFront();\r
- frame.setVisible(true);\r
- }\r
-\r
- /**\r
- * Deploy file named "embedded.war" from classpath (inside jar file).\r
- * \r
- * @param args\r
- * @return\r
- * @throws IOException\r
- */\r
- protected static boolean deployEmbeddedWarfile(Map args) throws IOException {\r
- String embeddedWarfileName = "/embedded.war";\r
- InputStream embeddedWarfile = ITMillDesktopLaunch.class\r
- .getResourceAsStream(embeddedWarfileName);\r
- if (embeddedWarfile != null) {\r
- File tempWarfile = File.createTempFile("embedded", ".war")\r
- .getAbsoluteFile();\r
- tempWarfile.getParentFile().mkdirs();\r
- tempWarfile.deleteOnExit();\r
-\r
- String embeddedWebroot = "winstoneEmbeddedWAR";\r
- File tempWebroot = new File(tempWarfile.getParentFile(),\r
- embeddedWebroot);\r
- tempWebroot.mkdirs();\r
-\r
- OutputStream out = new FileOutputStream(tempWarfile, true);\r
- int read = 0;\r
- byte buffer[] = new byte[2048];\r
- while ((read = embeddedWarfile.read(buffer)) != -1) {\r
- out.write(buffer, 0, read);\r
- }\r
- out.close();\r
- embeddedWarfile.close();\r
-\r
- args.put("warfile", tempWarfile.getAbsolutePath());\r
- args.put("webroot", tempWebroot.getAbsolutePath());\r
- args.remove("webappsDir");\r
- args.remove("hostsDir");\r
- return true;\r
- }\r
- return false;\r
- }\r
-}\r
+++ /dev/null
-package com.itmill.toolkit.launcher;\r
-\r
-import java.util.Map;\r
-\r
-import com.google.gwt.dev.GWTShell;\r
-\r
-/**\r
- * Class for starting Google Web Toolkit (GWT) Hosted mode with without embedded\r
- * tomcat (-noserver). Instead of tomcat we use external servlet container\r
- * (Jetty).\r
- * \r
- * NOTE: you must edit Eclipse launcher and following parameters there.\r
- * \r
- * For program arguments:\r
- * \r
- * -noserver -out WebContent/ITMILL/widgetsets http://localhost:8080/\r
- * \r
- * \r
- * And for VM arguments:\r
- * \r
- * -XstartOnFirstThread -Xms256M -Xmx512M\r
- * \r
- * TODO: how to add *.launch files automatically when importing Eclipse\r
- * workspace?\r
- * \r
- */\r
-public class ITMillHostedLaunch extends ITMillStandardLaunch {\r
-\r
- private final static String serverPort = "8080";\r
-\r
- /**\r
- * Main function for staring GWTShell and running Jetty.\r
- * \r
- * Command line Arguments are passed through to Jetty, see runServer method\r
- * for options.\r
- * \r
- * @param args\r
- */\r
- public static void main(String[] args) {\r
-\r
- // Pass-through of arguments for Jetty\r
- Map serverArgs = parseArguments(args);\r
-\r
- String url = runServer(serverArgs);\r
-\r
- // Start GWTShell\r
-\r
- GWTShell.main(args);\r
-\r
- // Open browser into application URL\r
- if (url != null) {\r
- BrowserLauncher.openBrowser(url);\r
- }\r
-\r
- }\r
-\r
-}\r
+++ /dev/null
-package com.itmill.toolkit.launcher;\r
-\r
-import java.util.HashMap;\r
-import java.util.Map;\r
-\r
-import org.mortbay.jetty.Connector;\r
-import org.mortbay.jetty.Server;\r
-import org.mortbay.jetty.nio.SelectChannelConnector;\r
-import org.mortbay.jetty.webapp.WebAppContext;\r
-import org.mortbay.thread.BoundedThreadPool;\r
-\r
-/**\r
- * Class for running Jetty servlet container within Eclipse project.\r
- * \r
- */\r
-public class ITMillStandardLaunch {\r
-\r
- private final static String serverPort = "8080";\r
-\r
- /**\r
- * Main function for running Jetty.\r
- * \r
- * Command line Arguments are passed through to Jetty, see runServer method\r
- * for options.\r
- * \r
- * @param args\r
- */\r
- public static void main(String[] args) {\r
-\r
- // Pass-through of arguments for Jetty\r
- Map serverArgs = parseArguments(args);\r
-\r
- String url = runServer(serverArgs);\r
-\r
- // Open browser into application URL\r
- if (url != null) {\r
- BrowserLauncher.openBrowser(url);\r
- }\r
-\r
- }\r
-\r
- /**\r
- * Run the server with specified arguments.\r
- * \r
- * @param serverArgs\r
- * @return\r
- */\r
- protected static String runServer(Map serverArgs) {\r
-\r
- // Add help for System.out\r
- System.out\r
- .println("-------------------------------------------------\n"\r
- + "Starting IT Mill Toolkit examples.\n"\r
- + "Please go to http://localhost:"\r
- + serverPort\r
- + "\nif your web browser is not automatically started."\r
- + "\n-------------------------------------------------\n");\r
-\r
- // Assign default values for some arguments\r
- assignDefault(serverArgs, "webroot", "WebContent");\r
- assignDefault(serverArgs, "httpPort", serverPort);\r
-\r
- try {\r
- long started = System.currentTimeMillis();\r
-\r
- Server server = new Server();\r
-\r
- // String threadPoolName =\r
- // System.getProperty("jetty.threadpool.name",\r
- // "Jetty thread");\r
- // int maxIdleTimeMs = Integer.getInteger(\r
- // "jetty.threadpool.maxIdleTimeMs", 60000);\r
- // int maxThreads =\r
- // Integer.getInteger("jetty.threadpool.maxThreads",\r
- // 100);\r
- // int minThreads =\r
- // Integer.getInteger("jetty.threadpool.minThreads",\r
- // 1);\r
- // int lowThreads = Integer.getInteger(\r
- // "jetty.threadpool.maxIdleTimeMs", 25);\r
- // BoundedThreadPool threadPool = new BoundedThreadPool();\r
- // threadPool.setName(threadPoolName);\r
- // threadPool.setMaxIdleTimeMs(maxIdleTimeMs);\r
- // threadPool.setMaxThreads(maxThreads);\r
- // threadPool.setMinThreads(minThreads);\r
- // threadPool.setLowThreads(lowThreads);\r
- // server.setThreadPool(threadPool);\r
-\r
- Connector connector = new SelectChannelConnector();\r
- // FIXME httpPort hardcoded to 8080\r
- // connector.setPort(Integer.valueOf(serverArgs.get("httpPort")\r
- // .toString()));\r
- connector.setPort(8080);\r
- server.setConnectors(new Connector[] { connector });\r
-\r
- WebAppContext webappcontext = new WebAppContext();\r
- webappcontext.setContextPath("");\r
- webappcontext.setWar(serverArgs.get("webroot").toString());\r
-\r
- server.setHandler(webappcontext);\r
-\r
- server.start();\r
- System.err.println("Started Jetty in "\r
- + (System.currentTimeMillis() - started) + "ms.");\r
- } catch (Exception e) {\r
- e.printStackTrace();\r
- return null;\r
- }\r
-\r
- return "http://localhost:" + serverArgs.get("httpPort");\r
- }\r
-\r
- /**\r
- * Assign default value for given key.\r
- * \r
- * @param map\r
- * @param key\r
- * @param value\r
- */\r
- private static void assignDefault(Map map, String key, String value) {\r
- if (!map.containsKey(key)) {\r
- map.put(key, value);\r
- }\r
- }\r
-\r
- /**\r
- * Parse all command line arguments into a map.\r
- * \r
- * Arguments format "key=value" are put into map.\r
- * \r
- * @param args\r
- * @return map of arguments key value pairs.\r
- */\r
- protected static Map parseArguments(String[] args) {\r
- Map map = new HashMap();\r
- for (int i = 0; i < args.length; i++) {\r
- int d = args[i].indexOf("=");\r
- if (d > 0 && d < args[i].length() && args[i].startsWith("--")) {\r
- String name = args[i].substring(2, d);\r
- String value = args[i].substring(d + 1);\r
- map.put(name, value);\r
- }\r
- }\r
- return map;\r
- }\r
-\r
-}\r
--- /dev/null
+package com.itmill.toolkit.launcher;\r
+\r
+import java.util.HashMap;\r
+import java.util.Map;\r
+\r
+import org.mortbay.jetty.Connector;\r
+import org.mortbay.jetty.Server;\r
+import org.mortbay.jetty.nio.SelectChannelConnector;\r
+import org.mortbay.jetty.webapp.WebAppContext;\r
+\r
+import com.google.gwt.dev.GWTShell;\r
+\r
+/**\r
+ * Class for running Jetty servlet container within Eclipse project.\r
+ * \r
+ */\r
+public class ITMillToolkitHostedMode {\r
+\r
+ private final static String serverPort = "8888";\r
+\r
+ /**\r
+ * Main function for running Jetty.\r
+ * \r
+ * Command line Arguments are passed through to Jetty, see runServer method\r
+ * for options.\r
+ * \r
+ * @param args\r
+ */\r
+ public static void main(String[] args) {\r
+\r
+ // Start Jetty\r
+ System.out.println("Starting Jetty servlet container.");\r
+ String url = runServer(new HashMap());\r
+\r
+ // Start GWT\r
+ System.out.println("Starting GWT Hosted Mode browser.");\r
+ GWTShell.main(args);\r
+\r
+ }\r
+\r
+ /**\r
+ * Run the server with specified arguments.\r
+ * \r
+ * @param serverArgs\r
+ * @return\r
+ */\r
+ protected static String runServer(Map serverArgs) {\r
+\r
+ // Add help for System.out\r
+ System.out\r
+ .println("-------------------------------------------------\n"\r
+ + "Starting IT Mill Toolkit in GWT Hosted Mode.\n"\r
+ + "Running in http://localhost:"\r
+ + serverPort\r
+ + "\n-------------------------------------------------\n");\r
+\r
+ // Assign default values for some arguments\r
+ assignDefault(serverArgs, "webroot", "WebContent");\r
+ assignDefault(serverArgs, "httpPort", serverPort);\r
+\r
+ try {\r
+ long started = System.currentTimeMillis();\r
+\r
+ Server server = new Server();\r
+\r
+ // String threadPoolName =\r
+ // System.getProperty("jetty.threadpool.name",\r
+ // "Jetty thread");\r
+ // int maxIdleTimeMs = Integer.getInteger(\r
+ // "jetty.threadpool.maxIdleTimeMs", 60000);\r
+ // int maxThreads =\r
+ // Integer.getInteger("jetty.threadpool.maxThreads",\r
+ // 100);\r
+ // int minThreads =\r
+ // Integer.getInteger("jetty.threadpool.minThreads",\r
+ // 1);\r
+ // int lowThreads = Integer.getInteger(\r
+ // "jetty.threadpool.maxIdleTimeMs", 25);\r
+ // BoundedThreadPool threadPool = new BoundedThreadPool();\r
+ // threadPool.setName(threadPoolName);\r
+ // threadPool.setMaxIdleTimeMs(maxIdleTimeMs);\r
+ // threadPool.setMaxThreads(maxThreads);\r
+ // threadPool.setMinThreads(minThreads);\r
+ // threadPool.setLowThreads(lowThreads);\r
+ // server.setThreadPool(threadPool);\r
+\r
+ Connector connector = new SelectChannelConnector();\r
+ // FIXME httpPort hardcoded to 8888\r
+ // connector.setPort(Integer.valueOf(serverArgs.get("httpPort")\r
+ // .toString()));\r
+ connector.setPort(8888);\r
+ server.setConnectors(new Connector[] { connector });\r
+\r
+ WebAppContext webappcontext = new WebAppContext();\r
+ webappcontext.setContextPath("");\r
+ webappcontext.setWar(serverArgs.get("webroot").toString());\r
+\r
+ server.setHandler(webappcontext);\r
+\r
+ server.start();\r
+ } catch (Exception e) {\r
+ e.printStackTrace();\r
+ return null;\r
+ }\r
+\r
+ return "http://localhost:" + serverArgs.get("httpPort");\r
+ }\r
+\r
+ /**\r
+ * Assign default value for given key.\r
+ * \r
+ * @param map\r
+ * @param key\r
+ * @param value\r
+ */\r
+ private static void assignDefault(Map map, String key, String value) {\r
+ if (!map.containsKey(key)) {\r
+ map.put(key, value);\r
+ }\r
+ }\r
+\r
+ /**\r
+ * Parse all command line arguments into a map.\r
+ * \r
+ * Arguments format "key=value" are put into map.\r
+ * \r
+ * @param args\r
+ * @return map of arguments key value pairs.\r
+ */\r
+ protected static Map parseArguments(String[] args) {\r
+ Map map = new HashMap();\r
+ for (int i = 0; i < args.length; i++) {\r
+ int d = args[i].indexOf("=");\r
+ if (d > 0 && d < args[i].length() && args[i].startsWith("--")) {\r
+ String name = args[i].substring(2, d);\r
+ String value = args[i].substring(d + 1);\r
+ map.put(name, value);\r
+ }\r
+ }\r
+ return map;\r
+ }\r
+\r
+}\r
--- /dev/null
+package com.itmill.toolkit.launcher;\r
+\r
+import java.util.HashMap;\r
+import java.util.Map;\r
+\r
+import org.mortbay.jetty.Connector;\r
+import org.mortbay.jetty.Server;\r
+import org.mortbay.jetty.nio.SelectChannelConnector;\r
+import org.mortbay.jetty.webapp.WebAppContext;\r
+\r
+import com.itmill.toolkit.launcher.util.BrowserLauncher;\r
+\r
+/**\r
+ * Class for running Jetty servlet container within Eclipse project.\r
+ * \r
+ */\r
+public class ITMillToolkitWebMode {\r
+\r
+ private final static String serverPort = "8888";\r
+\r
+ /**\r
+ * Main function for running Jetty.\r
+ * \r
+ * Command line Arguments are passed through to Jetty, see runServer method\r
+ * for options.\r
+ * \r
+ * @param args\r
+ */\r
+ public static void main(String[] args) {\r
+\r
+ // Pass-through of arguments for Jetty\r
+ Map serverArgs = parseArguments(args);\r
+\r
+ // Start Jetty\r
+ System.out.println("Starting Jetty servlet container.");\r
+ String url = runServer(serverArgs);\r
+\r
+ // Start Browser\r
+ System.out.println("Starting Web Browser.");\r
+ if (url != null) {\r
+ BrowserLauncher.openBrowser(url);\r
+ }\r
+\r
+ }\r
+\r
+ /**\r
+ * Run the server with specified arguments.\r
+ * \r
+ * @param serverArgs\r
+ * @return\r
+ */\r
+ protected static String runServer(Map serverArgs) {\r
+\r
+ // Add help for System.out\r
+ System.out\r
+ .println("-------------------------------------------------\n"\r
+ + "Starting IT Mill Toolkit in Web Mode.\n"\r
+ + "Running in http://localhost:"\r
+ + serverPort\r
+ + "\n-------------------------------------------------\n");\r
+\r
+ // Assign default values for some arguments\r
+ assignDefault(serverArgs, "webroot", "WebContent");\r
+ assignDefault(serverArgs, "httpPort", serverPort);\r
+\r
+ try {\r
+ long started = System.currentTimeMillis();\r
+\r
+ Server server = new Server();\r
+\r
+ // String threadPoolName =\r
+ // System.getProperty("jetty.threadpool.name",\r
+ // "Jetty thread");\r
+ // int maxIdleTimeMs = Integer.getInteger(\r
+ // "jetty.threadpool.maxIdleTimeMs", 60000);\r
+ // int maxThreads =\r
+ // Integer.getInteger("jetty.threadpool.maxThreads",\r
+ // 100);\r
+ // int minThreads =\r
+ // Integer.getInteger("jetty.threadpool.minThreads",\r
+ // 1);\r
+ // int lowThreads = Integer.getInteger(\r
+ // "jetty.threadpool.maxIdleTimeMs", 25);\r
+ // BoundedThreadPool threadPool = new BoundedThreadPool();\r
+ // threadPool.setName(threadPoolName);\r
+ // threadPool.setMaxIdleTimeMs(maxIdleTimeMs);\r
+ // threadPool.setMaxThreads(maxThreads);\r
+ // threadPool.setMinThreads(minThreads);\r
+ // threadPool.setLowThreads(lowThreads);\r
+ // server.setThreadPool(threadPool);\r
+\r
+ Connector connector = new SelectChannelConnector();\r
+ // FIXME httpPort hardcoded to 8888\r
+ // connector.setPort(Integer.valueOf(serverArgs.get("httpPort")\r
+ // .toString()));\r
+ connector.setPort(8888);\r
+ server.setConnectors(new Connector[] { connector });\r
+\r
+ WebAppContext webappcontext = new WebAppContext();\r
+ webappcontext.setContextPath("");\r
+ webappcontext.setWar(serverArgs.get("webroot").toString());\r
+\r
+ server.setHandler(webappcontext);\r
+\r
+ server.start();\r
+ // System.err.println("Started Jetty in "\r
+ // + (System.currentTimeMillis() - started) + "ms.");\r
+ } catch (Exception e) {\r
+ e.printStackTrace();\r
+ return null;\r
+ }\r
+\r
+ return "http://localhost:" + serverArgs.get("httpPort");\r
+ }\r
+\r
+ /**\r
+ * Assign default value for given key.\r
+ * \r
+ * @param map\r
+ * @param key\r
+ * @param value\r
+ */\r
+ private static void assignDefault(Map map, String key, String value) {\r
+ if (!map.containsKey(key)) {\r
+ map.put(key, value);\r
+ }\r
+ }\r
+\r
+ /**\r
+ * Parse all command line arguments into a map.\r
+ * \r
+ * Arguments format "key=value" are put into map.\r
+ * \r
+ * @param args\r
+ * @return map of arguments key value pairs.\r
+ */\r
+ protected static Map parseArguments(String[] args) {\r
+ Map map = new HashMap();\r
+ for (int i = 0; i < args.length; i++) {\r
+ int d = args[i].indexOf("=");\r
+ if (d > 0 && d < args[i].length() && args[i].startsWith("--")) {\r
+ String name = args[i].substring(2, d);\r
+ String value = args[i].substring(d + 1);\r
+ map.put(name, value);\r
+ }\r
+ }\r
+ return map;\r
+ }\r
+\r
+}\r
+++ /dev/null
-package com.itmill.toolkit.launcher;\r
-\r
-import java.util.HashMap;\r
-import java.util.Map;\r
-\r
-import org.mortbay.jetty.Connector;\r
-import org.mortbay.jetty.Server;\r
-import org.mortbay.jetty.nio.SelectChannelConnector;\r
-import org.mortbay.jetty.webapp.WebAppContext;\r
-import org.mortbay.thread.BoundedThreadPool;\r
-\r
-/**\r
- * Class for running Jetty servlet container within Eclipse project.\r
- * \r
- */\r
-public class ITMillWebModeLaunch {\r
-\r
- private final static String serverPort = "8080";\r
-\r
- /**\r
- * Main function for running Jetty.\r
- * \r
- * Command line Arguments are passed through to Jetty, see runServer method\r
- * for options.\r
- * \r
- * @param args\r
- */\r
- public static void main(String[] args) {\r
-\r
- // Pass-through of arguments for Jetty\r
- Map serverArgs = parseArguments(args);\r
-\r
- String url = runServer(serverArgs);\r
-\r
- // Open browser into application URL\r
- if (url != null) {\r
- BrowserLauncher.openBrowser(url);\r
- }\r
-\r
- }\r
-\r
- /**\r
- * Run the server with specified arguments.\r
- * \r
- * @param serverArgs\r
- * @return\r
- */\r
- protected static String runServer(Map serverArgs) {\r
-\r
- // Add help for System.out\r
- System.out\r
- .println("-------------------------------------------------\n"\r
- + "Starting IT Mill Toolkit examples.\n"\r
- + "Please go to http://localhost:"\r
- + serverPort\r
- + "\nif your web browser is not automatically started."\r
- + "\n-------------------------------------------------\n");\r
-\r
- // Assign default values for some arguments\r
- assignDefault(serverArgs, "webroot", "WebContent");\r
- assignDefault(serverArgs, "httpPort", serverPort);\r
-\r
- try {\r
- long started = System.currentTimeMillis();\r
-\r
- Server server = new Server();\r
-\r
- // String threadPoolName =\r
- // System.getProperty("jetty.threadpool.name",\r
- // "Jetty thread");\r
- // int maxIdleTimeMs = Integer.getInteger(\r
- // "jetty.threadpool.maxIdleTimeMs", 60000);\r
- // int maxThreads =\r
- // Integer.getInteger("jetty.threadpool.maxThreads",\r
- // 100);\r
- // int minThreads =\r
- // Integer.getInteger("jetty.threadpool.minThreads",\r
- // 1);\r
- // int lowThreads = Integer.getInteger(\r
- // "jetty.threadpool.maxIdleTimeMs", 25);\r
- // BoundedThreadPool threadPool = new BoundedThreadPool();\r
- // threadPool.setName(threadPoolName);\r
- // threadPool.setMaxIdleTimeMs(maxIdleTimeMs);\r
- // threadPool.setMaxThreads(maxThreads);\r
- // threadPool.setMinThreads(minThreads);\r
- // threadPool.setLowThreads(lowThreads);\r
- // server.setThreadPool(threadPool);\r
-\r
- Connector connector = new SelectChannelConnector();\r
- // FIXME httpPort hardcoded to 8080\r
- // connector.setPort(Integer.valueOf(serverArgs.get("httpPort")\r
- // .toString()));\r
- connector.setPort(8080);\r
- server.setConnectors(new Connector[] { connector });\r
-\r
- WebAppContext webappcontext = new WebAppContext();\r
- webappcontext.setContextPath("");\r
- webappcontext.setWar(serverArgs.get("webroot").toString());\r
-\r
- server.setHandler(webappcontext);\r
-\r
- server.start();\r
- System.err.println("Started Jetty in "\r
- + (System.currentTimeMillis() - started) + "ms.");\r
- } catch (Exception e) {\r
- e.printStackTrace();\r
- return null;\r
- }\r
-\r
- return "http://localhost:" + serverArgs.get("httpPort");\r
- }\r
-\r
- /**\r
- * Assign default value for given key.\r
- * \r
- * @param map\r
- * @param key\r
- * @param value\r
- */\r
- private static void assignDefault(Map map, String key, String value) {\r
- if (!map.containsKey(key)) {\r
- map.put(key, value);\r
- }\r
- }\r
-\r
- /**\r
- * Parse all command line arguments into a map.\r
- * \r
- * Arguments format "key=value" are put into map.\r
- * \r
- * @param args\r
- * @return map of arguments key value pairs.\r
- */\r
- protected static Map parseArguments(String[] args) {\r
- Map map = new HashMap();\r
- for (int i = 0; i < args.length; i++) {\r
- int d = args[i].indexOf("=");\r
- if (d > 0 && d < args[i].length() && args[i].startsWith("--")) {\r
- String name = args[i].substring(2, d);\r
- String value = args[i].substring(d + 1);\r
- map.put(name, value);\r
- }\r
- }\r
- return map;\r
- }\r
-\r
-}\r
--- /dev/null
+package com.itmill.toolkit.launcher.util;\r
+\r
+import java.io.IOException;\r
+\r
+/**\r
+ * This class opens default browser for ITMillDesktopLaunch class. Default\r
+ * browser is detected by the operating system.\r
+ * \r
+ */\r
+public class BrowserLauncher {\r
+\r
+ /**\r
+ * Open browser on specified URL.\r
+ * \r
+ * @param url\r
+ */\r
+ public static void openBrowser(String url) {\r
+\r
+ Runtime runtime = Runtime.getRuntime();\r
+ boolean started = false;\r
+\r
+ String os = System.getProperty("os.name", "windows").toLowerCase();\r
+\r
+ // Linux\r
+ if (os.indexOf("linux") >= 0) {\r
+\r
+ // Try x-www-browser\r
+ if (!started) {\r
+ try {\r
+ runtime.exec("x-www-browser " + url);\r
+ started = true;\r
+ } catch (IOException e) {\r
+ }\r
+ }\r
+\r
+ // Try firefox\r
+ if (!started) {\r
+ try {\r
+ runtime.exec("firefox " + url);\r
+ started = true;\r
+ } catch (IOException e) {\r
+ }\r
+ }\r
+\r
+ // Try mozilla\r
+ if (!started) {\r
+ try {\r
+ runtime.exec("mozilla " + url);\r
+ started = true;\r
+ } catch (IOException e) {\r
+ }\r
+ }\r
+\r
+ // Try konqueror\r
+ if (!started) {\r
+ try {\r
+ runtime.exec("konqueror " + url);\r
+ started = true;\r
+ } catch (IOException e) {\r
+ }\r
+ }\r
+ }\r
+\r
+ // OS X\r
+ if (os.indexOf("mac os x") >= 0) {\r
+\r
+ // Try open\r
+ if (!started) {\r
+ try {\r
+ runtime.exec("open " + url);\r
+ started = true;\r
+ } catch (IOException e) {\r
+ }\r
+ }\r
+ }\r
+\r
+ // Try cmd /start command on windows\r
+ if (os.indexOf("win") >= 0) {\r
+ if (!started) {\r
+ try {\r
+ runtime.exec("cmd /c start " + url);\r
+ started = true;\r
+ } catch (IOException e) {\r
+ }\r
+ }\r
+ }\r
+\r
+ if (!started)\r
+ System.out.println("Failed to open browser. Please go to " + url);\r
+ }\r
+\r
+}\r