diff --git a/app/src/processing/app/WebServer.java b/app/src/processing/app/WebServer.java index 618f09c65..bd13f59b4 100644 --- a/app/src/processing/app/WebServer.java +++ b/app/src/processing/app/WebServer.java @@ -16,20 +16,17 @@ import java.util.zip.*; * this article on java.sun.com. */ public class WebServer { - - /** where worker threads stand idle */ - static final Vector threads = new Vector<>(); - - /** max # worker threads */ - static final int WORKERS = 5; - - /** P5 in decimal; if there are complaints, move to preferences.txt */ - static final int PORT = 8053; - static final int HTTP_OK = 200; static final int HTTP_NOT_FOUND = 404; static final int HTTP_BAD_METHOD = 405; + /** where worker threads stand idle */ + private final Vector threads = new Vector<>(); + + /** max # worker threads */ + static final int WORKERS = 5; + + private final int port; private final ZipFile zip; private final Map entries; @@ -38,8 +35,10 @@ public class WebServer { static final byte[] EOL = { (byte) '\r', (byte) '\n' }; - public WebServer(String zipPath) throws IOException { - zip = new ZipFile(zipPath); + public WebServer(File zipFile, int port) throws IOException { + this.zip = new ZipFile(zipFile); + this.port = port; + entries = new HashMap<>(); Enumeration en = zip.entries(); while (en.hasMoreElements()) { @@ -57,7 +56,7 @@ public class WebServer { new Thread(() -> { try { - ServerSocket ss = new ServerSocket(PORT); + ServerSocket ss = new ServerSocket(port); while (true) { Socket s = ss.accept(); synchronized (threads) { @@ -79,6 +78,11 @@ public class WebServer { } + public String getPrefix() { + return "http://localhost:" + port + "/"; + } + + class Worker implements Runnable { // buffer to use for requests byte[] buffer; @@ -111,12 +115,12 @@ public class WebServer { // go back in wait queue if there's fewer // than numHandler connections. socket = null; - synchronized (WebServer.threads) { - if (WebServer.threads.size() >= WebServer.WORKERS) { + synchronized (threads) { + if (threads.size() >= WebServer.WORKERS) { // too many threads, exit this one return; } else { - WebServer.threads.addElement(this); + threads.addElement(this); } } } @@ -320,7 +324,7 @@ public class WebServer { */ static public void main(String[] args) { try { - new WebServer(args[0]); + new WebServer(new File(args[0]), 8053); } catch (IOException e) { e.printStackTrace(); } diff --git a/app/src/processing/app/ui/Editor.java b/app/src/processing/app/ui/Editor.java index b8075fca6..6ebd283fe 100644 --- a/app/src/processing/app/ui/Editor.java +++ b/app/src/processing/app/ui/Editor.java @@ -1049,80 +1049,6 @@ public abstract class Editor extends JFrame implements RunnerListener { } - /* - protected void addToolMenuItem(JMenu menu, String className) { - try { - Class toolClass = Class.forName(className); - final Tool tool = (Tool) toolClass.newInstance(); - - JMenuItem item = new JMenuItem(tool.getMenuTitle()); - - tool.init(Editor.this); - - item.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - EventQueue.invokeLater(tool); - } - }); - menu.add(item); - - } catch (Exception e) { - e.printStackTrace(); - } - } - - - protected JMenu addInternalTools(JMenu menu) { - addToolMenuItem(menu, "processing.app.tools.CreateFont"); - addToolMenuItem(menu, "processing.app.tools.ColorSelector"); - addToolMenuItem(menu, "processing.app.tools.Archiver"); - - if (Platform.isMacOS()) { - addToolMenuItem(menu, "processing.app.tools.InstallCommander"); - } - - return menu; - } - */ - - - /* - // testing internal web server to serve up docs from a zip file - item = new JMenuItem("Web Server Test"); - item.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - //WebServer ws = new WebServer(); - SwingUtilities.invokeLater(new Runnable() { - public void run() { - try { - int port = WebServer.launch("/Users/fry/coconut/processing/build/shared/reference.zip"); - Base.openURL("http://127.0.0.1:" + port + "/reference/setup_.html"); - - } catch (IOException e1) { - e1.printStackTrace(); - } - } - }); - } - }); - menu.add(item); - */ - - /* - item = new JMenuItem("Browser Test"); - item.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - //Base.openURL("http://processing.org/learning/gettingstarted/"); - //JFrame browserFrame = new JFrame("Browser"); - BrowserStartup bs = new BrowserStartup("jar:file:/Users/fry/coconut/processing/build/shared/reference.zip!/reference/setup_.html"); - bs.initUI(); - bs.launch(); - } - }); - menu.add(item); - */ - - abstract public JMenu buildHelpMenu(); @@ -2202,50 +2128,6 @@ public abstract class Editor extends JFrame implements RunnerListener { } - /* - protected void handleFindReference() { - String text = textarea.getSelectedText().trim(); - - if (text.length() == 0) { - statusNotice("First select a word to find in the reference."); - - } else { - char[] c = textarea.getText().toCharArray(); - int after = Math.max(textarea.getSelectionStart(), textarea.getSelectionStop()); - if (checkParen(c, after, c.length)) { - text += "_"; - System.out.println("looking up ref for " + text); - } - String referenceFile = mode.lookupReference(text); - System.out.println("reference file is " + referenceFile); - if (referenceFile == null) { - statusNotice("No reference available for \"" + text + "\""); - } else { - showReference(referenceFile + ".html"); - } - } - } - - - protected void handleFindReference() { - String text = textarea.getSelectedText().trim(); - - if (text.length() == 0) { - statusNotice("First select a word to find in the reference."); - - } else { - String referenceFile = mode.lookupReference(text); - //System.out.println("reference file is " + referenceFile); - if (referenceFile == null) { - statusNotice("No reference available for \"" + text + "\""); - } else { - showReference(referenceFile + ".html"); - } - } - } - */ - - // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . diff --git a/build/build.xml b/build/build.xml index 2399c1620..8754cc900 100644 --- a/build/build.xml +++ b/build/build.xml @@ -353,7 +353,8 @@ - + + @@ -375,6 +376,8 @@ ignoreerrors="${reference.ignorable}" usetimestamp="true" /> + + - diff --git a/java/src/processing/mode/java/JavaEditor.java b/java/src/processing/mode/java/JavaEditor.java index 0aec78da4..bb5b14231 100644 --- a/java/src/processing/mode/java/JavaEditor.java +++ b/java/src/processing/mode/java/JavaEditor.java @@ -74,7 +74,6 @@ public class JavaEditor extends Editor { JMenu modeMenu; // protected JMenuItem inspectorItem; - // static final int ERROR_TAB_INDEX = 0; protected PreprocService preprocService; @@ -90,6 +89,11 @@ public class JavaEditor extends Editor { static private final boolean SHOW_AST_VIEWER = false; private ASTViewer astViewer; + /** P5 in decimal; if there are complaints, move to preferences.txt */ + static final int REFERENCE_PORT = 8053; + Boolean useReferenceServer; + WebServer referenceServer; + protected JavaEditor(Base base, String path, EditorState state, Mode mode) throws EditorException { @@ -1199,6 +1203,34 @@ public class JavaEditor extends Editor { } + public void showReference(String filename) { + if (useReferenceServer == null) { + File referenceZip = new File(mode.getFolder(), "reference.zip"); + if (referenceZip.exists()) { + try { + referenceServer = new WebServer(referenceZip, REFERENCE_PORT); + useReferenceServer = true; + + } catch (IOException e) { + Messages.showWarning("Reference Server Problem", "Error while starting the documentation server."); + } + + } else { + useReferenceServer = false; + } + } + + if (useReferenceServer) { + String url = referenceServer.getPrefix() + "reference/" + filename; + Platform.openURL(url); + + } else { + File file = new File(mode.getReferenceFolder(), filename); + showReferenceFile(file); + } + } + + public void statusError(String what) { super.statusError(what); // new Exception("deactivating RUN").printStackTrace();