*** misc/rhino1_5R5/src/org/mozilla/javascript/DefiningClassLoader.java Tue Mar 22 13:20:47 2005
--- misc/build/rhino1_5R5/src/org/mozilla/javascript/DefiningClassLoader.java Tue Jul 4 14:59:43 2006
***************
*** 38,43 ****
--- 38,44 ----
package org.mozilla.javascript;
import java.lang.reflect.Method;
+ import java.lang.reflect.InvocationTargetException;
/**
* Load generated classes.
***************
*** 49,59 ****
implements GeneratedClassLoader
{
public DefiningClassLoader() {
! this.parentLoader = getClass().getClassLoader();
}
public DefiningClassLoader(ClassLoader parentLoader) {
this.parentLoader = parentLoader;
}
public Class defineClass(String name, byte[] data) {
--- 49,82 ----
implements GeneratedClassLoader
{
public DefiningClassLoader() {
! 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) {
***************
*** 69,78 ****
{
Class cl = findLoadedClass(name);
if (cl == null) {
! if (parentLoader != null) {
! cl = parentLoader.loadClass(name);
} else {
! cl = findSystemClass(name);
}
}
if (resolve) {
--- 92,111 ----
{
Class cl = findLoadedClass(name);
if (cl == null) {
! // 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 {
! try {
! cl = loadFromParent(name);
! } catch (ClassNotFoundException ex) {
! cl = contextLoader.loadClass(name);
! }
}
}
if (resolve) {
***************
*** 81,85 ****
--- 114,150 ----
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/org/mozilla/javascript/tools/debugger/OfficeScriptInfo.java Tue Jul 4 15:14:27 2006
--- misc/build/rhino1_5R5/toolsrc/org/mozilla/javascript/tools/debugger/OfficeScriptInfo.java Tue Jul 4 14:59:43 2006
***************
*** 1 ****
! dummy
--- 1,136 ----
! /*************************************************************************
! *
! * $RCSfile: rhino1_5R5.patch,v $
! *
! * $Revision: 1.2 $
! *
! * last change: $Author: obo $ $Date: 2008-01-04 15:22:56 $
! *
! * The Contents of this file are made available subject to
! * the terms of GNU Lesser General Public License Version 2.1.
! *
! *
! * GNU Lesser General Public License Version 2.1
! * =============================================
! * Copyright 2005 by Sun Microsystems, Inc.
! * 901 San Antonio Road, Palo Alto, CA 94303, USA
! *
! * This library is free software; you can redistribute it and/or
! * modify it under the terms of the GNU Lesser General Public
! * License version 2.1, as published by the Free Software Foundation.
! *
! * This library 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 for more details.
! *
! * You should have received a copy of the GNU Lesser General Public
! * License along with this library; if not, write to the Free Software
! * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
! * MA 02111-1307 USA
! *
! ************************************************************************/
!
!
! 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 Tue Mar 22 13:20:49 2005
--- misc/build/rhino1_5R5/toolsrc/org/mozilla/javascript/tools/shell/JavaPolicySecurity.java Tue Jul 4 14:59:43 2006
***************
*** 36,41 ****
--- 36,42 ----
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,130 ****
public JavaPolicySecurity() {
// To trigger error on jdk-1.1 with lazy load
! new CodeSource(null, null);
}
protected void callProcessFileSecure(final Context cx,
--- 125,131 ----
public JavaPolicySecurity() {
// To trigger error on jdk-1.1 with lazy load
! new CodeSource(null, (Certificate [])null);
}
protected void callProcessFileSecure(final Context cx,
***************
*** 167,173 ****
}
private ProtectionDomain getUrlDomain(URL url) {
! CodeSource cs = new CodeSource(url, null);
PermissionCollection pc = Policy.getPolicy().getPermissions(cs);
return new ProtectionDomain(cs, pc);
}
--- 168,174 ----
}
private ProtectionDomain getUrlDomain(URL url) {
! CodeSource cs = new CodeSource(url, (Certificate [])null);
PermissionCollection pc = Policy.getPolicy().getPermissions(cs);
return new ProtectionDomain(cs, pc);
}
*** misc/rhino1_5R5/toolsrc/build.xml 2007-11-30 13:22:35.000000000 +0000
--- misc/build/rhino1_5R5/toolsrc/build.xml 2007-11-30 13:24:25.000000000 +0000
***************
*** 20,65 ****
!
!
-
- import java.awt.Component;
-
- package org.mozilla.javascript.tools.debugger;
- import java.awt.Component;
-
-
-
- import javax.swing.tree.*;
-
- package org.mozilla.javascript.tools.debugger;
- import javax.swing.tree.*;
-
-
-
- import javax.swing.*;
-
- package org.mozilla.javascript.tools.debugger;
- import javax.swing.*;
-
-
-
- import javax.swing.tree.TreeModel;
-
- package org.mozilla.javascript.tools.debugger;
- import javax.swing.tree.TreeModel;
-
-
-
- import javax.swing.JTree;
-
- package org.mozilla.javascript.tools.debugger;
- import javax.swing.JTree;
-
-
--- 20,29 ----
!
*** misc/rhino1_5R5/toolsrc/org/mozilla/javascript/tools/debugger/Main.java Tue Mar 22 13:20:49 2005
--- misc/build/rhino1_5R5/toolsrc/org/mozilla/javascript/tools/debugger/Main.java Tue Jul 4 14:59:43 2006
***************
*** 470,484 ****
--- 470,490 ----
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,885 ****
}
};
! class FileWindow extends JInternalFrame implements ActionListener {
Main db;
SourceInfo sourceInfo;
--- 885,891 ----
}
};
! class FileWindow extends JInternalFrame implements ActionListener, DocumentListener {
Main db;
SourceInfo sourceInfo;
***************
*** 888,902 ****
JScrollPane p;
int currentPos;
JLabel statusBar;
public void actionPerformed(ActionEvent e) {
String cmd = e.getActionCommand();
if (cmd.equals("Cut")) {
! // textArea.cut();
} else if (cmd.equals("Copy")) {
textArea.copy();
} else if (cmd.equals("Paste")) {
! // textArea.paste();
}
}
--- 894,909 ----
JScrollPane p;
int currentPos;
JLabel statusBar;
+ boolean isModified = false;
public void actionPerformed(ActionEvent e) {
String cmd = e.getActionCommand();
if (cmd.equals("Cut")) {
! textArea.cut();
} else if (cmd.equals("Copy")) {
textArea.copy();
} else if (cmd.equals("Paste")) {
! textArea.paste();
}
}
***************
*** 910,926 ****
}
void load() {
! Scriptable 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();
}
}
}
public int getPosition(int line) {
int result = -1;
try {
--- 917,989 ----
}
void load() {
! //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, 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,959 ****
fileHeader.repaint();
}
}
!
FileWindow(Main db, SourceInfo sourceInfo) {
super(SourceInfo.getShortName(sourceInfo.getUrl()),
true, true, true, true);
--- 1016,1022 ----
fileHeader.repaint();
}
}
! public Main getDB() { return db; }
FileWindow(Main db, SourceInfo sourceInfo) {
super(SourceInfo.getShortName(sourceInfo.getUrl()),
true, true, true, true);
***************
*** 972,977 ****
--- 1035,1048 ----
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,996 ****
--- 1061,1070 ----
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,1006 ****
--- 1075,1105 ----
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,1624 ****
if (line != -1) {
db.currentWindow = w;
}
! db.menubar.addFile(url);
w.setVisible(true);
if (activate) {
try {
--- 1717,1723 ----
if (line != -1) {
db.currentWindow = w;
}
! // db.menubar.addFile(url);
w.setVisible(true);
if (activate) {
try {
***************
*** 1752,1759 ****
Menubar(Main db) {
super();
this.db = db;
! String[] fileItems = {"Open...", "Run...", "", "Exit"};
! String[] fileCmds = {"Open", "Load", "", "Exit"};
char[] fileShortCuts = {'0', 'N', '\0', 'X'};
int[] fileAccelerators = {KeyEvent.VK_O,
KeyEvent.VK_N,
--- 1851,1860 ----
Menubar(Main db) {
super();
this.db = db;
! // 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,1800 ****
--- 1896,1904 ----
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,1857 ****
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);
add(windowMenu);
}
--- 1953,1961 ----
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);
add(windowMenu);
}
***************
*** 1925,1935 ****
--- 2029,2044 ----
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,1947 ****
--- 2051,2063 ----
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,1959 ****
--- 2070,2079 ----
b = true;
}
db.toolBar.setEnabled(true);
+
+ // set flag to disable source editing
+ db.setSourceEditingEnabled(false);
+
// raise the debugger window
db.toFront();
}
***************
*** 1967,1972 ****
--- 2087,2099 ----
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,1985 ****
--- 2107,2116 ----
db.toolBar.getComponent(ci).setEnabled(b);
b = false;
}
+
+ // set flag to enable source editing
+ db.setSourceEditingEnabled(true);
+
//db.console.consoleTextArea.requestFocus();
}
};
***************
*** 1988,2004 ****
{
String fileName;
Main db;
OpenFile(Main db, String fileName)
{
this.fileName = fileName;
this.db = db;
}
public void run() {
Context cx = Context.enter();
ContextData contextData = ContextData.get(cx);
contextData.breakNextLine = true;
try {
! cx.compileReader(new FileReader(fileName), fileName, 1, null);
} catch (Exception exc) {
String msg = exc.getMessage();
if (exc instanceof EcmaError) {
--- 2119,2142 ----
{
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(
! reader == null ? new FileReader(fileName) : reader,
! fileName, 1, null);
} catch (Exception exc) {
String msg = exc.getMessage();
if (exc instanceof EcmaError) {
***************
*** 2019,2047 ****
Scriptable scope;
String fileName;
Main db;
LoadFile(Main db, Scriptable scope, String fileName) {
this.scope = scope;
this.fileName = fileName;
this.db = db;
}
public void run() {
Context cx = Context.enter();
ContextData contextData = ContextData.get(cx);
contextData.breakNextLine = true;
try {
! cx.evaluateReader(scope, new FileReader(fileName),
fileName, 1, null);
} catch (Exception exc) {
String msg = exc.getMessage();
if (exc instanceof EcmaError) {
EcmaError err = (EcmaError)exc;
msg = err.getSourceName() + ", line " + err.getLineNumber() + ": " + msg;
! }
MessageDialogWrapper.showMessageDialog(db,
msg,
"Run",
JOptionPane.ERROR_MESSAGE);
} finally {
cx.exit();
}
}
--- 2157,2235 ----
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 {
! 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,2428 ****
super.setVisible(b);
if (b) {
// this needs to be done after the window is visible
! console.consoleTextArea.requestFocus();
context.split.setDividerLocation(0.5);
try {
! console.setMaximum(true);
! console.setSelected(true);
! console.show();
! console.consoleTextArea.requestFocus();
} catch (Exception exc) {
}
}
--- 2604,2616 ----
super.setVisible(b);
if (b) {
// this needs to be done after the window is visible
! // console.consoleTextArea.requestFocus();
context.split.setDividerLocation(0.5);
try {
! // console.setMaximum(true);
! // console.setSelected(true);
! // console.show();
! // console.consoleTextArea.requestFocus();
} catch (Exception exc) {
}
}
***************
*** 2449,2483 ****
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,
--- 2637,2642 ----
***************
*** 2490,2496 ****
String getNormilizedUrl(DebuggableScript fnOrScript) {
String url = fnOrScript.getSourceName();
! if (url == null) { url = ""; }
else {
// Not to produce window for eval from different lines,
// strip line numbers, i.e. replace all #[0-9]+\(eval\) by (eval)
--- 2649,2655 ----
String getNormilizedUrl(DebuggableScript fnOrScript) {
String url = fnOrScript.getSourceName();
! 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,2607 ****
if (si == null) {
si = new SourceInfo(sourceUrl, source);
sourceNames.put(sourceUrl, si);
! } else {
si.setSource(source);
}
}
--- 2760,2766 ----
if (si == null) {
si = new SourceInfo(sourceUrl, source);
sourceNames.put(sourceUrl, si);
! } else if (!source.equals(si.getSource())) {
si.setSource(source);
}
}
***************
*** 2762,2768 ****
desk = new JDesktopPane();
desk.setPreferredSize(new Dimension(600, 300));
desk.setMinimumSize(new Dimension(150, 50));
! desk.add(console = new JSInternalConsole("JavaScript Console"));
context = new ContextWindow(this);
context.setPreferredSize(new Dimension(600, 120));
context.setMinimumSize(new Dimension(50, 50));
--- 2921,2927 ----
desk = new JDesktopPane();
desk.setPreferredSize(new Dimension(600, 300));
desk.setMinimumSize(new Dimension(150, 50));
! // desk.add(console = new JSInternalConsole("JavaScript Console"));
context = new ContextWindow(this);
context.setPreferredSize(new Dimension(600, 120));
context.setMinimumSize(new Dimension(50, 50));
***************
*** 2871,2877 ****
FrameHelper frame = contextData.getFrame(frameIndex);
String sourceName = frame.getUrl();
if (sourceName == null || sourceName.equals("")) {
! console.show();
helper.reset();
return;
}
--- 3030,3036 ----
FrameHelper frame = contextData.getFrame(frameIndex);
String sourceName = frame.getUrl();
if (sourceName == null || sourceName.equals("")) {
! // console.show();
helper.reset();
return;
}
***************
*** 2895,2900 ****
--- 3054,3072 ----
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,3041 ****
swingInvoke(CreateFileWindow.action(this, si, line));
}
} else {
! 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));
--- 3200,3213 ----
swingInvoke(CreateFileWindow.action(this, si, line));
}
} else {
! /* 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,3222 ****
--- 3389,3402 ----
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,3514 ****
--- 3689,3748 ----
}
}
+ 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,3609 ****
--- 3838,3906 ----
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,3639 ****
--- 3932,4093 ----
}
}
+ // 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();
+ }
+
}