123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198 |
- /*
- @ITMillApache2LicenseForJavaFiles@
- */
-
- package com.itmill.toolkit.launcher;
-
- import java.awt.FlowLayout;
- 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.itmill.toolkit.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");
-
- // Open browser into application URL
- if (url != null) {
- BrowserLauncher.openBrowser(url);
- }
-
- // Open control dialog
- if (url != null) {
- openServerControlDialog(url);
- }
-
- }
-
- /**
- * 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() {
- 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() {
- 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;
- }
- }
|