<move file="${output-dir}/build-widgetset.xml" tofile="${output-dir}/WebContent/docs/example-source/build-widgetset.xml" />
<move file="${output-dir}/eclipse-classpath" tofile="${output-dir}/.classpath" />
<move file="${output-dir}/eclipse-project" tofile="${output-dir}/.project" />
- <move file="${output-dir}/eclipse-Vaadin Hosted Mode-launch" tofile="${output-dir}/Vaadin Hosted Mode.launch" />
- <move file="${output-dir}/eclipse-Vaadin Web Mode-launch" tofile="${output-dir}/Vaadin Web Mode.launch" />
+ <move file="${output-dir}/eclipse-Vaadin Hosted Mode Browser-launch" tofile="${output-dir}/Vaadin Hosted Mode Browser.launch" />
+ <move file="${output-dir}/eclipse-Vaadin Development Server-launch" tofile="${output-dir}/Vaadin Development Server.launch" />
<mkdir dir="${output-dir}/.settings" />
<move file="${output-dir}/eclipse-org.eclipse.core.resources.prefs" tofile="${output-dir}/.settings/org.eclipse.core.resources.prefs" />
<move file="${output-dir}/eclipse-org.eclipse.jdt.core.prefs" tofile="${output-dir}/.settings/org.eclipse.jdt.core.prefs" />
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication">
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
+<listEntry value="/<eclipse-workspace-name></eclipse-workspace-name>/src/com/vaadin/launcher/DevelopmentServerLauncher.java"/>
+</listAttribute>
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
+<listEntry value="1"/>
+</listAttribute>
+<booleanAttribute key="org.eclipse.debug.core.appendEnvironmentVariables" value="true"/>
+<stringAttribute key="org.eclipse.debug.ui.ATTR_CONSOLE_ENCODING" value="UTF-8"/>
+<listAttribute key="org.eclipse.debug.ui.favoriteGroups">
+<listEntry value="org.eclipse.debug.ui.launchGroup.run"/>
+<listEntry value="org.eclipse.debug.ui.launchGroup.debug"/>
+</listAttribute>
+<listAttribute key="org.eclipse.jdt.launching.CLASSPATH">
+<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry containerPath="org.eclipse.jdt.launching.JRE_CONTAINER" javaProject="itmill-toolkit-examples" path="1" type="4"/> "/>
+<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry id="org.eclipse.jdt.launching.classpathentry.defaultClasspath"> <memento exportedEntriesOnly="false" project="itmill-toolkit-examples"/> </runtimeClasspathEntry> "/>
+<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/itmill-toolkit-examples/WebContent/WEB-INF/src" path="3" type="2"/> "/>
+</listAttribute>
+<booleanAttribute key="org.eclipse.jdt.launching.DEFAULT_CLASSPATH" value="false"/>
+<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="com.vaadin.launcher.DevelopmentServerLauncher"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="<eclipse-workspace-name></eclipse-workspace-name>"/>
+</launchConfiguration>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication">
+<stringAttribute key="bad_container_name" value="/<eclipse-workspace-name></eclipse-workspace-name>/Vaadin Hosted Mode.launch"/>
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
+<listEntry value="/<eclipse-workspace-name></eclipse-workspace-name>/gwt/gwt-dev-@platform@.jar"/>
+</listAttribute>
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
+<listEntry value="1"/>
+</listAttribute>
+<booleanAttribute key="org.eclipse.debug.core.appendEnvironmentVariables" value="true"/>
+<stringAttribute key="org.eclipse.debug.core.source_locator_id" value="org.eclipse.jdt.launching.sourceLocator.JavaSourceLookupDirector"/>
+<stringAttribute key="org.eclipse.debug.core.source_locator_memento" value="<?xml version="1.0" encoding="UTF-8"?> <sourceLookupDirector> <sourceContainers duplicates="false"> <container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&#10;&lt;folder nest=&quot;false&quot; path=&quot;/<eclipse-workspace-name></eclipse-workspace-name>/WebContent/WEB-INF/src&quot;/&gt;&#10;" typeId="org.eclipse.debug.core.containerType.folder"/> <container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&#10;&lt;default/&gt;&#10;" typeId="org.eclipse.debug.core.containerType.default"/> </sourceContainers> </sourceLookupDirector> "/>
+<listAttribute key="org.eclipse.debug.ui.favoriteGroups">
+<listEntry value="org.eclipse.debug.ui.launchGroup.run"/>
+<listEntry value="org.eclipse.debug.ui.launchGroup.debug"/>
+</listAttribute>
+<listAttribute key="org.eclipse.jdt.launching.CLASSPATH">
+<listEntry value="<?xml version="1.0" encoding="UTF-8"?> <runtimeClasspathEntry containerPath="org.eclipse.jdt.launching.JRE_CONTAINER" javaProject="<eclipse-workspace-name></eclipse-workspace-name>" path="1" type="4"/> "/>
+<listEntry value="<?xml version="1.0" encoding="UTF-8"?> <runtimeClasspathEntry internalArchive="/<eclipse-workspace-name></eclipse-workspace-name>/WebContent/WEB-INF/src" path="3" type="2"/> "/>
+<listEntry value="<?xml version="1.0" encoding="UTF-8"?> <runtimeClasspathEntry id="org.eclipse.jdt.launching.classpathentry.defaultClasspath"> <memento exportedEntriesOnly="false" project="<eclipse-workspace-name></eclipse-workspace-name>"/> </runtimeClasspathEntry> "/>
+</listAttribute>
+<booleanAttribute key="org.eclipse.jdt.launching.DEFAULT_CLASSPATH" value="false"/>
+<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="com.google.gwt.dev.GWTShell"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-noserver -out WebContent/VAADIN/widgetsets http://localhost:8888/"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="<eclipse-workspace-name></eclipse-workspace-name>"/>
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="<eclipse-launch-vmargs></eclipse-launch-vmargs>"/>
+</launchConfiguration>
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication">
-<stringAttribute key="bad_container_name" value="/<eclipse-workspace-name></eclipse-workspace-name>/IT Mill Toolkit Hosted Mode.launch"/>
-<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
-<listEntry value="/<eclipse-workspace-name></eclipse-workspace-name>/gwt/gwt-dev-@platform@.jar"/>
-</listAttribute>
-<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
-<listEntry value="1"/>
-</listAttribute>
-<booleanAttribute key="org.eclipse.debug.core.appendEnvironmentVariables" value="true"/>
-<stringAttribute key="org.eclipse.debug.core.source_locator_id" value="org.eclipse.jdt.launching.sourceLocator.JavaSourceLookupDirector"/>
-<stringAttribute key="org.eclipse.debug.core.source_locator_memento" value="<?xml version="1.0" encoding="UTF-8"?> <sourceLookupDirector> <sourceContainers duplicates="false"> <container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&#10;&lt;folder nest=&quot;false&quot; path=&quot;/<eclipse-workspace-name></eclipse-workspace-name>/WebContent/WEB-INF/src&quot;/&gt;&#10;" typeId="org.eclipse.debug.core.containerType.folder"/> <container memento="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&#10;&lt;default/&gt;&#10;" typeId="org.eclipse.debug.core.containerType.default"/> </sourceContainers> </sourceLookupDirector> "/>
-<listAttribute key="org.eclipse.debug.ui.favoriteGroups">
-<listEntry value="org.eclipse.debug.ui.launchGroup.run"/>
-<listEntry value="org.eclipse.debug.ui.launchGroup.debug"/>
-</listAttribute>
-<listAttribute key="org.eclipse.jdt.launching.CLASSPATH">
-<listEntry value="<?xml version="1.0" encoding="UTF-8"?> <runtimeClasspathEntry containerPath="org.eclipse.jdt.launching.JRE_CONTAINER" javaProject="<eclipse-workspace-name></eclipse-workspace-name>" path="1" type="4"/> "/>
-<listEntry value="<?xml version="1.0" encoding="UTF-8"?> <runtimeClasspathEntry internalArchive="/<eclipse-workspace-name></eclipse-workspace-name>/WebContent/WEB-INF/src" path="3" type="2"/> "/>
-<listEntry value="<?xml version="1.0" encoding="UTF-8"?> <runtimeClasspathEntry id="org.eclipse.jdt.launching.classpathentry.defaultClasspath"> <memento exportedEntriesOnly="false" project="<eclipse-workspace-name></eclipse-workspace-name>"/> </runtimeClasspathEntry> "/>
-</listAttribute>
-<booleanAttribute key="org.eclipse.jdt.launching.DEFAULT_CLASSPATH" value="false"/>
-<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="com.google.gwt.dev.GWTShell"/>
-<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-noserver -out WebContent/ITMILL/widgetsets http://localhost:8888/"/>
-<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="<eclipse-workspace-name></eclipse-workspace-name>"/>
-<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="<eclipse-launch-vmargs></eclipse-launch-vmargs>"/>
-</launchConfiguration>
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication">
-<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
-<listEntry value="/<eclipse-workspace-name></eclipse-workspace-name>/src/com/itmill/toolkit/launcher/ITMillWebModeLaunch.java"/>
-</listAttribute>
-<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
-<listEntry value="1"/>
-</listAttribute>
-<booleanAttribute key="org.eclipse.debug.core.appendEnvironmentVariables" value="true"/>
-<stringAttribute key="org.eclipse.debug.ui.ATTR_CONSOLE_ENCODING" value="UTF-8"/>
-<listAttribute key="org.eclipse.debug.ui.favoriteGroups">
-<listEntry value="org.eclipse.debug.ui.launchGroup.run"/>
-<listEntry value="org.eclipse.debug.ui.launchGroup.debug"/>
-</listAttribute>
-<listAttribute key="org.eclipse.jdt.launching.CLASSPATH">
-<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry containerPath="org.eclipse.jdt.launching.JRE_CONTAINER" javaProject="itmill-toolkit-examples" path="1" type="4"/> "/>
-<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry id="org.eclipse.jdt.launching.classpathentry.defaultClasspath"> <memento exportedEntriesOnly="false" project="itmill-toolkit-examples"/> </runtimeClasspathEntry> "/>
-<listEntry value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <runtimeClasspathEntry internalArchive="/itmill-toolkit-examples/WebContent/WEB-INF/src" path="3" type="2"/> "/>
-</listAttribute>
-<booleanAttribute key="org.eclipse.jdt.launching.DEFAULT_CLASSPATH" value="false"/>
-<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="com.vaadin.launcher.ITMillToolkitWebMode"/>
-<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="<eclipse-workspace-name></eclipse-workspace-name>"/>
-</launchConfiguration>
WebContent/demo\r
- files required by the demos\r
\r
-IT Mill Toolkit Hosted Mode.launch\r
-IT Mill Toolkit Web Mode.launch\r
+Vaadin Hosted Mode Browser.launch\r
+Vaadin Development Server.launch\r
- launch configurations for Eclipse workspace\r
\r
WebContent/doc/example-source/build-widgetset.xml\r
WebContent/demo\r
- files required by the demos\r
\r
-IT Mill Toolkit Hosted Mode.launch\r
-IT Mill Toolkit Web Mode.launch\r
+Vaadin Hosted Mode Browser.launch\r
+Vaadin Development Server.launch\r
- launch configurations for Eclipse workspace\r
\r
WebContent/doc/example-source/build-widgetset.xml\r
WebContent/demo
- files required by the demos
-IT Mill Toolkit Hosted Mode.launch
-IT Mill Toolkit Web Mode.launch
+Vaadin Hosted Mode Browser.launch
+Vaadin Development Server.launch
- launch configurations for Eclipse workspace
WebContent/doc/example-source/build-widgetset.xml
-@java -cp "WebContent\demo\lib\jetty\jetty-6.1.7.jar;WebContent\demo\lib\jetty\jetty-util-6.1.7.jar;WebContent\demo\lib\jetty\servlet-api-2.5-6.1.7.jar;WebContent\WEB-INF\classes;WebContent\WEB-INF\src" com.vaadin.launcher.ITMillToolkitDesktopMode\r
+@java -cp "WebContent\demo\lib\jetty\jetty-6.1.7.jar;WebContent\demo\lib\jetty\jetty-util-6.1.7.jar;WebContent\demo\lib\jetty\servlet-api-2.5-6.1.7.jar;WebContent\WEB-INF\classes;WebContent\WEB-INF\src" com.vaadin.launcher.DemoLauncher\r
cd $1
fi
-java -cp WebContent/demo/lib/jetty/jetty-6.1.7.jar:WebContent/demo/lib/jetty/jetty-util-6.1.7.jar:WebContent/demo/lib/jetty/servlet-api-2.5-6.1.7.jar:WebContent/WEB-INF/classes:WebContent/WEB-INF/src com.vaadin.launcher.ITMillToolkitDesktopMode $VAADIN_PARAMETERS
+java -cp WebContent/demo/lib/jetty/jetty-6.1.7.jar:WebContent/demo/lib/jetty/jetty-util-6.1.7.jar:WebContent/demo/lib/jetty/servlet-api-2.5-6.1.7.jar:WebContent/WEB-INF/classes:WebContent/WEB-INF/src com.vaadin.launcher.DemoLauncher $VAADIN_PARAMETERS
WebContent/demo\r
- files required by the demos\r
\r
-IT Mill Toolkit Hosted Mode.launch\r
-IT Mill Toolkit Web Mode.launch\r
+Vaadin Hosted Mode Browser.launch\r
+Vaadin Development Server.launch\r
- launch configurations for Eclipse workspace\r
\r
WebContent/doc/example-source/build-widgetset.xml\r
--- /dev/null
+/*
+@ITMillApache2LicenseForJavaFiles@
+ */
+
+package com.vaadin.launcher;
+
+import java.awt.FlowLayout;
+import java.awt.HeadlessException;
+import java.awt.Rectangle;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.Map;
+
+import javax.swing.JButton;
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.WindowConstants;
+
+import com.vaadin.launcher.util.BrowserLauncher;
+
+/**
+ * This class starts servlet container and opens a simple control dialog.
+ *
+ */
+public class DemoLauncher {
+
+ public static void main(String[] args) {
+
+ final Map serverArgs = DevelopmentServerLauncher.parseArguments(args);
+ boolean deployed = false;
+ try {
+ // Default deployment: embedded.war
+ deployed = deployEmbeddedWarfile(serverArgs);
+ } catch (final IOException e1) {
+ e1.printStackTrace();
+ deployed = false;
+ }
+
+ // Check if deployment was succesful
+ if (!deployed && !serverArgs.containsKey("webroot")) {
+ // Default deployment failed, try other means
+ if (new File("WebContent").exists()) {
+ // Using WebContent directory as webroot
+ serverArgs.put("webroot", "WebContent");
+ } else {
+ System.err.print("Failed to deploy Vaadin application. "
+ + "Please add --webroot parameter. Exiting.");
+ return;
+ }
+ }
+
+ // Start the Winstone servlet container
+ final String url = DevelopmentServerLauncher.runServer(serverArgs,
+ "Demo Server");
+
+ if (!serverArgs.containsKey("nogui") && url != null) {
+
+ // Open browser into application URL
+ BrowserLauncher.openBrowser(url);
+
+ // Open control dialog
+ /*
+ * Swing components should never be manipulated outside the event
+ * dispatch thread.
+ */
+ java.awt.EventQueue.invokeLater(new Runnable() {
+ public void run() {
+ try {
+ openServerControlDialog(url);
+ } catch (HeadlessException e) {
+ // nop, starting from console
+ }
+ }
+ });
+ }
+ }
+
+ /**
+ * Open a control dialog for embedded server.
+ *
+ * @param applicationUrl
+ * Application URL
+ */
+ private static void openServerControlDialog(final String applicationUrl) {
+
+ // Main frame
+ final String title = "Desktop Server";
+ final JFrame frame = new JFrame(title);
+ frame.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
+
+ // Create link label and listen mouse click
+ final JLabel link = new JLabel("<html>"
+ + "<center>Desktop Server is running at: <br>" + "<a href=\""
+ + applicationUrl + "\">" + applicationUrl
+ + "</a><br>Close this window to shutdown the server.</center>"
+ + "</html>");
+ link.addMouseListener(new MouseAdapter() {
+ @Override
+ public void mouseClicked(MouseEvent e) {
+ BrowserLauncher.openBrowser(applicationUrl);
+ }
+ });
+
+ // Create a panel and add components to it.
+ final JPanel contentPane = new JPanel(new FlowLayout());
+ frame.setContentPane(contentPane);
+ contentPane.add(link);
+
+ // Close confirmation
+ final JLabel question = new JLabel(
+ "This will stop the server. Are you sure?");
+ final JButton okButton = new JButton("OK");
+ final JButton cancelButton = new JButton("Cancel");
+
+ // List for close verify buttons
+ final ActionListener buttonListener = new ActionListener() {
+ public void actionPerformed(ActionEvent e) {
+ if (e.getSource() == okButton) {
+ System.exit(0);
+ } else {
+ Rectangle bounds = frame.getBounds();
+ frame.setTitle(title);
+ contentPane.removeAll();
+ contentPane.add(link);
+ contentPane.setBounds(bounds);
+ frame.setBounds(bounds);
+ frame.setVisible(true);
+ frame.repaint();
+ }
+ }
+ };
+ okButton.addActionListener(buttonListener);
+ cancelButton.addActionListener(buttonListener);
+
+ frame.addWindowListener(new WindowAdapter() {
+ @Override
+ public void windowClosing(WindowEvent e) {
+ final Rectangle bounds = frame.getBounds();
+ frame.setTitle("Confirm close");
+ contentPane.removeAll();
+ contentPane.add(question);
+ contentPane.add(okButton);
+ contentPane.add(cancelButton);
+ frame.setBounds(bounds);
+ frame.setVisible(true);
+ frame.repaint();
+ }
+ });
+
+ // Position the window nicely
+ final java.awt.Dimension screenSize = java.awt.Toolkit
+ .getDefaultToolkit().getScreenSize();
+ final int w = 270;
+ final int h = 95;
+ final int margin = 20;
+ frame.setBounds(new Rectangle(screenSize.width - w - margin,
+ screenSize.height - h - margin * 2, w, h));
+ frame.toFront();
+ frame.setVisible(true);
+ }
+
+ /**
+ * Deploy file named "embedded.war" from classpath (inside jar file).
+ *
+ * @param args
+ * @return
+ * @throws IOException
+ */
+ protected static boolean deployEmbeddedWarfile(Map args) throws IOException {
+ final String embeddedWarfileName = "/embedded.war";
+ final InputStream embeddedWarfile = DemoLauncher.class
+ .getResourceAsStream(embeddedWarfileName);
+ if (embeddedWarfile != null) {
+ final File tempWarfile = File.createTempFile("embedded", ".war")
+ .getAbsoluteFile();
+ tempWarfile.getParentFile().mkdirs();
+ tempWarfile.deleteOnExit();
+
+ final String embeddedWebroot = "winstoneEmbeddedWAR";
+ final File tempWebroot = new File(tempWarfile.getParentFile(),
+ embeddedWebroot);
+ tempWebroot.mkdirs();
+
+ final OutputStream out = new FileOutputStream(tempWarfile, true);
+ int read = 0;
+ final byte buffer[] = new byte[2048];
+ while ((read = embeddedWarfile.read(buffer)) != -1) {
+ out.write(buffer, 0, read);
+ }
+ out.close();
+ embeddedWarfile.close();
+
+ args.put("warfile", tempWarfile.getAbsolutePath());
+ args.put("webroot", tempWebroot.getAbsolutePath());
+ args.remove("webappsDir");
+ args.remove("hostsDir");
+ return true;
+ }
+ return false;
+ }
+}
--- /dev/null
+/* \r
+@ITMillApache2LicenseForJavaFiles@\r
+ */\r
+\r
+package com.vaadin.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.vaadin.launcher.util.BrowserLauncher;\r
+\r
+/**\r
+ * Class for running Jetty servlet container within Eclipse project.\r
+ * \r
+ */\r
+public class DevelopmentServerLauncher {\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
+ final Map serverArgs = parseArguments(args);\r
+\r
+ // Start Jetty\r
+ System.out.println("Starting Jetty servlet container.");\r
+ final String url = runServer(serverArgs, "Development Server Mode");\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, String mode) {\r
+\r
+ // Add help for System.out\r
+ System.out\r
+ .println("-------------------------------------------------\n"\r
+ + "Starting Vaadin in "\r
+ + mode\r
+ + ".\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
+ assignDefault(serverArgs, "context", "");\r
+\r
+ try {\r
+ final Server server = new Server();\r
+\r
+ final Connector connector = new SelectChannelConnector();\r
+\r
+ connector.setPort(8888);\r
+ server.setConnectors(new Connector[] { connector });\r
+\r
+ final WebAppContext webappcontext = new WebAppContext();\r
+ webappcontext.setContextPath(serverArgs.get("context").toString());\r
+ webappcontext.setWar(serverArgs.get("webroot").toString());\r
+\r
+ server.setHandler(webappcontext);\r
+\r
+ server.start();\r
+ } catch (final Exception e) {\r
+ e.printStackTrace();\r
+ return null;\r
+ }\r
+\r
+ return "http://localhost:" + serverArgs.get("httpPort")\r
+ + serverArgs.get("context");\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
+ final Map map = new HashMap();\r
+ for (int i = 0; i < args.length; i++) {\r
+ final int d = args[i].indexOf("=");\r
+ if (d > 0 && d < args[i].length() && args[i].startsWith("--")) {\r
+ final String name = args[i].substring(2, d);\r
+ final String value = args[i].substring(d + 1);\r
+ map.put(name, value);\r
+ }\r
+ }\r
+ return map;\r
+ }\r
+\r
+}\r
+++ /dev/null
-/*
-@ITMillApache2LicenseForJavaFiles@
- */
-
-package com.vaadin.launcher;
-
-import java.awt.FlowLayout;
-import java.awt.HeadlessException;
-import java.awt.Rectangle;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.MouseAdapter;
-import java.awt.event.MouseEvent;
-import java.awt.event.WindowAdapter;
-import java.awt.event.WindowEvent;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.Map;
-
-import javax.swing.JButton;
-import javax.swing.JFrame;
-import javax.swing.JLabel;
-import javax.swing.JPanel;
-import javax.swing.WindowConstants;
-
-import com.vaadin.launcher.util.BrowserLauncher;
-
-/**
- * This class starts servlet container and opens a simple control dialog.
- *
- */
-public class ITMillToolkitDesktopMode {
-
- public static void main(String[] args) {
-
- final Map serverArgs = ITMillToolkitWebMode.parseArguments(args);
- boolean deployed = false;
- try {
- // Default deployment: embedded.war
- deployed = deployEmbeddedWarfile(serverArgs);
- } catch (final IOException e1) {
- e1.printStackTrace();
- deployed = false;
- }
-
- // Check if deployment was succesful
- if (!deployed && !serverArgs.containsKey("webroot")) {
- // Default deployment failed, try other means
- if (new File("WebContent").exists()) {
- // Using WebContent directory as webroot
- serverArgs.put("webroot", "WebContent");
- } else {
- System.err.print("Failed to deploy Toolkit application. "
- + "Please add --webroot parameter. Exiting.");
- return;
- }
- }
-
- // Start the Winstone servlet container
- final String url = ITMillToolkitWebMode.runServer(serverArgs,
- "Desktop Mode");
-
- if (!serverArgs.containsKey("nogui") && url != null) {
-
- // Open browser into application URL
- BrowserLauncher.openBrowser(url);
-
- // Open control dialog
- /*
- * Swing components should never be manipulated outside the event
- * dispatch thread.
- */
- java.awt.EventQueue.invokeLater(new Runnable() {
- public void run() {
- try {
- openServerControlDialog(url);
- } catch (HeadlessException e) {
- // nop, starting from console
- }
- }
- });
- }
- }
-
- /**
- * Open a control dialog for embedded server.
- *
- * @param applicationUrl
- * Application URL
- */
- private static void openServerControlDialog(final String applicationUrl) {
-
- // Main frame
- final String title = "Desktop Server";
- final JFrame frame = new JFrame(title);
- frame.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
-
- // Create link label and listen mouse click
- final JLabel link = new JLabel("<html>"
- + "<center>Desktop Server is running at: <br>" + "<a href=\""
- + applicationUrl + "\">" + applicationUrl
- + "</a><br>Close this window to shutdown the server.</center>"
- + "</html>");
- link.addMouseListener(new MouseAdapter() {
- @Override
- public void mouseClicked(MouseEvent e) {
- BrowserLauncher.openBrowser(applicationUrl);
- }
- });
-
- // Create a panel and add components to it.
- final JPanel contentPane = new JPanel(new FlowLayout());
- frame.setContentPane(contentPane);
- contentPane.add(link);
-
- // Close confirmation
- final JLabel question = new JLabel(
- "This will stop the server. Are you sure?");
- final JButton okButton = new JButton("OK");
- final JButton cancelButton = new JButton("Cancel");
-
- // List for close verify buttons
- final ActionListener buttonListener = new ActionListener() {
- public void actionPerformed(ActionEvent e) {
- if (e.getSource() == okButton) {
- System.exit(0);
- } else {
- Rectangle bounds = frame.getBounds();
- frame.setTitle(title);
- contentPane.removeAll();
- contentPane.add(link);
- contentPane.setBounds(bounds);
- frame.setBounds(bounds);
- frame.setVisible(true);
- frame.repaint();
- }
- }
- };
- okButton.addActionListener(buttonListener);
- cancelButton.addActionListener(buttonListener);
-
- frame.addWindowListener(new WindowAdapter() {
- @Override
- public void windowClosing(WindowEvent e) {
- final Rectangle bounds = frame.getBounds();
- frame.setTitle("Confirm close");
- contentPane.removeAll();
- contentPane.add(question);
- contentPane.add(okButton);
- contentPane.add(cancelButton);
- frame.setBounds(bounds);
- frame.setVisible(true);
- frame.repaint();
- }
- });
-
- // Position the window nicely
- final java.awt.Dimension screenSize = java.awt.Toolkit
- .getDefaultToolkit().getScreenSize();
- final int w = 270;
- final int h = 95;
- final int margin = 20;
- frame.setBounds(new Rectangle(screenSize.width - w - margin,
- screenSize.height - h - margin * 2, w, h));
- frame.toFront();
- frame.setVisible(true);
- }
-
- /**
- * Deploy file named "embedded.war" from classpath (inside jar file).
- *
- * @param args
- * @return
- * @throws IOException
- */
- protected static boolean deployEmbeddedWarfile(Map args) throws IOException {
- final String embeddedWarfileName = "/embedded.war";
- final InputStream embeddedWarfile = ITMillToolkitDesktopMode.class
- .getResourceAsStream(embeddedWarfileName);
- if (embeddedWarfile != null) {
- final File tempWarfile = File.createTempFile("embedded", ".war")
- .getAbsoluteFile();
- tempWarfile.getParentFile().mkdirs();
- tempWarfile.deleteOnExit();
-
- final String embeddedWebroot = "winstoneEmbeddedWAR";
- final File tempWebroot = new File(tempWarfile.getParentFile(),
- embeddedWebroot);
- tempWebroot.mkdirs();
-
- final OutputStream out = new FileOutputStream(tempWarfile, true);
- int read = 0;
- final byte buffer[] = new byte[2048];
- while ((read = embeddedWarfile.read(buffer)) != -1) {
- out.write(buffer, 0, read);
- }
- out.close();
- embeddedWarfile.close();
-
- args.put("warfile", tempWarfile.getAbsolutePath());
- args.put("webroot", tempWebroot.getAbsolutePath());
- args.remove("webappsDir");
- args.remove("hostsDir");
- return true;
- }
- return false;
- }
-}
+++ /dev/null
-/* \r
-@ITMillApache2LicenseForJavaFiles@\r
- */\r
-\r
-package com.vaadin.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.vaadin.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
- final Map serverArgs = parseArguments(args);\r
-\r
- // Start Jetty\r
- System.out.println("Starting Jetty servlet container.");\r
- final String url = runServer(serverArgs, "Web Mode");\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, String mode) {\r
-\r
- // Add help for System.out\r
- System.out\r
- .println("-------------------------------------------------\n"\r
- + "Starting IT Mill Toolkit in "\r
- + mode\r
- + ".\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
- assignDefault(serverArgs, "context", "");\r
-\r
- try {\r
- final Server server = new Server();\r
-\r
- final Connector connector = new SelectChannelConnector();\r
-\r
- connector.setPort(8888);\r
- server.setConnectors(new Connector[] { connector });\r
-\r
- final WebAppContext webappcontext = new WebAppContext();\r
- webappcontext.setContextPath(serverArgs.get("context").toString());\r
- webappcontext.setWar(serverArgs.get("webroot").toString());\r
-\r
- server.setHandler(webappcontext);\r
-\r
- server.start();\r
- } catch (final Exception e) {\r
- e.printStackTrace();\r
- return null;\r
- }\r
-\r
- return "http://localhost:" + serverArgs.get("httpPort")\r
- + serverArgs.get("context");\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
- final Map map = new HashMap();\r
- for (int i = 0; i < args.length; i++) {\r
- final int d = args[i].indexOf("=");\r
- if (d > 0 && d < args[i].length() && args[i].startsWith("--")) {\r
- final String name = args[i].substring(2, d);\r
- final String value = args[i].substring(d + 1);\r
- map.put(name, value);\r
- }\r
- }\r
- return map;\r
- }\r
-\r
-}\r