1 36 37 package com.sun.demo.scripting.jconsole; 38 39 import com.sun.tools.jconsole.*; 40 import java.awt.*; 41 import java.awt.event.*; 42 import java.io.*; 43 import java.lang.reflect.*; 44 import java.util.concurrent.CountDownLatch ; 45 import javax.script.*; 46 import javax.swing.*; 47 import javax.swing.event.*; 48 import java.util.*; 49 50 54 public class ScriptJConsolePlugin extends JConsolePlugin 55 implements ScriptShellPanel.CommandProcessor { 56 private volatile ScriptShellPanel window; 58 private Map<String , JPanel> tabs; 60 61 private volatile ScriptEngine engine; 63 64 private CountDownLatch engineReady = new CountDownLatch (1); 67 68 private String extension; 71 72 private volatile String prompt; 75 76 79 public ScriptJConsolePlugin() { 80 } 81 82 @Override public Map<String , JPanel> getTabs() { 83 createScriptEngine(); 85 86 window = new ScriptShellPanel(this); 88 89 tabs = new HashMap<String , JPanel>(); 91 tabs.put("Script Shell", window); 92 93 new Thread (new Runnable () { 94 public void run() { 95 initScriptEngine(); 97 engineReady.countDown(); 98 } 99 }).start(); 100 return tabs; 101 } 102 103 @Override public SwingWorker<?,?> newSwingWorker() { 104 return null; 105 } 106 107 @Override public void dispose() { 108 window.dispose(); 109 } 110 111 public String getPrompt() { 112 return prompt; 113 } 114 115 public String executeCommand(String cmd) { 116 String res; 117 try { 118 engineReady.await(); 119 Object tmp = engine.eval(cmd); 120 res = (tmp == null)? null : tmp.toString(); 121 } catch (InterruptedException ie) { 122 res = ie.getMessage(); 123 } catch (ScriptException se) { 124 res = se.getMessage(); 125 } 126 return res; 127 } 128 129 private void createScriptEngine() { 131 ScriptEngineManager manager = new ScriptEngineManager(); 132 String language = getScriptLanguage(); 133 engine = manager.getEngineByName(language); 134 if (engine == null) { 135 throw new RuntimeException ("cannot load " + language + " engine"); 136 } 137 extension = engine.getFactory().getExtensions().get(0); 138 prompt = extension + ">"; 139 engine.setBindings(createBindings(), ScriptContext.ENGINE_SCOPE); 140 } 141 142 private static final String LANGUAGE_KEY = "com.sun.demo.jconsole.console.language"; 144 145 private String getScriptLanguage() { 146 String lang = System.getProperty(LANGUAGE_KEY); 148 if (lang == null) { 149 lang = "JavaScript"; 151 } 152 return lang; 153 } 154 155 private Bindings createBindings() { 157 Map<String , Object > map = 158 Collections.synchronizedMap(new HashMap<String , Object >()); 159 return new SimpleBindings(map); 160 } 161 162 private void initScriptEngine() { 164 setGlobals(); 166 loadInitFile(); 168 loadUserInitFile(); 170 } 171 172 private void setGlobals() { 174 engine.put("engine", engine); 175 engine.put("window", window); 176 engine.put("plugin", this); 177 } 178 179 private void loadInitFile() { 181 String oldFilename = (String ) engine.get(ScriptEngine.FILENAME); 182 engine.put(ScriptEngine.FILENAME, "<built-in jconsole." + extension + ">"); 183 try { 184 Class myClass = this.getClass(); 185 InputStream stream = myClass.getResourceAsStream("/resources/jconsole." + 186 extension); 187 if (stream != null) { 188 engine.eval(new InputStreamReader(new BufferedInputStream(stream))); 189 } 190 } catch (Exception exp) { 191 exp.printStackTrace(); 192 } finally { 194 engine.put(ScriptEngine.FILENAME, oldFilename); 195 } 196 } 197 198 private void loadUserInitFile() { 200 String oldFilename = (String ) engine.get(ScriptEngine.FILENAME); 201 String home = System.getProperty("user.home"); 202 if (home == null) { 203 return; 205 } 206 String fileName = home + File.separator + "jconsole." + extension; 207 if (! (new File(fileName).exists())) { 208 return; 210 } 211 engine.put(ScriptEngine.FILENAME, fileName); 212 try { 213 engine.eval(new FileReader(fileName)); 214 } catch (Exception exp) { 215 exp.printStackTrace(); 216 } finally { 218 engine.put(ScriptEngine.FILENAME, oldFilename); 219 } 220 } 221 } 222 | Popular Tags |