office-gobmx/rhino/rhino1_5R5.patch

1205 lines
40 KiB
Diff

--- misc/rhino1_5R5/src/org/mozilla/javascript/DefiningClassLoader.java Thu Mar 25 21:54:34 2004
+++ misc/build/rhino1_5R5/src/org/mozilla/javascript/DefiningClassLoader.java Fri Mar 28 17:24:23 2008
@@ -38,6 +38,7 @@
package org.mozilla.javascript;
import java.lang.reflect.Method;
+import java.lang.reflect.InvocationTargetException;
/**
* Load generated classes.
@@ -48,11 +49,34 @@
implements GeneratedClassLoader
{
public DefiningClassLoader() {
- this.parentLoader = getClass().getClassLoader();
+ init(getClass().getClassLoader());
}
public DefiningClassLoader(ClassLoader parentLoader) {
+
+ init(parentLoader);
+ }
+
+ private void init(ClassLoader parentLoader) {
+
this.parentLoader = parentLoader;
+
+ this.contextLoader = null;
+ if (method_getContextClassLoader != null) {
+ try {
+ this.contextLoader = (ClassLoader)
+ method_getContextClassLoader.invoke(
+ Thread.currentThread(),
+ ScriptRuntime.emptyArgs);
+ } catch (IllegalAccessException ex) {
+ } catch (InvocationTargetException ex) {
+ } catch (SecurityException ex) {
+ }
+ if (this.contextLoader == this.parentLoader) {
+ this.contextLoader = null;
+ }
+ }
+
}
public Class defineClass(String name, byte[] data) {
@@ -68,10 +92,20 @@
{
Class cl = findLoadedClass(name);
if (cl == null) {
- if (parentLoader != null) {
- cl = parentLoader.loadClass(name);
+ // First try parent class loader and if that does not work, try
+ // contextLoader, but that will be null if
+ // Thread.getContextClassLoader() == parentLoader
+ // or on JDK 1.1 due to lack Thread.getContextClassLoader().
+ // To avoid catching and rethrowing ClassNotFoundException
+ // in this cases, use try/catch check only if contextLoader != null.
+ if (contextLoader == null) {
+ cl = loadFromParent(name);
} else {
- cl = findSystemClass(name);
+ try {
+ cl = loadFromParent(name);
+ } catch (ClassNotFoundException ex) {
+ cl = contextLoader.loadClass(name);
+ }
}
}
if (resolve) {
@@ -80,5 +114,37 @@
return cl;
}
+ private Class loadFromParent(String name)
+ throws ClassNotFoundException
+ {
+ if (parentLoader != null) {
+ return parentLoader.loadClass(name);
+ } else {
+ return findSystemClass(name);
+ }
+
+ }
+
private ClassLoader parentLoader;
+
+ private ClassLoader contextLoader;
+
+ // We'd like to use "Thread.getContextClassLoader", but
+ // that's only available on Java2.
+ private static Method method_getContextClassLoader;
+
+ static {
+ try {
+ // Don't use "Thread.class": that performs the lookup
+ // in the class initializer, which doesn't allow us to
+ // catch possible security exceptions.
+ Class threadClass = Class.forName("java.lang.Thread");
+ method_getContextClassLoader =
+ threadClass.getDeclaredMethod("getContextClassLoader",
+ new Class[0]);
+ } catch (ClassNotFoundException e) {
+ } catch (NoSuchMethodException e) {
+ } catch (SecurityException e) {
+ }
+ }
}
--- misc/rhino1_5R5/toolsrc/build.xml 2004-03-25 21:54:34.000000000 +0100
+++ misc/build/rhino1_5R5/toolsrc/build.xml 2009-01-17 20:46:44.000000000 +0100
@@ -6,6 +6,24 @@
-->
<project name="toolsrc" default="compile" basedir=".">
+ <condition property="boot_refID" value="macPath" else="nonMacPath">
+ <and>
+ <os family="mac"/>
+ <os family="unix"/>
+ </and>
+ </condition>
+ <path id="macPath" location="${java.home}/../Classes/classes.jar"/>
+ <!-- rhino.jar from OpenJDK breaks build -->
+ <path id="nonMacPath">
+ <fileset dir="${java.home}/">
+ <include name="jre/lib/*.jar"/>
+ <include name="lib/*.jar"/>
+ <exclude name="jre/lib/rhino.jar"/>
+ <exclude name="lib/rhino.jar"/>
+ </fileset>
+ </path>
+ <path id="my.bootstrap.classpath" refID="${boot_refID}"/>
+
<target name="properties">
<property name="nest" value=".."/>
<property name="build.dir" value="./build"/>
@@ -20,46 +38,10 @@
<!-- Download source from Sun's site, unzip it, remove
the files we don't need, and change the package
-->
- <get src="http://java.sun.com/products/jfc/tsc/articles/treetable2/downloads/src.zip" dest="${nest}/${build.dir}/swingExSrc.zip"/>
- <unzip src="${nest}/${build.dir}/swingExSrc.zip" dest="${src.debugger}"/>
+ <unzip src="../../../../../download/swingExSrc.zip" dest="${src.debugger}"/>
<delete file="${src.debugger}/FileSystemModel2.java" />
<delete file="${src.debugger}/MergeSort.java" />
<delete file="${src.debugger}/TreeTableExample2.java" />
- <replace file="${src.debugger}/AbstractCellEditor.java">
- <replacetoken>import java.awt.Component;</replacetoken>
- <replacevalue>
- package org.mozilla.javascript.tools.debugger;
- import java.awt.Component;
- </replacevalue>
- </replace>
- <replace file="${src.debugger}/AbstractTreeTableModel.java">
- <replacetoken>import javax.swing.tree.*;</replacetoken>
- <replacevalue>
- package org.mozilla.javascript.tools.debugger;
- import javax.swing.tree.*;
- </replacevalue>
- </replace>
- <replace file="${src.debugger}/JTreeTable.java">
- <replacetoken>import javax.swing.*;</replacetoken>
- <replacevalue>
- package org.mozilla.javascript.tools.debugger;
- import javax.swing.*;
- </replacevalue>
- </replace>
- <replace file="${src.debugger}/TreeTableModel.java">
- <replacetoken>import javax.swing.tree.TreeModel;</replacetoken>
- <replacevalue>
- package org.mozilla.javascript.tools.debugger;
- import javax.swing.tree.TreeModel;
- </replacevalue>
- </replace>
- <replace file="${src.debugger}/TreeTableModelAdapter.java">
- <replacetoken>import javax.swing.JTree;</replacetoken>
- <replacevalue>
- package org.mozilla.javascript.tools.debugger;
- import javax.swing.JTree;
- </replacevalue>
- </replace>
</target>
<target name="compile" depends="properties,get-swing-ex">
@@ -68,6 +50,7 @@
includes="org/**/*.java"
deprecation="on"
debug="${debug}">
+ <compilerarg value="-Xbootclasspath:${toString:my.bootstrap.classpath}"/>
</javac>
<copy todir="${nest}/${classes}">
<fileset dir="." includes="org/**/*.properties" />
--- misc/rhino1_5R5/toolsrc/org/mozilla/javascript/tools/debugger/Main.java 2004-03-25 21:54:34.000000000 +0100
+++ misc/build/rhino1_5R5/toolsrc/org/mozilla/javascript/tools/debugger/Main.java 2009-01-17 20:44:22.000000000 +0100
@@ -470,15 +470,21 @@
case KeyEvent.VK_BACK_SPACE:
case KeyEvent.VK_ENTER:
case KeyEvent.VK_DELETE:
+ if (w.isEditable() == false) {
e.consume();
+ }
break;
}
}
public void keyTyped(KeyEvent e) {
+ if (w.isEditable() == false) {
e.consume();
+ }
}
public void keyReleased(KeyEvent e) {
+ if (w.isEditable() == false) {
e.consume();
+ }
}
}
@@ -879,7 +885,7 @@
}
};
-class FileWindow extends JInternalFrame implements ActionListener {
+class FileWindow extends JInternalFrame implements ActionListener, DocumentListener {
Main db;
SourceInfo sourceInfo;
@@ -888,15 +894,16 @@
JScrollPane p;
int currentPos;
JLabel statusBar;
+ boolean isModified = false;
public void actionPerformed(ActionEvent e) {
String cmd = e.getActionCommand();
if (cmd.equals("Cut")) {
- // textArea.cut();
+ textArea.cut();
} else if (cmd.equals("Copy")) {
textArea.copy();
} else if (cmd.equals("Paste")) {
- // textArea.paste();
+ textArea.paste();
}
}
@@ -910,17 +917,73 @@
}
void load() {
- Scriptable scope = db.getScope();
+ //Scriptable scope = db.getScope();
+ Scriptable scope = db.officeScripts.getScriptScope( getUrl() );
+ if ( scope == null )
+ {
+ scope = db.getScope();
+ }
if (scope == null) {
MessageDialogWrapper.showMessageDialog(db, "Can't load scripts: no scope available", "Run", JOptionPane.ERROR_MESSAGE);
} else {
String url = getUrl();
if (url != null) {
- new Thread(new LoadFile(db,scope,url)).start();
+ new Thread(new LoadFile(db,scope, url, new StringReader(textArea.getText()))).start();
}
}
}
+ void save() {
+ if (getUrl() != null) {
+ OutputStream os = null;
+ try {
+ if ( getUrl().startsWith("vnd.sun.star") )
+ {
+ URL scriptUrl = db.officeScripts.getScriptUrl( getUrl() );
+ if ( scriptUrl == null )
+ {
+ throw new IOException("Can't optain stream for " + getUrl() );
+ }
+ os = scriptUrl.openConnection().getOutputStream();
+ }
+ else
+ {
+ os = new FileOutputStream( getUrl() );
+ }
+ String s = textArea.getText();
+ os.write(s.getBytes(), 0, s.length());
+
+ this.isModified = false;
+ }
+ catch (IOException ioe) {
+ JOptionPane.showMessageDialog(this,
+ "Error saving file: " + ioe.getMessage(),
+ "Error", JOptionPane.ERROR_MESSAGE);
+ }
+ finally
+ {
+ if ( os != null )
+ {
+ try
+ {
+ os.close();
+ os = null;
+ }
+ catch( IOException ioe )
+ {
+ System.err.println("Error closing stream: " + ioe.getMessage() );
+ ioe.printStackTrace();
+ }
+ }
+ }
+ }
+ }
+
+ public boolean isEditable() {
+ return db.isSourceEditingEnabled();
+ }
+
+
public int getPosition(int line) {
int result = -1;
try {
@@ -953,7 +1016,7 @@
fileHeader.repaint();
}
}
-
+ public Main getDB() { return db; }
FileWindow(Main db, SourceInfo sourceInfo) {
super(SourceInfo.getShortName(sourceInfo.getUrl()),
true, true, true, true);
@@ -972,6 +1035,14 @@
pack();
updateText();
textArea.select(0);
+ addInternalFrameListener( new InternalFrameAdapter() {
+ public void internalFrameClosed(InternalFrameEvent e) {
+ // clean up scriptItems and sourceNames hashes
+ getDB().removeScript( getUrl() );
+ // remove scripts for officeScripts
+ getDB().officeScripts.deleteScript( getUrl() );
+ }
+ } );
}
private void updateToolTip() {
@@ -990,7 +1061,10 @@
void updateText() {
String newText = sourceInfo.getSource();
if (!textArea.getText().equals(newText)) {
+ textArea.getDocument().removeDocumentListener(this);
textArea.setText(newText);
+ this.isModified = false;
+ textArea.getDocument().addDocumentListener(this);
int pos = 0;
if (currentPos != -1) {
pos = currentPos;
@@ -1001,6 +1075,31 @@
fileHeader.repaint();
}
+ /* Implementation of DocumentListener interface */
+ public void insertUpdate(DocumentEvent e) {
+ doChanged(e);
+ }
+
+ public void removeUpdate(DocumentEvent e) {
+ doChanged(e);
+ }
+
+ public void changedUpdate(DocumentEvent e) {
+ doChanged(e);
+ }
+
+ public void doChanged(DocumentEvent e) {
+ this.isModified = true;
+ }
+
+ public boolean isModified() {
+ return this.isModified;
+ }
+
+ public String getText() {
+ return textArea.getText();
+ }
+
void setPosition(int pos) {
textArea.select(pos);
currentPos = pos;
@@ -1618,7 +1717,7 @@
if (line != -1) {
db.currentWindow = w;
}
- db.menubar.addFile(url);
+ // db.menubar.addFile(url);
w.setVisible(true);
if (activate) {
try {
@@ -1752,8 +1851,10 @@
Menubar(Main db) {
super();
this.db = db;
- String[] fileItems = {"Open...", "Run...", "", "Exit"};
- String[] fileCmds = {"Open", "Load", "", "Exit"};
+ // String[] fileItems = {"Open...", "Run...", "", "Exit"};
+ // String[] fileCmds = {"Open", "Load", "", "Exit"};
+ String[] fileItems = {"Run", "Save", "", "Exit"};
+ String[] fileCmds = {"Run", "Save", "", "Exit"};
char[] fileShortCuts = {'0', 'N', '\0', 'X'};
int[] fileAccelerators = {KeyEvent.VK_O,
KeyEvent.VK_N,
@@ -1795,6 +1896,9 @@
KeyStroke k = KeyStroke.getKeyStroke(fileAccelerators[i], Event.CTRL_MASK);
item.setAccelerator(k);
}
+ if (fileItems[i].equals("Save")) {
+ saveItem = item;
+ }
}
}
for (int i = 0; i < editItems.length; ++i) {
@@ -1849,9 +1953,9 @@
item.addActionListener(this);
windowMenu.add(item = new JMenuItem("Tile", 'T'));
item.addActionListener(this);
- windowMenu.addSeparator();
- windowMenu.add(item = new JMenuItem("Console", 'C'));
- item.addActionListener(this);
+// windowMenu.addSeparator();
+// windowMenu.add(item = new JMenuItem("Console", 'C'));
+// item.addActionListener(this);
add(windowMenu);
}
@@ -1925,11 +2029,16 @@
item.addActionListener(this);
}
+ public void setSaveEnabled(boolean state) {
+ saveItem.setEnabled(state);
+ }
+
Main db;
JMenu windowMenu;
JCheckBoxMenuItem breakOnExceptions;
JCheckBoxMenuItem breakOnEnter;
JCheckBoxMenuItem breakOnReturn;
+ JMenuItem saveItem;
};
class EnterInterrupt implements Runnable {
@@ -1942,6 +2051,13 @@
public void run() {
JMenu menu = db.getJMenuBar().getMenu(0);
//menu.getItem(0).setEnabled(false); // File->Load
+
+ // disable Edit menu Cut, Copy, Paste items
+ menu = db.getJMenuBar().getMenu(1);
+ for (int i = 0; i < 3; i++) {
+ menu.getItem(i).setEnabled(false);
+ }
+
menu = db.getJMenuBar().getMenu(2);
menu.getItem(0).setEnabled(false); // Debug->Break
int count = menu.getItemCount();
@@ -1954,6 +2070,10 @@
b = true;
}
db.toolBar.setEnabled(true);
+
+ // set flag to disable source editing
+ db.setSourceEditingEnabled(false);
+
// raise the debugger window
db.toFront();
}
@@ -1967,6 +2087,13 @@
public void run() {
JMenu menu = db.getJMenuBar().getMenu(0);
menu.getItem(0).setEnabled(true); // File->Load
+
+ // enable Edit menu items
+ menu = db.getJMenuBar().getMenu(1);
+ for (int i = 0; i < 3; i++) {
+ menu.getItem(i).setEnabled(true);
+ }
+
menu = db.getJMenuBar().getMenu(2);
menu.getItem(0).setEnabled(true); // Debug->Break
int count = menu.getItemCount() - 1;
@@ -1980,6 +2107,10 @@
db.toolBar.getComponent(ci).setEnabled(b);
b = false;
}
+
+ // set flag to enable source editing
+ db.setSourceEditingEnabled(true);
+
//db.console.consoleTextArea.requestFocus();
}
};
@@ -1988,17 +2119,24 @@
{
String fileName;
Main db;
+ Reader reader = null;
OpenFile(Main db, String fileName)
{
this.fileName = fileName;
this.db = db;
}
+ OpenFile(Main db, String fileName, Reader reader) {
+ this(db, fileName);
+ this.reader = reader;
+ }
public void run() {
Context cx = Context.enter();
ContextData contextData = ContextData.get(cx);
contextData.breakNextLine = true;
try {
- cx.compileReader(new FileReader(fileName), fileName, 1, null);
+ cx.compileReader(
+ reader == null ? new FileReader(fileName) : reader,
+ fileName, 1, null);
} catch (Exception exc) {
String msg = exc.getMessage();
if (exc instanceof EcmaError) {
@@ -2019,29 +2157,79 @@
Scriptable scope;
String fileName;
Main db;
+ Reader reader = null;
+ Object result = null;
+ Exception exception = null;
+ int lineNum = -1;
+ boolean sfExecute = false;
+
LoadFile(Main db, Scriptable scope, String fileName) {
this.scope = scope;
this.fileName = fileName;
this.db = db;
}
+
+ LoadFile(Main db, Scriptable scope, String fileName, Reader reader) {
+ this(db, scope, fileName);
+ this.reader = reader;
+ }
+ LoadFile(Main db, Scriptable scope, String fileName, Reader reader, boolean sfExecute ) {
+ this(db, scope, fileName);
+ this.reader = reader;
+ this.sfExecute = sfExecute;
+ }
+
public void run() {
+ if ( db.officeScripts.isScriptRunning( fileName ) )
+ {
+ exception = new Exception("The script is already executing");
+ if ( !sfExecute ) {
+ MessageDialogWrapper.showMessageDialog(db,
+ "Script already executing",
+ "Run",
+ JOptionPane.ERROR_MESSAGE);
+ }
+ return;
+ }
+ db.officeScripts.setScriptRunning( fileName, true );
Context cx = Context.enter();
ContextData contextData = ContextData.get(cx);
+ if ( sfExecute )
+ {
+ contextData.breakNextLine = false;
+ }
+ else
+ {
contextData.breakNextLine = true;
+ }
+ /*
+ FileWindow w = (FileWindow)db.getSelectedFrame();
+ if ( sfExecute )
+ {
+ db.swingInvoke(new SetFilePosition(db, w, -1 ) );
+ }*/
try {
- cx.evaluateReader(scope, new FileReader(fileName),
+ result = cx.evaluateReader(scope,
+ reader == null ? new FileReader(fileName) : reader,
fileName, 1, null);
} catch (Exception exc) {
+ exception = exc;
String msg = exc.getMessage();
if (exc instanceof EcmaError) {
EcmaError err = (EcmaError)exc;
msg = err.getSourceName() + ", line " + err.getLineNumber() + ": " + msg;
- }
+
+ int lineNum = err.getLineNumber() ;
+ //db.swingInvoke(new SetFilePosition(db, w, lineNum ) );
+ if ( !sfExecute ) {
MessageDialogWrapper.showMessageDialog(db,
msg,
"Run",
JOptionPane.ERROR_MESSAGE);
+ }
+ }
} finally {
+ db.officeScripts.setScriptRunning( fileName, false );
cx.exit();
}
}
@@ -2416,13 +2604,13 @@
super.setVisible(b);
if (b) {
// this needs to be done after the window is visible
- console.consoleTextArea.requestFocus();
+ // console.consoleTextArea.requestFocus();
context.split.setDividerLocation(0.5);
try {
- console.setMaximum(true);
- console.setSelected(true);
- console.show();
- console.consoleTextArea.requestFocus();
+ // console.setMaximum(true);
+ // console.setSelected(true);
+ // console.show();
+ // console.consoleTextArea.requestFocus();
} catch (Exception exc) {
}
}
@@ -2449,35 +2637,6 @@
Hashtable functionNames = new Hashtable();
- ScriptItem getScriptItem(DebuggableScript fnOrScript) {
- ScriptItem item = (ScriptItem)scriptItems.get(fnOrScript);
- if (item == null) {
- String url = getNormilizedUrl(fnOrScript);
- SourceInfo si = (SourceInfo)sourceNames.get(url);
- if (si == null) {
- if (!fnOrScript.isGeneratedScript()) {
- // Not eval or Function, try to load it from URL
- String source = null;
- try {
- InputStream is = openSource(url);
- try { source = readSource(is); }
- finally { is.close(); }
- } catch (IOException ex) {
- System.err.println
- ("Failed to load source from "+url+": "+ ex);
- }
- if (source != null) {
- si = registerSource(url, source);
- }
- }
- }
- if (si != null) {
- item = registerScript(si, fnOrScript);
- }
- }
- return item;
- }
-
/* Debugger Interface */
public void handleCompilationDone(Context cx, DebuggableScript fnOrScript,
@@ -2490,7 +2649,7 @@
String getNormilizedUrl(DebuggableScript fnOrScript) {
String url = fnOrScript.getSourceName();
- if (url == null) { url = "<stdin>"; }
+ if (url == null) { url = "document"; }
else {
// Not to produce window for eval from different lines,
// strip line numbers, i.e. replace all #[0-9]+\(eval\) by (eval)
@@ -2601,7 +2760,7 @@
if (si == null) {
si = new SourceInfo(sourceUrl, source);
sourceNames.put(sourceUrl, si);
- } else {
+ } else if (!source.equals(si.getSource())) {
si.setSource(source);
}
}
@@ -2762,7 +2921,7 @@
desk = new JDesktopPane();
desk.setPreferredSize(new Dimension(600, 300));
desk.setMinimumSize(new Dimension(150, 50));
- desk.add(console = new JSInternalConsole("JavaScript Console"));
+ // desk.add(console = new JSInternalConsole("JavaScript Console"));
context = new ContextWindow(this);
context.setPreferredSize(new Dimension(600, 120));
context.setMinimumSize(new Dimension(50, 50));
@@ -2871,7 +3030,7 @@
FrameHelper frame = contextData.getFrame(frameIndex);
String sourceName = frame.getUrl();
if (sourceName == null || sourceName.equals("<stdin>")) {
- console.show();
+ // console.show();
helper.reset();
return;
}
@@ -2895,6 +3054,19 @@
int dispatcherIsWaiting = 0;
Context currentContext = null;
+ // Flag used to establish whether source code editing is allowed in
+ // the debugger, switched on and off depending on whether a debug session
+ // is active
+ boolean sourceEditingEnabled = true;
+
+ public boolean isSourceEditingEnabled() {
+ return sourceEditingEnabled;
+ }
+
+ void setSourceEditingEnabled(boolean b) {
+ sourceEditingEnabled = b;
+ }
+
Context getCurrentContext() {
return currentContext;
}
@@ -3028,14 +3200,14 @@
swingInvoke(CreateFileWindow.action(this, si, line));
}
} else {
- if (console.isVisible()) {
+ /* if (console.isVisible()) {
final JSInternalConsole finalConsole = console;
swingInvoke(new Runnable() {
public void run() {
finalConsole.show();
}
});
- }
+ } */
}
swingInvoke(new EnterInterrupt(this, cx));
swingInvoke(new UpdateContext(this, cx));
@@ -3217,6 +3389,14 @@
fileName)).start();
}
}
+ } else if (cmd.equals("Run")) {
+ FileWindow w = (FileWindow)getSelectedFrame();
+ if (w != null)
+ w.load();
+ } else if (cmd.equals("Save")) {
+ FileWindow w = (FileWindow)getSelectedFrame();
+ if (w != null)
+ w.save();
} else if (cmd.equals("More Windows...")) {
MoreWindows dlg = new MoreWindows(this, fileWindows,
"Window", "Files");
@@ -3509,6 +3689,60 @@
}
}
+ JInternalFrame getFrameForUrl( URL url )
+ {
+ JInternalFrame[] frames = desk.getAllFrames();
+ for (int i = 0; i < frames.length; i++) {
+ FileWindow w = (FileWindow)frames[i];
+ if ( url.toString().equals( w.getUrl() ) ) {
+ return w;
+ }
+ }
+ return null;
+ }
+ public void highlighLineInSelectedWindow(URL url, int lineNum ){
+ //FileWindow w = (FileWindow)getFrameForUrl( url );
+ FileWindow w = (FileWindow)getSelectedFrame();
+ if (w != null)
+ {
+ if ( lineNum > -1 )
+ swingInvoke(new SetFilePosition(this, w, lineNum ) );
+ }
+ }
+ public Object runSelectedWindow( URL scriptUrl ) throws Exception
+ {
+ Object result = null;
+ FileWindow w = (FileWindow)getSelectedFrame();
+ //FileWindow w = (FileWindow)getFrameForUrl( scriptUrl );
+ w.toFront();
+ if (w != null)
+ {
+ Scriptable scope = w.db.getScope();
+ if (scope == null)
+ {
+ MessageDialogWrapper.showMessageDialog(w.db, "Can't load scripts: no scope available", "Run", JOptionPane.ERROR_MESSAGE);
+ result = null;
+ }
+ else
+ {
+ String url = w.getUrl();
+ Thread executorThread = null;
+ if (url != null)
+ {
+ LoadFile executor = new LoadFile(w.db,scope, url, new StringReader(w.textArea.getText()), true );
+ executor.run();
+ result = executor.result;
+ if ( executor.exception != null )
+ {
+ throw executor.exception;
+ }
+ }
+ }
+ }
+ return result;
+
+ }
+
//
// public interface
//
@@ -3604,6 +3838,69 @@
return console.getErr();
}
+ public void openFile(URL scriptUrl, Scriptable scope, Runnable closeCallback ) {
+ if (scope == null) {
+ MessageDialogWrapper.showMessageDialog(this,
+ "Can't compile scripts: no scope available",
+ "Open", JOptionPane.ERROR_MESSAGE);
+ } else {
+ if (scriptUrl != null) {
+ try
+ {
+ InputStreamReader reader = new InputStreamReader(scriptUrl.openStream());
+ String fileName = null;
+ if ( scriptUrl.getProtocol().startsWith("vnd.sun.star.") )
+ {
+ fileName = scriptUrl.toString();
+ }
+ else
+ {
+ fileName = scriptUrl.getPath();
+ }
+ officeScripts.addScript( fileName, scriptUrl, scope, closeCallback );
+ //new Thread(new OpenFile(this, scope, fileName, reader )).start();
+ swingInvoke( new OpenFile(this, fileName, reader ));
+ }
+ catch ( IOException e )
+ {
+ MessageDialogWrapper.showMessageDialog(this,
+ "Can't open stream for script: " + e.toString(),
+ "Open", JOptionPane.ERROR_MESSAGE);
+ }
+ }
+ }
+ split1.setDividerLocation(1.0);
+ }
+
+ public void openFile(String fileName) {
+ Scriptable scope = getScope();
+ if (scope == null) {
+ MessageDialogWrapper.showMessageDialog(this,
+ "Can't compile scripts: no scope available",
+ "Open", JOptionPane.ERROR_MESSAGE);
+ } else {
+ if (fileName != null) {
+ new Thread(new OpenFile(this, fileName)).start();
+ }
+ }
+ split1.setDividerLocation(1.0);
+ }
+
+ public void openStream(InputStream in) {
+ Scriptable scope = getScope();
+ if (scope == null) {
+ MessageDialogWrapper.showMessageDialog(this,
+ "Can't compile scripts: no scope available",
+ "Open", JOptionPane.ERROR_MESSAGE);
+ } else {
+ if (in != null) {
+ new Thread(new OpenFile(this, null, new InputStreamReader(in))).start();
+ }
+ }
+ split1.setDividerLocation(1.0);
+ menubar.setSaveEnabled(false);
+ }
+
public static void main(String[] args) {
try {
mainThread = Thread.currentThread();
@@ -3635,5 +3932,162 @@
}
}
+ // patched Office specific interface
+
+ OfficeScriptInfo officeScripts = new OfficeScriptInfo();
+
+ void removeScript( String url )
+ {
+ // Remove the FileWindow from list of open sources
+ fileWindows.remove( url );
+
+ // Remove sourceInfo from sourceNames, ensures that
+ // breakpoints etc are deleted
+ synchronized (sourceNames) {
+ sourceNames.remove( url );
+ }
+ // Removes scriptItems for the script, ensures that a new open ( from openFile )
+ // will succeed, openFile should open file but fails due to fact that
+ synchronized ( scriptItems )
+ {
+ Iterator iter = scriptItems.entrySet().iterator();
+ while ( iter.hasNext() )
+ {
+ Map.Entry me = ( Map.Entry )iter.next();
+ ScriptItem item = (ScriptItem)me.getValue();
+ SourceInfo si = item.getSourceInfo();
+ if ( si.getUrl().equals( url ) )
+ {
+ //match
+ scriptItems.remove( me.getKey() );
+ break;
+ }
+ }
+ }
+ officeScripts.deleteScript( url );
+ }
+
+
+ ScriptItem getScriptItem(DebuggableScript fnOrScript) {
+ ScriptItem item = (ScriptItem)scriptItems.get(fnOrScript);
+ if (item == null) {
+ String url = getNormilizedUrl(fnOrScript);
+ SourceInfo si = (SourceInfo)sourceNames.get(url);
+ if (si == null) {
+ if (!fnOrScript.isGeneratedScript()) {
+ // Not eval or Function, try to load it from URL
+ String source = null;
+ try {
+ InputStream is = openSource(url);
+ try { source = readSource(is); }
+ finally { is.close(); }
+ } catch (IOException ex) {
+ System.err.println
+ ("Failed to load source from "+url+": "+ ex);
+ }
+ if (source != null) {
+ si = registerSource(url, source);
+ }
+ }
+ }
+ if (si != null) {
+ item = registerScript(si, fnOrScript);
+ }
+ }
+
+ return item;
+ }
+
+ public void showScriptWindow(URL url ){
+ String key = url.getPath();
+ if ( url.getProtocol().startsWith("vnd.sun.star") )
+ {
+ key = url.toString();
+ }
+ FileWindow w = (FileWindow)getFileWindow( key );
+ if ( w != null )
+ {
+ //w.maximize();
+ desk.getDesktopManager().deiconifyFrame(w);
+ desk.getDesktopManager().activateFrame(w);
+ w.show();
+ w.toFront();
+ }
+ }
+
+ public void highlighLineInScriptWindow(URL url, int lineNum ){
+ String key = url.getPath();
+ if ( url.getProtocol().startsWith("vnd.sun.star") )
+ {
+ key = url.getPath();
+ }
+ FileWindow w = (FileWindow)getFileWindow( key );
+ if (w != null)
+ {
+ if ( lineNum > -1 )
+ swingInvoke(new SetFilePosition(this, w, lineNum ) );
+ }
+ }
+ public Object runScriptWindow( URL scriptUrl ) throws Exception
+ {
+ String key = scriptUrl.getPath();
+ if ( scriptUrl.getProtocol().startsWith("vnd.sun.star") )
+ {
+ key = scriptUrl.toString();
+ }
+ FileWindow w = (FileWindow)getFileWindow( key );
+ Object result = null;
+ w.toFront();
+ if (w != null)
+ {
+ //Scriptable scope = w.db.getScope();
+ Scriptable scope = w.db.officeScripts.getScriptScope( key );
+ if (scope == null)
+ {
+ MessageDialogWrapper.showMessageDialog(w.db, "Can't load scripts: no scope available", "Run", JOptionPane.ERROR_MESSAGE);
+ result = null;
+ }
+ else
+ {
+ String url = w.getUrl();
+ Thread executorThread = null;
+ if (url != null)
+ {
+ LoadFile executor = new LoadFile(w.db,scope, url, new StringReader(w.textArea.getText()), true );
+ executor.run();
+ result = executor.result;
+ if ( executor.exception != null )
+ {
+ throw executor.exception;
+ }
+ }
+ }
+ }
+ return result;
+
+ }
+
+ public boolean isModified( URL url )
+ {
+ String key = url.getPath();
+ if ( url.getProtocol().startsWith("vnd.sun.star") )
+ {
+ key = url.toString();
+ }
+ FileWindow w = (FileWindow)getFileWindow( key );
+ return w.isModified();
+ }
+
+ public String getText( URL url )
+ {
+ String key = url.toString();
+ if ( url.getProtocol().startsWith("vnd.sun.star") )
+ {
+ key = url.toString();
+ }
+ FileWindow w = (FileWindow)getFileWindow( key );
+ return w.getText();
+ }
+
}
--- misc/rhino1_5R5/toolsrc/org/mozilla/javascript/tools/debugger/OfficeScriptInfo.java Fri Mar 28 17:25:34 2008
+++ misc/build/rhino1_5R5/toolsrc/org/mozilla/javascript/tools/debugger/OfficeScriptInfo.java Fri Mar 28 17:24:59 2008
@@ -1 +1,130 @@
-dummy
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+
+package org.mozilla.javascript.tools.debugger;
+import java.net.URL;
+import java.util.Hashtable;
+import org.mozilla.javascript.Scriptable;
+
+public class OfficeScriptInfo
+{
+ private Hashtable loadedSFScripts = new Hashtable();
+
+ public void addScript( URL url, Scriptable scope, Runnable closeCallback )
+ {
+ addScript( url.toString(), url, scope, closeCallback );
+ }
+
+ public void addScript( String key, URL url, Scriptable scope, Runnable closeCallback )
+ {
+ SFScriptInfo si = (SFScriptInfo)loadedSFScripts.get( key );
+ if ( si == null )
+ {
+ si = new SFScriptInfo();
+ si.url = url;
+ si.scope = scope;
+ si.closeCallback = closeCallback;
+ loadedSFScripts.put( key, si );
+ }
+ }
+
+ public void deleteScript( String key )
+ {
+ SFScriptInfo info = (SFScriptInfo)loadedSFScripts.remove( key );
+ if ( info != null )
+ {
+ if ( info.closeCallback != null )
+ {
+ System.out.println("** In removeSFScriptInfo have callback for " + key );
+ info.closeCallback.run(); // really need to do this in seperate thread????
+ }
+ }
+ }
+
+ public Scriptable getScriptScope( String key )
+ {
+ Scriptable result = null;
+ SFScriptInfo info = (SFScriptInfo)loadedSFScripts.get( key );
+ if ( info != null )
+ {
+ result = info.scope;
+ }
+ return result;
+ }
+
+ public URL getScriptUrl( String key )
+ {
+ URL result = null;
+ SFScriptInfo info = (SFScriptInfo)loadedSFScripts.get( key );
+ if ( info != null )
+ {
+ result = info.url;
+ }
+ return result;
+ }
+ public boolean hasScript( String key )
+ {
+ boolean result = true;
+ SFScriptInfo info = (SFScriptInfo)loadedSFScripts.get( key );
+ if ( info == null )
+ {
+ result = false;
+ }
+ return result;
+ }
+
+ public void setScriptRunning( String key, boolean running )
+ {
+ SFScriptInfo info = (SFScriptInfo)loadedSFScripts.get( key );
+ if ( info != null )
+ {
+ info.isExecuting = running;
+ }
+ }
+
+ public boolean isScriptRunning( String key )
+ {
+ boolean result = false;
+ SFScriptInfo info = (SFScriptInfo)loadedSFScripts.get( key );
+ if ( info != null )
+ {
+ result = info.isExecuting;
+ }
+ return result;
+ }
+
+
+
+ class SFScriptInfo
+ {
+ Scriptable scope;
+ boolean isExecuting;
+ URL url;
+ Runnable closeCallback;
+ }
+}
--- misc/rhino1_5R5/toolsrc/org/mozilla/javascript/tools/shell/JavaPolicySecurity.java Thu Mar 25 21:54:34 2004
+++ misc/build/rhino1_5R5/toolsrc/org/mozilla/javascript/tools/shell/JavaPolicySecurity.java Fri Mar 28 17:24:23 2008
@@ -36,6 +36,7 @@
package org.mozilla.javascript.tools.shell;
import java.security.*;
+import java.security.cert.Certificate;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Hashtable;
@@ -124,7 +125,7 @@
public JavaPolicySecurity() {
// To trigger error on jdk-1.1 with lazy load
- new CodeSource(null, null);
+ new CodeSource(null, (Certificate [])null);
}
protected void callProcessFileSecure(final Context cx,
@@ -167,7 +168,7 @@
}
private ProtectionDomain getUrlDomain(URL url) {
- CodeSource cs = new CodeSource(url, null);
+ CodeSource cs = new CodeSource(url, (Certificate [])null);
PermissionCollection pc = Policy.getPolicy().getPermissions(cs);
return new ProtectionDomain(cs, pc);
}