INTEGRATION: CWS scriptingf5 (1.3.8); FILE MERGED
2004/02/25 18:20:32 npower 1.3.8.3: #i25272# Added a container implementation ( new com/sun/star/script/framework/container defined ) to better seperate Browse functionality from io and script registry. 2004/02/17 15:06:06 toconnor 1.3.8.2: #i25262# - Execute modified source in editor window if one exists 2004/02/12 08:38:59 npower 1.3.8.1: #i23681# , #ii23682# Initial modification for support of create/delete of scripts support for script organiser
This commit is contained in:
@@ -2,9 +2,9 @@
|
|||||||
*
|
*
|
||||||
* $RCSfile: ScriptEditorForBeanShell.java,v $
|
* $RCSfile: ScriptEditorForBeanShell.java,v $
|
||||||
*
|
*
|
||||||
* $Revision: 1.3 $
|
* $Revision: 1.4 $
|
||||||
*
|
*
|
||||||
* last change: $Author: rt $ $Date: 2004-01-05 13:14:15 $
|
* last change: $Author: svesik $ $Date: 2004-04-19 23:10:48 $
|
||||||
*
|
*
|
||||||
* The Contents of this file are made available subject to the terms of
|
* The Contents of this file are made available subject to the terms of
|
||||||
* either of the following licenses
|
* either of the following licenses
|
||||||
@@ -70,6 +70,8 @@ import javax.swing.JOptionPane;
|
|||||||
import java.awt.FlowLayout;
|
import java.awt.FlowLayout;
|
||||||
import java.awt.event.ActionListener;
|
import java.awt.event.ActionListener;
|
||||||
import java.awt.event.ActionEvent;
|
import java.awt.event.ActionEvent;
|
||||||
|
import java.awt.event.WindowAdapter;
|
||||||
|
import java.awt.event.WindowEvent;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
@@ -78,16 +80,18 @@ import java.io.FileOutputStream;
|
|||||||
import java.io.OutputStream;
|
import java.io.OutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.HashMap;
|
||||||
|
|
||||||
import bsh.Interpreter;
|
import bsh.Interpreter;
|
||||||
|
|
||||||
import drafts.com.sun.star.script.provider.XScriptContext;
|
import drafts.com.sun.star.script.provider.XScriptContext;
|
||||||
import com.sun.star.script.framework.provider.PathUtils;
|
import com.sun.star.script.framework.provider.ScriptEditor;
|
||||||
import com.sun.star.script.framework.browse.ScriptMetaData;
|
import com.sun.star.script.framework.container.ScriptMetaData;
|
||||||
|
|
||||||
|
|
||||||
public class ScriptEditorForBeanShell implements ActionListener {
|
|
||||||
|
|
||||||
|
public class ScriptEditorForBeanShell
|
||||||
|
implements ScriptEditor, ActionListener
|
||||||
|
{
|
||||||
private JFrame frame;
|
private JFrame frame;
|
||||||
private String filename;
|
private String filename;
|
||||||
|
|
||||||
@@ -96,8 +100,123 @@ public class ScriptEditorForBeanShell implements ActionListener {
|
|||||||
|
|
||||||
private XScriptContext context;
|
private XScriptContext context;
|
||||||
private URL scriptURL = null;
|
private URL scriptURL = null;
|
||||||
|
|
||||||
|
// global ScriptEditorForBeanShell returned for getEditor() calls
|
||||||
|
private static ScriptEditorForBeanShell theScriptEditorForBeanShell;
|
||||||
|
|
||||||
|
// global list of ScriptEditors, key is URL of file being edited
|
||||||
|
private static Map BEING_EDITED = new HashMap();
|
||||||
|
|
||||||
|
// template for new BeanShell scripts
|
||||||
|
private static String BSHTEMPLATE;
|
||||||
|
|
||||||
|
// try to load the template for BeanShell scripts
|
||||||
|
static {
|
||||||
|
try {
|
||||||
|
URL url =
|
||||||
|
ScriptEditorForBeanShell.class.getResource("template.bsh");
|
||||||
|
|
||||||
|
InputStream in = url.openStream();
|
||||||
|
StringBuffer buf = new StringBuffer();
|
||||||
|
byte[] b = new byte[1024];
|
||||||
|
int len = 0;
|
||||||
|
|
||||||
|
while ((len = in.read(b)) != -1) {
|
||||||
|
buf.append(new String(b, 0, len));
|
||||||
|
}
|
||||||
|
|
||||||
|
in.close();
|
||||||
|
|
||||||
|
BSHTEMPLATE = buf.toString();
|
||||||
|
}
|
||||||
|
catch (IOException ioe) {
|
||||||
|
BSHTEMPLATE = "// BeanShell script";
|
||||||
|
}
|
||||||
|
catch (Exception e) {
|
||||||
|
BSHTEMPLATE = "// BeanShell script";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the global ScriptEditorForBeanShell instance.
|
||||||
|
*/
|
||||||
|
public static ScriptEditorForBeanShell getEditor()
|
||||||
|
{
|
||||||
|
if (theScriptEditorForBeanShell == null)
|
||||||
|
{
|
||||||
|
synchronized(ScriptEditorForBeanShell.class)
|
||||||
|
{
|
||||||
|
if (theScriptEditorForBeanShell == null)
|
||||||
|
{
|
||||||
|
theScriptEditorForBeanShell =
|
||||||
|
new ScriptEditorForBeanShell();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return theScriptEditorForBeanShell;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the ScriptEditorForBeanShell instance for this URL
|
||||||
|
*
|
||||||
|
* @param url The URL of the script source file
|
||||||
|
*
|
||||||
|
* @return The ScriptEditorForBeanShell associated with
|
||||||
|
* the given URL if one exists, otherwise null.
|
||||||
|
*/
|
||||||
|
public static ScriptEditorForBeanShell getEditor(URL url)
|
||||||
|
{
|
||||||
|
return (ScriptEditorForBeanShell)BEING_EDITED.get(url);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns whether or not the script source being edited in this
|
||||||
|
* ScriptEditorForBeanShell has been modified
|
||||||
|
*/
|
||||||
|
public boolean isModified()
|
||||||
|
{
|
||||||
|
return view.isModified();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the text being displayed in this ScriptEditorForBeanShell
|
||||||
|
*
|
||||||
|
* @return The text displayed in this ScriptEditorForBeanShell
|
||||||
|
*/
|
||||||
|
public String getText()
|
||||||
|
{
|
||||||
|
return view.getText();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the template text for BeanShell scripts
|
||||||
|
*
|
||||||
|
* @return The template text for BeanShell scripts
|
||||||
|
*/
|
||||||
|
public String getTemplate() {
|
||||||
|
return BSHTEMPLATE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the default extension for BeanShell scripts
|
||||||
|
*
|
||||||
|
* @return The default extension for BeanShell scripts
|
||||||
|
*/
|
||||||
|
public String getExtension() {
|
||||||
|
return "bsh";
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Opens an editor window for the specified ScriptMetaData.
|
||||||
|
* If an editor window is already open for that data it will be
|
||||||
|
* moved to the front.
|
||||||
|
*
|
||||||
|
* @param metadata The metadata describing the script
|
||||||
|
* @param context The context in which to execute the script
|
||||||
|
*
|
||||||
|
*/
|
||||||
public void edit(XScriptContext context, ScriptMetaData entry) {
|
public void edit(XScriptContext context, ScriptMetaData entry) {
|
||||||
this.context = context;
|
|
||||||
if (entry != null ) {
|
if (entry != null ) {
|
||||||
try {
|
try {
|
||||||
String sUrl = entry.getParcelLocation();
|
String sUrl = entry.getParcelLocation();
|
||||||
@@ -106,15 +225,36 @@ public class ScriptEditorForBeanShell implements ActionListener {
|
|||||||
sUrl += "/";
|
sUrl += "/";
|
||||||
}
|
}
|
||||||
sUrl += entry.getLanguageName();
|
sUrl += entry.getLanguageName();
|
||||||
scriptURL = PathUtils.createScriptURL( sUrl );
|
URL url = entry.getSourceURL();
|
||||||
this.filename = scriptURL.getFile();
|
|
||||||
|
// check if there is already an editing session for this script
|
||||||
|
if (BEING_EDITED.containsKey(url))
|
||||||
|
{
|
||||||
|
ScriptEditorForBeanShell editor =
|
||||||
|
(ScriptEditorForBeanShell) BEING_EDITED.get(url);
|
||||||
|
|
||||||
|
editor.frame.toFront();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
new ScriptEditorForBeanShell(context, url);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
catch (IOException ioe) {
|
catch (IOException ioe) {
|
||||||
|
|
||||||
showErrorMessage( "Error loading file: " + ioe.getMessage() );
|
showErrorMessage( "Error loading file: " + ioe.getMessage() );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
this.model = new ScriptSourceModel(scriptURL);
|
}
|
||||||
|
|
||||||
|
private ScriptEditorForBeanShell() {
|
||||||
|
}
|
||||||
|
|
||||||
|
private ScriptEditorForBeanShell(XScriptContext context, URL url)
|
||||||
|
{
|
||||||
|
this.context = context;
|
||||||
|
this.scriptURL = url;
|
||||||
|
this.model = new ScriptSourceModel(url);
|
||||||
|
this.filename = url.getFile();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
Class c = Class.forName(
|
Class c = Class.forName(
|
||||||
@@ -142,12 +282,11 @@ public class ScriptEditorForBeanShell implements ActionListener {
|
|||||||
this.model.setView(this.view);
|
this.model.setView(this.view);
|
||||||
initUI();
|
initUI();
|
||||||
frame.show();
|
frame.show();
|
||||||
|
|
||||||
|
BEING_EDITED.put(url, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ScriptEditorForBeanShell() {
|
private void showErrorMessage(String message) {
|
||||||
}
|
|
||||||
|
|
||||||
public void showErrorMessage(String message) {
|
|
||||||
JOptionPane.showMessageDialog(frame, message,
|
JOptionPane.showMessageDialog(frame, message,
|
||||||
"Error", JOptionPane.ERROR_MESSAGE);
|
"Error", JOptionPane.ERROR_MESSAGE);
|
||||||
}
|
}
|
||||||
@@ -155,6 +294,15 @@ public class ScriptEditorForBeanShell implements ActionListener {
|
|||||||
private void initUI() {
|
private void initUI() {
|
||||||
this.frame = new JFrame("BeanShell Debug Window");
|
this.frame = new JFrame("BeanShell Debug Window");
|
||||||
|
|
||||||
|
frame.addWindowListener(
|
||||||
|
new WindowAdapter()
|
||||||
|
{
|
||||||
|
public void windowClosing(WindowEvent e) {
|
||||||
|
shutdown();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
String[] labels = {"Run", "Clear", "Save", "Close"};
|
String[] labels = {"Run", "Clear", "Save", "Close"};
|
||||||
JPanel p = new JPanel();
|
JPanel p = new JPanel();
|
||||||
p.setLayout(new FlowLayout());
|
p.setLayout(new FlowLayout());
|
||||||
@@ -176,40 +324,11 @@ public class ScriptEditorForBeanShell implements ActionListener {
|
|||||||
frame.setLocation(300, 200);
|
frame.setLocation(300, 200);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void promptForSaveName() {
|
|
||||||
JFileChooser chooser = new JFileChooser();
|
|
||||||
chooser.setFileFilter(new javax.swing.filechooser.FileFilter() {
|
|
||||||
public boolean accept(File f) {
|
|
||||||
if (f.isDirectory() || f.getName().endsWith(".bsh")) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getDescription() {
|
|
||||||
return ("BeanShell files: *.bsh");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
int ret = chooser.showSaveDialog(frame);
|
|
||||||
|
|
||||||
if (ret == JFileChooser.APPROVE_OPTION) {
|
|
||||||
filename = chooser.getSelectedFile().getAbsolutePath();
|
|
||||||
if (!filename.endsWith(".bsh")) {
|
|
||||||
filename += ".bsh";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
private void saveTextArea() {
|
private void saveTextArea() {
|
||||||
if (!view.isModified()) {
|
if (!view.isModified()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*if (filename == null) {
|
|
||||||
promptForSaveName();
|
|
||||||
}*/
|
|
||||||
OutputStream fos = null;
|
OutputStream fos = null;
|
||||||
try {
|
try {
|
||||||
String s = view.getText();
|
String s = view.getText();
|
||||||
@@ -226,7 +345,8 @@ public class ScriptEditorForBeanShell implements ActionListener {
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
showErrorMessage( "Error saving file: couldn't open stream for file" );
|
showErrorMessage(
|
||||||
|
"Error saving file: couldn't open stream for file" );
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -252,6 +372,13 @@ public class ScriptEditorForBeanShell implements ActionListener {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void shutdown()
|
||||||
|
{
|
||||||
|
if (BEING_EDITED.containsKey(scriptURL)) {
|
||||||
|
BEING_EDITED.remove(scriptURL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void actionPerformed(ActionEvent e) {
|
public void actionPerformed(ActionEvent e) {
|
||||||
if (e.getActionCommand().equals("Run")) {
|
if (e.getActionCommand().equals("Run")) {
|
||||||
try {
|
try {
|
||||||
@@ -263,6 +390,7 @@ public class ScriptEditorForBeanShell implements ActionListener {
|
|||||||
}
|
}
|
||||||
else if (e.getActionCommand().equals("Close")) {
|
else if (e.getActionCommand().equals("Close")) {
|
||||||
frame.dispose();
|
frame.dispose();
|
||||||
|
shutdown();
|
||||||
}
|
}
|
||||||
else if (e.getActionCommand().equals("Save")) {
|
else if (e.getActionCommand().equals("Save")) {
|
||||||
saveTextArea();
|
saveTextArea();
|
||||||
|
|||||||
Reference in New Issue
Block a user