scripting: Format_java_code.sh initial run

Conflicts:
	scripting/java/com/sun/star/script/framework/io/UCBStreamHandler.java

Change-Id: I09b94d8c96dfbaf498bd93a0088feb80a9e4afb6
This commit is contained in:
Robert Antoni Buj i Gelonch
2014-09-25 19:41:12 +02:00
committed by David Tardon
parent 36d24bced0
commit 6f42a71439
156 changed files with 6399 additions and 6950 deletions

View File

@@ -31,26 +31,20 @@ import com.sun.star.container.XNameContainer;
import com.sun.star.awt.*;
public class DialogFactory
{
public class DialogFactory {
private static DialogFactory factory;
private XComponentContext xComponentContext;
// singleton
private DialogFactory(XComponentContext xComponentContext)
{
private DialogFactory(XComponentContext xComponentContext) {
this.xComponentContext = xComponentContext;
factory = this;
}
}
public static void createDialogFactory(XComponentContext xComponentContext)
{
if (factory == null)
{
synchronized(DialogFactory.class)
{
if (factory == null)
{
public static void createDialogFactory(XComponentContext xComponentContext) {
if (factory == null) {
synchronized (DialogFactory.class) {
if (factory == null) {
factory = new DialogFactory(xComponentContext);
}
}
@@ -58,65 +52,58 @@ public class DialogFactory
}
public static DialogFactory getDialogFactory()
throws java.lang.Exception
{
if (factory == null)
{
throws java.lang.Exception {
if (factory == null) {
throw new java.lang.Exception("DialogFactory not initialized");
}
return factory;
}
public String showInputDialog(String title, String prompt)
{
public String showInputDialog(String title, String prompt) {
final XDialog xDialog;
try
{
try {
xDialog = createInputDialog(title, prompt);
}
catch (com.sun.star.uno.Exception e)
{
} catch (com.sun.star.uno.Exception e) {
return null;
}
// add an action listener to the button controls
XControlContainer controls = UnoRuntime.queryInterface(XControlContainer.class, xDialog);
XControlContainer controls = UnoRuntime.queryInterface(XControlContainer.class,
xDialog);
XButton okButton = UnoRuntime.queryInterface(
XButton.class, controls.getControl("Ok"));
XButton.class, controls.getControl("Ok"));
okButton.setActionCommand("Ok");
XButton cancelButton = UnoRuntime.queryInterface(
XButton.class, controls.getControl("Cancel"));
XButton.class, controls.getControl("Cancel"));
cancelButton.setActionCommand("Cancel");
final XTextComponent textField = UnoRuntime.queryInterface(
XTextComponent.class, controls.getControl("NameField"));
XTextComponent.class, controls.getControl("NameField"));
final ResultHolder resultHolder = new ResultHolder();
com.sun.star.awt.XActionListener listener =
new com.sun.star.awt.XActionListener()
{
public void actionPerformed(com.sun.star.awt.ActionEvent e) {
if (e.ActionCommand.equals("Cancel"))
{
resultHolder.setResult(null);
xDialog.endExecute();
}
else
{
resultHolder.setResult(textField.getText());
xDialog.endExecute();
}
new com.sun.star.awt.XActionListener() {
public void actionPerformed(com.sun.star.awt.ActionEvent e) {
if (e.ActionCommand.equals("Cancel")) {
resultHolder.setResult(null);
xDialog.endExecute();
} else {
resultHolder.setResult(textField.getText());
xDialog.endExecute();
}
}
public void disposing(EventObject o) {
// does nothing
}
};
public void disposing(EventObject o) {
// does nothing
}
};
okButton.addActionListener(listener);
cancelButton.addActionListener(listener);
@@ -127,8 +114,7 @@ public class DialogFactory
}
private void setDimensions(Object o, int x, int y, int width, int height)
throws com.sun.star.uno.Exception
{
throws com.sun.star.uno.Exception {
XPropertySet props = UnoRuntime.queryInterface(XPropertySet.class, o);
props.setPropertyValue("PositionX", Integer.valueOf(x));
@@ -138,15 +124,12 @@ public class DialogFactory
}
private XDialog createInputDialog(String title, String prompt)
throws com.sun.star.uno.Exception
{
if (title == null || title.length() == 0)
{
throws com.sun.star.uno.Exception {
if (title == null || title.length() == 0) {
title = "Scripting Framework";
}
if (prompt == null || prompt.length() == 0)
{
if (prompt == null || prompt.length() == 0) {
prompt = "Enter name";
}
@@ -156,64 +139,65 @@ public class DialogFactory
// create the dialog model and set the properties
Object dialogModel = xMultiComponentFactory.createInstanceWithContext(
"com.sun.star.awt.UnoControlDialogModel", xComponentContext);
"com.sun.star.awt.UnoControlDialogModel", xComponentContext);
setDimensions(dialogModel, 100, 100, 157, 58);
XPropertySet props = UnoRuntime.queryInterface(
XPropertySet.class, dialogModel);
XPropertySet.class, dialogModel);
props.setPropertyValue("Title", title);
// get the service manager from the dialog model
XMultiServiceFactory xMultiServiceFactory =
UnoRuntime.queryInterface(
XMultiServiceFactory.class, dialogModel);
XMultiServiceFactory.class, dialogModel);
// create the label model and set the properties
Object label = xMultiServiceFactory.createInstance(
"com.sun.star.awt.UnoControlFixedTextModel");
"com.sun.star.awt.UnoControlFixedTextModel");
setDimensions(label, 15, 5, 134, 12);
XPropertySet labelProps = UnoRuntime.queryInterface(
XPropertySet.class, label);
XPropertySet.class, label);
labelProps.setPropertyValue("Name", "PromptLabel");
labelProps.setPropertyValue("Label", prompt);
// create the text field
Object edit = xMultiServiceFactory.createInstance(
"com.sun.star.awt.UnoControlEditModel");
"com.sun.star.awt.UnoControlEditModel");
setDimensions(edit, 15, 18, 134, 12);
XPropertySet editProps = UnoRuntime.queryInterface(
XPropertySet.class, edit);
XPropertySet.class, edit);
editProps.setPropertyValue("Name", "NameField");
// create the OK button
Object okButtonModel = xMultiServiceFactory.createInstance(
"com.sun.star.awt.UnoControlButtonModel");
"com.sun.star.awt.UnoControlButtonModel");
setDimensions(okButtonModel, 40, 39, 38, 15);
XPropertySet buttonProps = UnoRuntime.queryInterface(
XPropertySet.class, okButtonModel);
XPropertySet.class, okButtonModel);
buttonProps.setPropertyValue("Name", "Ok");
buttonProps.setPropertyValue("Label", "Ok");
// create the Cancel button
Object cancelButtonModel = xMultiServiceFactory.createInstance(
"com.sun.star.awt.UnoControlButtonModel");
"com.sun.star.awt.UnoControlButtonModel");
setDimensions(cancelButtonModel, 83, 39, 38, 15);
buttonProps = UnoRuntime.queryInterface(
XPropertySet.class, cancelButtonModel);
XPropertySet.class, cancelButtonModel);
buttonProps.setPropertyValue("Name", "Cancel");
buttonProps.setPropertyValue("Label", "Cancel");
// insert the control models into the dialog model
XNameContainer xNameCont = UnoRuntime.queryInterface(XNameContainer.class, dialogModel);
XNameContainer xNameCont = UnoRuntime.queryInterface(XNameContainer.class,
dialogModel);
xNameCont.insertByName("PromptLabel", label);
xNameCont.insertByName("NameField", edit);
@@ -222,20 +206,21 @@ public class DialogFactory
// create the dialog control and set the model
Object dialog = xMultiComponentFactory.createInstanceWithContext(
"com.sun.star.awt.UnoControlDialog", xComponentContext);
"com.sun.star.awt.UnoControlDialog", xComponentContext);
XControl xControl = UnoRuntime.queryInterface(
XControl.class, dialog);
XControl.class, dialog);
XControlModel xControlModel = UnoRuntime.queryInterface(XControlModel.class, dialogModel);
XControlModel xControlModel = UnoRuntime.queryInterface(XControlModel.class,
dialogModel);
xControl.setModel(xControlModel);
// create a peer
Object toolkit = xMultiComponentFactory.createInstanceWithContext(
"com.sun.star.awt.ExtToolkit", xComponentContext);
"com.sun.star.awt.ExtToolkit", xComponentContext);
XToolkit xToolkit = UnoRuntime.queryInterface(
XToolkit.class, toolkit);
XToolkit.class, toolkit);
XWindow xWindow = UnoRuntime.queryInterface(
XWindow.class, xControl);
XWindow.class, xControl);
xWindow.setVisible(false);
xControl.createPeer(xToolkit, null);
@@ -245,13 +230,11 @@ public class DialogFactory
private static class ResultHolder {
private Object result = null;
public Object getResult()
{
public Object getResult() {
return result;
}
public void setResult(Object result)
{
public void setResult(Object result) {
this.result = result;
}
}

View File

@@ -50,8 +50,7 @@ import java.util.*;
import javax.swing.JOptionPane;
public class ParcelBrowseNode extends PropertySet
implements XBrowseNode, XInvocation
{
implements XBrowseNode, XInvocation {
private ScriptProvider provider;
private Collection<XBrowseNode> browsenodes;
private ParcelContainer container;
@@ -61,46 +60,43 @@ public class ParcelBrowseNode extends PropertySet
public ParcelBrowseNode( ScriptProvider provider, ParcelContainer container, String parcelName ) {
public ParcelBrowseNode(ScriptProvider provider, ParcelContainer container,
String parcelName) {
this.provider = provider;
this.container = container;
// TODO decide whether exception is propagated out or not
try
{
this.parcel = (Parcel)this.container.getByName( parcelName );
}
catch ( Exception e )
{
try {
this.parcel = (Parcel)this.container.getByName(parcelName);
} catch (Exception e) {
LogUtils.DEBUG("** Exception: " + e );
LogUtils.DEBUG("** Exception: " + e);
LogUtils.DEBUG(" ** Failed to get parcel named " +
parcelName + " from container" );
parcelName + " from container");
}
registerProperty("Deletable", new Type(boolean.class),
(short)0, "deletable");
(short)0, "deletable");
registerProperty("Editable", new Type(boolean.class),
(short)0, "editable");
(short)0, "editable");
registerProperty("Creatable", new Type(boolean.class),
(short)0, "creatable");
(short)0, "creatable");
registerProperty("Renamable", new Type(boolean.class),
(short)0, "renamable");
(short)0, "renamable");
String parcelDirUrl = parcel.getPathToParcel();
XComponentContext xCtx = provider.getScriptingContext().getComponentContext();
XMultiComponentFactory xFac = xCtx.getServiceManager();
try
{
XSimpleFileAccess xSFA = UnoRuntime.queryInterface( XSimpleFileAccess.class,
xFac.createInstanceWithContext(
"com.sun.star.ucb.SimpleFileAccess",
xCtx ) );
}
catch ( com.sun.star.uno.Exception e )
{
try {
XSimpleFileAccess xSFA = UnoRuntime.queryInterface(XSimpleFileAccess.class,
xFac.createInstanceWithContext(
"com.sun.star.ucb.SimpleFileAccess",
xCtx));
} catch (com.sun.star.uno.Exception e) {
// TODO propagate potential errors
LogUtils.DEBUG( "Caught exception creating ParcelBrowseNode " + e );
LogUtils.DEBUG( LogUtils.getTrace( e ) );
LogUtils.DEBUG("Caught exception creating ParcelBrowseNode " + e);
LogUtils.DEBUG(LogUtils.getTrace(e));
}
}
@@ -110,36 +106,30 @@ public class ParcelBrowseNode extends PropertySet
}
public XBrowseNode[] getChildNodes() {
try
{
try {
if ( hasChildNodes() )
{
if (hasChildNodes()) {
String[] names = parcel.getElementNames();
browsenodes = new ArrayList<XBrowseNode>( names.length );
browsenodes = new ArrayList<XBrowseNode>(names.length);
for (String name : names) {
browsenodes.add(new ScriptBrowseNode(provider, parcel, name));
}
}
else
{
LogUtils.DEBUG("ParcelBrowseNode.getChildeNodes no children " );
} else {
LogUtils.DEBUG("ParcelBrowseNode.getChildeNodes no children ");
return new XBrowseNode[0];
}
}
catch ( Exception e )
{
LogUtils.DEBUG("Failed to getChildeNodes, exception: " + e );
LogUtils.DEBUG( LogUtils.getTrace( e ) );
} catch (Exception e) {
LogUtils.DEBUG("Failed to getChildeNodes, exception: " + e);
LogUtils.DEBUG(LogUtils.getTrace(e));
return new XBrowseNode[0];
}
return browsenodes.toArray(new XBrowseNode[browsenodes.size()]);
}
public boolean hasChildNodes() {
if ( container != null && container.hasByName( getName() ) && parcel != null )
{
if (container != null && container.hasByName(getName()) && parcel != null) {
return parcel.hasElements();
}
@@ -151,8 +141,7 @@ public class ParcelBrowseNode extends PropertySet
}
@Override
public String toString()
{
public String toString() {
return getName();
}
@@ -163,11 +152,10 @@ public class ParcelBrowseNode extends PropertySet
public Object invoke(String aFunctionName, Object[] aParams,
short[][] aOutParamIndex, Object[][] aOutParam)
throws com.sun.star.lang.IllegalArgumentException,
com.sun.star.script.CannotConvertException,
com.sun.star.reflection.InvocationTargetException
{
LogUtils.DEBUG("ParcelBrowseNode invoke for " + aFunctionName );
throws com.sun.star.lang.IllegalArgumentException,
com.sun.star.script.CannotConvertException,
com.sun.star.reflection.InvocationTargetException {
LogUtils.DEBUG("ParcelBrowseNode invoke for " + aFunctionName);
// Initialise the out parameters - not used but prevents error in
// UNO bridge
aOutParamIndex[0] = new short[0];
@@ -175,137 +163,112 @@ public class ParcelBrowseNode extends PropertySet
Any result = new Any(new Type(Boolean.class), Boolean.TRUE);
if (aFunctionName.equals("Creatable"))
{
try
{
if (aFunctionName.equals("Creatable")) {
try {
String newName;
if (aParams == null || aParams.length < 1 ||
!AnyConverter.isString(aParams[0]))
{
!AnyConverter.isString(aParams[0])) {
String prompt = "Enter name for new Script";
String title = "Create Script";
// try to get a DialogFactory instance, if it fails
// just use a Swing JOptionPane to prompt for the name
try
{
try {
DialogFactory dialogFactory =
DialogFactory.getDialogFactory();
newName = dialogFactory.showInputDialog(title, prompt);
}
catch (Exception e)
{
} catch (Exception e) {
newName = JOptionPane.showInputDialog(null, prompt, title,
JOptionPane.QUESTION_MESSAGE);
JOptionPane.QUESTION_MESSAGE);
}
}
else {
} else {
newName = AnyConverter.toString(aParams[0]);
}
if ( newName == null || newName.length() == 0)
{
if (newName == null || newName.length() == 0) {
result = new Any(new Type(Boolean.class), Boolean.FALSE);
}
else
{
} else {
String source = provider.getScriptEditor().getTemplate();
String languageName = newName + "." + provider.getScriptEditor().getExtension();
String language = container.getLanguage();
ScriptEntry entry = new ScriptEntry( language, languageName, "", new HashMap<String,String>() );
ScriptEntry entry = new ScriptEntry(language, languageName, "",
new HashMap<String, String>());
Parcel parcel = (Parcel)container.getByName( getName() );
ScriptMetaData data = new ScriptMetaData( parcel, entry, source );
parcel.insertByName( languageName, data );
Parcel parcel = (Parcel)container.getByName(getName());
ScriptMetaData data = new ScriptMetaData(parcel, entry, source);
parcel.insertByName(languageName, data);
ScriptBrowseNode sbn = new ScriptBrowseNode( provider, parcel, languageName );
ScriptBrowseNode sbn = new ScriptBrowseNode(provider, parcel, languageName);
if(browsenodes==null)
{
LogUtils.DEBUG("browsenodes null!!");
browsenodes = new ArrayList<XBrowseNode>(4);
if (browsenodes == null) {
LogUtils.DEBUG("browsenodes null!!");
browsenodes = new ArrayList<XBrowseNode>(4);
}
browsenodes.add(sbn);
result = new Any(new Type(XBrowseNode.class), sbn);
}
}
catch (Exception e)
{
LogUtils.DEBUG("ParcelBrowseNode[create] failed with: " + e );
LogUtils.DEBUG( LogUtils.getTrace( e ) );
} catch (Exception e) {
LogUtils.DEBUG("ParcelBrowseNode[create] failed with: " + e);
LogUtils.DEBUG(LogUtils.getTrace(e));
result = new Any(new Type(Boolean.class), Boolean.FALSE);
}
}
else if (aFunctionName.equals("Deletable"))
{
try
{
if ( container.deleteParcel(getName()) )
{
} else if (aFunctionName.equals("Deletable")) {
try {
if (container.deleteParcel(getName())) {
result = new Any(new Type(Boolean.class), Boolean.TRUE);
}
else
{
} else {
result = new Any(new Type(Boolean.class), Boolean.FALSE);
}
}
catch (Exception e)
{
} catch (Exception e) {
result = new Any(new Type(Boolean.class), Boolean.FALSE);
}
}
else if (aFunctionName.equals("Renamable"))
{
} else if (aFunctionName.equals("Renamable")) {
String newName = null;
try
{
try {
if (aParams == null || aParams.length < 1 ||
!AnyConverter.isString(aParams[0]))
{
!AnyConverter.isString(aParams[0])) {
String prompt = "Enter new name for Library";
String title = "Rename Library";
// try to get a DialogFactory instance, if it fails
// just use a Swing JOptionPane to prompt for the name
try
{
try {
DialogFactory dialogFactory =
DialogFactory.getDialogFactory();
newName = dialogFactory.showInputDialog(title, prompt);
}
catch (Exception e)
{
} catch (Exception e) {
newName = JOptionPane.showInputDialog(null, prompt, title,
JOptionPane.QUESTION_MESSAGE);
JOptionPane.QUESTION_MESSAGE);
}
}
else {
} else {
newName = AnyConverter.toString(aParams[0]);
}
container.renameParcel( getName(), newName );
Parcel p = (Parcel)container.getByName( newName );
if(browsenodes == null )
{
container.renameParcel(getName(), newName);
Parcel p = (Parcel)container.getByName(newName);
if (browsenodes == null) {
getChildNodes();
}
ScriptBrowseNode[] childNodes = browsenodes.toArray(new ScriptBrowseNode[browsenodes.size()]);
for ( int index = 0; index < childNodes.length; index++ )
{
childNodes[ index ].updateURI( p );
ScriptBrowseNode[] childNodes = browsenodes.toArray(new
ScriptBrowseNode[browsenodes.size()]);
for (int index = 0; index < childNodes.length; index++) {
childNodes[ index ].updateURI(p);
}
result = new Any(new Type(XBrowseNode.class), this);
}
catch (Exception e)
{
} catch (Exception e) {
result = new Any(new Type(Boolean.class), Boolean.FALSE);
}
}
@@ -319,15 +282,13 @@ public class ParcelBrowseNode extends PropertySet
}
public void setValue(String aPropertyName, Object aValue)
throws com.sun.star.beans.UnknownPropertyException,
com.sun.star.script.CannotConvertException,
com.sun.star.reflection.InvocationTargetException
{
throws com.sun.star.beans.UnknownPropertyException,
com.sun.star.script.CannotConvertException,
com.sun.star.reflection.InvocationTargetException {
}
public Object getValue(String aPropertyName)
throws com.sun.star.beans.UnknownPropertyException
{
throws com.sun.star.beans.UnknownPropertyException {
return null;
}

View File

@@ -25,14 +25,17 @@ import com.sun.star.script.framework.log.*;
import com.sun.star.script.framework.container.*;
public class PkgProviderBrowseNode extends ProviderBrowseNode
{
public class PkgProviderBrowseNode extends ProviderBrowseNode {
public PkgProviderBrowseNode( ScriptProvider provider, ParcelContainer container, XComponentContext xCtx ) {
super( provider, container, xCtx );
LogUtils.DEBUG("*** PkgProviderBrowseNode ctor container name = " + container.getName());
LogUtils.DEBUG("*** PkgProviderBrowseNode ctor container path = " + container.getParcelContainerDir());
LogUtils.DEBUG("*** PkgProviderBrowseNode ctor, container has num parcels = " + container.getElementNames().length);
public PkgProviderBrowseNode(ScriptProvider provider, ParcelContainer container,
XComponentContext xCtx) {
super(provider, container, xCtx);
LogUtils.DEBUG("*** PkgProviderBrowseNode ctor container name = " +
container.getName());
LogUtils.DEBUG("*** PkgProviderBrowseNode ctor container path = " +
container.getParcelContainerDir());
LogUtils.DEBUG("*** PkgProviderBrowseNode ctor, container has num parcels = " +
container.getElementNames().length);
}
@Override

View File

@@ -43,8 +43,7 @@ import java.util.*;
import javax.swing.JOptionPane;
public class ProviderBrowseNode extends PropertySet
implements XBrowseNode, XInvocation
{
implements XBrowseNode, XInvocation {
private ScriptProvider provider;
private Collection<XBrowseNode> browsenodes;
private String name;
@@ -56,7 +55,8 @@ public class ProviderBrowseNode extends PropertySet
public ProviderBrowseNode( ScriptProvider provider, ParcelContainer container, XComponentContext xCtx ) {
public ProviderBrowseNode(ScriptProvider provider, ParcelContainer container,
XComponentContext xCtx) {
LogUtils.DEBUG("*** ProviderBrowseNode ctor");
this.container = container;
this.name = this.container.getLanguage();
@@ -64,25 +64,24 @@ public class ProviderBrowseNode extends PropertySet
this.m_xCtx = xCtx;
registerProperty("Deletable", new Type(boolean.class),
(short)0, "deletable");
(short)0, "deletable");
registerProperty("Creatable", new Type(boolean.class),
(short)0, "creatable");
(short)0, "creatable");
registerProperty("Editable", new Type(boolean.class),
(short)0, "editable");
(short)0, "editable");
XSimpleFileAccess xSFA = null;
XMultiComponentFactory xFac = m_xCtx.getServiceManager();
try
{
xSFA = UnoRuntime.queryInterface( XSimpleFileAccess.class,
xFac.createInstanceWithContext(
"com.sun.star.ucb.SimpleFileAccess",
xCtx ) );
try {
xSFA = UnoRuntime.queryInterface(XSimpleFileAccess.class,
xFac.createInstanceWithContext(
"com.sun.star.ucb.SimpleFileAccess",
xCtx));
}
// TODO propage errors
catch( com.sun.star.uno.Exception e )
{
LogUtils.DEBUG("Caught exception in creation of ProviderBrowseNode ");
LogUtils.DEBUG( LogUtils.getTrace(e));
catch (com.sun.star.uno.Exception e) {
LogUtils.DEBUG("Caught exception in creation of ProviderBrowseNode ");
LogUtils.DEBUG(LogUtils.getTrace(e));
}
}
@@ -93,51 +92,55 @@ public class ProviderBrowseNode extends PropertySet
public XBrowseNode[] getChildNodes() {
LogUtils.DEBUG("***** ProviderBrowseNode.getChildNodes()");
if ( hasChildNodes() )
{
if (hasChildNodes()) {
// needs initialisation?
LogUtils.DEBUG("** ProviderBrowseNode.getChildNodes(), container is " + container );
LogUtils.DEBUG("** ProviderBrowseNode.getChildNodes(), container is " +
container);
String[] parcels = container.getElementNames();
browsenodes = new ArrayList<XBrowseNode>( parcels.length );
browsenodes = new ArrayList<XBrowseNode>(parcels.length);
for (String parcel : parcels) {
try {
XBrowseNode node = new ParcelBrowseNode(provider, container, parcel);
browsenodes.add( node );
browsenodes.add(node);
} catch (Exception e) {
LogUtils.DEBUG("*** Failed to create parcel node for " + parcel);
LogUtils.DEBUG( e.toString() );
LogUtils.DEBUG(e.toString());
}
}
ParcelContainer[] packageContainers = container.getChildContainers();
LogUtils.DEBUG("**** For container named " + container.getName() + " with root path " + container.getParcelContainerDir() + " has " + packageContainers.length + " child containers " );
LogUtils.DEBUG("**** For container named " + container.getName() +
" with root path " + container.getParcelContainerDir() + " has " +
packageContainers.length + " child containers ");
for (ParcelContainer packageContainer : packageContainers) {
XBrowseNode node = new PkgProviderBrowseNode(provider, packageContainer, m_xCtx);
browsenodes.add( node );
XBrowseNode node = new PkgProviderBrowseNode(provider, packageContainer,
m_xCtx);
browsenodes.add(node);
}
}
else
{
} else {
LogUtils.DEBUG("*** No container available");
return new XBrowseNode[0];
}
return browsenodes.toArray( new XBrowseNode[browsenodes.size()] );
return browsenodes.toArray(new XBrowseNode[browsenodes.size()]);
}
public boolean hasChildNodes() {
boolean result = true;
if ( container == null ||
( !container.hasElements() &&
container.getChildContainers().length == 0 ) )
{
if (container == null ||
(!container.hasElements() &&
container.getChildContainers().length == 0)) {
result = false;
}
LogUtils.DEBUG("***** ProviderBrowseNode.hasChildNodes(): " +
"name=" + name +
", path=" + container.getParcelContainerDir() +
", result=" + result );
"name=" + name +
", path=" + container.getParcelContainerDir() +
", result=" + result);
return result;
}
@@ -147,8 +150,7 @@ public class ProviderBrowseNode extends PropertySet
}
@Override
public String toString()
{
public String toString() {
return getName();
}
@@ -159,10 +161,9 @@ public class ProviderBrowseNode extends PropertySet
public Object invoke(String aFunctionName, Object[] aParams,
short[][] aOutParamIndex, Object[][] aOutParam)
throws com.sun.star.lang.IllegalArgumentException,
com.sun.star.script.CannotConvertException,
com.sun.star.reflection.InvocationTargetException
{
throws com.sun.star.lang.IllegalArgumentException,
com.sun.star.script.CannotConvertException,
com.sun.star.reflection.InvocationTargetException {
// Initialise the out parameters - not used but prevents error in
// UNO bridge
aOutParamIndex[0] = new short[0];
@@ -170,57 +171,45 @@ public class ProviderBrowseNode extends PropertySet
Any result = new Any(new Type(Boolean.class), Boolean.TRUE);
if (aFunctionName.equals("Creatable"))
{
try
{
if (aFunctionName.equals("Creatable")) {
try {
String name;
if (aParams == null || aParams.length < 1 ||
!AnyConverter.isString(aParams[0]))
{
!AnyConverter.isString(aParams[0])) {
String prompt = "Enter name for new Parcel";
String title = "Create Parcel";
// try to get a DialogFactory instance, if it fails
// just use a Swing JOptionPane to prompt for the name
try
{
try {
DialogFactory dialogFactory =
DialogFactory.getDialogFactory();
name = dialogFactory.showInputDialog(title, prompt);
}
catch (Exception e)
{
} catch (Exception e) {
name = JOptionPane.showInputDialog(null, prompt, title,
JOptionPane.QUESTION_MESSAGE);
JOptionPane.QUESTION_MESSAGE);
}
}
else {
} else {
name = AnyConverter.toString(aParams[0]);
}
if (name == null || name.length() == 0)
{
if (name == null || name.length() == 0) {
result = new Any(new Type(Boolean.class), Boolean.FALSE);
}
else
{
} else {
Object newParcel = container.createParcel( name );
LogUtils.DEBUG("Parcel created " + name + " " + newParcel );
if ( newParcel == null )
{
Object newParcel = container.createParcel(name);
LogUtils.DEBUG("Parcel created " + name + " " + newParcel);
if (newParcel == null) {
result = new Any(new Type(Boolean.class), Boolean.FALSE);
}
else
{
ParcelBrowseNode parcel = new ParcelBrowseNode( provider, container, name );
} else {
ParcelBrowseNode parcel = new ParcelBrowseNode(provider, container, name);
LogUtils.DEBUG("created parcel node ");
if ( browsenodes == null )
{
browsenodes = new ArrayList<XBrowseNode>( 5 );
if (browsenodes == null) {
browsenodes = new ArrayList<XBrowseNode>(5);
}
browsenodes.add(parcel);
@@ -229,15 +218,12 @@ public class ProviderBrowseNode extends PropertySet
result = new Any(new Type(XBrowseNode.class), parcel);
}
}
}
catch (Exception e)
{
LogUtils.DEBUG("ProviderBrowseNode[create] failed with: " + e );
LogUtils.DEBUG( LogUtils.getTrace( e ) );
} catch (Exception e) {
LogUtils.DEBUG("ProviderBrowseNode[create] failed with: " + e);
LogUtils.DEBUG(LogUtils.getTrace(e));
result = new Any(new Type(Boolean.class), Boolean.FALSE);
}
}
else {
} else {
throw new com.sun.star.lang.IllegalArgumentException(
"Function " + aFunctionName + " not supported.");
}
@@ -246,15 +232,13 @@ public class ProviderBrowseNode extends PropertySet
}
public void setValue(String aPropertyName, Object aValue)
throws com.sun.star.beans.UnknownPropertyException,
com.sun.star.script.CannotConvertException,
com.sun.star.reflection.InvocationTargetException
{
throws com.sun.star.beans.UnknownPropertyException,
com.sun.star.script.CannotConvertException,
com.sun.star.reflection.InvocationTargetException {
}
public Object getValue(String aPropertyName)
throws com.sun.star.beans.UnknownPropertyException
{
throws com.sun.star.beans.UnknownPropertyException {
return null;
}

View File

@@ -46,8 +46,7 @@ import com.sun.star.script.framework.provider.ScriptProvider;
import com.sun.star.script.framework.container.*;
public class ScriptBrowseNode extends PropertySet
implements XBrowseNode, XInvocation
{
implements XBrowseNode, XInvocation {
private ScriptProvider provider;
private Parcel parent;
@@ -58,37 +57,33 @@ public class ScriptBrowseNode extends PropertySet
private boolean deletable = false;
private boolean renamable = false;
public ScriptBrowseNode( ScriptProvider provider, Parcel parent,
String name )
{
public ScriptBrowseNode(ScriptProvider provider, Parcel parent,
String name) {
this.provider = provider;
this.name = name;
this.parent = parent;
XComponentContext xCtx = provider.getScriptingContext().getComponentContext();
XMultiComponentFactory xFac = xCtx.getServiceManager();
try
{
ScriptMetaData data = (ScriptMetaData)parent.getByName( name );
XSimpleFileAccess xSFA = UnoRuntime.queryInterface( XSimpleFileAccess.class,
xFac.createInstanceWithContext(
"com.sun.star.ucb.SimpleFileAccess",
xCtx ) );
if (provider.hasScriptEditor())
{
try {
ScriptMetaData data = (ScriptMetaData)parent.getByName(name);
XSimpleFileAccess xSFA = UnoRuntime.queryInterface(XSimpleFileAccess.class,
xFac.createInstanceWithContext(
"com.sun.star.ucb.SimpleFileAccess",
xCtx));
if (provider.hasScriptEditor()) {
this.editable = true;
try
{
try {
if (!parent.isUnoPkg()
&& !xSFA.isReadOnly(parent.getPathToParcel()))
{
&& !xSFA.isReadOnly(parent.getPathToParcel())) {
this.deletable = true;
this.renamable = true;
}
}
// TODO propagate errors
catch (Exception e)
{
catch (Exception e) {
LogUtils.DEBUG("Caught exception in creation of ScriptBrowseNode");
LogUtils.DEBUG(LogUtils.getTrace(e));
}
@@ -97,21 +92,21 @@ public class ScriptBrowseNode extends PropertySet
}
// TODO fix exception types to be caught here, should we rethrow?
catch ( Exception e )
{
LogUtils.DEBUG("** caught exception getting script data for " + name + " ->" + e.toString() );
catch (Exception e) {
LogUtils.DEBUG("** caught exception getting script data for " + name + " ->" +
e.toString());
}
registerProperty("Deletable", new Type(boolean.class),
(short)0, "deletable");
(short)0, "deletable");
registerProperty("Editable", new Type(boolean.class),
(short)0, "editable");
(short)0, "editable");
registerProperty("Renamable", new Type(boolean.class),
(short)0, "renamable");
(short)0, "renamable");
registerProperty("URI", new Type(String.class),
(short)0, "uri");
(short)0, "uri");
registerProperty("Description", new Type(String.class),
(short)0, "description");
(short)0, "description");
}
@@ -136,18 +131,18 @@ public class ScriptBrowseNode extends PropertySet
return getName();
}
public void updateURI( Parcel p ) {
public void updateURI(Parcel p) {
parent = p;
ScriptMetaData data = null;
try
{
data = (ScriptMetaData)parent.getByName( name );
try {
data = (ScriptMetaData)parent.getByName(name);
}
// TODO fix exception types to be caught here, should we rethrow?
catch ( Exception e )
{
LogUtils.DEBUG("** caught exception getting script data for " + name + " ->" + e.toString() );
catch (Exception e) {
LogUtils.DEBUG("** caught exception getting script data for " + name + " ->" +
e.toString());
}
}
// implementation of XInvocation interface
@@ -157,10 +152,9 @@ public class ScriptBrowseNode extends PropertySet
public Object invoke(String aFunctionName, Object[] aParams,
short[][] aOutParamIndex, Object[][] aOutParam)
throws com.sun.star.lang.IllegalArgumentException,
com.sun.star.script.CannotConvertException,
com.sun.star.reflection.InvocationTargetException
{
throws com.sun.star.lang.IllegalArgumentException,
com.sun.star.script.CannotConvertException,
com.sun.star.reflection.InvocationTargetException {
// Initialise the out parameters - not used but prevents error in
// UNO bridge
aOutParamIndex[0] = new short[0];
@@ -168,83 +162,67 @@ public class ScriptBrowseNode extends PropertySet
Any result = new Any(new Type(Boolean.class), Boolean.TRUE);
if (aFunctionName.equals("Editable"))
{
if (!editable)
{
if (aFunctionName.equals("Editable")) {
if (!editable) {
NoSupportException nse = new NoSupportException(
aFunctionName + " is not editable " );
aFunctionName + " is not editable ");
throw new InvocationTargetException(
"Scripting framework error editing script", null, nse );
"Scripting framework error editing script", null, nse);
}
XScriptContext ctxt = provider.getScriptingContext();
ScriptMetaData data = null;
try
{
data = (ScriptMetaData)parent.getByName( name );
}
catch ( NoSuchElementException nse )
{
try {
data = (ScriptMetaData)parent.getByName(name);
} catch (NoSuchElementException nse) {
throw new com.sun.star.lang.IllegalArgumentException(
name + " does not exist or can't be found " );
}
catch ( com.sun.star.lang.WrappedTargetException wte )
{
name + " does not exist or can't be found ");
} catch (com.sun.star.lang.WrappedTargetException wte) {
// rethrow
throw new InvocationTargetException(
"Scripting framework editing script ",
null, wte.TargetException );
null, wte.TargetException);
}
provider.getScriptEditor().edit(ctxt, data);
}
else if (aFunctionName.equals("Deletable"))
{
if (!deletable)
{
} else if (aFunctionName.equals("Deletable")) {
if (!deletable) {
NoSupportException nse = new NoSupportException(
aFunctionName + " is not supported for this node" );
aFunctionName + " is not supported for this node");
throw new InvocationTargetException(
"Scripting framework error deleting script", null, nse );
"Scripting framework error deleting script", null, nse);
}
try
{
parent.removeByName( name );
try {
parent.removeByName(name);
result = new Any(new Type(Boolean.class), Boolean.TRUE);
}
catch ( NoSuchElementException nse )
{
} catch (NoSuchElementException nse) {
throw new com.sun.star.lang.IllegalArgumentException(
name + " does not exist or can't be found " );
}
catch ( WrappedTargetException wte )
{
name + " does not exist or can't be found ");
} catch (WrappedTargetException wte) {
// rethrow
throw new InvocationTargetException(
"Scripting framework deleting script ",
null, wte.TargetException );
null, wte.TargetException);
}
}
else if (aFunctionName.equals("Renamable"))
{
} else if (aFunctionName.equals("Renamable")) {
result = new Any(new Type(XBrowseNode.class), new XBrowseNode[0]);
if (!renamable)
{
if (!renamable) {
NoSupportException nse = new NoSupportException(
aFunctionName + " is not supported for this node" );
aFunctionName + " is not supported for this node");
throw new InvocationTargetException(
"Scripting framework error renaming script", null, nse );
"Scripting framework error renaming script", null, nse);
}
try
{
try {
String newName = AnyConverter.toString(aParams[0]);
ScriptMetaData oldData = (ScriptMetaData)parent.getByName( name );
ScriptMetaData oldData = (ScriptMetaData)parent.getByName(name);
oldData.loadSource();
String oldSource = oldData.getSource();
@@ -254,40 +232,33 @@ public class ScriptBrowseNode extends PropertySet
String language = provider.getName();
ScriptEntry entry = new ScriptEntry(
language, languageName, "", new HashMap<String,String>() );
language, languageName, "", new HashMap<String, String>());
ScriptMetaData data = new ScriptMetaData(
parent, entry, oldSource );
parent, entry, oldSource);
parent.insertByName( languageName, data );
parent.insertByName(languageName, data);
LogUtils.DEBUG("Now remove old script");
parent.removeByName( name );
parent.removeByName(name);
name = languageName;
result = new Any(new Type(XBrowseNode.class), this);
}
catch ( NoSuchElementException nse )
{
} catch (NoSuchElementException nse) {
throw new com.sun.star.lang.IllegalArgumentException(
name + " does not exist or can't be found " );
}
catch ( ElementExistException eee )
{
name + " does not exist or can't be found ");
} catch (ElementExistException eee) {
// rethrow
throw new InvocationTargetException(
"Scripting framework error renaming script ",
null, eee );
}
catch ( WrappedTargetException wte )
{
null, eee);
} catch (WrappedTargetException wte) {
// rethrow
throw new InvocationTargetException(
"Scripting framework rename script ",
null, wte.TargetException );
null, wte.TargetException);
}
}
else {
} else {
throw new com.sun.star.lang.IllegalArgumentException(
"Function " + aFunctionName + " not supported.");
}
@@ -296,15 +267,13 @@ public class ScriptBrowseNode extends PropertySet
}
public void setValue(String aPropertyName, Object aValue)
throws com.sun.star.beans.UnknownPropertyException,
com.sun.star.script.CannotConvertException,
com.sun.star.reflection.InvocationTargetException
{
throws com.sun.star.beans.UnknownPropertyException,
com.sun.star.script.CannotConvertException,
com.sun.star.reflection.InvocationTargetException {
}
public Object getValue(String aPropertyName)
throws com.sun.star.beans.UnknownPropertyException
{
throws com.sun.star.beans.UnknownPropertyException {
return null;
}

View File

@@ -40,11 +40,11 @@ public class DeployedUnoPackagesDB {
public DeployedUnoPackagesDB() throws IOException {
ByteArrayInputStream bis = null;
try {
bis = new ByteArrayInputStream(EMPTY_DOCUMENT);
this.document = XMLParserFactory.getParser().parse(bis);
}
finally {
} finally {
if (bis != null)
bis.close();
}
@@ -58,8 +58,7 @@ public class DeployedUnoPackagesDB {
this(XMLParserFactory.getParser().parse(is));
}
public String[] getDeployedPackages( String language )
{
public String[] getDeployedPackages(String language) {
ArrayList<String> packageUrls = new ArrayList<String>(4);
Element main = document.getDocumentElement();
Element root = null;
@@ -67,38 +66,36 @@ public class DeployedUnoPackagesDB {
NodeList langNodes = null;
if ((langNodes = main.getElementsByTagName("language")) != null &&
(len = langNodes.getLength()) != 0)
{
for ( int i=0; i<len; i++ )
{
Element e = (Element)langNodes.item( i );
if ( e.getAttribute("value").equals(language) )
{
(len = langNodes.getLength()) != 0) {
for (int i = 0; i < len; i++) {
Element e = (Element)langNodes.item(i);
if (e.getAttribute("value").equals(language)) {
root = e;
break;
}
}
}
if ( root != null )
{
if (root != null) {
len = 0;
NodeList packages = null;
if ((packages = root.getElementsByTagName("package")) != null &&
(len = packages.getLength()) != 0)
{
(len = packages.getLength()) != 0) {
for ( int i=0; i<len; i++ )
{
for (int i = 0; i < len; i++) {
Element e = (Element)packages.item( i );
packageUrls.add( e.getAttribute("value") );
Element e = (Element)packages.item(i);
packageUrls.add(e.getAttribute("value"));
}
}
}
if ( !packageUrls.isEmpty() )
{
return packageUrls.toArray( new String[packageUrls.size()] );
if (!packageUrls.isEmpty()) {
return packageUrls.toArray(new String[packageUrls.size()]);
}
return new String[0];
}
@@ -111,52 +108,49 @@ public class DeployedUnoPackagesDB {
}
public boolean removePackage( String language, String url )
{
public boolean removePackage(String language, String url) {
Element main = document.getDocumentElement();
Element langNode = null;
int len = 0;
NodeList langNodes = null;
boolean result = false;
if ((langNodes = main.getElementsByTagName("language")) != null &&
(len = langNodes.getLength()) != 0)
{
for ( int i=0; i<len; i++ )
{
Element e = (Element)langNodes.item( i );
if ( e.getAttribute("value").equals(language) )
{
(len = langNodes.getLength()) != 0) {
for (int i = 0; i < len; i++) {
Element e = (Element)langNodes.item(i);
if (e.getAttribute("value").equals(language)) {
langNode = e;
break;
}
}
}
if ( langNode != null )
{
if (langNode != null) {
len = 0;
NodeList packages = null;
if ((packages = langNode.getElementsByTagName("package")) != null &&
(len = packages.getLength()) != 0)
{
for ( int i=0; i<len; i++ )
{
Element e = (Element)packages.item( i );
if ((packages = langNode.getElementsByTagName("package")) != null &&
(len = packages.getLength()) != 0) {
for (int i = 0; i < len; i++) {
Element e = (Element)packages.item(i);
String value = e.getAttribute("value");
if ( value.equals(url) )
{
langNode.removeChild( e );
if (value.equals(url)) {
langNode.removeChild(e);
result = true;
break;
}
}
}
}
return result;
}
public void addPackage(String language, String url ) {
public void addPackage(String language, String url) {
Element main = document.getDocumentElement();
Element langNode = null;
Element pkgNode = null;
@@ -165,25 +159,24 @@ public class DeployedUnoPackagesDB {
NodeList langNodes = null;
if ((langNodes = document.getElementsByTagName("language")) != null &&
(len = langNodes.getLength()) != 0)
{
for ( int i=0; i<len; i++ )
{
Element e = (Element)langNodes.item( i );
if ( e.getAttribute("value").equals(language) )
{
(len = langNodes.getLength()) != 0) {
for (int i = 0; i < len; i++) {
Element e = (Element)langNodes.item(i);
if (e.getAttribute("value").equals(language)) {
langNode = e;
break;
}
}
}
if ( langNode == null )
{
if (langNode == null) {
langNode = document.createElement("language");
langNode.setAttribute( "value", language );
langNode.setAttribute("value", language);
}
pkgNode = document.createElement("package");
pkgNode.setAttribute( "value", url );
pkgNode.setAttribute("value", url);
langNode.appendChild(pkgNode);
//add to the Top Element

View File

@@ -28,20 +28,19 @@ import com.sun.star.ucb.XSimpleFileAccess2;
import java.io.*;
public class Parcel implements XNameContainer
{
public class Parcel implements XNameContainer {
private ParcelDescriptor m_descriptor;
private String name;
protected ParcelContainer parent;
protected XSimpleFileAccess m_xSFA;
public Parcel( XSimpleFileAccess xSFA, ParcelContainer parent, ParcelDescriptor desc, String parcelName )
{
this( parent, desc, parcelName );
this.m_xSFA = xSFA;
public Parcel(XSimpleFileAccess xSFA, ParcelContainer parent,
ParcelDescriptor desc, String parcelName) {
this(parent, desc, parcelName);
this.m_xSFA = xSFA;
}
private Parcel( ParcelContainer parent, ParcelDescriptor desc, String parcelName )
{
private Parcel(ParcelContainer parent, ParcelDescriptor desc,
String parcelName) {
this.parent = parent;
this.m_descriptor = desc;
this.name = parcelName;
@@ -53,23 +52,24 @@ public class Parcel implements XNameContainer
*
* @return <tt>true</tt> if has parent <tt>false</tt> otherwise
*/
public boolean isUnoPkg() { return parent.isUnoPkg(); }
public boolean isUnoPkg() {
return parent.isUnoPkg();
}
public String getName()
{
public String getName() {
return name;
}
public java.lang.Object getByName( String aName ) throws com.sun.star.container.NoSuchElementException, com.sun.star.lang.WrappedTargetException
{
LogUtils.DEBUG("** Parcel.getByName for " + aName );
public java.lang.Object getByName(String aName) throws
com.sun.star.container.NoSuchElementException,
com.sun.star.lang.WrappedTargetException {
LogUtils.DEBUG("** Parcel.getByName for " + aName);
ScriptEntry thescript = null;
try
{
if ( m_descriptor != null && hasElements() )
{
try {
if (m_descriptor != null && hasElements()) {
ScriptEntry[] scripts = m_descriptor.getScriptEntries();
if ( scripts.length != 0 )
{
if (scripts.length != 0) {
for (ScriptEntry script : scripts) {
if (script.getLanguageName().equals(aName)) {
thescript = script;
@@ -80,51 +80,50 @@ public class Parcel implements XNameContainer
}
}
// catch unknown or un-checked exceptions
catch ( Exception e )
{
catch (Exception e) {
throw new com.sun.star.lang.WrappedTargetException(e);
}
if ( thescript == null )
{
LogUtils.DEBUG("No script for " + aName );
throw new com.sun.star.container.NoSuchElementException("No script named " + aName );
}
ScriptMetaData data = new ScriptMetaData( this, thescript, null );
LogUtils.DEBUG("returning date for " + aName );
if (thescript == null) {
LogUtils.DEBUG("No script for " + aName);
throw new com.sun.star.container.NoSuchElementException("No script named " +
aName);
}
ScriptMetaData data = new ScriptMetaData(this, thescript, null);
LogUtils.DEBUG("returning date for " + aName);
return data;
}
public String[] getElementNames()
{
public String[] getElementNames() {
String[] results = new String[0];
if ( m_descriptor != null )
{
if (m_descriptor != null) {
ScriptEntry[] scripts = m_descriptor.getScriptEntries();
results = new String[ scripts.length ];
for ( int index = 0; index < scripts.length; index++ )
{
for (int index = 0; index < scripts.length; index++) {
results[ index ] = scripts[ index ].getLanguageName();
}
}
return results;
}
public boolean hasByName( String aName )
{
public boolean hasByName(String aName) {
boolean result = true;
Object containee = null;
try
{
containee = getByName( aName );
if ( containee != null )
{
try {
containee = getByName(aName);
if (containee != null) {
result = true;
}
}
catch( Exception e )
{
} catch (Exception e) {
result = false;
}
return result;
}
@@ -136,68 +135,64 @@ public class Parcel implements XNameContainer
return new Type();
}
public boolean hasElements()
{
public boolean hasElements() {
return m_descriptor != null && m_descriptor.getScriptEntries().length > 0;
}
public void replaceByName( String aName, java.lang.Object aElement ) throws com.sun.star.lang.IllegalArgumentException, com.sun.star.container.NoSuchElementException, com.sun.star.lang.WrappedTargetException
{
// TODO check type of aElement
// if not ok, throw IllegalArgument
if ( m_descriptor != null )
{
try
{
ScriptEntry script = (ScriptEntry)getByName( aName );
if ( script != null )
{
//m_descriptor.removeScriptEntry( script );
// TODO needs to create source file ( if there is one )
//m_descriptor.write();
}
else
{
throw new com.sun.star.container.NoSuchElementException("No script named " + aName );
}
public void replaceByName(String aName,
java.lang.Object aElement) throws com.sun.star.lang.IllegalArgumentException,
com.sun.star.container.NoSuchElementException,
com.sun.star.lang.WrappedTargetException {
// TODO check type of aElement
// if not ok, throw IllegalArgument
if (m_descriptor != null) {
try {
ScriptEntry script = (ScriptEntry)getByName(aName);
if (script != null) {
//m_descriptor.removeScriptEntry( script );
// TODO needs to create source file ( if there is one )
//m_descriptor.write();
} else {
throw new com.sun.star.container.NoSuchElementException("No script named " +
aName);
}
}
// TO DO should catch specified exceptions
catch ( Exception e )
{
throw new com.sun.star.lang.WrappedTargetException();
}
}
// TO DO should catch specified exceptions
catch (Exception e) {
throw new com.sun.star.lang.WrappedTargetException();
}
}
}
}
}
// create
public void insertByName( String aName, java.lang.Object aElement ) throws com.sun.star.lang.IllegalArgumentException, ElementExistException, com.sun.star.lang.WrappedTargetException
{
public void insertByName(String aName,
java.lang.Object aElement) throws com.sun.star.lang.IllegalArgumentException,
ElementExistException, com.sun.star.lang.WrappedTargetException {
// TODO check the type of aElement and throw#
// if not appropriate
try
{
if ( hasByName( aName ) )
{
throw new ElementExistException( aName );
try {
if (hasByName(aName)) {
throw new ElementExistException(aName);
}
ScriptMetaData script = (ScriptMetaData)aElement;
if ( script.hasSource() )
{
if (script.hasSource()) {
LogUtils.DEBUG("Inserting source: " + script.getSource());
if ( !script.writeSourceFile() )
{
throw new com.sun.star.lang.WrappedTargetException( "Failed to create source file " + script.getLanguageName() );
if (!script.writeSourceFile()) {
throw new com.sun.star.lang.WrappedTargetException("Failed to create source file "
+ script.getLanguageName());
}
}
m_descriptor.addScriptEntry( script );
m_descriptor.addScriptEntry(script);
writeParcelDescriptor();
}
catch ( Exception e )
{
} catch (Exception e) {
LogUtils.DEBUG("Failed to insert entry " + aName + ": " + e.getMessage());
throw new com.sun.star.lang.WrappedTargetException(e);
}
@@ -205,82 +200,80 @@ public class Parcel implements XNameContainer
private void writeParcelDescriptor()
throws com.sun.star.ucb.CommandAbortedException,
com.sun.star.io.IOException,
com.sun.star.uno.Exception, java.io.IOException
{
throws com.sun.star.ucb.CommandAbortedException,
com.sun.star.io.IOException,
com.sun.star.uno.Exception, java.io.IOException {
String pathToDescriptor = PathUtils.make_url(
getPathToParcel(), ParcelDescriptor.PARCEL_DESCRIPTOR_NAME );
getPathToParcel(), ParcelDescriptor.PARCEL_DESCRIPTOR_NAME);
XSimpleFileAccess2 xSFA2 = UnoRuntime.queryInterface( XSimpleFileAccess2.class, m_xSFA );
XSimpleFileAccess2 xSFA2 = UnoRuntime.queryInterface(XSimpleFileAccess2.class,
m_xSFA);
if ( xSFA2 != null )
{
if (xSFA2 != null) {
ByteArrayOutputStream bos = null;
ByteArrayInputStream bis = null;
XInputStreamImpl xis = null;
try
{
bos = new ByteArrayOutputStream( 1024 );
m_descriptor.write( bos );
bis = new ByteArrayInputStream( bos.toByteArray() );
xis = new XInputStreamImpl( bis );
xSFA2.writeFile( pathToDescriptor, xis );
}
finally
{
try {
bos = new ByteArrayOutputStream(1024);
m_descriptor.write(bos);
bis = new ByteArrayInputStream(bos.toByteArray());
xis = new XInputStreamImpl(bis);
xSFA2.writeFile(pathToDescriptor, xis);
} finally {
if (bos != null) bos.close();
if (bis != null) bis.close();
if (xis != null) xis.closeInput();
}
}
}
// delete
public void removeByName( String Name ) throws com.sun.star.container.NoSuchElementException, com.sun.star.lang.WrappedTargetException
{
try
{
ScriptMetaData script = (ScriptMetaData)getByName( Name );
if ( script != null )
{
if ( !script.removeSourceFile() )
{
public void removeByName(String Name) throws
com.sun.star.container.NoSuchElementException,
com.sun.star.lang.WrappedTargetException {
try {
ScriptMetaData script = (ScriptMetaData)getByName(Name);
if (script != null) {
if (!script.removeSourceFile()) {
LogUtils.DEBUG("** Parcel.removeByName Failed to remove script " + Name);
throw new com.sun.star.lang.WrappedTargetException("Failed to remove script " + Name);
throw new com.sun.star.lang.WrappedTargetException("Failed to remove script " +
Name);
}
LogUtils.DEBUG("** Parcel.removeByName have removed script source file " + Name);
m_descriptor.removeScriptEntry( script );
LogUtils.DEBUG("** Parcel.removeByName have removed script source file " +
Name);
m_descriptor.removeScriptEntry(script);
writeParcelDescriptor();
}
else
{
throw new com.sun.star.container.NoSuchElementException( "No script named " + Name );
} else {
throw new com.sun.star.container.NoSuchElementException("No script named " +
Name);
}
}
catch ( Exception e )
{
LogUtils.DEBUG("** Parcel.removeByName Exception: " + e );
} catch (Exception e) {
LogUtils.DEBUG("** Parcel.removeByName Exception: " + e);
throw new com.sun.star.lang.WrappedTargetException(e);
}
}
// rename parcel
public void rename( String name )
{
public void rename(String name) {
this.name = name;
}
public ParcelContainer getParent() { return parent; }
public ParcelContainer getParent() {
return parent;
}
/**
* Returns the path of this <tt>Parcel</tt>
*
* @return <tt>String</tt> path to parcel
*/
public String getPathToParcel()
{
public String getPathToParcel() {
String path = parent.getParcelContainerDir() + "/" + name;
return path;
}

View File

@@ -43,15 +43,15 @@ import com.sun.star.uri.XVndSunStarScriptUrl;
* ScripingFramework specific Libraries.
*/
public class ParcelContainer implements XNameAccess
{
public class ParcelContainer implements XNameAccess {
protected String language;
protected String containerUrl;
private Collection<Parcel> parcels = new ArrayList<Parcel>(10);
static protected XSimpleFileAccess m_xSFA;
protected XComponentContext m_xCtx;
private ParcelContainer parent = null;
private Collection<ParcelContainer> childContainers = new ArrayList<ParcelContainer>(10);
private Collection<ParcelContainer> childContainers = new
ArrayList<ParcelContainer>(10);
private boolean isPkgContainer = false;
/**
@@ -60,7 +60,9 @@ public class ParcelContainer implements XNameAccess
*
* @return <tt>true</tt> if has parent <tt>false</tt> otherwise
*/
public boolean isUnoPkg() { return isPkgContainer; }
public boolean isUnoPkg() {
return isPkgContainer;
}
/**
@@ -68,8 +70,7 @@ public class ParcelContainer implements XNameAccess
*
* @return <tt>ParcelContainer</tt> if has parent null otherwise
*/
public ParcelContainer parent()
{
public ParcelContainer parent() {
return parent;
}
@@ -80,13 +81,12 @@ public class ParcelContainer implements XNameAccess
* @return a new array of ParcelContainers. A zero
* length array is returned if no child ParcelContainers.
*/
public ParcelContainer[] getChildContainers()
{
if ( childContainers.isEmpty() )
{
public ParcelContainer[] getChildContainers() {
if (childContainers.isEmpty()) {
return new ParcelContainer[0];
}
return childContainers.toArray( new ParcelContainer[childContainers.size()] );
return childContainers.toArray(new ParcelContainer[childContainers.size()]);
}
/**
@@ -96,9 +96,8 @@ public class ParcelContainer implements XNameAccess
*
* @return <tt>true</tt> if child successfully removed
*/
public boolean removeChildContainer( ParcelContainer child )
{
return childContainers.remove( child );
public boolean removeChildContainer(ParcelContainer child) {
return childContainers.remove(child);
}
/**
@@ -107,9 +106,8 @@ public class ParcelContainer implements XNameAccess
* @param child <tt>ParcelContainer</tt> to be added.
*
*/
public void addChildContainer( ParcelContainer child )
{
childContainers.add( child );
public void addChildContainer(ParcelContainer child) {
childContainers.add(child);
}
/**
@@ -121,19 +119,19 @@ public class ParcelContainer implements XNameAccess
* @return child <tt>ParcelContainer</tt> or {@code null} if none
* found.
*/
public ParcelContainer getChildContainer(String key)
{
public ParcelContainer getChildContainer(String key) {
ParcelContainer result = null;
for (ParcelContainer c : childContainers)
{
for (ParcelContainer c : childContainers) {
String location = ScriptMetaData.getLocationPlaceHolder(
c.containerUrl, c.getName());
if ( key.equals( location ) )
{
c.containerUrl, c.getName());
if (key.equals(location)) {
result = c;
break;
}
}
return result;
}
@@ -147,17 +145,16 @@ public class ParcelContainer implements XNameAccess
* @return child <tt>ParcelContainer</tt> or {@code null} if none
* found.
*/
public ParcelContainer getChildContainerForURL( String containerUrl )
{
public ParcelContainer getChildContainerForURL(String containerUrl) {
ParcelContainer result = null;
for (ParcelContainer c : childContainers)
{
if ( containerUrl.equals( c.containerUrl ) )
{
for (ParcelContainer c : childContainers) {
if (containerUrl.equals(c.containerUrl)) {
result = c;
break;
}
}
return result;
}
@@ -168,33 +165,28 @@ public class ParcelContainer implements XNameAccess
* @return name of <tt>ParcelContainer</tt>
* found.
*/
public String getName()
{
public String getName() {
String name = null;
// TODO handler package ParcelContainer?
if ( !containerUrl.startsWith( "vnd.sun.star.tdoc:" ) )
{
try
{
if (!containerUrl.startsWith("vnd.sun.star.tdoc:")) {
try {
// return name
String decodedUrl = java.net.URLDecoder.decode( containerUrl, "UTF-8" );
String decodedUrl = java.net.URLDecoder.decode(containerUrl, "UTF-8");
int indexOfSlash = decodedUrl.lastIndexOf('/');
if ( indexOfSlash != -1 )
{
name = decodedUrl.substring( indexOfSlash + 1 );
if (indexOfSlash != -1) {
name = decodedUrl.substring(indexOfSlash + 1);
}
}
catch (UnsupportedEncodingException e)
{
} catch (UnsupportedEncodingException e) {
com.sun.star.uno.RuntimeException e2 = new com.sun.star.uno.RuntimeException();
e2.initCause(e);
throw e2;
}
}
else
{
} else {
name = "document";
}
return name;
}
@@ -204,10 +196,12 @@ public class ParcelContainer implements XNameAccess
* @param containerUrl location of this container.
* @param language language for which entries are stored
*/
public ParcelContainer( XComponentContext xCtx, String containerUrl, String language ) throws com.sun.star.lang.IllegalArgumentException, com.sun.star.lang.WrappedTargetException
public ParcelContainer(XComponentContext xCtx, String containerUrl,
String language) throws com.sun.star.lang.IllegalArgumentException,
com.sun.star.lang.WrappedTargetException
{
this( null, xCtx, containerUrl, language, true );
this(null, xCtx, containerUrl, language, true);
}
/**
@@ -218,9 +212,11 @@ public class ParcelContainer implements XNameAccess
* @param loadParcels set to <tt>true</tt> if parcels are to be loaded
* on construction.
*/
public ParcelContainer( XComponentContext xCtx, String containerUrl, String language, boolean loadParcels ) throws com.sun.star.lang.IllegalArgumentException, com.sun.star.lang.WrappedTargetException
{
this( null, xCtx, containerUrl, language, loadParcels );
public ParcelContainer(XComponentContext xCtx, String containerUrl,
String language, boolean loadParcels) throws
com.sun.star.lang.IllegalArgumentException,
com.sun.star.lang.WrappedTargetException {
this(null, xCtx, containerUrl, language, loadParcels);
}
/**
@@ -232,10 +228,14 @@ public class ParcelContainer implements XNameAccess
* @param loadParcels set to <tt>true</tt> if parcels are to be loaded
* on construction.
*/
public ParcelContainer( ParcelContainer parent, XComponentContext xCtx, String containerUrl, String language, boolean loadParcels ) throws com.sun.star.lang.IllegalArgumentException, com.sun.star.lang.WrappedTargetException
public ParcelContainer(ParcelContainer parent, XComponentContext xCtx,
String containerUrl, String language,
boolean loadParcels) throws com.sun.star.lang.IllegalArgumentException,
com.sun.star.lang.WrappedTargetException
{
LogUtils.DEBUG("Creating ParcelContainer for " + containerUrl + " loadParcels = " + loadParcels + " language = " + language );
LogUtils.DEBUG("Creating ParcelContainer for " + containerUrl +
" loadParcels = " + loadParcels + " language = " + language);
this.m_xCtx = xCtx;
this.language = language;
this.parent = parent;
@@ -244,437 +244,413 @@ public class ParcelContainer implements XNameAccess
initSimpleFileAccess();
boolean parentIsPkgContainer = false;
if ( parent != null )
{
if (parent != null) {
parentIsPkgContainer = parent.isUnoPkg();
}
if ( containerUrl.endsWith("uno_packages") || parentIsPkgContainer )
{
if (containerUrl.endsWith("uno_packages") || parentIsPkgContainer) {
isPkgContainer = true;
}
if ( loadParcels )
{
if (loadParcels) {
loadParcels();
}
}
public String getContainerURL() { return this.containerUrl; }
public String getContainerURL() {
return this.containerUrl;
}
private synchronized void initSimpleFileAccess()
{
if ( m_xSFA != null )
{
private synchronized void initSimpleFileAccess() {
if (m_xSFA != null) {
return;
}
try
{
try {
m_xSFA = UnoRuntime.queryInterface(
XSimpleFileAccess.class,
m_xCtx.getServiceManager().createInstanceWithContext(
"com.sun.star.ucb.SimpleFileAccess", m_xCtx ) );
}
catch ( Exception e )
{
XSimpleFileAccess.class,
m_xCtx.getServiceManager().createInstanceWithContext(
"com.sun.star.ucb.SimpleFileAccess", m_xCtx));
} catch (Exception e) {
// TODO should throw
LogUtils.DEBUG("Error instantiating simplefile access ");
LogUtils.DEBUG( LogUtils.getTrace( e ) );
LogUtils.DEBUG(LogUtils.getTrace(e));
}
}
public String getParcelContainerDir()
{
public String getParcelContainerDir() {
// If this container does not represent an uno-package
// then then it is a document, user or share
// in each case the convention is to have a Scripts/[language]
// dir where scripts reside
if ( !isUnoPkg() )
{
return PathUtils.make_url( containerUrl , "Scripts/" + language.toLowerCase() );
if (!isUnoPkg()) {
return PathUtils.make_url(containerUrl , "Scripts/" + language.toLowerCase());
}
return containerUrl;
}
public Object getByName( String aName ) throws com.sun.star.container.NoSuchElementException, WrappedTargetException
{
public Object getByName(String aName) throws
com.sun.star.container.NoSuchElementException, WrappedTargetException {
Parcel parcel = null;
try
{
if ( hasElements() )
{
for (Parcel parcelToCheck : parcels)
{
if ( parcelToCheck.getName().equals( aName ) )
{
parcel = parcelToCheck;
break;
try {
if (hasElements()) {
for (Parcel parcelToCheck : parcels) {
if (parcelToCheck.getName().equals(aName)) {
parcel = parcelToCheck;
break;
}
}
}
}
catch ( Exception e)
{
} catch (Exception e) {
throw new WrappedTargetException(e);
}
if ( parcel == null )
{
throw new com.sun.star.container.NoSuchElementException( "Macro Library " + aName + " not found" );
if (parcel == null) {
throw new com.sun.star.container.NoSuchElementException("Macro Library " + aName
+ " not found");
}
return parcel;
}
public String[] getElementNames()
{
if ( hasElements() )
{
Parcel[] theParcels = parcels.toArray( new Parcel[parcels.size()] );
public String[] getElementNames() {
if (hasElements()) {
Parcel[] theParcels = parcels.toArray(new Parcel[parcels.size()]);
String[] names = new String[ theParcels.length ];
for ( int count = 0; count < names.length; count++ )
{
for (int count = 0; count < names.length; count++) {
names[count] = theParcels[ count ].getName();
}
return names;
}
return new String[0];
}
public boolean hasByName( String aName )
{
public boolean hasByName(String aName) {
boolean isFound = false;
try
{
if ( getByName( aName ) != null )
{
try {
if (getByName(aName) != null) {
isFound = true;
}
}
catch ( Exception e )
{
} catch (Exception e) {
//TODO - handle trace
}
return isFound;
}
public Type getElementType()
{
public Type getElementType() {
return new Type();
}
public boolean hasElements()
{
public boolean hasElements() {
return !(parcels == null || parcels.isEmpty());
}
private void loadParcels() throws com.sun.star.lang.IllegalArgumentException, com.sun.star.lang.WrappedTargetException
{
try
{
LogUtils.DEBUG("About to load parcels from " + containerUrl );
if ( m_xSFA.isFolder( getParcelContainerDir() ) )
{
LogUtils.DEBUG( getParcelContainerDir() + " is a folder " );
String[] children = m_xSFA.getFolderContents( getParcelContainerDir(), true );
private void loadParcels() throws com.sun.star.lang.IllegalArgumentException,
com.sun.star.lang.WrappedTargetException {
try {
LogUtils.DEBUG("About to load parcels from " + containerUrl);
if (m_xSFA.isFolder(getParcelContainerDir())) {
LogUtils.DEBUG(getParcelContainerDir() + " is a folder ");
String[] children = m_xSFA.getFolderContents(getParcelContainerDir(), true);
parcels = new ArrayList<Parcel>(children.length);
for (String child : children)
{
for (String child : children) {
LogUtils.DEBUG("Processing " + child);
try
{
try {
loadParcel(child);
}
catch (java.lang.Exception e)
{
} catch (java.lang.Exception e) {
// print an error message and move on to
// the next parcel
LogUtils.DEBUG("ParcelContainer.loadParcels caught " + e.getClass().getName() + " exception loading parcel " + child + ": " + e.getMessage());
LogUtils.DEBUG("ParcelContainer.loadParcels caught " + e.getClass().getName() +
" exception loading parcel " + child + ": " + e.getMessage());
}
}
}
else
{
LogUtils.DEBUG(" ParcelCOntainer.loadParcels " + getParcelContainerDir() + " is not a folder ");
} else {
LogUtils.DEBUG(" ParcelCOntainer.loadParcels " + getParcelContainerDir() +
" is not a folder ");
}
}
catch ( com.sun.star.ucb.CommandAbortedException e )
{
LogUtils.DEBUG("ParcelContainer.loadParcels caught exception processing folders for " + getParcelContainerDir() );
LogUtils.DEBUG("TRACE: " + LogUtils.getTrace(e) );
} catch (com.sun.star.ucb.CommandAbortedException e) {
LogUtils.DEBUG("ParcelContainer.loadParcels caught exception processing folders for "
+ getParcelContainerDir());
LogUtils.DEBUG("TRACE: " + LogUtils.getTrace(e));
throw new com.sun.star.lang.WrappedTargetException(e);
}
catch ( com.sun.star.uno.Exception e )
{
LogUtils.DEBUG("ParcelContainer.loadParcels caught exception processing folders for " + getParcelContainerDir() );
LogUtils.DEBUG("TRACE: " + LogUtils.getTrace(e) );
} catch (com.sun.star.uno.Exception e) {
LogUtils.DEBUG("ParcelContainer.loadParcels caught exception processing folders for "
+ getParcelContainerDir());
LogUtils.DEBUG("TRACE: " + LogUtils.getTrace(e));
throw new com.sun.star.lang.WrappedTargetException(e);
}
}
public XNameContainer createParcel(String name) throws ElementExistException, com.sun.star.lang.WrappedTargetException
{
public XNameContainer createParcel(String name) throws ElementExistException,
com.sun.star.lang.WrappedTargetException {
Parcel p = null;
if ( hasByName( name ) )
{
throw new ElementExistException( "Parcel " + name + " already exists" );
if (hasByName(name)) {
throw new ElementExistException("Parcel " + name + " already exists");
}
String pathToParcel = PathUtils.make_url( getParcelContainerDir() , name );
try
{
LogUtils.DEBUG("ParcelContainer.createParcel, creating folder " + pathToParcel );
m_xSFA.createFolder( pathToParcel );
String pathToParcel = PathUtils.make_url(getParcelContainerDir() , name);
LogUtils.DEBUG("ParcelContainer.createParcel, folder " + pathToParcel + " created ");
try {
LogUtils.DEBUG("ParcelContainer.createParcel, creating folder " + pathToParcel);
m_xSFA.createFolder(pathToParcel);
LogUtils.DEBUG("ParcelContainer.createParcel, folder " + pathToParcel +
" created ");
ParcelDescriptor pd = new ParcelDescriptor();
pd.setLanguage( language );
String parcelDesc = PathUtils.make_url( pathToParcel, ParcelDescriptor.PARCEL_DESCRIPTOR_NAME );
XSimpleFileAccess2 xSFA2 = UnoRuntime.queryInterface( XSimpleFileAccess2.class, m_xSFA );
if ( xSFA2 != null )
{
LogUtils.DEBUG("createParcel() Using XSIMPLEFILEACCESS2 " + parcelDesc );
ByteArrayOutputStream bos = new ByteArrayOutputStream( 1024 );
pd.write( bos );
bos.close();
ByteArrayInputStream bis = new ByteArrayInputStream( bos.toByteArray() );
XInputStreamImpl xis = new XInputStreamImpl( bis );
xSFA2.writeFile( parcelDesc, xis );
xis.closeInput();
p = loadParcel( pathToParcel );
}
}
catch ( Exception e )
{
pd.setLanguage(language);
String parcelDesc = PathUtils.make_url(pathToParcel,
ParcelDescriptor.PARCEL_DESCRIPTOR_NAME);
XSimpleFileAccess2 xSFA2 = UnoRuntime.queryInterface(XSimpleFileAccess2.class,
m_xSFA);
LogUtils.DEBUG("createParcel() Exception while attempting to create = " + name );
if (xSFA2 != null) {
LogUtils.DEBUG("createParcel() Using XSIMPLEFILEACCESS2 " + parcelDesc);
ByteArrayOutputStream bos = new ByteArrayOutputStream(1024);
pd.write(bos);
bos.close();
ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
XInputStreamImpl xis = new XInputStreamImpl(bis);
xSFA2.writeFile(parcelDesc, xis);
xis.closeInput();
p = loadParcel(pathToParcel);
}
} catch (Exception e) {
LogUtils.DEBUG("createParcel() Exception while attempting to create = " + name);
throw new com.sun.star.lang.WrappedTargetException(e);
}
return p;
}
public Parcel loadParcel( String parcelUrl ) throws com.sun.star.lang.WrappedTargetException, com.sun.star.lang.IllegalArgumentException
{
public Parcel loadParcel(String parcelUrl) throws
com.sun.star.lang.WrappedTargetException,
com.sun.star.lang.IllegalArgumentException {
String parcelDescUrl = PathUtils.make_url( parcelUrl, ParcelDescriptor.PARCEL_DESCRIPTOR_NAME );
String parcelDescUrl = PathUtils.make_url(parcelUrl,
ParcelDescriptor.PARCEL_DESCRIPTOR_NAME);
Parcel parcel = null;
XInputStream xis = null;
InputStream is = null;
try
{
if ( m_xSFA.exists( parcelDescUrl ) )
{
LogUtils.DEBUG("ParcelContainer.loadParcel opening " + parcelDescUrl );
xis = m_xSFA.openFileRead( parcelDescUrl );
is = new XInputStreamWrapper( xis );
try {
if (m_xSFA.exists(parcelDescUrl)) {
LogUtils.DEBUG("ParcelContainer.loadParcel opening " + parcelDescUrl);
xis = m_xSFA.openFileRead(parcelDescUrl);
is = new XInputStreamWrapper(xis);
ParcelDescriptor pd = new ParcelDescriptor(is) ;
try
{
try {
is.close();
is = null;
} catch (Exception e) {
LogUtils.DEBUG("ParcelContainer.loadParcel Exception when closing stream for "
+ parcelDescUrl + " :" + e);
}
catch ( Exception e )
{
LogUtils.DEBUG("ParcelContainer.loadParcel Exception when closing stream for " + parcelDescUrl + " :" + e );
}
LogUtils.DEBUG("ParcelContainer.loadParcel closed " + parcelDescUrl );
if ( !pd.getLanguage().equals( language ) )
{
LogUtils.DEBUG("ParcelContainer.loadParcel closed " + parcelDescUrl);
if (!pd.getLanguage().equals(language)) {
LogUtils.DEBUG("ParcelContainer.loadParcel Language of Parcel does not match this container ");
return null;
}
LogUtils.DEBUG("Processing " + parcelDescUrl + " closed " );
LogUtils.DEBUG("Processing " + parcelDescUrl + " closed ");
int indexOfSlash = parcelUrl.lastIndexOf('/');
String name = parcelUrl.substring( indexOfSlash + 1 );
String name = parcelUrl.substring(indexOfSlash + 1);
parcel = new Parcel( m_xSFA, this, pd, name );
parcel = new Parcel(m_xSFA, this, pd, name);
LogUtils.DEBUG(" ParcelContainer.loadParcel created parcel for " + parcelDescUrl + " for language " + language );
parcels.add( parcel );
LogUtils.DEBUG(" ParcelContainer.loadParcel created parcel for " + parcelDescUrl
+ " for language " + language);
parcels.add(parcel);
} else {
throw new java.io.IOException(parcelDescUrl + " does NOT exist!");
}
else
{
throw new java.io.IOException( parcelDescUrl + " does NOT exist!");
}
}
catch ( com.sun.star.ucb.CommandAbortedException e )
{
} catch (com.sun.star.ucb.CommandAbortedException e) {
LogUtils.DEBUG("loadParcel() Exception while accessing filesystem url = " + parcelDescUrl + e );
LogUtils.DEBUG("loadParcel() Exception while accessing filesystem url = " +
parcelDescUrl + e);
throw new com.sun.star.lang.WrappedTargetException(e);
}
catch ( java.io.IOException e )
{
LogUtils.DEBUG("ParcelContainer.loadParcel() caught IOException while accessing " + parcelDescUrl + ": " + e );
} catch (java.io.IOException e) {
LogUtils.DEBUG("ParcelContainer.loadParcel() caught IOException while accessing "
+ parcelDescUrl + ": " + e);
throw new com.sun.star.lang.WrappedTargetException(e);
}
catch ( com.sun.star.uno.Exception e )
{
} catch (com.sun.star.uno.Exception e) {
LogUtils.DEBUG("loadParcel() Exception while accessing filesystem url = " + parcelDescUrl + e );
LogUtils.DEBUG("loadParcel() Exception while accessing filesystem url = " +
parcelDescUrl + e);
throw new com.sun.star.lang.WrappedTargetException(e);
}
finally
{
if ( is != null )
{
try
{
finally {
if (is != null) {
try {
is.close(); // is will close xis
} catch (Exception ignore) {
}
catch ( Exception ignore )
{
}
}
else if ( xis != null )
{
try
{
} else if (xis != null) {
try {
xis.closeInput();
}
catch ( Exception ignore )
{
} catch (Exception ignore) {
}
}
}
return parcel;
}
public void renameParcel(String oldName, String newName) throws com.sun.star.container.NoSuchElementException, com.sun.star.lang.WrappedTargetException
{
LogUtils.DEBUG(" ** ParcelContainer Renaming parcel " + oldName + " to " + newName );
LogUtils.DEBUG(" ** ParcelContainer is " + this );
Parcel p = (Parcel)getByName( oldName );
if ( p == null )
{
throw new com.sun.star.container.NoSuchElementException( "No parcel named " + oldName );
public void renameParcel(String oldName,
String newName) throws com.sun.star.container.NoSuchElementException,
com.sun.star.lang.WrappedTargetException {
LogUtils.DEBUG(" ** ParcelContainer Renaming parcel " + oldName + " to " +
newName);
LogUtils.DEBUG(" ** ParcelContainer is " + this);
Parcel p = (Parcel)getByName(oldName);
if (p == null) {
throw new com.sun.star.container.NoSuchElementException("No parcel named " +
oldName);
}
String oldParcelDirUrl = PathUtils.make_url( getParcelContainerDir(),
oldName );
String newParcelDirUrl = PathUtils.make_url( getParcelContainerDir(),
newName );
try
{
if (!m_xSFA.isFolder( oldParcelDirUrl ) )
{
Exception e = new com.sun.star.io.IOException("Invalid Parcel directory: " + oldName );
String oldParcelDirUrl = PathUtils.make_url(getParcelContainerDir(),
oldName);
String newParcelDirUrl = PathUtils.make_url(getParcelContainerDir(),
newName);
try {
if (!m_xSFA.isFolder(oldParcelDirUrl)) {
Exception e = new com.sun.star.io.IOException("Invalid Parcel directory: " +
oldName);
throw new com.sun.star.lang.WrappedTargetException(e);
}
LogUtils.DEBUG(" ** ParcelContainer Renaming folder " + oldParcelDirUrl + " to " + newParcelDirUrl );
m_xSFA.move( oldParcelDirUrl, newParcelDirUrl );
}
catch ( com.sun.star.ucb.CommandAbortedException ce )
{
LogUtils.DEBUG(" ** ParcelContainer Renaming failed with " + ce );
LogUtils.DEBUG(" ** ParcelContainer Renaming folder " + oldParcelDirUrl + " to "
+ newParcelDirUrl);
m_xSFA.move(oldParcelDirUrl, newParcelDirUrl);
} catch (com.sun.star.ucb.CommandAbortedException ce) {
LogUtils.DEBUG(" ** ParcelContainer Renaming failed with " + ce);
throw new com.sun.star.lang.WrappedTargetException(ce);
}
catch ( com.sun.star.uno.Exception e )
{
LogUtils.DEBUG(" ** ParcelContainer Renaming failed with " + e );
} catch (com.sun.star.uno.Exception e) {
LogUtils.DEBUG(" ** ParcelContainer Renaming failed with " + e);
throw new com.sun.star.lang.WrappedTargetException(e);
}
p.rename( newName );
p.rename(newName);
}
// removes but doesn't physically delele parcel from container
public boolean removeParcel(String name) throws com.sun.star.container.NoSuchElementException, com.sun.star.lang.WrappedTargetException
{
Parcel p = (Parcel)getByName( name );
if ( p == null )
{
throw new com.sun.star.container.NoSuchElementException("No parcel named " + name );
public boolean removeParcel(String name) throws
com.sun.star.container.NoSuchElementException,
com.sun.star.lang.WrappedTargetException {
Parcel p = (Parcel)getByName(name);
if (p == null) {
throw new com.sun.star.container.NoSuchElementException("No parcel named " +
name);
}
return parcels.remove( p );
return parcels.remove(p);
}
public boolean deleteParcel(String name) throws com.sun.star.container.NoSuchElementException, com.sun.star.lang.WrappedTargetException
{
LogUtils.DEBUG( "deleteParcel for containerURL " + containerUrl + " name = " + name + " Langueg = " + language );
public boolean deleteParcel(String name) throws
com.sun.star.container.NoSuchElementException,
com.sun.star.lang.WrappedTargetException {
LogUtils.DEBUG("deleteParcel for containerURL " + containerUrl + " name = " +
name + " Langueg = " + language);
Parcel p = (Parcel)getByName( name );
if ( p == null )
{
throw new com.sun.star.container.NoSuchElementException("No parcel named " + name );
Parcel p = (Parcel)getByName(name);
if (p == null) {
throw new com.sun.star.container.NoSuchElementException("No parcel named " +
name);
}
try
{
String pathToParcel = PathUtils.make_url( getParcelContainerDir(), name );
m_xSFA.kill( pathToParcel );
}
catch( Exception e )
{
LogUtils.DEBUG("Error deleteing parcel " + name );
try {
String pathToParcel = PathUtils.make_url(getParcelContainerDir(), name);
m_xSFA.kill(pathToParcel);
} catch (Exception e) {
LogUtils.DEBUG("Error deleteing parcel " + name);
throw new com.sun.star.lang.WrappedTargetException(e);
}
return parcels.remove( p );
return parcels.remove(p);
}
public String getLanguage() { return language; }
public String getLanguage() {
return language;
}
public ScriptMetaData findScript( ParsedScriptUri parsedUri ) throws com.sun.star.container.NoSuchElementException, com.sun.star.lang.WrappedTargetException
{
Parcel p = (Parcel)getByName( parsedUri.parcel);
ScriptMetaData scriptData = (ScriptMetaData)p.getByName( parsedUri.function);
LogUtils.DEBUG("** found script data for " + parsedUri.function + " script is " + scriptData );
public ScriptMetaData findScript(ParsedScriptUri parsedUri) throws
com.sun.star.container.NoSuchElementException,
com.sun.star.lang.WrappedTargetException {
Parcel p = (Parcel)getByName(parsedUri.parcel);
ScriptMetaData scriptData = (ScriptMetaData)p.getByName(parsedUri.function);
LogUtils.DEBUG("** found script data for " + parsedUri.function + " script is "
+ scriptData);
return scriptData;
}
public ParsedScriptUri parseScriptUri( String scriptURI ) throws com.sun.star.lang.IllegalArgumentException
{
public ParsedScriptUri parseScriptUri(String scriptURI) throws
com.sun.star.lang.IllegalArgumentException {
XMultiComponentFactory xMcFac = null;
XUriReferenceFactory xFac = null;
try
{
try {
xMcFac = m_xCtx.getServiceManager();
xFac = UnoRuntime.queryInterface( XUriReferenceFactory.class,
xMcFac.createInstanceWithContext(
"com.sun.star.uri.UriReferenceFactory", m_xCtx ) );
}
catch( com.sun.star.uno.Exception e )
{
LogUtils.DEBUG("Problems parsing URL:" + e.toString() );
xFac = UnoRuntime.queryInterface(XUriReferenceFactory.class,
xMcFac.createInstanceWithContext(
"com.sun.star.uri.UriReferenceFactory", m_xCtx));
} catch (com.sun.star.uno.Exception e) {
LogUtils.DEBUG("Problems parsing URL:" + e.toString());
throw new com.sun.star.lang.IllegalArgumentException(e, "Problems parsing URL");
}
if ( xFac == null )
{
if (xFac == null) {
LogUtils.DEBUG("Failed to create UrlReference factory");
throw new com.sun.star.lang.IllegalArgumentException( "Failed to create UrlReference factory for url " + scriptURI );
throw new com.sun.star.lang.IllegalArgumentException("Failed to create UrlReference factory for url "
+ scriptURI);
}
XUriReference uriRef = xFac.parse( scriptURI );
XVndSunStarScriptUrl sfUri = UnoRuntime.queryInterface( XVndSunStarScriptUrl.class, uriRef );
XUriReference uriRef = xFac.parse(scriptURI);
XVndSunStarScriptUrl sfUri = UnoRuntime.queryInterface(
XVndSunStarScriptUrl.class, uriRef);
if ( sfUri == null )
{
if (sfUri == null) {
LogUtils.DEBUG("Failed to parse url");
throw new com.sun.star.lang.IllegalArgumentException( "Failed to parse url " + scriptURI );
throw new com.sun.star.lang.IllegalArgumentException("Failed to parse url " +
scriptURI);
}
ParsedScriptUri parsedUri = new ParsedScriptUri();
parsedUri.function= sfUri.getName();
parsedUri.function = sfUri.getName();
parsedUri.parcel = "";
// parse parcel name;
StringTokenizer tokenizer = new StringTokenizer( parsedUri.function, "." );
StringTokenizer tokenizer = new StringTokenizer(parsedUri.function, ".");
if ( tokenizer.hasMoreElements() )
{
if (tokenizer.hasMoreElements()) {
parsedUri.parcel = (String)tokenizer.nextElement();
LogUtils.DEBUG("** parcelName = " + parsedUri.parcel );
LogUtils.DEBUG("** parcelName = " + parsedUri.parcel);
}
if ( parsedUri.function != null && ( parsedUri.function.length() > 0 ) )
{
if (parsedUri.function != null && (parsedUri.function.length() > 0)) {
// strip out parcel name
parsedUri.function = parsedUri.function.substring( parsedUri.parcel.length() + 1);
parsedUri.function = parsedUri.function.substring(parsedUri.parcel.length() +
1);
}
// parse location
@@ -685,11 +661,11 @@ public ParsedScriptUri parseScriptUri( String scriptURI ) throws com.sun.star.l
// time its got to here
LogUtils.DEBUG("** location = " + parsedUri.location +
"\nfunction = " + parsedUri.function +
"\nparcel = " + parsedUri.parcel +
"\nlocation = " + parsedUri.location );
"\nfunction = " + parsedUri.function +
"\nparcel = " + parsedUri.parcel +
"\nlocation = " + parsedUri.location);
return parsedUri;
}
}
}

View File

@@ -38,10 +38,11 @@ public class ParcelDescriptor {
// File name to be used for parcel descriptor files
public static final String
PARCEL_DESCRIPTOR_NAME = "parcel-descriptor.xml";
PARCEL_DESCRIPTOR_NAME = "parcel-descriptor.xml";
// Collection of all ParcelDescriptor created for files
private static final Map<File,ParcelDescriptor> PARCEL_DESCRIPTOR_MAP = new HashMap<File,ParcelDescriptor>(5);
private static final Map<File, ParcelDescriptor> PARCEL_DESCRIPTOR_MAP = new
HashMap<File, ParcelDescriptor>(5);
// This is the default contents of a parcel descriptor to be used when
// creating empty descriptors
@@ -53,7 +54,7 @@ public class ParcelDescriptor {
private File file = null;
private Document document = null;
private String language = null;
private Map<String,String> languagedepprops = new HashMap<String,String>(3);
private Map<String, String> languagedepprops = new HashMap<String, String>(3);
@@ -61,11 +62,11 @@ public class ParcelDescriptor {
public ParcelDescriptor() throws IOException {
ByteArrayInputStream bis = null;
try {
bis = new ByteArrayInputStream(EMPTY_DOCUMENT);
this.document = XMLParserFactory.getParser().parse(bis);
}
finally {
} finally {
if (bis != null)
bis.close();
}
@@ -89,27 +90,28 @@ public class ParcelDescriptor {
if (file.exists()) {
FileInputStream fis = null;
try {
fis = new FileInputStream(file);
this.document = XMLParserFactory.getParser().parse(fis);
}
finally {
} finally {
if (fis != null)
fis.close();
}
}
else {
} else {
ByteArrayInputStream bis = null;
try {
bis = new ByteArrayInputStream(EMPTY_DOCUMENT);
this.document = XMLParserFactory.getParser().parse(bis);
}
finally {
} finally {
if (bis != null)
bis.close();
}
setLanguage(language);
}
initLanguageProperties();
}
@@ -128,6 +130,7 @@ public class ParcelDescriptor {
language = e.getAttribute("language");
}
}
return language;
}
@@ -138,8 +141,7 @@ public class ParcelDescriptor {
try {
Element e = document.getDocumentElement();
e.setAttribute("language", language);
}
catch (DOMException de) {
} catch (DOMException de) {
}
}
}
@@ -156,7 +158,7 @@ public class ParcelDescriptor {
for (int i = 0; i < len; i++) {
String language, languagename, logicalname, description = "";
Map<String,String> langProps = new HashMap<String,String>();
Map<String, String> langProps = new HashMap<String, String>();
NodeList nl;
Element tmp;
@@ -164,6 +166,7 @@ public class ParcelDescriptor {
language = scriptElement.getAttribute("language");
nl = scriptElement.getElementsByTagName("logicalname");
if (nl == null)
logicalname = "";
else {
@@ -173,15 +176,13 @@ public class ParcelDescriptor {
// get the text of the description element
nl = scriptElement.getElementsByTagName("locale");
if (nl != null)
{
if (nl != null) {
nl = nl.item(0).getChildNodes();
if (nl != null)
{
for (int j = 0 ; j < nl.getLength(); j++)
{
if (nl.item(j).getNodeName().equals("description"))
{
if (nl != null) {
for (int j = 0 ; j < nl.getLength(); j++) {
if (nl.item(j).getNodeName().equals("description")) {
CharacterData cd =
(CharacterData)nl.item(j).getFirstChild();
description = cd.getData().trim();
@@ -191,36 +192,41 @@ public class ParcelDescriptor {
}
nl = scriptElement.getElementsByTagName("functionname");
if (nl == null) {
languagename = "";
} else {
tmp = (Element)nl.item(0);
languagename = tmp.getAttribute("value");
}
nl = scriptElement.getElementsByTagName("languagedepprops");
if ( nl != null && nl.getLength() > 0 )
{
if (nl != null && nl.getLength() > 0) {
NodeList props = ((Element)nl.item(0)).getElementsByTagName("prop");
if ( props != null )
{
for ( int j=0; j < props.getLength(); j++ )
{
if (props != null) {
for (int j = 0; j < props.getLength(); j++) {
tmp = (Element)props.item(j);
String key = tmp.getAttribute("name");
String val = tmp.getAttribute("value");
langProps.put( key,val );
langProps.put(key, val);
}
}
}
ScriptEntry entry = new ScriptEntry(language, languagename, "", langProps,description);
ScriptEntry entry = new ScriptEntry(language, languagename, "", langProps,
description);
scripts.add(entry);
}
return scripts.toArray(new ScriptEntry[scripts.size()]);
}
public void setScriptEntries(ScriptEntry[] scripts) {
clearEntries();
for (ScriptEntry script : scripts) {
addScriptEntry(script);
}
@@ -228,6 +234,7 @@ public class ParcelDescriptor {
public void setScriptEntries(Iterator<ScriptEntry> scripts) {
clearEntries();
while (scripts.hasNext())
addScriptEntry(scripts.next());
}
@@ -271,13 +278,11 @@ public class ParcelDescriptor {
int len;
if ((scriptNodes = document.getElementsByTagName("script")) != null &&
(len = scriptNodes.getLength()) != 0)
{
(len = scriptNodes.getLength()) != 0) {
for (int i = len - 1; i >= 0; i--) {
try {
main.removeChild(scriptNodes.item(i));
}
catch (DOMException de) {
} catch (DOMException de) {
// ignore
}
}
@@ -290,8 +295,7 @@ public class ParcelDescriptor {
int len;
if ((scriptNodes = document.getElementsByTagName("script")) != null &&
(len = scriptNodes.getLength()) != 0)
{
(len = scriptNodes.getLength()) != 0) {
for (int i = len - 1; i >= 0; i--) {
try {
Element scriptElement = (Element)scriptNodes.item(i);
@@ -299,6 +303,7 @@ public class ParcelDescriptor {
NodeList nl =
scriptElement.getElementsByTagName("functionname");
if (nl == null) {
continue;
} else {
@@ -309,8 +314,7 @@ public class ParcelDescriptor {
if (languagename.equals(script.getLanguageName())) {
main.removeChild(scriptElement);
}
}
catch (DOMException de) {
} catch (DOMException de) {
// ignore
}
}
@@ -332,10 +336,11 @@ public class ParcelDescriptor {
tempitem = document.createElement("description");
String description = script.getDescription();
if (description == null || description.length() == 0)
{
if (description == null || description.length() == 0) {
description = script.getLogicalName();
}
tempitem.appendChild(document.createTextNode(description));
item.appendChild(tempitem);
@@ -354,6 +359,7 @@ public class ParcelDescriptor {
item = document.createElement("languagedepprops");
Iterator<String> iter = languagedepprops.keySet().iterator();
while (iter.hasNext()) {
tempitem = document.createElement("prop");
key = iter.next();
@@ -361,6 +367,7 @@ public class ParcelDescriptor {
tempitem.setAttribute("value", languagedepprops.get(key));
item.appendChild(tempitem);
}
root.appendChild(item);
}

View File

@@ -17,8 +17,7 @@
*/
package com.sun.star.script.framework.container;
public class ParsedScriptUri
{
public class ParsedScriptUri {
public String location;
public String function;

View File

@@ -27,7 +27,7 @@ public class ScriptEntry implements Cloneable {
private String logicalname = "";
private String description = "";
private Map<String,String> languagedepprops;
private Map<String, String> languagedepprops;
public ScriptEntry(String language, String languagename,
String location) {
@@ -39,11 +39,10 @@ public class ScriptEntry implements Cloneable {
// as logical name also
this.logicalname = languagename;
this.location = location;
this.languagedepprops = new HashMap<String,String>();
this.languagedepprops = new HashMap<String, String>();
}
public ScriptEntry(ScriptEntry entry)
{
public ScriptEntry(ScriptEntry entry) {
this.language = entry.language;
this.languagename = entry.languagename;
this.logicalname = entry.languagename;
@@ -53,15 +52,15 @@ public class ScriptEntry implements Cloneable {
}
public ScriptEntry(String language, String languagename,
String location, Map<String,String> languagedepprops) {
this( language, languagename, location );
String location, Map<String, String> languagedepprops) {
this(language, languagename, location);
this.languagedepprops = languagedepprops;
}
public ScriptEntry(String language, String languagename,
String location, Map<String,String> languagedepprops,
String location, Map<String, String> languagedepprops,
String description) {
this( language, languagename, location );
this(language, languagename, location);
this.languagedepprops = languagedepprops;
this.description = description;
}
@@ -77,14 +76,13 @@ public class ScriptEntry implements Cloneable {
public boolean equals(ScriptEntry other) {
return language.equals(other.getLanguage()) &&
languagename.equals(other.getLanguageName()) &&
logicalname.equals(other.getLogicalName()) &&
languagedepprops.equals(other.getLanguageProperties()) &&
location.equals(other.getLocation());
languagename.equals(other.getLanguageName()) &&
logicalname.equals(other.getLogicalName()) &&
languagedepprops.equals(other.getLanguageProperties()) &&
location.equals(other.getLocation());
}
public Map<String,String> getLanguageProperties()
{
public Map<String, String> getLanguageProperties() {
return languagedepprops;
}
@@ -114,6 +112,7 @@ public class ScriptEntry implements Cloneable {
@Override
public String toString() {
return "\nLogicalName = " + logicalname + "\nLanguageName = " + languagename + "\nLocation = " + location + "\nLanguaguageProperties = " + languagedepprops;
return "\nLogicalName = " + logicalname + "\nLanguageName = " + languagename +
"\nLocation = " + location + "\nLanguaguageProperties = " + languagedepprops;
}
}

View File

@@ -42,49 +42,47 @@ public class ScriptMetaData extends ScriptEntry {
private Parcel parent;
public ScriptMetaData( Parcel parent, ScriptEntry entry,
String source )
{
super( entry );
public ScriptMetaData(Parcel parent, ScriptEntry entry,
String source) {
super(entry);
this.parent = parent;
if ( source != null )
{
if (source != null) {
this.hasSource = true;
this.source = source;
}
}
public boolean hasSource()
{
public boolean hasSource() {
return hasSource;
}
public String getSource() {
return ( source !=null && hasSource ) ? source : null;
return (source != null && hasSource) ? source : null;
}
public byte[] getSourceBytes() {
return ( source !=null && hasSource ) ? source.getBytes() : null;
return (source != null && hasSource) ? source.getBytes() : null;
}
public boolean equals(ScriptMetaData other) {
return super.equals(other) && hasSource == other.hasSource();
}
public String getScriptFullURL()
{
String url = "vnd.sun.star.script:" + parent.getName() + "." + getLanguageName() +
"?" + "language=" + getLanguage() +
"&location=" + getParcelLocation();
return url;
public String getScriptFullURL() {
String url = "vnd.sun.star.script:" + parent.getName() + "." + getLanguageName()
+
"?" + "language=" + getLanguage() +
"&location=" + getParcelLocation();
return url;
}
public String getShortFormScriptURL()
{
String url = "vnd.sun.star.script:" + parent.getName() + "." + getLanguageName() +
"?" + "language=" + getLanguage() +
"&location=" + getLocationPlaceHolder();
public String getShortFormScriptURL() {
String url = "vnd.sun.star.script:" + parent.getName() + "." + getLanguageName()
+
"?" + "language=" + getLanguage() +
"&location=" + getLocationPlaceHolder();
return url;
}
@@ -111,78 +109,60 @@ public class ScriptMetaData extends ScriptEntry {
private static final String UNO_SHARED_PACKAGES2 =
SHARE + "/uno_packages";
public static String getLocationPlaceHolder(String url, String pkgname)
{
public static String getLocationPlaceHolder(String url, String pkgname) {
String result = "Unknown";
if ( url.contains(UNO_USER_PACKAGES1) ||
url.contains(UNO_USER_PACKAGES2) )
{
result = PathUtils.make_url( "user:uno_packages", pkgname );
}
else if ( url.contains(UNO_SHARED_PACKAGES1) ||
url.contains(UNO_SHARED_PACKAGES2) )
{
result = PathUtils.make_url( "share:uno_packages", pkgname );
}
else if ( url.indexOf(SHARE) == 0 )
{
if (url.contains(UNO_USER_PACKAGES1) ||
url.contains(UNO_USER_PACKAGES2)) {
result = PathUtils.make_url("user:uno_packages", pkgname);
} else if (url.contains(UNO_SHARED_PACKAGES1) ||
url.contains(UNO_SHARED_PACKAGES2)) {
result = PathUtils.make_url("share:uno_packages", pkgname);
} else if (url.indexOf(SHARE) == 0) {
result = "share";
}
else if ( url.indexOf(USER) == 0 )
{
} else if (url.indexOf(USER) == 0) {
result = "user";
}
else if ( url.indexOf("vnd.sun.star.tdoc:") == 0 )
{
} else if (url.indexOf("vnd.sun.star.tdoc:") == 0) {
result = "document";
}
return result;
}
public String getLocationPlaceHolder()
{
public String getLocationPlaceHolder() {
String placeHolder = "Unknown";
String pathToParcel = parent.getPathToParcel();
if ( pathToParcel.contains(UNO_USER_PACKAGES1) ||
pathToParcel.contains(UNO_USER_PACKAGES2) )
{
if (pathToParcel.contains(UNO_USER_PACKAGES1) ||
pathToParcel.contains(UNO_USER_PACKAGES2)) {
// it's a package
placeHolder = "user:uno_packages";
String unoPkg = parent.parent.getName();
if ( unoPkg != null )
{
placeHolder = PathUtils.make_url( placeHolder, unoPkg );
if (unoPkg != null) {
placeHolder = PathUtils.make_url(placeHolder, unoPkg);
}
}
else if ( pathToParcel.contains(UNO_SHARED_PACKAGES1) ||
pathToParcel.contains(UNO_SHARED_PACKAGES2) )
{
} else if (pathToParcel.contains(UNO_SHARED_PACKAGES1) ||
pathToParcel.contains(UNO_SHARED_PACKAGES2)) {
//its a package
placeHolder = "share:uno_packages";
String unoPkg = parent.parent.getName();
if ( unoPkg != null )
{
placeHolder = PathUtils.make_url( placeHolder, unoPkg );
if (unoPkg != null) {
placeHolder = PathUtils.make_url(placeHolder, unoPkg);
}
}
else if ( pathToParcel.indexOf(SHARE) == 0 )
{
} else if (pathToParcel.indexOf(SHARE) == 0) {
placeHolder = "share";
}
else if ( pathToParcel.indexOf(USER) == 0 )
{
} else if (pathToParcel.indexOf(USER) == 0) {
placeHolder = "user";
}
else if ( pathToParcel.indexOf("vnd.sun.star.tdoc:") == 0 )
{
} else if (pathToParcel.indexOf("vnd.sun.star.tdoc:") == 0) {
placeHolder = "document";
}
// TODO handling document packages ??? not really sure of package url
/* else
{
} */
/* else
{
} */
return placeHolder;
}
@@ -193,76 +173,69 @@ public class ScriptMetaData extends ScriptEntry {
// Also if it is to remain needs to be renamed to getParcelLocationURL
// return URL string to parcel
public String getParcelLocation()
{
public String getParcelLocation() {
return parent.getPathToParcel();
}
@Override
public String toString()
{
return "\nParcelLocation = " + getParcelLocation() + "\nLocationPlaceHolder = " + locationPlaceHolder + super.toString();
public String toString() {
return "\nParcelLocation = " + getParcelLocation() + "\nLocationPlaceHolder = "
+ locationPlaceHolder + super.toString();
}
public URL[] getClassPath()
{
try
{
String classpath = getLanguageProperties().get("classpath");
public URL[] getClassPath() {
try {
String classpath = getLanguageProperties().get("classpath");
if ( classpath == null )
{
classpath = "";
}
String parcelPath = getParcelLocation();
// make sure path ends with /
if ( !parcelPath.endsWith("/") )
{
parcelPath += "/";
}
// replace \ with /
parcelPath = parcelPath.replace( '\\', '/' );
ArrayList<URL> classPathVec = new ArrayList<URL>();
StringTokenizer stk = new StringTokenizer(classpath, ":");
while ( stk.hasMoreElements() )
{
String relativeClasspath = stk.nextToken();
String pathToProcess = PathUtils.make_url( parcelPath, relativeClasspath);
URL url = createURL( pathToProcess );
if ( url != null )
{
classPathVec.add ( url );
if (classpath == null) {
classpath = "";
}
}
if ( classPathVec.size() == 0)
{
URL url = createURL( parcelPath );
if ( url != null )
{
classPathVec.add(url);
String parcelPath = getParcelLocation();
// make sure path ends with /
if (!parcelPath.endsWith("/")) {
parcelPath += "/";
}
// replace \ with /
parcelPath = parcelPath.replace('\\', '/');
ArrayList<URL> classPathVec = new ArrayList<URL>();
StringTokenizer stk = new StringTokenizer(classpath, ":");
while (stk.hasMoreElements()) {
String relativeClasspath = stk.nextToken();
String pathToProcess = PathUtils.make_url(parcelPath, relativeClasspath);
URL url = createURL(pathToProcess);
if (url != null) {
classPathVec.add(url);
}
}
if (classPathVec.size() == 0) {
URL url = createURL(parcelPath);
if (url != null) {
classPathVec.add(url);
}
}
return classPathVec.toArray(new URL[classPathVec.size()]);
} catch (Exception e) {
LogUtils.DEBUG("Failed to build class path " + e.toString());
LogUtils.DEBUG(LogUtils.getTrace(e));
return new URL[0];
}
return classPathVec.toArray( new URL[classPathVec.size()]);
}
catch ( Exception e )
{
LogUtils.DEBUG("Failed to build class path " + e.toString() );
LogUtils.DEBUG( LogUtils.getTrace( e ) );
return new URL[0];
}
}
private URL createURL( String path ) throws java.net.MalformedURLException
{
private URL createURL(String path) throws java.net.MalformedURLException {
int indexOfColon = path.indexOf(':');
String scheme = path.substring( 0, indexOfColon );
UCBStreamHandler handler = new UCBStreamHandler( scheme, parent.m_xSFA);
String scheme = path.substring(0, indexOfColon);
UCBStreamHandler handler = new UCBStreamHandler(scheme, parent.m_xSFA);
path += UCBStreamHandler.separator;
return new URL(null, path, handler);
@@ -270,87 +243,81 @@ public class ScriptMetaData extends ScriptEntry {
// TODO should decide whether this should throw or not
// decide whether it should be public or protected ( final ? )
public void loadSource()
{
try
{
URL sourceUrl = getSourceURL();
LogUtils.DEBUG("** In load source BUT not loading yet for " + sourceUrl );
public void loadSource() {
try {
URL sourceUrl = getSourceURL();
LogUtils.DEBUG("** In load source BUT not loading yet for " + sourceUrl);
if ( sourceUrl != null )
{
StringBuilder buf = new StringBuilder();
InputStream in = sourceUrl.openStream();
if (sourceUrl != null) {
StringBuilder buf = new StringBuilder();
InputStream in = sourceUrl.openStream();
byte[] contents = new byte[1024];
int len;
while ((len = in.read(contents, 0, 1024)) != -1) {
buf.append(new String(contents, 0, len));
}
byte[] contents = new byte[1024];
int len;
try {
in.close();
}
catch (java.io.IOException ignore ) {
LogUtils.DEBUG("** Failed to read scriot from url " + ignore.toString() );
}
source = buf.toString();
hasSource = true;
while ((len = in.read(contents, 0, 1024)) != -1) {
buf.append(new String(contents, 0, len));
}
}
catch (java.io.IOException e) {
LogUtils.DEBUG("** Failed to read scriot from url " + e.toString());
}
try {
in.close();
} catch (java.io.IOException ignore) {
LogUtils.DEBUG("** Failed to read scriot from url " + ignore.toString());
}
source = buf.toString();
hasSource = true;
}
} catch (java.io.IOException e) {
LogUtils.DEBUG("** Failed to read scriot from url " + e.toString());
}
protected boolean writeSourceFile()
{
}
protected boolean writeSourceFile() {
String sourceFilePath = parent.getPathToParcel() + "/" + getLanguageName();
boolean result = false;
try
{
XSimpleFileAccess2 xSFA2 = UnoRuntime.queryInterface( XSimpleFileAccess2.class,
parent.m_xSFA );
if ( xSFA2 != null )
{
ByteArrayInputStream bis = new ByteArrayInputStream( getSourceBytes() );
XInputStreamImpl xis = new XInputStreamImpl( bis );
xSFA2.writeFile( sourceFilePath, xis );
try {
XSimpleFileAccess2 xSFA2 = UnoRuntime.queryInterface(XSimpleFileAccess2.class,
parent.m_xSFA);
if (xSFA2 != null) {
ByteArrayInputStream bis = new ByteArrayInputStream(getSourceBytes());
XInputStreamImpl xis = new XInputStreamImpl(bis);
xSFA2.writeFile(sourceFilePath, xis);
xis.closeInput();
result = true;
}
}
// TODO re-examine exception processing should probably throw
// exceptions back to caller
catch ( Exception ignore )
catch (Exception ignore)
{
}
return result;
}
protected boolean removeSourceFile()
{
protected boolean removeSourceFile() {
String parcelLocation = parent.getPathToParcel();
String sourceFilePath = parcelLocation + "/" + getLanguageName();
boolean result = false;
try
{
parent.m_xSFA.kill( sourceFilePath );
try {
parent.m_xSFA.kill(sourceFilePath);
result = true;
}
// TODO reexamine exception handling
catch ( Exception e )
{
catch (Exception e) {
}
return result;
}
public URL getSourceURL() throws java.net.MalformedURLException
{
public URL getSourceURL() throws java.net.MalformedURLException {
String sUrl = getParcelLocation();
sUrl = PathUtils.make_url( sUrl, getLanguageName() );
LogUtils.DEBUG("Creating script url for " + sUrl );
return createURL( sUrl );
sUrl = PathUtils.make_url(sUrl, getLanguageName());
LogUtils.DEBUG("Creating script url for " + sUrl);
return createURL(sUrl);
}
}

View File

@@ -33,136 +33,128 @@ import com.sun.star.io.XOutputStream;
import com.sun.star.io.XTruncate;
import com.sun.star.deployment.XPackage;
public class UnoPkgContainer extends ParcelContainer
{
public class UnoPkgContainer extends ParcelContainer {
private Map<String,ParcelContainer> registeredPackages = new HashMap<String,ParcelContainer>();
private Map<String, ParcelContainer> registeredPackages = new
HashMap<String, ParcelContainer>();
private String extensionDb;
private String extensionRepository;
public UnoPkgContainer( XComponentContext xCtx, String locationURL,
String _extensionDb, String _extensionRepository, String language ) throws com.sun.star.lang.IllegalArgumentException, com.sun.star.lang.WrappedTargetException
{
super( xCtx, locationURL, language, false );
public UnoPkgContainer(XComponentContext xCtx, String locationURL,
String _extensionDb, String _extensionRepository,
String language) throws com.sun.star.lang.IllegalArgumentException,
com.sun.star.lang.WrappedTargetException {
super(xCtx, locationURL, language, false);
extensionDb = _extensionDb;
extensionRepository = _extensionRepository;
init();
}
// gets the ParcelContainer for persisted uno packages
public ParcelContainer getRegisteredUnoPkgContainer( String url )
{
if (!url.endsWith("/"))
{
public ParcelContainer getRegisteredUnoPkgContainer(String url) {
if (!url.endsWith("/")) {
url += "/";
}
LogUtils.DEBUG("** getRegisterPackage ctx = " + containerUrl );
LogUtils.DEBUG("** getRegisterPackage for uri " + url );
LogUtils.DEBUG("** getRegisterPackage for langugage " + language );
ParcelContainer result = registeredPackages.get( url );
LogUtils.DEBUG("getRegisterPackage result is " + result );
LogUtils.DEBUG("** getRegisterPackage ctx = " + containerUrl);
LogUtils.DEBUG("** getRegisterPackage for uri " + url);
LogUtils.DEBUG("** getRegisterPackage for langugage " + language);
ParcelContainer result = registeredPackages.get(url);
LogUtils.DEBUG("getRegisterPackage result is " + result);
return result;
}
public boolean hasRegisteredUnoPkgContainer( String url ) {
return getRegisteredUnoPkgContainer( url ) != null;
public boolean hasRegisteredUnoPkgContainer(String url) {
return getRegisteredUnoPkgContainer(url) != null;
}
private void registerPackageContainer( String url, ParcelContainer c )
{
if (!url.endsWith("/"))
{
private void registerPackageContainer(String url, ParcelContainer c) {
if (!url.endsWith("/")) {
url += "/";
}
LogUtils.DEBUG("RegisterPackage ctx = " + containerUrl );
LogUtils.DEBUG("RegisterPackage language = " + language );
LogUtils.DEBUG("RegisterPackage " + c + " for url " + url );
registeredPackages.put( url, c );
LogUtils.DEBUG("RegisterPackage ctx = " + containerUrl);
LogUtils.DEBUG("RegisterPackage language = " + language);
LogUtils.DEBUG("RegisterPackage " + c + " for url " + url);
registeredPackages.put(url, c);
}
public void deRegisterPackageContainer( String url )
{
if (!url.endsWith("/"))
{
public void deRegisterPackageContainer(String url) {
if (!url.endsWith("/")) {
url += "/";
}
LogUtils.DEBUG("In deRegisterPackageContainer for " + url );
if ( hasRegisteredUnoPkgContainer( url ) )
{
try
{
LogUtils.DEBUG("In deRegisterPackageContainer for " + url);
if (hasRegisteredUnoPkgContainer(url)) {
try {
DeployedUnoPackagesDB db = getUnoPackagesDB();
if ( db != null )
{
if ( db.removePackage( language, url ) )
{
writeUnoPackageDB( db );
ParcelContainer container = registeredPackages.get( url );
if ( !container.hasElements() )
{
// When all libraries within a package bundle
// ( for this language ) are removed also
// remove the container from its parent
// Otherwise, a container ( with no containees )
// representing the uno package bundle will
// still exist and so will get displayed
if ( container.parent() != null )
{
container.parent().removeChildContainer( container );
}
}
registeredPackages.remove( url );
}
}
}
catch (Exception e)
{
//TODO revisit exception handling and exception here
//means something very wrong
LogUtils.DEBUG("***** deRegisterPackageContainer() got exception " + e );
}
if (db != null) {
if (db.removePackage(language, url)) {
writeUnoPackageDB(db);
ParcelContainer container = registeredPackages.get(url);
if (!container.hasElements()) {
// When all libraries within a package bundle
// ( for this language ) are removed also
// remove the container from its parent
// Otherwise, a container ( with no containees )
// representing the uno package bundle will
// still exist and so will get displayed
if (container.parent() != null) {
container.parent().removeChildContainer(container);
}
}
registeredPackages.remove(url);
}
}
} catch (Exception e) {
//TODO revisit exception handling and exception here
//means something very wrong
LogUtils.DEBUG("***** deRegisterPackageContainer() got exception " + e);
}
}
LogUtils.DEBUG("Leaving deRegisterPackageContainer for " + url );
LogUtils.DEBUG("Leaving deRegisterPackageContainer for " + url);
}
private void init() throws com.sun.star.lang.IllegalArgumentException
{
LogUtils.DEBUG("getting container for " + containerUrl );
try
{
private void init() throws com.sun.star.lang.IllegalArgumentException {
LogUtils.DEBUG("getting container for " + containerUrl);
try {
DeployedUnoPackagesDB db = getUnoPackagesDB();
if ( db != null )
{
String[] packages = db.getDeployedPackages( language );
if (db != null) {
String[] packages = db.getDeployedPackages(language);
for (String thepackage : packages) {
try {
processUnoPackage(thepackage, language);
} catch (com.sun.star.lang.IllegalArgumentException ila) {
LogUtils.DEBUG("Failed to process " + thepackage + " for " + language);
LogUtils.DEBUG(" Reason: " + ila );
LogUtils.DEBUG(" Reason: " + ila);
} catch (Exception e) {
// TODO proper exception or do we wish
// to ignore errors here
LogUtils.DEBUG("Something very wrong!!!!!");
LogUtils.DEBUG("Failed to process " + thepackage + " for " + language);
LogUtils.DEBUG(" Reason: " + e );
LogUtils.DEBUG(" Reason: " + e);
}
}
}
}
catch ( com.sun.star.lang.WrappedTargetException e )
{
} catch (com.sun.star.lang.WrappedTargetException e) {
// no deployed packages
LogUtils.DEBUG("No deployed uno-packages for " + containerUrl );
LogUtils.DEBUG("No deployed uno-packages for " + containerUrl);
}
}
@Override
public ScriptMetaData findScript( ParsedScriptUri psu ) throws com.sun.star.container.NoSuchElementException, com.sun.star.lang.WrappedTargetException
public ScriptMetaData findScript(ParsedScriptUri psu) throws
com.sun.star.container.NoSuchElementException,
com.sun.star.lang.WrappedTargetException
{
ScriptMetaData scriptData = null;
@@ -172,70 +164,59 @@ public class UnoPkgContainer extends ParcelContainer
String location = psu.location;
LogUtils.DEBUG("*** UnoPkgContainer.findScript() ***" +
"\ncontainerUrl = " + containerUrl +
"\nfunction = " + functionName +
"\nlocation = " + location +
"\nparcel = " + parcelName );
"\ncontainerUrl = " + containerUrl +
"\nfunction = " + functionName +
"\nlocation = " + location +
"\nparcel = " + parcelName);
ParcelContainer pc = getChildContainer( location );
ParcelContainer pc = getChildContainer(location);
if ( pc == null )
{
throw new com.sun.star.lang.WrappedTargetException( "Failed to resolve script " , null, new com.sun.star.lang.IllegalArgumentException( "Cannot resolve script location for script = " + functionName ) );
if (pc == null) {
throw new com.sun.star.lang.WrappedTargetException("Failed to resolve script " ,
null, new com.sun.star.lang.IllegalArgumentException("Cannot resolve script location for script = "
+ functionName));
}
return pc.findScript( psu );
return pc.findScript(psu);
}
private DeployedUnoPackagesDB getUnoPackagesDB() throws com.sun.star.lang.WrappedTargetException
{
private DeployedUnoPackagesDB getUnoPackagesDB() throws
com.sun.star.lang.WrappedTargetException {
InputStream is = null;
DeployedUnoPackagesDB dp = null;
try
{
String packagesUrl = PathUtils.make_url( extensionDb, "/Scripts/" + extensionRepository + "-extension-desc.xml" );
LogUtils.DEBUG("getUnoPackagesDB() looking for existing db in " + packagesUrl );
if ( m_xSFA.exists( packagesUrl ) )
{
if ( packagesUrl.startsWith( "vnd.sun.star.tdoc" ) )
{
try {
String packagesUrl = PathUtils.make_url(extensionDb,
"/Scripts/" + extensionRepository + "-extension-desc.xml");
LogUtils.DEBUG("getUnoPackagesDB() looking for existing db in " + packagesUrl);
if (m_xSFA.exists(packagesUrl)) {
if (packagesUrl.startsWith("vnd.sun.star.tdoc")) {
// handles using XStorage directly
throw new com.sun.star.lang.WrappedTargetException("Can't handle documents yet");
}
is = new XInputStreamWrapper( m_xSFA.openFileRead( packagesUrl ) );
dp = new DeployedUnoPackagesDB( is );
try
{
is = new XInputStreamWrapper(m_xSFA.openFileRead(packagesUrl));
dp = new DeployedUnoPackagesDB(is);
try {
is.close();
is = null;
} catch (Exception ignore) {
}
catch ( Exception ignore )
{
}
}
else
{
} else {
LogUtils.DEBUG("getUnoPackagesDB() " + packagesUrl + " does not exist");
}
}
catch( Exception e )
{
LogUtils.DEBUG("getUnoPackagesDB() caught Exception: " + e );
LogUtils.DEBUG( LogUtils.getTrace( e ) );
} catch (Exception e) {
LogUtils.DEBUG("getUnoPackagesDB() caught Exception: " + e);
LogUtils.DEBUG(LogUtils.getTrace(e));
throw new com.sun.star.lang.WrappedTargetException(e);
}
finally
{
if ( is != null )
{
try
{
} finally {
if (is != null) {
try {
is.close();
is = null;
}
catch ( Exception ignore )
{
} catch (Exception ignore) {
}
}
}
@@ -243,160 +224,151 @@ public class UnoPkgContainer extends ParcelContainer
return dp;
}
private void writeUnoPackageDB( DeployedUnoPackagesDB dp ) throws com.sun.star.lang.IllegalArgumentException, com.sun.star.lang.WrappedTargetException
{
private void writeUnoPackageDB(DeployedUnoPackagesDB dp) throws
com.sun.star.lang.IllegalArgumentException,
com.sun.star.lang.WrappedTargetException {
LogUtils.DEBUG("In writeUnoPackageDB() ");
XOutputStream xos = null;
OutputStream os = null;
try
{
String packagesUrl = PathUtils.make_url( extensionDb, "/Scripts/" + extensionRepository + "-extension-desc.xml" );
xos = m_xSFA.openFileWrite( packagesUrl );
XTruncate xTrc = UnoRuntime.queryInterface( XTruncate.class, xos );
if ( xTrc != null )
{
LogUtils.DEBUG("In writeUnoPackageDB() Truncating...." );
try {
String packagesUrl = PathUtils.make_url(extensionDb,
"/Scripts/" + extensionRepository + "-extension-desc.xml");
xos = m_xSFA.openFileWrite(packagesUrl);
XTruncate xTrc = UnoRuntime.queryInterface(XTruncate.class, xos);
if (xTrc != null) {
LogUtils.DEBUG("In writeUnoPackageDB() Truncating....");
xTrc.truncate();
} else {
LogUtils.DEBUG("In writeUnoPackageDB() CAN'T Truncate....");
}
else
{
LogUtils.DEBUG("In writeUnoPackageDB() CAN'T Truncate...." );
}
os = new XOutputStreamWrapper( xos );
dp.write( os );
try
{
os = new XOutputStreamWrapper(xos);
dp.write(os);
try {
os.close(); // will close xos
os = null;
} catch (Exception ignore) {
}
catch( Exception ignore )
{
}
}
catch( Exception e )
{
LogUtils.DEBUG("In writeUnoPackageDB() Exception: " + e );
} catch (Exception e) {
LogUtils.DEBUG("In writeUnoPackageDB() Exception: " + e);
throw new com.sun.star.lang.WrappedTargetException(e);
}
finally
{
if ( os != null )
{
try
{
} finally {
if (os != null) {
try {
os.close(); // will close xos
os = null;
}
catch ( Exception ignore )
{
} catch (Exception ignore) {
}
}
}
}
public void processUnoPackage( XPackage dPackage, String language ) throws com.sun.star.lang.IllegalArgumentException, com.sun.star.lang.WrappedTargetException, com.sun.star.container.ElementExistException
{
LogUtils.DEBUG("** in processUnoPackage " );
public void processUnoPackage(XPackage dPackage,
String language) throws com.sun.star.lang.IllegalArgumentException,
com.sun.star.lang.WrappedTargetException,
com.sun.star.container.ElementExistException {
LogUtils.DEBUG("** in processUnoPackage ");
String uri = dPackage.getURL();
if ( !uri.endsWith( "/" ) )
{
if (!uri.endsWith("/")) {
uri += "/";
}
LogUtils.DEBUG("** processUnoPackage getURL() -> " + uri );
LogUtils.DEBUG("** processUnoPackage getName() -> " + dPackage.getName() );
LogUtils.DEBUG("** processUnoPackage getMediaType() -> " + dPackage.getPackageType().getMediaType() );
try
{
LogUtils.DEBUG("** processUnoPackage getDisplayName() -> " + dPackage.getDisplayName() );
}
catch (com.sun.star.deployment.ExtensionRemovedException e)
{
LogUtils.DEBUG("** processUnoPackage getURL() -> " + uri);
LogUtils.DEBUG("** processUnoPackage getName() -> " + dPackage.getName());
LogUtils.DEBUG("** processUnoPackage getMediaType() -> " +
dPackage.getPackageType().getMediaType());
try {
LogUtils.DEBUG("** processUnoPackage getDisplayName() -> " +
dPackage.getDisplayName());
} catch (com.sun.star.deployment.ExtensionRemovedException e) {
throw new com.sun.star.lang.WrappedTargetException(e.getMessage(), this, e);
}
processUnoPackage( uri, language );
processUnoPackage(uri, language);
DeployedUnoPackagesDB db = getUnoPackagesDB();
if ( db == null )
{
try
{
if (db == null) {
try {
db = new DeployedUnoPackagesDB();
}
catch ( java.io.IOException ioe )
{
} catch (java.io.IOException ioe) {
throw new com.sun.star.lang.WrappedTargetException(ioe);
}
}
db.addPackage( language, uri );
writeUnoPackageDB( db );
db.addPackage(language, uri);
writeUnoPackageDB(db);
}
private void processUnoPackage( String uri, String language ) throws com.sun.star.lang.IllegalArgumentException, com.sun.star.lang.WrappedTargetException, com.sun.star.container.ElementExistException
{
if ( hasRegisteredUnoPkgContainer( uri ) )
{
throw new com.sun.star.container.ElementExistException( "Already a registered uno package " + uri + " for language " + language );
private void processUnoPackage(String uri,
String language) throws com.sun.star.lang.IllegalArgumentException,
com.sun.star.lang.WrappedTargetException,
com.sun.star.container.ElementExistException {
if (hasRegisteredUnoPkgContainer(uri)) {
throw new com.sun.star.container.ElementExistException("Already a registered uno package "
+ uri + " for language " + language);
}
LogUtils.DEBUG("processUnoPackage - URL = " + uri );
LogUtils.DEBUG("processUnoPackage - URL = " + uri);
LogUtils.DEBUG("processUnoPackage - script library package");
String parentUrl = uri;
if ( uri.contains("%2Funo_packages%2F") ||
uri.contains("/uno_packages/") ||
uri.contains("$UNO_USER_PACKAGES_CACHE/") ||
uri.contains("$UNO_SHARED_PACKAGES_CACHE/") ||
uri.contains("$BUNDLED_EXTENSIONS/") )
{
if (uri.contains("%2Funo_packages%2F") ||
uri.contains("/uno_packages/") ||
uri.contains("$UNO_USER_PACKAGES_CACHE/") ||
uri.contains("$UNO_SHARED_PACKAGES_CACHE/") ||
uri.contains("$BUNDLED_EXTENSIONS/")) {
//its in a bundle need to determine the uno-package file its in
LogUtils.DEBUG("processUnoPackage - is part of a uno bundle");
int index = uri.lastIndexOf('/');
if ( uri.endsWith("/") )
{
uri = uri.substring( 0, index );
if (uri.endsWith("/")) {
uri = uri.substring(0, index);
index = uri.lastIndexOf('/');
}
if ( index > -1 )
{
parentUrl = uri.substring( 0, index );
if (index > -1) {
parentUrl = uri.substring(0, index);
LogUtils.DEBUG("processUnoPackage - composition is contained in " + parentUrl);
}
ParcelContainer pkgContainer = getChildContainerForURL( parentUrl );
if ( pkgContainer == null )
{
pkgContainer = new ParcelContainer( this, m_xCtx, parentUrl, language, false );
if ( pkgContainer.loadParcel( uri ) == null )
{
throw new com.sun.star.lang.IllegalArgumentException( "Couldn't load script library from composition package " + uri + " for language " + language );
ParcelContainer pkgContainer = getChildContainerForURL(parentUrl);
if (pkgContainer == null) {
pkgContainer = new ParcelContainer(this, m_xCtx, parentUrl, language, false);
if (pkgContainer.loadParcel(uri) == null) {
throw new com.sun.star.lang.IllegalArgumentException("Couldn't load script library from composition package "
+ uri + " for language " + language);
}
addChildContainer( pkgContainer );
}
else
{
if ( pkgContainer.loadParcel( uri ) == null )
{
throw new com.sun.star.lang.IllegalArgumentException( "Couldn't load script library from composition package " + uri + " for language " + language );
addChildContainer(pkgContainer);
} else {
if (pkgContainer.loadParcel(uri) == null) {
throw new com.sun.star.lang.IllegalArgumentException("Couldn't load script library from composition package "
+ uri + " for language " + language);
}
}
registerPackageContainer( uri, pkgContainer );
}
else
{
registerPackageContainer(uri, pkgContainer);
} else {
// stand-alone library package, e.g. not contained in
// an uno package
if ( loadParcel( uri ) == null )
{
throw new com.sun.star.lang.IllegalArgumentException( "Couldn't load script library package " + uri + " for language " + language );
if (loadParcel(uri) == null) {
throw new com.sun.star.lang.IllegalArgumentException("Couldn't load script library package "
+ uri + " for language " + language);
}
registerPackageContainer( uri, this );
registerPackageContainer(uri, this);
}
}

View File

@@ -39,6 +39,7 @@ public class XMLParserFactory {
public static synchronized XMLParser getParser() {
if (parser == null)
parser = new DefaultParser();
return parser;
}
@@ -69,16 +70,14 @@ public class XMLParserFactory {
}
result = builder.parse(is);
}
catch (SAXParseException spe) {
} catch (SAXParseException spe) {
throw new IOException(spe.getMessage());
}
catch (SAXException se) {
} catch (SAXException se) {
throw new IOException(se.getMessage());
}
catch (ParserConfigurationException pce) {
} catch (ParserConfigurationException pce) {
throw new IOException(pce.getMessage());
}
return result;
}
@@ -97,10 +96,9 @@ public class XMLParserFactory {
// these DOM implementations are self writing
Method write;
write = clazz.getDeclaredMethod("write",
new Class[] {OutputStream.class});
new Class[] {OutputStream.class});
write.invoke(doc, new Object[] {out});
}
else {
} else {
// try xerces serialize package using introspection
ClassLoader cl = this.getClass().getClassLoader();
@@ -109,16 +107,16 @@ public class XMLParserFactory {
try {
serializerClass = Class.forName(
"org.apache.xml.serialize.XMLSerializer", true, cl);
"org.apache.xml.serialize.XMLSerializer", true, cl);
formatterClass = Class.forName(
"org.apache.xml.serialize.OutputFormat", true, cl);
"org.apache.xml.serialize.OutputFormat", true, cl);
} catch (ClassNotFoundException cnfe) {
String prefix = "com.sun.org.apache.xml.internal.";
serializerClass = Class.forName(
prefix + "serialize.XMLSerializer" , true, cl);
prefix + "serialize.XMLSerializer" , true, cl);
formatterClass = Class.forName(
prefix + "serialize.OutputFormat", true, cl);
prefix + "serialize.OutputFormat", true, cl);
}
Object serializerObject = serializerClass.newInstance();
@@ -126,29 +124,29 @@ public class XMLParserFactory {
// improve output readability using the OutputFormat class
Method method = formatterClass.getMethod("setMethod",
new Class[] {String.class});
new Class[] {String.class});
method.invoke(formatterObject, new Object[] {"xml"});
method = formatterClass.getMethod("setIndenting",
new Class[] {Boolean.TYPE});
new Class[] {Boolean.TYPE});
method.invoke(formatterObject, new Object[] {Boolean.TRUE});
// now set up an instance of XMLSerializer with our
// OutputStream and serialize our Document
method = serializerClass.getMethod("setOutputByteStream",
new Class[] {OutputStream.class});
new Class[] {OutputStream.class});
method.invoke(serializerObject, new Object[] {out});
method = serializerClass.getMethod("setOutputFormat",
new Class[] {formatterClass});
new Class[] {formatterClass});
method.invoke(serializerObject,
new Object[] {formatterObject});
new Object[] {formatterObject});
method = serializerClass.getMethod("asDOMSerializer",
new Class[0]);
new Class[0]);
Object impl = method.invoke(serializerObject,
new Object[0]);
new Object[0]);
method = impl.getClass().getMethod("serialize",
new Class[] {Document.class});
new Class[] {Document.class});
method.invoke(impl, new Object[] {doc});
}
} catch (NoSuchMethodException ex) {

View File

@@ -36,28 +36,30 @@ public class UCBStreamHandler extends URLStreamHandler {
public final static String separator = "/ucb/";
private XSimpleFileAccess m_xSimpleFileAccess = null;
private HashMap<String,InputStream> m_jarStreamMap = new HashMap<String,InputStream>(12);
private HashMap<String, InputStream> m_jarStreamMap = new
HashMap<String, InputStream>(12);
private static String m_ucbscheme;
public UCBStreamHandler( String scheme, XSimpleFileAccess xSFA )
{
LogUtils.DEBUG( "UCBStreamHandler ctor, scheme = " + scheme );
public UCBStreamHandler(String scheme, XSimpleFileAccess xSFA) {
LogUtils.DEBUG("UCBStreamHandler ctor, scheme = " + scheme);
UCBStreamHandler.m_ucbscheme = scheme;
this.m_xSimpleFileAccess = xSFA;
}
@Override
public void parseURL(URL url, String spec, int start, int limit) {
LogUtils.DEBUG("**XUCBStreamHandler, parseURL: " + url + " spec: " + spec + " start: " + start + " limit: " + limit );
LogUtils.DEBUG("**XUCBStreamHandler, parseURL: " + url + " spec: " + spec +
" start: " + start + " limit: " + limit);
String file = url.getFile();
if (file == null)
file = spec.substring(start, limit);
else
file += spec.substring(start, limit);
LogUtils.DEBUG("**For scheme = " + m_ucbscheme );
LogUtils.DEBUG("**Setting path = " + file );
LogUtils.DEBUG("**For scheme = " + m_ucbscheme);
LogUtils.DEBUG("**Setting path = " + file);
setURL(url, m_ucbscheme, null, -1, null, null, file, null, null);
}
@@ -78,73 +80,73 @@ public class UCBStreamHandler extends URLStreamHandler {
@Override
public InputStream getInputStream() throws IOException {
LogUtils.DEBUG("UCBConnectionHandler GetInputStream on " + url );
LogUtils.DEBUG("UCBConnectionHandler GetInputStream on " + url);
String sUrl = url.toString();
if (sUrl.lastIndexOf(separator) == -1) {
LogUtils.DEBUG("getInputStream straight file load" );
LogUtils.DEBUG("getInputStream straight file load");
return getFileStreamFromUCB(sUrl);
}
else {
String path = sUrl.substring(0, sUrl.lastIndexOf(separator) );
} else {
String path = sUrl.substring(0, sUrl.lastIndexOf(separator));
String file = sUrl.substring(
sUrl.lastIndexOf(separator) + separator.length());
LogUtils.DEBUG("getInputStream, load of file from another file eg. " + file + " from " + path );
sUrl.lastIndexOf(separator) + separator.length());
LogUtils.DEBUG("getInputStream, load of file from another file eg. " + file +
" from " + path);
return getUCBStream(file, path);
}
}
@Override
public OutputStream getOutputStream() throws IOException {
LogUtils.DEBUG("UCBConnectionHandler getOutputStream on " + url );
LogUtils.DEBUG("UCBConnectionHandler getOutputStream on " + url);
OutputStream os = null;
try
{
try {
String sUrl = url.toString();
if ( !( sUrl.lastIndexOf(separator) == -1) ) {
if (!(sUrl.lastIndexOf(separator) == -1)) {
String path = sUrl.substring(0, sUrl.lastIndexOf(separator));
if ( m_xSimpleFileAccess.isReadOnly( path ) )
{
if (m_xSimpleFileAccess.isReadOnly(path)) {
throw new java.io.IOException("File is read only");
}
LogUtils.DEBUG("getOutputStream, create o/p stream for file eg. " + path );
LogUtils.DEBUG("getOutputStream, create o/p stream for file eg. " + path);
// we will only deal with simple file write
XOutputStream xos = m_xSimpleFileAccess.openFileWrite( path );
XTruncate xtrunc = UnoRuntime.queryInterface( XTruncate.class, xos );
if ( xtrunc != null )
{
XOutputStream xos = m_xSimpleFileAccess.openFileWrite(path);
XTruncate xtrunc = UnoRuntime.queryInterface(XTruncate.class, xos);
if (xtrunc != null) {
xtrunc.truncate();
}
os = new XOutputStreamWrapper( xos );
os = new XOutputStreamWrapper(xos);
}
if ( os == null )
{
throw new IOException("Failed to get OutputStream for " + sUrl );
if (os == null) {
throw new IOException("Failed to get OutputStream for " + sUrl);
}
}
catch ( com.sun.star.ucb.CommandAbortedException cae )
{
LogUtils.DEBUG("caught exception: " + cae.toString() + " getting writable stream from " + url );
} catch (com.sun.star.ucb.CommandAbortedException cae) {
LogUtils.DEBUG("caught exception: " + cae.toString() +
" getting writable stream from " + url);
IOException newEx = new IOException(cae.getMessage());
newEx.initCause(cae);
throw newEx;
}
catch ( com.sun.star.uno.Exception e )
{
LogUtils.DEBUG("caught unknown exception: " + e.toString() + " getting writable stream from " + url );
} catch (com.sun.star.uno.Exception e) {
LogUtils.DEBUG("caught unknown exception: " + e.toString() +
" getting writable stream from " + url);
IOException newEx = new IOException(e.getMessage());
newEx.initCause(e);
throw newEx;
}
return os;
}
}
private InputStream getUCBStream(String file, String path)
throws IOException
{
throws IOException {
InputStream is = null;
InputStream result = null;
@@ -155,42 +157,37 @@ public class UCBStreamHandler extends URLStreamHandler {
if (is == null) {
is = getFileStreamFromUCB(path);
m_jarStreamMap.put(path, is);
}
else {
} else {
try {
is.reset();
}
catch (IOException e) {
} catch (IOException e) {
is.close();
is = getFileStreamFromUCB(path);
m_jarStreamMap.put(path, is);
}
}
result = getFileStreamFromJarStream(file, is);
}
else
{
String fileUrl = PathUtils.make_url(path,file);
} else {
String fileUrl = PathUtils.make_url(path, file);
result = getFileStreamFromUCB(fileUrl);
}
}
finally {
} finally {
if (is != null) {
try {
is.close();
}
catch (IOException ioe) {
} catch (IOException ioe) {
LogUtils.DEBUG("Caught exception closing stream: " +
ioe.getMessage());
ioe.getMessage());
}
}
}
return result;
}
private InputStream getFileStreamFromJarStream(String file, InputStream is)
throws IOException
{
throws IOException {
ZipEntry entry;
ZipInputStream zis = new ZipInputStream(is);
@@ -202,33 +199,33 @@ public class UCBStreamHandler extends URLStreamHandler {
return zis;
}
}
return null;
}
private InputStream getFileStreamFromUCB(String path)
throws IOException
{
throws IOException {
InputStream result = null;
XInputStream xInputStream = null;
try {
LogUtils.DEBUG("Trying to read from " + path );
LogUtils.DEBUG("Trying to read from " + path);
xInputStream = m_xSimpleFileAccess.openFileRead(path);
LogUtils.DEBUG("sfa appeared to read file " );
LogUtils.DEBUG("sfa appeared to read file ");
byte[][] inputBytes = new byte[1][];
int sz = m_xSimpleFileAccess.getSize(path);
// TODO don't depend on result of available() or size()
// just read stream 'till complete
if ( sz == 0 )
{
if ( xInputStream.available() > 0 )
{
if (sz == 0) {
if (xInputStream.available() > 0) {
sz = xInputStream.available();
}
}
LogUtils.DEBUG("size of file " + path + " is " + sz );
LogUtils.DEBUG("available = " + xInputStream.available() );
LogUtils.DEBUG("size of file " + path + " is " + sz);
LogUtils.DEBUG("available = " + xInputStream.available());
inputBytes[0] = new byte[sz];
int ln = xInputStream.readBytes(inputBytes, sz);
@@ -239,27 +236,23 @@ public class UCBStreamHandler extends URLStreamHandler {
}
result = new ByteArrayInputStream(inputBytes[0]);
}
catch (com.sun.star.io.IOException ioe) {
LogUtils.DEBUG("caught exception " + ioe );
} catch (com.sun.star.io.IOException ioe) {
LogUtils.DEBUG("caught exception " + ioe);
throw new IOException(ioe.getMessage());
}
catch (com.sun.star.uno.Exception e) {
LogUtils.DEBUG("caught exception " + e );
} catch (com.sun.star.uno.Exception e) {
LogUtils.DEBUG("caught exception " + e);
throw new IOException(e.getMessage());
}
finally
{
} finally {
if (xInputStream != null) {
try {
xInputStream.closeInput();
}
catch (Exception e2) {
} catch (Exception e2) {
LogUtils.DEBUG(
"Error closing XInputStream:" + e2.getMessage());
}
}
}
return result;
}

View File

@@ -23,86 +23,78 @@ import java.io.InputStream;
import com.sun.star.io.XInputStream;
public class XInputStreamImpl implements XInputStream
{
public class XInputStreamImpl implements XInputStream {
private InputStream is;
public XInputStreamImpl( InputStream is )
{
public XInputStreamImpl(InputStream is) {
this.is = is;
}
public int readBytes( /*OUT*/byte[][] aData, /*IN*/int nBytesToRead ) throws com.sun.star.io.NotConnectedException, com.sun.star.io.BufferSizeExceededException, com.sun.star.io.IOException
{
public int readBytes(/*OUT*/byte[][] aData, /*IN*/int nBytesToRead) throws
com.sun.star.io.NotConnectedException,
com.sun.star.io.BufferSizeExceededException, com.sun.star.io.IOException {
aData[ 0 ] = new byte[ nBytesToRead ];
int totalBytesRead = 0;
try
{
try {
int bytesRead;
while ( ( bytesRead = is.read( aData[ 0 ], totalBytesRead, nBytesToRead ) ) > 0 && ( totalBytesRead < nBytesToRead ) )
{
while ((bytesRead = is.read(aData[ 0 ], totalBytesRead, nBytesToRead)) > 0
&& (totalBytesRead < nBytesToRead)) {
totalBytesRead += bytesRead;
nBytesToRead -= bytesRead;
}
}
catch ( IOException e )
{
} catch (IOException e) {
throw new com.sun.star.io.IOException(e);
}
catch ( IndexOutOfBoundsException aie )
{
} catch (IndexOutOfBoundsException aie) {
throw new com.sun.star.io.BufferSizeExceededException(aie);
}
return totalBytesRead;
}
public int readSomeBytes( /*OUT*/byte[][] aData, /*IN*/int nMaxBytesToRead ) throws com.sun.star.io.NotConnectedException, com.sun.star.io.BufferSizeExceededException, com.sun.star.io.IOException
{
public int readSomeBytes(/*OUT*/byte[][] aData, /*IN*/int nMaxBytesToRead)
throws com.sun.star.io.NotConnectedException,
com.sun.star.io.BufferSizeExceededException, com.sun.star.io.IOException {
int bytesToRead = nMaxBytesToRead;
int availableBytes = available();
if ( availableBytes < nMaxBytesToRead )
{
if (availableBytes < nMaxBytesToRead) {
bytesToRead = availableBytes;
}
int read = readBytes( aData, bytesToRead );
int read = readBytes(aData, bytesToRead);
return read;
}
public void skipBytes( /*IN*/int nBytesToSkip ) throws com.sun.star.io.NotConnectedException, com.sun.star.io.BufferSizeExceededException, com.sun.star.io.IOException
{
try
{
is.skip( nBytesToSkip );
}
catch ( IOException e )
{
public void skipBytes(/*IN*/int nBytesToSkip) throws
com.sun.star.io.NotConnectedException,
com.sun.star.io.BufferSizeExceededException, com.sun.star.io.IOException {
try {
is.skip(nBytesToSkip);
} catch (IOException e) {
throw new com.sun.star.io.IOException(e);
}
}
public int available( ) throws com.sun.star.io.NotConnectedException, com.sun.star.io.IOException
{
public int available() throws com.sun.star.io.NotConnectedException,
com.sun.star.io.IOException {
int bytesAvail = 0;
try
{
try {
bytesAvail = is.available();
}
catch ( IOException e )
{
} catch (IOException e) {
throw new com.sun.star.io.IOException(e);
}
return bytesAvail;
}
public void closeInput( ) throws com.sun.star.io.NotConnectedException, com.sun.star.io.IOException
{
try
{
public void closeInput() throws com.sun.star.io.NotConnectedException,
com.sun.star.io.IOException {
try {
is.close();
}
catch( IOException e )
{
} catch (IOException e) {
throw new com.sun.star.io.IOException(e);
}
}

View File

@@ -28,69 +28,59 @@ public class XInputStreamWrapper extends InputStream {
}
@Override
public int read() throws java.io.IOException
{
public int read() throws java.io.IOException {
byte[][] byteRet = new byte[1][0];
long numRead;
try {
numRead = m_xInputStream.readBytes(byteRet, 1);
}
catch (com.sun.star.io.IOException ioe) {
} catch (com.sun.star.io.IOException ioe) {
throw new java.io.IOException(ioe.getMessage());
}
if (numRead != 1) {
return -1;
}
return byteRet[0][0];
}
@Override
public int read( byte[] b ) throws java.io.IOException
{
public int read(byte[] b) throws java.io.IOException {
byte[][] byteRet = new byte[1][];
byteRet[0] = b;
try
{
return m_xInputStream.readBytes( byteRet, b.length );
}
catch ( com.sun.star.io.IOException ioe)
{
try {
return m_xInputStream.readBytes(byteRet, b.length);
} catch (com.sun.star.io.IOException ioe) {
throw new java.io.IOException(ioe.getMessage());
}
}
@Override
public long skip(long n) throws java.io.IOException
{
public long skip(long n) throws java.io.IOException {
try {
m_xInputStream.skipBytes((int)n);
return n;
}
catch (com.sun.star.io.IOException ioe) {
} catch (com.sun.star.io.IOException ioe) {
throw new java.io.IOException(ioe.getMessage());
}
}
@Override
public int available() throws java.io.IOException
{
public int available() throws java.io.IOException {
try {
return m_xInputStream.available();
}
catch (com.sun.star.io.IOException ioe) {
} catch (com.sun.star.io.IOException ioe) {
throw new java.io.IOException(ioe.getMessage());
}
}
@Override
public void close() throws java.io.IOException
{
public void close() throws java.io.IOException {
try {
m_xInputStream.closeInput();
}
catch (com.sun.star.io.IOException ioe) {
} catch (com.sun.star.io.IOException ioe) {
throw new java.io.IOException(ioe.getMessage());
}
}

View File

@@ -21,101 +21,83 @@ import com.sun.star.io.XOutputStream;
public class XOutputStreamWrapper extends OutputStream {
private XOutputStream m_xOutputStream;
public XOutputStreamWrapper(XOutputStream xOs ) {
this.m_xOutputStream = xOs;
}
@Override
public void write(int b)
throws java.io.IOException
{
if ( m_xOutputStream == null )
{
throw new java.io.IOException("Stream is null");
}
byte[] bytes = new byte[1];
bytes[0] = (byte) b;
try
{
m_xOutputStream.writeBytes( bytes );
}
catch ( com.sun.star.io.IOException ioe )
{
throw new java.io.IOException(ioe.getMessage());
}
}
@Override
public void write(byte[] b)
throws java.io.IOException
{
if ( m_xOutputStream == null )
{
throw new java.io.IOException( "Stream is null" );
}
try
{
m_xOutputStream.writeBytes( b );
}
catch ( com.sun.star.io.IOException ioe )
{
throw new java.io.IOException(ioe.getMessage());
}
}
@Override
public void write( byte[] b, int off, int len )
throws java.io.IOException
{
if ( m_xOutputStream == null )
{
throw new java.io.IOException( "Stream is null" );
}
byte[] bytes = new byte[len];
System.arraycopy(b, off, bytes, 0, len);
try
{
m_xOutputStream.writeBytes(bytes);
}
catch ( com.sun.star.io.IOException ioe )
{
throw new java.io.IOException(ioe.getMessage());
}
private XOutputStream m_xOutputStream;
public XOutputStreamWrapper(XOutputStream xOs) {
this.m_xOutputStream = xOs;
}
@Override
public void write(int b)
throws java.io.IOException {
if (m_xOutputStream == null) {
throw new java.io.IOException("Stream is null");
}
@Override
public void flush()
throws java.io.IOException
{
if ( m_xOutputStream == null )
{
throw new java.io.IOException( "Stream is null" );
}
try
{
m_xOutputStream.flush();
}
catch ( com.sun.star.io.IOException ioe )
{
throw new java.io.IOException(ioe.getMessage());
}
byte[] bytes = new byte[1];
bytes[0] = (byte) b;
try {
m_xOutputStream.writeBytes(bytes);
} catch (com.sun.star.io.IOException ioe) {
throw new java.io.IOException(ioe.getMessage());
}
@Override
public void close()
throws java.io.IOException
{
if ( m_xOutputStream == null )
{
throw new java.io.IOException( "Stream is null" );
}
try
{
m_xOutputStream.closeOutput();
}
catch ( com.sun.star.io.IOException ioe )
{
throw new java.io.IOException(ioe.getMessage());
}
}
@Override
public void write(byte[] b)
throws java.io.IOException {
if (m_xOutputStream == null) {
throw new java.io.IOException("Stream is null");
}
try {
m_xOutputStream.writeBytes(b);
} catch (com.sun.star.io.IOException ioe) {
throw new java.io.IOException(ioe.getMessage());
}
}
@Override
public void write(byte[] b, int off, int len)
throws java.io.IOException {
if (m_xOutputStream == null) {
throw new java.io.IOException("Stream is null");
}
byte[] bytes = new byte[len];
System.arraycopy(b, off, bytes, 0, len);
try {
m_xOutputStream.writeBytes(bytes);
} catch (com.sun.star.io.IOException ioe) {
throw new java.io.IOException(ioe.getMessage());
}
}
@Override
public void flush()
throws java.io.IOException {
if (m_xOutputStream == null) {
throw new java.io.IOException("Stream is null");
}
try {
m_xOutputStream.flush();
} catch (com.sun.star.io.IOException ioe) {
throw new java.io.IOException(ioe.getMessage());
}
}
@Override
public void close()
throws java.io.IOException {
if (m_xOutputStream == null) {
throw new java.io.IOException("Stream is null");
}
try {
m_xOutputStream.closeOutput();
} catch (com.sun.star.io.IOException ioe) {
throw new java.io.IOException(ioe.getMessage());
}
}
}

View File

@@ -50,182 +50,158 @@ import java.util.*;
import java.io.*;
public class XStorageHelper implements XEventListener
{
public class XStorageHelper implements XEventListener {
XStorage[] xStorages;
XStream xStream;
XInputStream xIs = null;
XOutputStream xOs = null;
static Map<String,XModel> modelMap = new HashMap<String,XModel>();
static Map<String, XModel> modelMap = new HashMap<String, XModel>();
XModel xModel = null;
private static XStorageHelper listener = new XStorageHelper();
private XStorageHelper() {}
public XStorageHelper( String path, int mode, boolean create ) throws IOException
{
public XStorageHelper(String path, int mode,
boolean create) throws IOException {
String modelUrl = null;
int indexOfScriptsDir = path.lastIndexOf( "Scripts" );
if ( indexOfScriptsDir > -1 )
{
modelUrl = path.substring( 0, indexOfScriptsDir - 1 );
path = path.substring( indexOfScriptsDir, path.length());
int indexOfScriptsDir = path.lastIndexOf("Scripts");
if (indexOfScriptsDir > -1) {
modelUrl = path.substring(0, indexOfScriptsDir - 1);
path = path.substring(indexOfScriptsDir, path.length());
}
LogUtils.DEBUG("XStorageHelper ctor, path: " + path);
this.xModel = getModelForURL( modelUrl );
this.xModel = getModelForURL(modelUrl);
try
{
try {
StringTokenizer tokens = new StringTokenizer(path, "/");
if (tokens.countTokens() == 0)
{
throw new IOException("Invalid path");
if (tokens.countTokens() == 0) {
throw new IOException("Invalid path");
}
XDocumentSubStorageSupplier xDocumentSubStorageSupplier =
UnoRuntime.queryInterface(
XDocumentSubStorageSupplier.class, xModel);
XDocumentSubStorageSupplier.class, xModel);
xStorages = new XStorage[tokens.countTokens() ];
LogUtils.DEBUG("XStorageHelper ctor, path chunks length: " + xStorages.length );
LogUtils.DEBUG("XStorageHelper ctor, path chunks length: " + xStorages.length);
for ( int i = 0; i < xStorages.length; i++ )
{
LogUtils.DEBUG("XStorageHelper, processing index " + i );
for (int i = 0; i < xStorages.length; i++) {
LogUtils.DEBUG("XStorageHelper, processing index " + i);
String name = tokens.nextToken();
LogUtils.DEBUG("XStorageHelper, getting: " + name);
XStorage storage = null;
if ( i == 0 )
{
storage = xDocumentSubStorageSupplier.getDocumentSubStorage( name, mode );
if ( storage == null )
{
LogUtils.DEBUG("** boo hoo Storage is null " );
if (i == 0) {
storage = xDocumentSubStorageSupplier.getDocumentSubStorage(name, mode);
if (storage == null) {
LogUtils.DEBUG("** boo hoo Storage is null ");
}
XPropertySet xProps = UnoRuntime.queryInterface(XPropertySet.class,storage );
if ( xProps != null )
{
String mediaType = AnyConverter.toString( xProps.getPropertyValue( "MediaType" ) );
LogUtils.DEBUG("***** media type is " + mediaType );
if ( !mediaType.equals("scripts") )
{
xProps.setPropertyValue("MediaType","scripts");
XPropertySet xProps = UnoRuntime.queryInterface(XPropertySet.class, storage);
if (xProps != null) {
String mediaType = AnyConverter.toString(xProps.getPropertyValue("MediaType"));
LogUtils.DEBUG("***** media type is " + mediaType);
if (!mediaType.equals("scripts")) {
xProps.setPropertyValue("MediaType", "scripts");
}
}
}
else
{
XNameAccess xNameAccess = UnoRuntime.queryInterface(XNameAccess.class, xStorages[i-1]);
if (xNameAccess == null )
{
} else {
XNameAccess xNameAccess = UnoRuntime.queryInterface(XNameAccess.class,
xStorages[i - 1]);
if (xNameAccess == null) {
disposeObject();
throw new IOException("No name access " + name);
}
else if ( !xNameAccess.hasByName(name) || !xStorages[i-1].isStorageElement(name) )
{
if ( !create )
{
} else if (!xNameAccess.hasByName(name)
|| !xStorages[i - 1].isStorageElement(name)) {
if (!create) {
disposeObject();
throw new IOException("No subdir: " + name);
}
else
{
} else {
// attempt to create new storage
LogUtils.DEBUG("Attempt to create new storage for " + name );
LogUtils.DEBUG("Attempt to create new storage for " + name);
}
}
storage = xStorages[i-1].openStorageElement(
name, mode );
storage = xStorages[i - 1].openStorageElement(
name, mode);
}
if ( storage == null )
{
if (storage == null) {
disposeObject();
throw new IOException("storage not found: " + name);
}
xStorages[ i ] = storage;
}
}
catch ( com.sun.star.io.IOException ioe)
{
} catch (com.sun.star.io.IOException ioe) {
disposeObject();
}
catch (com.sun.star.uno.Exception e)
{
} catch (com.sun.star.uno.Exception e) {
disposeObject();
throw new IOException(e.getMessage());
}
}
public synchronized static void addNewModel( XModel model )
{
public synchronized static void addNewModel(XModel model) {
// TODO needs to cater for model for untitled document
modelMap.put( PathUtils.getOidForModel( model ), model );
modelMap.put(PathUtils.getOidForModel(model), model);
XComponent xComp = UnoRuntime.queryInterface(XComponent.class, model);
if ( xComp != null )
{
try
{
xComp.addEventListener( listener );
}
catch ( Exception e )
{
if (xComp != null) {
try {
xComp.addEventListener(listener);
} catch (Exception e) {
// What TODO here ?
LogUtils.DEBUG( LogUtils.getTrace( e ) );
LogUtils.DEBUG(LogUtils.getTrace(e));
}
}
}
public void disposing( EventObject Source )
{
XModel model = UnoRuntime.queryInterface(XModel.class,Source.Source );
public void disposing(EventObject Source) {
XModel model = UnoRuntime.queryInterface(XModel.class, Source.Source);
if ( model != null )
{
LogUtils.DEBUG(" Disposing doc " + model.getURL() );
modelMap.remove( model );
if (model != null) {
LogUtils.DEBUG(" Disposing doc " + model.getURL());
modelMap.remove(model);
}
}
public XStorage getStorage()
{
public XStorage getStorage() {
return xStorages[ xStorages.length - 1 ];
}
public XModel getModel()
{
public XModel getModel() {
return xModel;
}
public void disposeObject()
{
disposeObject( false );
public void disposeObject() {
disposeObject(false);
}
public void disposeObject( boolean shouldCommit )
{
public void disposeObject(boolean shouldCommit) {
LogUtils.DEBUG("In disposeObject");
for ( int i = xStorages.length -1 ; i > -1; i-- )
{
LogUtils.DEBUG("In disposeObject disposing storage " + i );
try
{
for (int i = xStorages.length - 1 ; i > -1; i--) {
LogUtils.DEBUG("In disposeObject disposing storage " + i);
try {
XStorage xStorage = xStorages[i];
if ( shouldCommit )
{
if (shouldCommit) {
commit(xStorage);
}
disposeObject(xStorage);
LogUtils.DEBUG("In disposeObject disposed storage " + i );
}
catch( Exception ignore )
{
LogUtils.DEBUG("Exception disposing storage " + i );
LogUtils.DEBUG("In disposeObject disposed storage " + i);
} catch (Exception ignore) {
LogUtils.DEBUG("Exception disposing storage " + i);
}
}
}
static public void disposeObject( XInterface xInterface )
{
static public void disposeObject(XInterface xInterface) {
if (xInterface == null) {
return;
}
@@ -235,28 +211,25 @@ public class XStorageHelper implements XEventListener
if (xComponent == null) {
return;
}
xComponent.dispose();
}
static public void commit( XInterface xInterface )
{
XTransactedObject xTrans = UnoRuntime.queryInterface(XTransactedObject.class, xInterface);
if ( xTrans != null )
{
try
{
static public void commit(XInterface xInterface) {
XTransactedObject xTrans = UnoRuntime.queryInterface(XTransactedObject.class,
xInterface);
if (xTrans != null) {
try {
xTrans.commit();
}
catch ( Exception e )
{
LogUtils.DEBUG("Something went bellyup exception: " + e );
} catch (Exception e) {
LogUtils.DEBUG("Something went bellyup exception: " + e);
}
}
}
public XModel getModelForURL( String url )
{
//TODO does not cater for untitled documents
return modelMap.get( url );
public XModel getModelForURL(String url) {
//TODO does not cater for untitled documents
return modelMap.get(url);
}
}

View File

@@ -25,13 +25,11 @@ public class LogUtils {
private static boolean m_bDebugEnabled = false;
static
{
static {
String debugFlag =
System.getProperties().getProperty("ScriptJavaRuntimeDebug");
if (debugFlag != null && debugFlag.length() > 0)
{
if (debugFlag != null && debugFlag.length() > 0) {
m_bDebugEnabled = debugFlag.equalsIgnoreCase("true");
}
}
@@ -45,42 +43,34 @@ public class LogUtils {
*
* @param msg message to be displayed
*/
public static void DEBUG(String msg)
{
if (m_bDebugEnabled)
{
public static void DEBUG(String msg) {
if (m_bDebugEnabled) {
System.out.println(msg);
}
}
public static String getTrace( Exception e )
{
public static String getTrace(Exception e) {
ByteArrayOutputStream baos = null;
PrintStream ps = null;
String result = "";
try
{
baos = new ByteArrayOutputStream( );
ps = new PrintStream( baos );
e.printStackTrace( ps );
}
finally
{
try
{
if ( baos != null )
{
try {
baos = new ByteArrayOutputStream();
ps = new PrintStream(baos);
e.printStackTrace(ps);
} finally {
try {
if (baos != null) {
baos.close();
}
if ( ps != null )
{
if (ps != null) {
ps.close();
}
}
catch ( Exception excp )
{
} catch (Exception excp) {
}
}
return result;
}
}

View File

@@ -26,24 +26,23 @@ import com.sun.star.script.framework.container.ScriptMetaData;
/**
* Class Loader Factory
*/
public class ClassLoaderFactory
{
public class ClassLoaderFactory {
private ClassLoaderFactory() {}
public static ClassLoader getURLClassLoader( ScriptMetaData scriptData )
{
public static ClassLoader getURLClassLoader(ScriptMetaData scriptData) {
ClassLoader parent = scriptData.getClass().getClassLoader();
URL[] classPath = scriptData.getClassPath();
LogUtils.DEBUG("Classpath has length " + classPath.length );
for ( int i=0; i < classPath.length; i++ )
{
LogUtils.DEBUG("ClassPath " + i + "} is " + classPath[ i ].toString() );
LogUtils.DEBUG("Classpath has length " + classPath.length);
for (int i = 0; i < classPath.length; i++) {
LogUtils.DEBUG("ClassPath " + i + "} is " + classPath[ i ].toString());
}
return getURLClassLoader( parent, classPath );
return getURLClassLoader(parent, classPath);
}
private static ClassLoader getURLClassLoader( ClassLoader parent, URL[] classpath)
{
return new URLClassLoader( classpath, parent);
private static ClassLoader getURLClassLoader(ClassLoader parent,
URL[] classpath) {
return new URLClassLoader(classpath, parent);
}
}

View File

@@ -25,13 +25,11 @@ import com.sun.star.document.XScriptInvocationContext;
import com.sun.star.script.provider.XScriptContext;
public class EditorScriptContext implements XScriptContext
{
public class EditorScriptContext implements XScriptContext {
private XDesktop m_xDeskTop;
private XComponentContext m_xComponentContext;
public EditorScriptContext( XComponentContext xmComponentContext,
XDesktop xDesktop )
{
public EditorScriptContext(XComponentContext xmComponentContext,
XDesktop xDesktop) {
this.m_xComponentContext = xmComponentContext;
this.m_xDeskTop = xDesktop;
}
@@ -41,18 +39,16 @@ public class EditorScriptContext implements XScriptContext
@return XModel interface
*/
public XModel getDocument()
{
XModel xModel = UnoRuntime.queryInterface( XModel.class,
m_xDeskTop.getCurrentComponent() );
public XModel getDocument() {
XModel xModel = UnoRuntime.queryInterface(XModel.class,
m_xDeskTop.getCurrentComponent());
return xModel;
}
public XScriptInvocationContext getInvocationContext()
{
public XScriptInvocationContext getInvocationContext() {
XScriptInvocationContext xContext = UnoRuntime.queryInterface(
XScriptInvocationContext.class, getDocument() );
XScriptInvocationContext.class, getDocument());
return xContext;
}
@@ -61,8 +57,7 @@ public class EditorScriptContext implements XScriptContext
@return XDesktop interface
*/
public XDesktop getDesktop()
{
public XDesktop getDesktop() {
return m_xDeskTop;
}
@@ -71,9 +66,8 @@ public class EditorScriptContext implements XScriptContext
@return XComponentContext interface
*/
public XComponentContext getComponentContext()
{
return m_xComponentContext;
public XComponentContext getComponentContext() {
return m_xComponentContext;
}
}

View File

@@ -18,14 +18,12 @@
package com.sun.star.script.framework.provider;
public class NoSuitableClassLoaderException extends Exception
{
public class NoSuitableClassLoaderException extends Exception {
/**
* Constructs an <code>NoSuitableClassLoaderException</code> with <code>null</code>
* as its error detail message.
*/
public NoSuitableClassLoaderException()
{
public NoSuitableClassLoaderException() {
super();
}
/**
@@ -36,8 +34,7 @@ public class NoSuitableClassLoaderException extends Exception
*
* @param s the detail message.
*/
public NoSuitableClassLoaderException(String s)
{
public NoSuitableClassLoaderException(String s) {
super(s);
}

View File

@@ -38,46 +38,41 @@ public class PathUtils {
BOOTSTRAP_NAME = m_windows ? "bootstrap.ini" : "bootstraprc";
}
public static String getOidForModel( XModel xModel )
{
public static String getOidForModel(XModel xModel) {
String oid = "";
if ( xModel != null )
{
try
{
Method getOid = IQueryInterface.class.getMethod("getOid", (java.lang.Class[])null);
if ( getOid != null )
{
oid = (String)getOid.invoke( xModel, new Object[0] );
if (xModel != null) {
try {
Method getOid = IQueryInterface.class.getMethod("getOid",
(java.lang.Class[])null);
if (getOid != null) {
oid = (String)getOid.invoke(xModel, new Object[0]);
}
}
catch ( Exception ignore )
{
} catch (Exception ignore) {
}
}
return oid;
}
static public String make_url( String baseUrl, String url )
{
StringBuilder buff = new StringBuilder( baseUrl.length() + url.length() );
buff.append( baseUrl );
StringTokenizer t = new StringTokenizer( url, "/");
while ( t.hasMoreElements() )
{
if ( buff.charAt( buff.length() - 1 ) != '/' )
{
buff.append('/');
}
try
{
buff.append( java.net.URLEncoder.encode( (String)t.nextElement(), "UTF-8" ) );
}
catch (java.io.UnsupportedEncodingException e)
{
e.printStackTrace();
}
static public String make_url(String baseUrl, String url) {
StringBuilder buff = new StringBuilder(baseUrl.length() + url.length());
buff.append(baseUrl);
StringTokenizer t = new StringTokenizer(url, "/");
while (t.hasMoreElements()) {
if (buff.charAt(buff.length() - 1) != '/') {
buff.append('/');
}
try {
buff.append(java.net.URLEncoder.encode((String)t.nextElement(), "UTF-8"));
} catch (java.io.UnsupportedEncodingException e) {
e.printStackTrace();
}
}
return buff.toString();
}

View File

@@ -31,8 +31,7 @@ import com.sun.star.script.provider.XScriptContext;
import com.sun.star.script.framework.log.LogUtils;
public class ScriptContext extends PropertySet implements XScriptContext
{
public class ScriptContext extends PropertySet implements XScriptContext {
private final static String HM_DOC_REF = "DocumentReference";
private final static String HM_DESKTOP = "Desktop";
private final static String HM_COMPONENT_CONTEXT = "ComponentContext";
@@ -47,51 +46,50 @@ public class ScriptContext extends PropertySet implements XScriptContext
private XComponentContext m_xComponentContext = null;
private ScriptContext( XComponentContext xmComponentContext,
XDesktop xDesktop, XModel xModel, XScriptInvocationContext xInvocContext)
{
private ScriptContext(XComponentContext xmComponentContext,
XDesktop xDesktop, XModel xModel, XScriptInvocationContext xInvocContext) {
this.m_xDeskTop = xDesktop;
this.m_xComponentContext = xmComponentContext;
this.m_xModel = xModel;
this.m_xInvocationContext = xInvocContext;
if ( m_xModel != null )
{
registerProperty( DOC_URI, new Type(String.class),
(short)(PropertyAttribute.MAYBEVOID | PropertyAttribute.TRANSIENT), "m_sDocURI");
if (m_xModel != null) {
registerProperty(DOC_URI, new Type(String.class),
(short)(PropertyAttribute.MAYBEVOID | PropertyAttribute.TRANSIENT),
"m_sDocURI");
}
registerProperty( HM_DOC_REF, new Type(XModel.class),
(short)(PropertyAttribute.MAYBEVOID | PropertyAttribute.TRANSIENT), "m_xModel");
registerProperty( HM_DESKTOP, new Type(XDesktop.class),
(short)(PropertyAttribute.MAYBEVOID | PropertyAttribute.TRANSIENT), "m_xDeskTop");
registerProperty( HM_COMPONENT_CONTEXT, new Type(XDesktop.class),
(short)(PropertyAttribute.MAYBEVOID | PropertyAttribute.TRANSIENT), "m_xComponentContext");
registerProperty(HM_DOC_REF, new Type(XModel.class),
(short)(PropertyAttribute.MAYBEVOID | PropertyAttribute.TRANSIENT), "m_xModel");
registerProperty(HM_DESKTOP, new Type(XDesktop.class),
(short)(PropertyAttribute.MAYBEVOID | PropertyAttribute.TRANSIENT),
"m_xDeskTop");
registerProperty(HM_COMPONENT_CONTEXT, new Type(XDesktop.class),
(short)(PropertyAttribute.MAYBEVOID | PropertyAttribute.TRANSIENT),
"m_xComponentContext");
}
public static XScriptContext createContext( XModel xModel, XScriptInvocationContext xInvocContext,
XComponentContext xCtxt, XMultiComponentFactory xMCF)
{
public static XScriptContext createContext(XModel xModel,
XScriptInvocationContext xInvocContext,
XComponentContext xCtxt, XMultiComponentFactory xMCF) {
XScriptContext sc = null;
try {
Object xInterface = xMCF.createInstanceWithContext(
"com.sun.star.frame.Desktop", xCtxt);
"com.sun.star.frame.Desktop", xCtxt);
XDesktop xDesktop = UnoRuntime.queryInterface(XDesktop.class, xInterface);
if ( xModel != null )
{
if (xModel != null) {
sc = new ScriptContext(xCtxt, xDesktop, xModel, xInvocContext);
}
else
{
sc = new EditorScriptContext(xCtxt, xDesktop );
} else {
sc = new EditorScriptContext(xCtxt, xDesktop);
}
} catch (Exception e) {
LogUtils.DEBUG(LogUtils.getTrace(e));
}
catch ( Exception e ) {
LogUtils.DEBUG( LogUtils.getTrace( e ) );
}
return sc;
}
@@ -101,13 +99,11 @@ public class ScriptContext extends PropertySet implements XScriptContext
@return XModel interface
*/
public XModel getDocument()
{
public XModel getDocument() {
return m_xModel;
}
public XScriptInvocationContext getInvocationContext()
{
public XScriptInvocationContext getInvocationContext() {
return m_xInvocationContext;
}
@@ -116,8 +112,7 @@ public class ScriptContext extends PropertySet implements XScriptContext
@return XDesktop interface
*/
public XDesktop getDesktop()
{
public XDesktop getDesktop() {
return m_xDeskTop;
}
@@ -126,9 +121,8 @@ public class ScriptContext extends PropertySet implements XScriptContext
@return XComponentContext interface
*/
public XComponentContext getComponentContext()
{
return m_xComponentContext;
public XComponentContext getComponentContext() {
return m_xComponentContext;
}
}

View File

@@ -21,10 +21,9 @@ package com.sun.star.script.framework.provider;
import com.sun.star.script.provider.XScriptContext;
import com.sun.star.script.framework.container.ScriptMetaData;
public interface ScriptEditor
{
public interface ScriptEditor {
Object execute() throws Exception;
void indicateErrorLine( int lineNum );
void indicateErrorLine(int lineNum);
void edit(XScriptContext context, ScriptMetaData entry);
String getTemplate();
String getExtension();

View File

@@ -80,8 +80,7 @@ import com.sun.star.uno.TypeClass;
public abstract class ScriptProvider
implements XScriptProvider, XBrowseNode, XPropertySet, XInvocation,
XInitialization, XTypeProvider, XServiceInfo, XNameContainer
{
XInitialization, XTypeProvider, XServiceInfo, XNameContainer {
private final String[] __serviceNames = {
"com.sun.star.script.provider.ScriptProviderFor",
"com.sun.star.script.provider.LanguageScriptProvider"
@@ -100,178 +99,165 @@ public abstract class ScriptProvider
// proxies to helper objects which implement interfaces
private XPropertySet m_xPropertySetProxy;
private XInvocation m_xInvocationProxy;
// TODO should this be implemented in this class
// TODO should this be implemented in this class
private XBrowseNode m_xBrowseNodeProxy;
private XScriptContext m_xScriptContext;
public ScriptProvider( XComponentContext ctx, String language )
{
public ScriptProvider(XComponentContext ctx, String language) {
this.language = language;
__serviceNames[0] += language;
LogUtils.DEBUG( "ScriptProvider: constructor - start. " + language );
LogUtils.DEBUG("ScriptProvider: constructor - start. " + language);
m_xContext = ctx;
// Initialize DialogFactory class in case dialogs are required
DialogFactory.createDialogFactory(m_xContext);
try
{
try {
m_xMultiComponentFactory = m_xContext.getServiceManager();
if ( m_xMultiComponentFactory == null )
{
throw new Exception( "Error could not obtain a " +
"multicomponent factory - rethrowing Exception." );
if (m_xMultiComponentFactory == null) {
throw new Exception("Error could not obtain a " +
"multicomponent factory - rethrowing Exception.");
}
Object serviceObj = m_xContext.getValueByName(
"/singletons/com.sun.star.util.theMacroExpander");
"/singletons/com.sun.star.util.theMacroExpander");
XMacroExpander me = (XMacroExpander) AnyConverter.toObject(
new Type(XMacroExpander.class), serviceObj);
new Type(XMacroExpander.class), serviceObj);
XMLParserFactory.setOfficeDTDURL(me.expandMacros(
"$BRAND_BASE_DIR/$BRAND_SHARE_SUBDIR/dtd/officedocument/1_0/"));
"$BRAND_BASE_DIR/$BRAND_SHARE_SUBDIR/dtd/officedocument/1_0/"));
}
catch ( Exception e )
{
LogUtils.DEBUG( LogUtils.getTrace( e ) );
} catch (Exception e) {
LogUtils.DEBUG(LogUtils.getTrace(e));
com.sun.star.uno.RuntimeException e2 =
new com.sun.star.uno.RuntimeException(
"Error constructing ScriptProvider: " + e );
e2.initCause( e );
"Error constructing ScriptProvider: " + e);
e2.initCause(e);
throw e2;
}
LogUtils.DEBUG( "ScriptProvider: constructor - finished." );
LogUtils.DEBUG("ScriptProvider: constructor - finished.");
}
synchronized public XScriptContext getScriptingContext()
{
if ( m_xScriptContext == null )
{
m_xScriptContext = ScriptContext.createContext( m_xModel, m_xInvocContext, m_xContext, m_xMultiComponentFactory );
synchronized public XScriptContext getScriptingContext() {
if (m_xScriptContext == null) {
m_xScriptContext = ScriptContext.createContext(m_xModel, m_xInvocContext,
m_xContext, m_xMultiComponentFactory);
}
return m_xScriptContext;
}
public void initialize( Object[] aArguments )
throws com.sun.star.uno.Exception
{
LogUtils.DEBUG( "entering XInit for language " + language);
public void initialize(Object[] aArguments)
throws com.sun.star.uno.Exception {
LogUtils.DEBUG("entering XInit for language " + language);
boolean isPkgProvider = false;
if( aArguments.length == 1 )
{
if (aArguments.length == 1) {
String contextUrl = null;
if ( AnyConverter.getType(aArguments[0]).getTypeClass().equals(TypeClass.INTERFACE) )
{
if (AnyConverter.getType(aArguments[0]).getTypeClass().equals(
TypeClass.INTERFACE)) {
// try whether it denotes a XScriptInvocationContext
m_xInvocContext = UnoRuntime.queryInterface(
XScriptInvocationContext.class, aArguments[0]);
if ( m_xInvocContext != null )
{
XScriptInvocationContext.class, aArguments[0]);
if (m_xInvocContext != null) {
// if so, obtain the document - by definition, this must be
// the ScriptContainer
m_xModel = UnoRuntime.queryInterface( XModel.class,
m_xInvocContext.getScriptContainer() );
}
else
{
m_xModel = UnoRuntime.queryInterface(XModel.class,
m_xInvocContext.getScriptContainer());
} else {
// otherwise, check whether it's an XModel
m_xModel = UnoRuntime.queryInterface( XModel.class,
m_xInvocContext.getScriptContainer() );
m_xModel = UnoRuntime.queryInterface(XModel.class,
m_xInvocContext.getScriptContainer());
}
if ( m_xModel == null )
{
if (m_xModel == null) {
throw new com.sun.star.uno.Exception(
"ScriptProvider argument must be either a string, a valid XScriptInvocationContext, " +
"ScriptProvider argument must be either a string, a valid XScriptInvocationContext, "
+
"or an XModel", this);
}
contextUrl = getDocUrlFromModel( m_xModel );
m_container = new ParcelContainer( m_xContext, contextUrl, language );
}
else if (AnyConverter.isString(aArguments[0]))
{
contextUrl = getDocUrlFromModel(m_xModel);
m_container = new ParcelContainer(m_xContext, contextUrl, language);
} else if (AnyConverter.isString(aArguments[0])) {
String originalContextURL = AnyConverter.toString(aArguments[0]);
LogUtils.DEBUG("creating Application, path: " + originalContextURL );
LogUtils.DEBUG("creating Application, path: " + originalContextURL);
contextUrl = originalContextURL;
// TODO no support for packages in documents yet
if ( originalContextURL.startsWith( "vnd.sun.star.tdoc" ) )
{
m_container = new ParcelContainer( m_xContext, contextUrl, language );
m_xModel = getModelFromDocUrl( originalContextURL );
}
else
{
if (originalContextURL.startsWith("vnd.sun.star.tdoc")) {
m_container = new ParcelContainer(m_xContext, contextUrl, language);
m_xModel = getModelFromDocUrl(originalContextURL);
} else {
String extensionDb = null;
String extensionRepository = null;
if ( originalContextURL.startsWith( "bundled" ) )
{
if (originalContextURL.startsWith("bundled")) {
contextUrl = "vnd.sun.star.expand:$BUNDLED_EXTENSIONS";
extensionDb = "vnd.sun.star.expand:${$BRAND_INI_DIR/" + PathUtils.BOOTSTRAP_NAME + "::UserInstallation}/user";
extensionDb = "vnd.sun.star.expand:${$BRAND_INI_DIR/" + PathUtils.BOOTSTRAP_NAME
+ "::UserInstallation}/user";
extensionRepository = "bundled";
}
else if ( originalContextURL.startsWith( "share" ) )
{
} else if (originalContextURL.startsWith("share")) {
contextUrl = "vnd.sun.star.expand:$BRAND_BASE_DIR/$BRAND_SHARE_SUBDIR";
extensionDb = "vnd.sun.star.expand:${$BRAND_INI_DIR/" + PathUtils.BOOTSTRAP_NAME + "::UserInstallation}/user";
extensionDb = "vnd.sun.star.expand:${$BRAND_INI_DIR/" + PathUtils.BOOTSTRAP_NAME
+ "::UserInstallation}/user";
extensionRepository = "shared";
}
else if ( originalContextURL.startsWith( "user" ) )
{
contextUrl = "vnd.sun.star.expand:${$BRAND_INI_DIR/" + PathUtils.BOOTSTRAP_NAME + "::UserInstallation}/user";
extensionDb = "vnd.sun.star.expand:${$BRAND_INI_DIR/" + PathUtils.BOOTSTRAP_NAME + "::UserInstallation}/user";
} else if (originalContextURL.startsWith("user")) {
contextUrl = "vnd.sun.star.expand:${$BRAND_INI_DIR/" + PathUtils.BOOTSTRAP_NAME
+ "::UserInstallation}/user";
extensionDb = "vnd.sun.star.expand:${$BRAND_INI_DIR/" + PathUtils.BOOTSTRAP_NAME
+ "::UserInstallation}/user";
extensionRepository = "user";
}
if ( originalContextURL.endsWith( "uno_packages") )
{
if (originalContextURL.endsWith("uno_packages")) {
isPkgProvider = true;
if (!originalContextURL.equals(contextUrl)
&& !extensionRepository.equals("bundled"))
{
&& !extensionRepository.equals("bundled")) {
contextUrl = PathUtils.make_url(contextUrl, "uno_packages");
}
}
if ( isPkgProvider )
{
m_container = new UnoPkgContainer( m_xContext, contextUrl, extensionDb, extensionRepository, language );
}
else
{
m_container = new ParcelContainer( m_xContext, contextUrl, language );
if (isPkgProvider) {
m_container = new UnoPkgContainer(m_xContext, contextUrl, extensionDb,
extensionRepository, language);
} else {
m_container = new ParcelContainer(m_xContext, contextUrl, language);
}
}
}
else
{
} else {
throw new com.sun.star.uno.RuntimeException(
"ScriptProvider created with invalid argument");
}
LogUtils.DEBUG("Modified Application path is: " + contextUrl );
LogUtils.DEBUG("isPkgProvider is: " + isPkgProvider );
LogUtils.DEBUG("Modified Application path is: " + contextUrl);
LogUtils.DEBUG("isPkgProvider is: " + isPkgProvider);
// TODO should all be done in this class instead of
// deleagation????
m_xBrowseNodeProxy = new ProviderBrowseNode( this,
m_container, m_xContext );
m_xBrowseNodeProxy = new ProviderBrowseNode(this,
m_container, m_xContext);
m_xInvocationProxy = UnoRuntime.queryInterface(XInvocation.class, m_xBrowseNodeProxy);
m_xPropertySetProxy = UnoRuntime.queryInterface(XPropertySet.class, m_xBrowseNodeProxy);
}
else
{
m_xInvocationProxy = UnoRuntime.queryInterface(XInvocation.class,
m_xBrowseNodeProxy);
m_xPropertySetProxy = UnoRuntime.queryInterface(XPropertySet.class,
m_xBrowseNodeProxy);
} else {
// this is ok, for example when executing a script from the
// command line
LogUtils.DEBUG( "ScriptProviderFor" + language +
" initialized without a context");
LogUtils.DEBUG("ScriptProviderFor" + language +
" initialized without a context");
}
LogUtils.DEBUG( "leaving XInit" );
LogUtils.DEBUG("leaving XInit");
}
/**
@@ -279,17 +265,16 @@ public abstract class ScriptProvider
*
* @return The types value
*/
public com.sun.star.uno.Type[] getTypes()
{
public com.sun.star.uno.Type[] getTypes() {
Type[] retValue = new Type[ 8 ];
retValue[ 0 ] = new Type( XScriptProvider.class );
retValue[ 1 ] = new Type( XBrowseNode.class );
retValue[ 2 ] = new Type( XInitialization.class );
retValue[ 3 ] = new Type( XTypeProvider.class );
retValue[ 4 ] = new Type( XServiceInfo.class );
retValue[ 5 ] = new Type( XPropertySet.class );
retValue[ 6 ] = new Type( XInvocation.class );
retValue[ 7 ] = new Type( com.sun.star.container.XNameContainer.class );
retValue[ 0 ] = new Type(XScriptProvider.class);
retValue[ 1 ] = new Type(XBrowseNode.class);
retValue[ 2 ] = new Type(XInitialization.class);
retValue[ 3 ] = new Type(XTypeProvider.class);
retValue[ 4 ] = new Type(XServiceInfo.class);
retValue[ 5 ] = new Type(XPropertySet.class);
retValue[ 6 ] = new Type(XInvocation.class);
retValue[ 7 ] = new Type(com.sun.star.container.XNameContainer.class);
return retValue;
}
@@ -298,8 +283,7 @@ public abstract class ScriptProvider
*
* @return The implementationId value
*/
public byte[] getImplementationId()
{
public byte[] getImplementationId() {
return new byte[0];
}
@@ -308,8 +292,7 @@ public abstract class ScriptProvider
*
* @return The implementationName value
*/
public String getImplementationName()
{
public String getImplementationName() {
return getClass().getName();
}
@@ -319,15 +302,13 @@ public abstract class ScriptProvider
* @param serviceName Description of the Parameter
* @return Description of the Return Value
*/
public boolean supportsService( String serviceName )
{
for ( int index = __serviceNames.length; index-- > 0; )
{
if ( serviceName.equals( __serviceNames[ index ] ) )
{
public boolean supportsService(String serviceName) {
for (int index = __serviceNames.length; index-- > 0;) {
if (serviceName.equals(__serviceNames[ index ])) {
return true;
}
}
return false;
}
@@ -336,16 +317,15 @@ public abstract class ScriptProvider
*
* @return The supportedServiceNames value
*/
public String[] getSupportedServiceNames()
{
public String[] getSupportedServiceNames() {
return __serviceNames;
}
public abstract XScript getScript( /*IN*/String scriptURI )
throws com.sun.star.uno.RuntimeException,
ScriptFrameworkErrorException;
public abstract XScript getScript(/*IN*/String scriptURI)
throws com.sun.star.uno.RuntimeException,
ScriptFrameworkErrorException;
// TODO need to encapsulate this better,
// Some factory concept for creating/accessing Editor
@@ -358,55 +338,51 @@ public abstract class ScriptProvider
// This method is used to get the ScriptEditor for this ScriptProvider
public abstract ScriptEditor getScriptEditor();
public ScriptMetaData getScriptData( /*IN*/String scriptURI ) throws ScriptFrameworkErrorException
public ScriptMetaData getScriptData(/*IN*/String scriptURI) throws
ScriptFrameworkErrorException
{
try
{
ParsedScriptUri details = m_container.parseScriptUri( scriptURI );
try
{
try {
ParsedScriptUri details = m_container.parseScriptUri(scriptURI);
try {
ScriptMetaData scriptData = m_container.findScript(details);
if (scriptData == null)
{
if (scriptData == null) {
throw new ScriptFrameworkErrorException(details.function + " does not exist",
null, details.function, language, ScriptFrameworkErrorType.NO_SUCH_SCRIPT);
null, details.function, language, ScriptFrameworkErrorType.NO_SUCH_SCRIPT);
}
return scriptData;
}
catch (com.sun.star.container.NoSuchElementException nse)
{
} catch (com.sun.star.container.NoSuchElementException nse) {
ScriptFrameworkErrorException e2
= new ScriptFrameworkErrorException(
nse.getMessage(), null, details.function, language,
ScriptFrameworkErrorType.NO_SUCH_SCRIPT);
= new ScriptFrameworkErrorException(
nse.getMessage(), null, details.function, language,
ScriptFrameworkErrorType.NO_SUCH_SCRIPT);
e2.initCause(nse);
throw e2;
}
catch (com.sun.star.lang.WrappedTargetException wta)
{
} catch (com.sun.star.lang.WrappedTargetException wta) {
// TODO specify the correct error Type
Exception wrapped = (Exception) wta.TargetException;
String message = wta.getMessage();
if (wrapped != null)
{
if (wrapped != null) {
message = wrapped.getMessage();
}
ScriptFrameworkErrorException e2
= new ScriptFrameworkErrorException(
message, null, details.function, language,
ScriptFrameworkErrorType.UNKNOWN);
= new ScriptFrameworkErrorException(
message, null, details.function, language,
ScriptFrameworkErrorType.UNKNOWN);
e2.initCause(wta);
throw e2;
}
}
catch (com.sun.star.lang.IllegalArgumentException ila)
{
} catch (com.sun.star.lang.IllegalArgumentException ila) {
// TODO specify the correct error Type
ScriptFrameworkErrorException e2
= new ScriptFrameworkErrorException(
ila.getMessage(), null, scriptURI, language,
ScriptFrameworkErrorType.UNKNOWN);
= new ScriptFrameworkErrorException(
ila.getMessage(), null, scriptURI, language,
ScriptFrameworkErrorType.UNKNOWN);
e2.initCause(ila);
throw e2;
}
@@ -414,39 +390,34 @@ public abstract class ScriptProvider
// Implementation of XBrowseNode interface
public String getName()
{
public String getName() {
return language;
}
public XBrowseNode[] getChildNodes()
{
if ( m_xBrowseNodeProxy == null )
{
public XBrowseNode[] getChildNodes() {
if (m_xBrowseNodeProxy == null) {
LogUtils.DEBUG("No Nodes available ");
return new XBrowseNode[0];
}
return m_xBrowseNodeProxy .getChildNodes();
}
public boolean hasChildNodes()
{
if ( m_xBrowseNodeProxy == null )
{
public boolean hasChildNodes() {
if (m_xBrowseNodeProxy == null) {
LogUtils.DEBUG("No Nodes available ");
return false;
}
return m_xBrowseNodeProxy.hasChildNodes();
}
public short getType()
{
public short getType() {
return BrowseNodeTypes.CONTAINER;
}
@Override
public String toString()
{
public String toString() {
return getName();
}
@@ -457,25 +428,22 @@ public abstract class ScriptProvider
public Object invoke(String aFunctionName, Object[] aParams,
short[][] aOutParamIndex, Object[][] aOutParam)
throws com.sun.star.lang.IllegalArgumentException,
com.sun.star.script.CannotConvertException,
com.sun.star.reflection.InvocationTargetException
{
throws com.sun.star.lang.IllegalArgumentException,
com.sun.star.script.CannotConvertException,
com.sun.star.reflection.InvocationTargetException {
return m_xInvocationProxy.invoke(
aFunctionName, aParams, aOutParamIndex, aOutParam);
aFunctionName, aParams, aOutParamIndex, aOutParam);
}
public void setValue(String aPropertyName, Object aValue)
throws com.sun.star.beans.UnknownPropertyException,
com.sun.star.script.CannotConvertException,
com.sun.star.reflection.InvocationTargetException
{
throws com.sun.star.beans.UnknownPropertyException,
com.sun.star.script.CannotConvertException,
com.sun.star.reflection.InvocationTargetException {
m_xInvocationProxy.setValue(aPropertyName, aValue);
}
public Object getValue(String aPropertyName)
throws com.sun.star.beans.UnknownPropertyException
{
throws com.sun.star.beans.UnknownPropertyException {
return m_xInvocationProxy.getValue(aPropertyName);
}
@@ -487,203 +455,195 @@ public abstract class ScriptProvider
return m_xInvocationProxy.hasProperty(aName);
}
public XPropertySetInfo getPropertySetInfo()
{
public XPropertySetInfo getPropertySetInfo() {
return m_xPropertySetProxy.getPropertySetInfo();
}
public void setPropertyValue(String aPropertyName, Object aValue)
throws com.sun.star.beans.UnknownPropertyException,
com.sun.star.beans.PropertyVetoException,
com.sun.star.lang.IllegalArgumentException,
com.sun.star.lang.WrappedTargetException
{
throws com.sun.star.beans.UnknownPropertyException,
com.sun.star.beans.PropertyVetoException,
com.sun.star.lang.IllegalArgumentException,
com.sun.star.lang.WrappedTargetException {
m_xPropertySetProxy.setPropertyValue(aPropertyName, aValue);
}
public Object getPropertyValue(String PropertyName)
throws com.sun.star.beans.UnknownPropertyException,
com.sun.star.lang.WrappedTargetException
{
throws com.sun.star.beans.UnknownPropertyException,
com.sun.star.lang.WrappedTargetException {
return m_xPropertySetProxy.getPropertyValue(PropertyName);
}
public void addPropertyChangeListener(
String aPropertyName, XPropertyChangeListener xListener)
throws com.sun.star.beans.UnknownPropertyException,
com.sun.star.lang.WrappedTargetException
{
throws com.sun.star.beans.UnknownPropertyException,
com.sun.star.lang.WrappedTargetException {
m_xPropertySetProxy.addPropertyChangeListener(aPropertyName, xListener);
}
public void removePropertyChangeListener(
String aPropertyName, XPropertyChangeListener aListener)
throws com.sun.star.beans.UnknownPropertyException,
com.sun.star.lang.WrappedTargetException
{
throws com.sun.star.beans.UnknownPropertyException,
com.sun.star.lang.WrappedTargetException {
m_xPropertySetProxy.removePropertyChangeListener(
aPropertyName, aListener);
}
public void addVetoableChangeListener(
String PropertyName, XVetoableChangeListener aListener)
throws com.sun.star.beans.UnknownPropertyException,
com.sun.star.lang.WrappedTargetException
{
throws com.sun.star.beans.UnknownPropertyException,
com.sun.star.lang.WrappedTargetException {
m_xPropertySetProxy.addVetoableChangeListener(PropertyName, aListener);
}
public void removeVetoableChangeListener(
String PropertyName, XVetoableChangeListener aListener)
throws com.sun.star.beans.UnknownPropertyException,
com.sun.star.lang.WrappedTargetException
{
throws com.sun.star.beans.UnknownPropertyException,
com.sun.star.lang.WrappedTargetException {
m_xPropertySetProxy.removeVetoableChangeListener(
PropertyName, aListener);
}
public java.lang.Object getByName( String aName ) throws com.sun.star.container.NoSuchElementException, com.sun.star.lang.WrappedTargetException
{
public java.lang.Object getByName(String aName) throws
com.sun.star.container.NoSuchElementException,
com.sun.star.lang.WrappedTargetException {
// TODO needs implementing?
throw new com.sun.star.uno.RuntimeException(
"getByName not implemented" );
"getByName not implemented");
}
public String[] getElementNames()
{
public String[] getElementNames() {
// TODO needs implementing?
throw new com.sun.star.uno.RuntimeException(
"getElementNames not implemented" );
"getElementNames not implemented");
}
// Performs the getRegStatus functionality for the PkgMgr
public boolean hasByName( String aName ) {
return ((UnoPkgContainer)m_container).hasRegisteredUnoPkgContainer( aName );
public boolean hasByName(String aName) {
return ((UnoPkgContainer)m_container).hasRegisteredUnoPkgContainer(aName);
}
public com.sun.star.uno.Type getElementType()
{
public com.sun.star.uno.Type getElementType() {
// TODO at the moment this returns void indicating
// type is unknown should indicate XPackage ? do we implement XPackage
return new Type();
}
public boolean hasElements()
{
public boolean hasElements() {
// TODO needs implementing?
throw new com.sun.star.uno.RuntimeException(
"hasElements not implemented" );
"hasElements not implemented");
}
public void replaceByName( String aName, java.lang.Object aElement ) throws com.sun.star.lang.IllegalArgumentException, com.sun.star.container.NoSuchElementException, com.sun.star.lang.WrappedTargetException
{
public void replaceByName(String aName,
java.lang.Object aElement) throws com.sun.star.lang.IllegalArgumentException,
com.sun.star.container.NoSuchElementException,
com.sun.star.lang.WrappedTargetException {
// TODO needs implementing
if ( true )
{
if (true) {
throw new com.sun.star.uno.RuntimeException(
"replaceByName not implemented" );
"replaceByName not implemented");
}
}
public void insertByName( String aName, java.lang.Object aElement ) throws com.sun.star.lang.IllegalArgumentException, com.sun.star.container.ElementExistException, com.sun.star.lang.WrappedTargetException
{
LogUtils.DEBUG("Provider for " + language + " received register for package " + aName );
XPackage newPackage = UnoRuntime.queryInterface( XPackage.class, aElement );
if ( aName.length() == 0 )
{
throw new com.sun.star.lang.IllegalArgumentException( "Empty name" );
}
if ( newPackage == null )
{
throw new com.sun.star.lang.IllegalArgumentException( "No package supplied" );
public void insertByName(String aName,
java.lang.Object aElement) throws com.sun.star.lang.IllegalArgumentException,
com.sun.star.container.ElementExistException,
com.sun.star.lang.WrappedTargetException {
LogUtils.DEBUG("Provider for " + language + " received register for package " +
aName);
XPackage newPackage = UnoRuntime.queryInterface(XPackage.class, aElement);
if (aName.length() == 0) {
throw new com.sun.star.lang.IllegalArgumentException("Empty name");
}
((UnoPkgContainer)m_container).processUnoPackage( newPackage, language );
if (newPackage == null) {
throw new com.sun.star.lang.IllegalArgumentException("No package supplied");
}
((UnoPkgContainer)m_container).processUnoPackage(newPackage, language);
}
// de-register for library only !!
public void removeByName( String Name ) throws com.sun.star.container.NoSuchElementException, com.sun.star.lang.WrappedTargetException
{
LogUtils.DEBUG("In ScriptProvider.removeByName() for " + Name + " this provider = " + language );
ParcelContainer c = ((UnoPkgContainer)m_container).getRegisteredUnoPkgContainer( Name );
if ( c != null )
{
public void removeByName(String Name) throws
com.sun.star.container.NoSuchElementException,
com.sun.star.lang.WrappedTargetException {
LogUtils.DEBUG("In ScriptProvider.removeByName() for " + Name +
" this provider = " + language);
ParcelContainer c = ((UnoPkgContainer)m_container).getRegisteredUnoPkgContainer(
Name);
if (c != null) {
String libName;
if (Name.endsWith("/"))
{
String tmp = Name.substring( 0, Name.lastIndexOf('/') );
libName = tmp.substring( tmp.lastIndexOf('/') + 1 );
if (Name.endsWith("/")) {
String tmp = Name.substring(0, Name.lastIndexOf('/'));
libName = tmp.substring(tmp.lastIndexOf('/') + 1);
} else {
libName = Name.substring(Name.lastIndexOf('/') + 1);
}
else
{
libName = Name.substring( Name.lastIndexOf('/') + 1 );
}
LogUtils.DEBUG("Deregistering library " + libName );
if ( c.removeParcel( libName ) )
{
((UnoPkgContainer)m_container).deRegisterPackageContainer( Name );
}
else
{
throw new com.sun.star.container.NoSuchElementException( libName + " cannot be removed from container." );
LogUtils.DEBUG("Deregistering library " + libName);
if (c.removeParcel(libName)) {
((UnoPkgContainer)m_container).deRegisterPackageContainer(Name);
} else {
throw new com.sun.star.container.NoSuchElementException(
libName + " cannot be removed from container.");
}
} else {
throw new com.sun.star.container.NoSuchElementException(
Name + " doesn't exist for " + language);
}
else
{
throw new com.sun.star.container.NoSuchElementException( Name + " doesn't exist for " + language );
}
// TODO see if we want to remove the ParcelContainer is no Parcels/Libraries left
}
private String getDocUrlFromModel( XModel document )
{
private String getDocUrlFromModel(XModel document) {
XTransientDocumentsDocumentContentFactory factory = null;
try
{
try {
factory = UnoRuntime.queryInterface(
XTransientDocumentsDocumentContentFactory.class,
m_xMultiComponentFactory.createInstanceWithContext(
"com.sun.star.frame.TransientDocumentsDocumentContentFactory",
m_xContext
)
);
}
catch (Exception ex)
{
XTransientDocumentsDocumentContentFactory.class,
m_xMultiComponentFactory.createInstanceWithContext(
"com.sun.star.frame.TransientDocumentsDocumentContentFactory",
m_xContext
)
);
} catch (Exception ex) {
}
if ( factory == null )
throw new com.sun.star.uno.RuntimeException( "ScriptProvider: unable to create a TDOC context factory.", this );
if (factory == null)
throw new com.sun.star.uno.RuntimeException("ScriptProvider: unable to create a TDOC context factory.",
this);
try
{
XContent content = factory.createDocumentContent( document );
try {
XContent content = factory.createDocumentContent(document);
return content.getIdentifier().getContentIdentifier();
}
catch (com.sun.star.lang.IllegalArgumentException ex)
{
} catch (com.sun.star.lang.IllegalArgumentException ex) {
}
LogUtils.DEBUG("unable to determine the model's TDOC URL");
return "";
}
private XModel getModelFromDocUrl( String docUrl )
{
LogUtils.DEBUG("getModelFromDocUrl - searching for match for ->" + docUrl + "<-" );
private XModel getModelFromDocUrl(String docUrl) {
LogUtils.DEBUG("getModelFromDocUrl - searching for match for ->" + docUrl +
"<-");
XModel xModel = null;
try
{
XUniversalContentBroker ucb = UniversalContentBroker.create( m_xContext );
XContentIdentifier xCntId = ucb.createContentIdentifier( docUrl );
try {
XUniversalContentBroker ucb = UniversalContentBroker.create(m_xContext);
XContentIdentifier xCntId = ucb.createContentIdentifier(docUrl);
XContent xCnt = ucb.queryContent( xCntId );
XContent xCnt = ucb.queryContent(xCntId);
XCommandProcessor xCmd = UnoRuntime.queryInterface( XCommandProcessor.class, xCnt );
XCommandProcessor xCmd = UnoRuntime.queryInterface(XCommandProcessor.class,
xCnt);
Property[] pArgs = new Property[ ] { new Property() };
@@ -697,19 +657,18 @@ public abstract class ScriptProvider
command.Argument = pArgs;
com.sun.star.ucb.XCommandEnvironment env = null ;
Object result = xCmd.execute( command, 0, env ) ;
Object result = xCmd.execute(command, 0, env) ;
XRow values = UnoRuntime.queryInterface( XRow.class,
result );
XRow values = UnoRuntime.queryInterface(XRow.class,
result);
xModel = UnoRuntime.queryInterface( XModel.class,
values.getObject( 1, null ) );
}
catch ( Exception ignore )
{
LogUtils.DEBUG("Failed to get model exception " + ignore );
xModel = UnoRuntime.queryInterface(XModel.class,
values.getObject(1, null));
} catch (Exception ignore) {
LogUtils.DEBUG("Failed to get model exception " + ignore);
}
return xModel;
}

View File

@@ -28,8 +28,10 @@ public final class SwingInvocation {
public static void invoke(final Runnable doRun) {
new Thread("SwingInvocation") {
@Override
public void run() { SwingUtilities.invokeLater(doRun); }
}.start();
public void run() {
SwingUtilities.invokeLater(doRun);
}
} .start();
}
private SwingInvocation() {}

View File

@@ -55,14 +55,13 @@ public class PlainSourceView extends JScrollPane
so we don't get a storm of DocumentEvents during loading */
ta.getDocument().removeDocumentListener(this);
if (!isModified)
{
if (!isModified) {
int pos = ta.getCaretPosition();
ta.setText(model.getText());
try {
ta.setCaretPosition(pos);
}
catch (IllegalArgumentException iae) {
} catch (IllegalArgumentException iae) {
// do nothing and allow JTextArea to set it's own position
}
}
@@ -72,8 +71,7 @@ public class PlainSourceView extends JScrollPane
int line = ta.getLineStartOffset(model.getCurrentPosition());
Rectangle rect = ta.modelToView(line);
ta.scrollRectToVisible(rect);
}
catch (Exception e) {
} catch (Exception e) {
// couldn't scroll to line, do nothing
}
@@ -164,6 +162,7 @@ class GlyphGutter extends JComponent {
int lineCount = textArea.getLineCount() + 1;
String dummy = Integer.toString(lineCount);
if (dummy.length() < 2) {
dummy = DUMMY_STRING;
}
@@ -195,6 +194,7 @@ class GlyphGutter extends JComponent {
int startLine = clip.y / h;
int endLine = (clip.y + clip.height) / h + 1;
int width = getWidth();
if (endLine > lineCount) {
endLine = lineCount;
}
@@ -221,12 +221,15 @@ class GlyphGutter extends JComponent {
int dy = y;
arrow.addPoint(dx, dy + 3);
arrow.addPoint(dx + 5, dy + 3);
for (x = dx + 5; x <= dx + 10; x++, y++) {
arrow.addPoint(x, y);
}
for (x = dx + 9; x >= dx + 5; x--, y++) {
arrow.addPoint(x, y);
}
arrow.addPoint(dx + 5, dy + 7);
arrow.addPoint(dx, dy + 7);

View File

@@ -43,8 +43,7 @@ import com.sun.star.script.framework.container.ScriptMetaData;
import com.sun.star.script.framework.provider.ClassLoaderFactory;
public class ScriptEditorForBeanShell
implements ScriptEditor, ActionListener
{
implements ScriptEditor, ActionListener {
private JFrame frame;
private String filename;
@@ -59,7 +58,8 @@ public class ScriptEditorForBeanShell
private static ScriptEditorForBeanShell theScriptEditorForBeanShell;
// global list of ScriptEditors, key is URL of file being edited
private static Map<URL,ScriptEditorForBeanShell> BEING_EDITED = new HashMap<URL,ScriptEditorForBeanShell>();
private static Map<URL, ScriptEditorForBeanShell> BEING_EDITED = new
HashMap<URL, ScriptEditorForBeanShell>();
// template for new BeanShell scripts
private static String BSHTEMPLATE;
@@ -74,6 +74,7 @@ public class ScriptEditorForBeanShell
StringBuilder buf = new StringBuilder();
byte[] b = new byte[1024];
int len;
while ((len = in.read(b)) != -1) {
buf.append(new String(b, 0, len));
}
@@ -81,11 +82,9 @@ public class ScriptEditorForBeanShell
in.close();
BSHTEMPLATE = buf.toString();
}
catch (IOException ioe) {
} catch (IOException ioe) {
BSHTEMPLATE = "// BeanShell script";
}
catch (Exception e) {
} catch (Exception e) {
BSHTEMPLATE = "// BeanShell script";
}
}
@@ -93,13 +92,13 @@ public class ScriptEditorForBeanShell
/**
* Returns the global ScriptEditorForBeanShell instance.
*/
public static synchronized ScriptEditorForBeanShell getEditor()
{
if (theScriptEditorForBeanShell == null)
{
public static synchronized ScriptEditorForBeanShell getEditor() {
if (theScriptEditorForBeanShell == null) {
theScriptEditorForBeanShell =
new ScriptEditorForBeanShell();
}
return theScriptEditorForBeanShell;
}
@@ -111,8 +110,7 @@ public class ScriptEditorForBeanShell
* @return The ScriptEditorForBeanShell associated with
* the given URL if one exists, otherwise null.
*/
public static ScriptEditorForBeanShell getEditor(URL url)
{
public static ScriptEditorForBeanShell getEditor(URL url) {
synchronized (BEING_EDITED) {
return BEING_EDITED.get(url);
}
@@ -122,8 +120,7 @@ public class ScriptEditorForBeanShell
* Returns whether or not the script source being edited in this
* ScriptEditorForBeanShell has been modified
*/
public boolean isModified()
{
public boolean isModified() {
return view.isModified();
}
@@ -132,8 +129,7 @@ public class ScriptEditorForBeanShell
*
* @return The text displayed in this ScriptEditorForBeanShell
*/
public String getText()
{
public String getText() {
return view.getText();
}
@@ -160,9 +156,8 @@ public class ScriptEditorForBeanShell
* Indicates the line where error occurred
*
*/
public void indicateErrorLine( int lineNum )
{
model.indicateErrorLine( lineNum );
public void indicateErrorLine(int lineNum) {
model.indicateErrorLine(lineNum);
}
/**
* Executes the script edited by the editor
@@ -170,7 +165,7 @@ public class ScriptEditorForBeanShell
*/
public Object execute() throws Exception {
frame.toFront();
return model.execute( context, cl );
return model.execute(context, cl);
}
/**
* Opens an editor window for the specified ScriptMetaData.
@@ -181,41 +176,44 @@ public class ScriptEditorForBeanShell
* @param entry The metadata describing the script
*/
public void edit(final XScriptContext context, ScriptMetaData entry) {
if (entry != null ) {
if (entry != null) {
try {
ClassLoader cl = null;
try {
cl = ClassLoaderFactory.getURLClassLoader( entry );
}
catch (Exception ignore) // TODO re-examine error handling
{
cl = ClassLoaderFactory.getURLClassLoader(entry);
} catch (Exception ignore) { // TODO re-examine error handling
}
final ClassLoader theCl = cl;
String sUrl = entry.getParcelLocation();
if ( !sUrl.endsWith( "/" ) )
{
if (!sUrl.endsWith("/")) {
sUrl += "/";
}
sUrl += entry.getLanguageName();
final URL url = entry.getSourceURL();
SwingInvocation.invoke(
new Runnable() {
public void run() {
ScriptEditorForBeanShell editor;
synchronized (BEING_EDITED) {
editor = BEING_EDITED.get(url);
if (editor == null) {
editor = new ScriptEditorForBeanShell(
context, theCl, url);
BEING_EDITED.put(url, editor);
}
new Runnable() {
public void run() {
ScriptEditorForBeanShell editor;
synchronized (BEING_EDITED) {
editor = BEING_EDITED.get(url);
if (editor == null) {
editor = new ScriptEditorForBeanShell(
context, theCl, url);
BEING_EDITED.put(url, editor);
}
editor.frame.toFront();
}
});
}
catch (IOException ioe) {
showErrorMessage( "Error loading file: " + ioe.getMessage() );
editor.frame.toFront();
}
});
} catch (IOException ioe) {
showErrorMessage("Error loading file: " + ioe.getMessage());
}
}
}
@@ -224,16 +222,16 @@ public class ScriptEditorForBeanShell
}
private ScriptEditorForBeanShell(XScriptContext context, ClassLoader cl,
URL url)
{
URL url) {
this.context = context;
this.scriptURL = url;
this.model = new ScriptSourceModel(url);
this.filename = url.getFile();
this.cl = cl;
try {
Class<?> c = Class.forName(
"org.openoffice.netbeans.editor.NetBeansSourceView");
"org.openoffice.netbeans.editor.NetBeansSourceView");
Class<?>[] types = new Class[] { ScriptSourceModel.class };
@@ -242,15 +240,12 @@ public class ScriptEditorForBeanShell
if (ctor != null) {
Object[] args = new Object[] { this.model };
this.view = (ScriptSourceView) ctor.newInstance(args);
}
else {
} else {
this.view = new PlainSourceView(model);
}
}
catch (java.lang.Error err) {
} catch (java.lang.Error err) {
this.view = new PlainSourceView(model);
}
catch (Exception e) {
} catch (Exception e) {
this.view = new PlainSourceView(model);
}
@@ -261,7 +256,7 @@ public class ScriptEditorForBeanShell
private void showErrorMessage(String message) {
JOptionPane.showMessageDialog(frame, message,
"Error", JOptionPane.ERROR_MESSAGE);
"Error", JOptionPane.ERROR_MESSAGE);
}
private void initUI() {
@@ -269,13 +264,12 @@ public class ScriptEditorForBeanShell
frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
frame.addWindowListener(
new WindowAdapter()
{
@Override
public void windowClosing(WindowEvent e) {
doClose();
}
new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
doClose();
}
}
);
String[] labels = {"Run", "Clear", "Save", "Close"};
@@ -286,6 +280,7 @@ public class ScriptEditorForBeanShell
JButton b = new JButton(label);
b.addActionListener(this);
p.add(b);
if (label.equals("Save") && filename == null) {
b.setEnabled(false);
}
@@ -301,23 +296,21 @@ public class ScriptEditorForBeanShell
private void doClose() {
if (view.isModified()) {
int result = JOptionPane.showConfirmDialog(frame,
"The script has been modified. " +
"Do you want to save the changes?");
"The script has been modified. " +
"Do you want to save the changes?");
if (result == JOptionPane.CANCEL_OPTION)
{
if (result == JOptionPane.CANCEL_OPTION) {
// don't close the window, just return
return;
}
else if (result == JOptionPane.YES_OPTION)
{
} else if (result == JOptionPane.YES_OPTION) {
boolean saveSuccess = saveTextArea();
if (!saveSuccess)
{
if (!saveSuccess) {
return;
}
}
}
frame.dispose();
shutdown();
}
@@ -330,43 +323,40 @@ public class ScriptEditorForBeanShell
}
OutputStream fos = null;
try {
String s = view.getText();
fos = scriptURL.openConnection().getOutputStream();
if ( fos != null) {
if (fos != null) {
fos.write(s.getBytes());
}
else
{
} else {
showErrorMessage(
"Error saving script: Could not open stream for file" );
"Error saving script: Could not open stream for file");
result = false;
}
view.setModified(false);
}
catch (IOException ioe) {
showErrorMessage( "Error saving script: " + ioe.getMessage() );
result = false;
}
catch (Exception e) {
showErrorMessage( "Error saving script: " + e.getMessage() );
result = false;
}
finally {
} catch (IOException ioe) {
showErrorMessage("Error saving script: " + ioe.getMessage());
result = false;
} catch (Exception e) {
showErrorMessage("Error saving script: " + e.getMessage());
result = false;
} finally {
if (fos != null) {
try {
fos.flush();
fos.close();
}
catch (IOException ignore) {
} catch (IOException ignore) {
}
}
}
return result;
}
private void shutdown()
{
private void shutdown() {
synchronized (BEING_EDITED) {
BEING_EDITED.remove(scriptURL);
}
@@ -374,21 +364,16 @@ public class ScriptEditorForBeanShell
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().equals("Run")) {
try
{
try {
execute();
}
catch (Exception invokeException ) {
} catch (Exception invokeException) {
showErrorMessage(invokeException.getMessage());
}
}
else if (e.getActionCommand().equals("Close")) {
} else if (e.getActionCommand().equals("Close")) {
doClose();
}
else if (e.getActionCommand().equals("Save")) {
} else if (e.getActionCommand().equals("Save")) {
saveTextArea();
}
else if (e.getActionCommand().equals("Clear")) {
} else if (e.getActionCommand().equals("Clear")) {
view.clear();
}
}

View File

@@ -47,42 +47,36 @@ import com.sun.star.script.framework.provider.*;
import com.sun.star.script.framework.log.*;
import com.sun.star.script.framework.container.ScriptMetaData;
public class ScriptProviderForBeanShell
{
public static class ScriptProviderForBeanShell_2 extends ScriptProvider
{
public ScriptProviderForBeanShell_2(XComponentContext ctx)
{
super (ctx, "BeanShell");
public class ScriptProviderForBeanShell {
public static class ScriptProviderForBeanShell_2 extends ScriptProvider {
public ScriptProviderForBeanShell_2(XComponentContext ctx) {
super(ctx, "BeanShell");
}
@Override
public XScript getScript( /*IN*/String scriptURI )
throws com.sun.star.uno.RuntimeException,
ScriptFrameworkErrorException
{
ScriptMetaData scriptData = getScriptData( scriptURI );
try
{
ScriptImpl script = new ScriptImpl( m_xContext, scriptData, m_xModel, m_xInvocContext );
public XScript getScript(/*IN*/String scriptURI)
throws com.sun.star.uno.RuntimeException,
ScriptFrameworkErrorException {
ScriptMetaData scriptData = getScriptData(scriptURI);
try {
ScriptImpl script = new ScriptImpl(m_xContext, scriptData, m_xModel,
m_xInvocContext);
return script;
}
catch ( com.sun.star.uno.RuntimeException re )
{
throw new ScriptFrameworkErrorException( "Failed to create script object: " + re.getMessage(),
null, scriptData.getLanguageName(), language, ScriptFrameworkErrorType.UNKNOWN );
} catch (com.sun.star.uno.RuntimeException re) {
throw new ScriptFrameworkErrorException("Failed to create script object: " +
re.getMessage(),
null, scriptData.getLanguageName(), language, ScriptFrameworkErrorType.UNKNOWN);
}
}
@Override
public boolean hasScriptEditor()
{
public boolean hasScriptEditor() {
return true;
}
@Override
public ScriptEditor getScriptEditor()
{
public ScriptEditor getScriptEditor() {
return ScriptEditorForBeanShell.getEditor();
}
}
@@ -99,263 +93,249 @@ public class ScriptProviderForBeanShell
* the component
* @see com.sun.star.comp.loader.JavaLoader
*/
public static XSingleServiceFactory __getServiceFactory( String implName,
public static XSingleServiceFactory __getServiceFactory(String implName,
XMultiServiceFactory multiFactory,
XRegistryKey regKey )
{
XRegistryKey regKey) {
XSingleServiceFactory xSingleServiceFactory = null;
if ( implName.equals( ScriptProviderForBeanShell.ScriptProviderForBeanShell_2.class.getName() ) )
{
if (implName.equals(
ScriptProviderForBeanShell.ScriptProviderForBeanShell_2.class.getName())) {
xSingleServiceFactory = FactoryHelper.getServiceFactory(
ScriptProviderForBeanShell.ScriptProviderForBeanShell_2.class,
"com.sun.star.script.provider.ScriptProviderForBeanShell",
multiFactory,
regKey );
ScriptProviderForBeanShell.ScriptProviderForBeanShell_2.class,
"com.sun.star.script.provider.ScriptProviderForBeanShell",
multiFactory,
regKey);
}
return xSingleServiceFactory;
}
}
class ScriptImpl implements XScript
{
class ScriptImpl implements XScript {
private ScriptMetaData metaData;
private XComponentContext m_xContext;
private XMultiComponentFactory m_xMultiComponentFactory;
private XModel m_xModel;
private XScriptInvocationContext m_xInvocContext;
ScriptImpl( XComponentContext ctx, ScriptMetaData metaData, XModel xModel,
XScriptInvocationContext xContext ) throws com.sun.star.uno.RuntimeException
{
ScriptImpl(XComponentContext ctx, ScriptMetaData metaData, XModel xModel,
XScriptInvocationContext xContext) throws com.sun.star.uno.RuntimeException {
this.metaData = metaData;
this.m_xContext = ctx;
this.m_xModel = xModel;
this.m_xInvocContext = xContext;
try
{
try {
this.m_xMultiComponentFactory = m_xContext.getServiceManager();
}
catch ( Exception e )
{
LogUtils.DEBUG( LogUtils.getTrace( e ) );
} catch (Exception e) {
LogUtils.DEBUG(LogUtils.getTrace(e));
throw new com.sun.star.uno.RuntimeException(
"Error constructing ScriptImpl [beanshell]: "
+ e.getMessage() );
+ e.getMessage());
}
LogUtils.DEBUG("ScriptImpl [beanshell] script data = " + metaData );
LogUtils.DEBUG("ScriptImpl [beanshell] script data = " + metaData);
}
/**
* documentStorageID and document reference
* for use in script name resolving
*
* @param aParams All parameters; pure, out params are
* undefined in sequence, i.e., the value
* has to be ignored by the callee
*
* @param aOutParamIndex Out indices
*
* @param aOutParam Out parameters
*
* @return The value returned from the function
* being invoked
*
* @throws IllegalArgumentException If there is no matching script name
*
* @throws InvocationTargetException If the running script throws
* an exception this information
* is captured and rethrown as
* this exception type.
*/
/**
* documentStorageID and document reference
* for use in script name resolving
*
* @param aParams All parameters; pure, out params are
* undefined in sequence, i.e., the value
* has to be ignored by the callee
*
* @param aOutParamIndex Out indices
*
* @param aOutParam Out parameters
*
* @return The value returned from the function
* being invoked
*
* @throws IllegalArgumentException If there is no matching script name
*
* @throws InvocationTargetException If the running script throws
* an exception this information
* is captured and rethrown as
* this exception type.
*/
public Object invoke( /*IN*/Object[] aParams,
/*OUT*/short[][] aOutParamIndex,
/*OUT*/Object[][] aOutParam )
throws ScriptFrameworkErrorException,
InvocationTargetException
{
// Initialise the out parameters - not used at the moment
aOutParamIndex[0] = new short[0];
aOutParam[0] = new Object[0];
public Object invoke(/*IN*/Object[] aParams,
/*OUT*/short[][] aOutParamIndex,
/*OUT*/Object[][] aOutParam)
throws ScriptFrameworkErrorException,
InvocationTargetException {
// Initialise the out parameters - not used at the moment
aOutParamIndex[0] = new short[0];
aOutParam[0] = new Object[0];
ClassLoader cl = null;
URL sourceUrl = null;
try {
cl = ClassLoaderFactory.getURLClassLoader( metaData );
sourceUrl = metaData.getSourceURL();
}
catch ( java.net.MalformedURLException mfu )
{
// Framework error
throw new ScriptFrameworkErrorException(
mfu.getMessage(), null,
metaData.getLanguageName(), metaData.getLanguage(),
ScriptFrameworkErrorType.MALFORMED_URL );
}
// Set class loader to be used for class files
// and jar files
Thread.currentThread().setContextClassLoader(cl);
Interpreter interpreter = new Interpreter();
ClassLoader cl = null;
URL sourceUrl = null;
interpreter.getNameSpace().clear();
// Set class loader to be used by interpreter
// to look for classes by source e.g. interpreter
// will use this classloader to search classpath
// for source file ( bla.java ) on import or reference
interpreter.setClassLoader(cl);
try {
interpreter.set("XSCRIPTCONTEXT",
ScriptContext.createContext(m_xModel, m_xInvocContext,
m_xContext, m_xMultiComponentFactory));
try {
cl = ClassLoaderFactory.getURLClassLoader(metaData);
sourceUrl = metaData.getSourceURL();
} catch (java.net.MalformedURLException mfu) {
// Framework error
throw new ScriptFrameworkErrorException(
mfu.getMessage(), null,
metaData.getLanguageName(), metaData.getLanguage(),
ScriptFrameworkErrorType.MALFORMED_URL);
}
interpreter.set("ARGUMENTS", aParams);
}
catch (bsh.EvalError e) {
// Framework error setting up context
throw new ScriptFrameworkErrorException(
e.getMessage(), null,
metaData.getLanguageName(), metaData.getLanguage(),
ScriptFrameworkErrorType.UNKNOWN );
}
// Set class loader to be used for class files
// and jar files
Thread.currentThread().setContextClassLoader(cl);
Interpreter interpreter = new Interpreter();
try {
Object result;
interpreter.getNameSpace().clear();
// Set class loader to be used by interpreter
// to look for classes by source e.g. interpreter
// will use this classloader to search classpath
// for source file ( bla.java ) on import or reference
interpreter.setClassLoader(cl);
ScriptEditorForBeanShell editor =
ScriptEditorForBeanShell.getEditor(
sourceUrl );
try {
interpreter.set("XSCRIPTCONTEXT",
ScriptContext.createContext(m_xModel, m_xInvocContext,
m_xContext, m_xMultiComponentFactory));
if ( editor != null )
{
result = editor.execute();
interpreter.set("ARGUMENTS", aParams);
} catch (bsh.EvalError e) {
// Framework error setting up context
throw new ScriptFrameworkErrorException(
e.getMessage(), null,
metaData.getLanguageName(), metaData.getLanguage(),
ScriptFrameworkErrorType.UNKNOWN);
}
if (result == null)
{
return new Any(new Type(), null);
}
return result;
}
try {
Object result;
metaData.loadSource();
String source = metaData.getSource();
ScriptEditorForBeanShell editor =
ScriptEditorForBeanShell.getEditor(
sourceUrl);
if ( source == null || source.length() == 0 )
{
throw new ScriptFrameworkErrorException(
"Failed to read script", null,
metaData.getLanguageName(), metaData.getLanguage(),
ScriptFrameworkErrorType.NO_SUCH_SCRIPT );
}
result = interpreter.eval( source );
if (editor != null) {
result = editor.execute();
if (result == null)
{
if (result == null) {
return new Any(new Type(), null);
}
return result;
}
catch ( bsh.ParseException pe )
{
throw new InvocationTargetException( "Beanshell failed to parse " + metaData.getLanguageName(), null, processBshException( pe, metaData.getLanguageName() ) );
}
catch ( bsh.TargetError te )
{
throw new InvocationTargetException( "Beanshell uncaught exception for " + metaData.getLanguageName(), null, processBshException( te, metaData.getLanguageName() ) );
}
catch ( bsh.EvalError ex )
{
throw new InvocationTargetException( "Beanshell error for " + metaData.getLanguageName(), null, processBshException( ex, metaData.getLanguageName() ) );
}
catch ( Exception e )
{
metaData.loadSource();
String source = metaData.getSource();
if (source == null || source.length() == 0) {
throw new ScriptFrameworkErrorException(
"Failed to read script", null,
metaData.getLanguageName(), metaData.getLanguage(),
ScriptFrameworkErrorType.UNKNOWN );
ScriptFrameworkErrorType.NO_SUCH_SCRIPT);
}
result = interpreter.eval(source);
if (result == null) {
return new Any(new Type(), null);
}
return result;
} catch (bsh.ParseException pe) {
throw new InvocationTargetException("Beanshell failed to parse " +
metaData.getLanguageName(), null, processBshException(pe,
metaData.getLanguageName()));
} catch (bsh.TargetError te) {
throw new InvocationTargetException("Beanshell uncaught exception for " +
metaData.getLanguageName(), null, processBshException(te,
metaData.getLanguageName()));
} catch (bsh.EvalError ex) {
throw new InvocationTargetException("Beanshell error for " +
metaData.getLanguageName(), null, processBshException(ex,
metaData.getLanguageName()));
} catch (Exception e) {
throw new ScriptFrameworkErrorException(
"Failed to read script", null,
metaData.getLanguageName(), metaData.getLanguage(),
ScriptFrameworkErrorType.UNKNOWN);
}
private void raiseEditor( int lineNum )
{
try
{
URL sourceUrl = metaData.getSourceURL();
ScriptEditorForBeanShell editor = ScriptEditorForBeanShell.getEditor( sourceUrl );
if ( editor == null )
{
editor = ScriptEditorForBeanShell.getEditor();
editor.edit(
ScriptContext.createContext(m_xModel, m_xInvocContext,
m_xContext, m_xMultiComponentFactory), metaData );
editor = ScriptEditorForBeanShell.getEditor( sourceUrl );
}
if ( editor != null )
{
editor.indicateErrorLine( lineNum );
}
}
private void raiseEditor(int lineNum) {
try {
URL sourceUrl = metaData.getSourceURL();
ScriptEditorForBeanShell editor = ScriptEditorForBeanShell.getEditor(sourceUrl);
if (editor == null) {
editor = ScriptEditorForBeanShell.getEditor();
editor.edit(
ScriptContext.createContext(m_xModel, m_xInvocContext,
m_xContext, m_xMultiComponentFactory), metaData);
editor = ScriptEditorForBeanShell.getEditor(sourceUrl);
}
catch( Exception ignore )
{
if (editor != null) {
editor.indicateErrorLine(lineNum);
}
} catch (Exception ignore) {
}
}
private ScriptErrorRaisedException processBshException(bsh.EvalError e,
String script) {
LogUtils.DEBUG("Beanshell error RAW message " + e.getMessage());
String message = e.getMessage();
int usefulInfoIndex = message.lastIndexOf("\' :");
int lineNum = e.getErrorLineNumber();
raiseEditor(lineNum);
if (usefulInfoIndex > -1) {
message = message.substring(usefulInfoIndex + 2);
}
private ScriptErrorRaisedException processBshException( bsh.EvalError e, String script )
{
LogUtils.DEBUG("Beanshell error RAW message " + e.getMessage());
String message = e.getMessage();
int usefulInfoIndex = message.lastIndexOf("\' :" );
int lineNum = e.getErrorLineNumber();
if (e instanceof bsh.TargetError) {
LogUtils.DEBUG("got instance of TargetError");
raiseEditor( lineNum );
if (usefulInfoIndex == -1) {
message = ((bsh.TargetError)e).getTarget().getMessage();
}
if ( usefulInfoIndex > -1 )
{
message = message.substring( usefulInfoIndex + 2 );
}
if ( e instanceof bsh.TargetError )
{
LogUtils.DEBUG("got instance of TargetError");
if ( usefulInfoIndex == -1 )
{
message = ( ( bsh.TargetError)e ).getTarget().getMessage();
String wrappedException = "";
String full = e.toString();
int index = full.indexOf("Target exception:");
if (index > -1) {
String toParse = full.substring(index);
LogUtils.DEBUG("About to parse " + toParse);
StringTokenizer tokenizer = new StringTokenizer(full.substring(index), ":");
if (tokenizer.countTokens() > 2) {
LogUtils.DEBUG("First token = " + (String)tokenizer.nextElement());
wrappedException = (String)tokenizer.nextElement();
LogUtils.DEBUG("wrapped exception = = " + wrappedException);
}
String wrappedException = "";
String full = e.toString();
int index = full.indexOf( "Target exception:" );
if ( index > -1 )
{
String toParse = full.substring( index );
LogUtils.DEBUG("About to parse " + toParse );
StringTokenizer tokenizer = new StringTokenizer( full.substring( index ),":" );
if ( tokenizer.countTokens() > 2 )
{
LogUtils.DEBUG("First token = " + (String)tokenizer.nextElement());
wrappedException = (String)tokenizer.nextElement();
LogUtils.DEBUG("wrapped exception = = " + wrappedException );
}
}
ScriptExceptionRaisedException se = new ScriptExceptionRaisedException( message);
se.lineNum = lineNum;
se.scriptName = script;
se.exceptionType = wrappedException;
se.language = "BeanShell";
LogUtils.DEBUG("UnCaught Exception error: " );
LogUtils.DEBUG("\tscript: " + script );
LogUtils.DEBUG("\tline: " + lineNum );
LogUtils.DEBUG("\twrapped exception: " + wrappedException );
LogUtils.DEBUG("\tmessage: " + message );
return se;
}
else
{
LogUtils.DEBUG("Error or ParseError Exception error: " );
LogUtils.DEBUG("\tscript: " + script );
LogUtils.DEBUG("\tline: " + lineNum );
LogUtils.DEBUG("\tmessage: " + message );
return new ScriptErrorRaisedException( message, null, script, "BeanShell", lineNum );
}
ScriptExceptionRaisedException se = new ScriptExceptionRaisedException(message);
se.lineNum = lineNum;
se.scriptName = script;
se.exceptionType = wrappedException;
se.language = "BeanShell";
LogUtils.DEBUG("UnCaught Exception error: ");
LogUtils.DEBUG("\tscript: " + script);
LogUtils.DEBUG("\tline: " + lineNum);
LogUtils.DEBUG("\twrapped exception: " + wrappedException);
LogUtils.DEBUG("\tmessage: " + message);
return se;
} else {
LogUtils.DEBUG("Error or ParseError Exception error: ");
LogUtils.DEBUG("\tscript: " + script);
LogUtils.DEBUG("\tline: " + lineNum);
LogUtils.DEBUG("\tmessage: " + message);
return new ScriptErrorRaisedException(message, null, script, "BeanShell",
lineNum);
}
}
}

View File

@@ -30,7 +30,7 @@ public class ScriptSourceModel {
private URL file = null;
private ScriptSourceView view = null;
public ScriptSourceModel(URL file ) {
public ScriptSourceModel(URL file) {
this.file = file;
}
@@ -40,14 +40,14 @@ public class ScriptSourceModel {
byte[] contents = new byte[1024];
int len;
while ((len = in.read(contents, 0, 1024)) != -1) {
buf.append(new String(contents, 0, len));
}
try {
in.close();
}
catch (IOException ignore) {
} catch (IOException ignore) {
}
return buf.toString();
@@ -58,8 +58,7 @@ public class ScriptSourceModel {
try {
result = load();
}
catch (IOException ioe) {
} catch (IOException ioe) {
// do nothing, empty string will be returned
}
@@ -74,52 +73,51 @@ public class ScriptSourceModel {
this.view = view;
}
public Object execute(final XScriptContext context, ClassLoader cl )
throws Exception
{
if ( cl != null )
{
// sets this threads class loader
// hopefully any threads spawned by this
// will inherit this cl
// this enables any class files imported
// from the interpreter to be loaded
// note: setting the classloader on the
// interpreter has a slightly different
// meaning in that the classloader for
// the interpreter seems only to look for
// source files ( bla.java ) in the classpath
Thread.currentThread().setContextClassLoader(cl);
}
bsh.Interpreter interpreter = new bsh.Interpreter();
if ( cl != null )
{
// additionally set class loader on the interpreter
// to allow it to load java classes defined in source
// files e.g. bla.java
interpreter.getNameSpace().clear();
}
public Object execute(final XScriptContext context, ClassLoader cl)
throws Exception {
if (cl != null) {
// sets this threads class loader
// hopefully any threads spawned by this
// will inherit this cl
// this enables any class files imported
// from the interpreter to be loaded
// note: setting the classloader on the
// interpreter has a slightly different
// meaning in that the classloader for
// the interpreter seems only to look for
// source files ( bla.java ) in the classpath
Thread.currentThread().setContextClassLoader(cl);
}
bsh.Interpreter interpreter = new bsh.Interpreter();
if (cl != null) {
// additionally set class loader on the interpreter
// to allow it to load java classes defined in source
// files e.g. bla.java
interpreter.getNameSpace().clear();
}
// reset position
currentPosition = -1;
view.update();
// reset position
currentPosition = -1;
view.update();
interpreter.set("XSCRIPTCONTEXT", context);
interpreter.set("ARGUMENTS", new Object[0]);
interpreter.set("XSCRIPTCONTEXT", context);
interpreter.set("ARGUMENTS", new Object[0]);
Object result;
if (view.isModified()) {
result = interpreter.eval(view.getText());
} else {
result = interpreter.eval(getText());
}
Object result;
if (view.isModified()) {
result = interpreter.eval(view.getText());
}
else {
result = interpreter.eval(getText());
}
return result;
}
public void indicateErrorLine( int lineNum )
{
System.out.println("Beanshell indicateErrorLine " + lineNum );
public void indicateErrorLine(int lineNum) {
System.out.println("Beanshell indicateErrorLine " + lineNum);
currentPosition = lineNum - 1;
view.update();
}

View File

@@ -32,7 +32,7 @@ public interface Resolver {
* @param c A Class
* @return The ScriptProxy value
*/
ScriptProxy getProxy( ScriptDescriptor sd, Class<?> c )
ScriptProxy getProxy(ScriptDescriptor sd, Class<?> c)
throws NoSuchMethodException;
}

View File

@@ -26,13 +26,12 @@ import java.util.StringTokenizer;
* The <code>ScriptDescriptor</code> object is used to store the search
* criteria that should be used for finding a particular script
*/
public class ScriptDescriptor
{
public class ScriptDescriptor {
private String m_name;
private String m_methodName;
private String m_className;
private List<String> m_classpath;
private ArrayList<Class<?>> m_argumentTypes = new ArrayList<Class<?>>( 11 );
private ArrayList<Class<?>> m_argumentTypes = new ArrayList<Class<?>>(11);
/**
* Constructs a ScriptDescriptor for the given name
@@ -40,19 +39,17 @@ public class ScriptDescriptor
* @param name Script Name
* @exception IllegalArgumentException if the given name does not contain a "."
*/
public ScriptDescriptor( String name )
throws IllegalArgumentException
{
int idx = name.lastIndexOf( '.' );
public ScriptDescriptor(String name)
throws IllegalArgumentException {
int idx = name.lastIndexOf('.');
if ( idx == -1 )
{
throw new IllegalArgumentException( "Invalid method name" );
if (idx == -1) {
throw new IllegalArgumentException("Invalid method name");
}
this.m_name = name;
this.m_methodName = name.substring( idx + 1 );
this.m_className = name.substring( 0, idx );
this.m_methodName = name.substring(idx + 1);
this.m_className = name.substring(0, idx);
}
/**
@@ -60,8 +57,7 @@ public class ScriptDescriptor
*
* @return The Script Name value
*/
public String getName()
{
public String getName() {
return m_name;
}
@@ -70,8 +66,7 @@ public class ScriptDescriptor
*
* @return The Script Name value
*/
public String getClassName()
{
public String getClassName() {
return m_className;
}
@@ -81,8 +76,7 @@ public class ScriptDescriptor
*
* @return The methodName value
*/
public String getMethodName()
{
public String getMethodName() {
return m_methodName;
}
@@ -92,12 +86,11 @@ public class ScriptDescriptor
*
* @param classpath The new classpath value
*/
public void setClasspath( String classpath )
{
StringTokenizer stk = new StringTokenizer( classpath, ":" );
while( stk.hasMoreElements() )
{
this.m_classpath.add( (String) stk.nextElement() );
public void setClasspath(String classpath) {
StringTokenizer stk = new StringTokenizer(classpath, ":");
while (stk.hasMoreElements()) {
this.m_classpath.add((String) stk.nextElement());
}
}
@@ -106,8 +99,7 @@ public class ScriptDescriptor
*
* @param classpath The new classpath value
*/
public void setClasspath( List<String> classpath )
{
public void setClasspath(List<String> classpath) {
this.m_classpath = classpath;
}
@@ -117,8 +109,7 @@ public class ScriptDescriptor
*
* @return The classpath value
*/
public List<String> getClasspath()
{
public List<String> getClasspath() {
return m_classpath;
}
@@ -129,9 +120,9 @@ public class ScriptDescriptor
*
* @param clazz The feature to be added to the ArgumentType attribute
*/
public synchronized void addArgumentType( Class<?> clazz )
{
m_argumentTypes.add( clazz );
public synchronized void addArgumentType(Class<?> clazz) {
m_argumentTypes.add(clazz);
}
@@ -146,11 +137,11 @@ public class ScriptDescriptor
*
* @return The argumentTypes value
*/
public synchronized Class<?>[]
getArgumentTypes()
{
if ( m_argumentTypes.size() > 0 )
return m_argumentTypes.toArray( new Class[ m_argumentTypes.size() ] );
getArgumentTypes() {
if (m_argumentTypes.size() > 0)
return m_argumentTypes.toArray(new Class[ m_argumentTypes.size() ]);
else
return null;
}
@@ -163,24 +154,22 @@ public class ScriptDescriptor
* @return The scriptName including the parameters.
*/
@Override
public String toString()
{
StringBuilder description = new StringBuilder( m_name );
public String toString() {
StringBuilder description = new StringBuilder(m_name);
Class<?>[] types = getArgumentTypes();
description.append( " (" );
description.append(" (");
if ( types != null )
{
for ( int i = 0; i < types.length - 1; i++ )
{
description.append( types[ i ].getName() );
description.append( ", " );
if (types != null) {
for (int i = 0; i < types.length - 1; i++) {
description.append(types[ i ].getName());
description.append(", ");
}
description.append( types[ types.length - 1 ].getName() );
description.append(types[ types.length - 1 ].getName());
}
description.append( ")" );
description.append(")");
return description.toString();
}

View File

@@ -41,50 +41,43 @@ import com.sun.star.script.framework.container.ScriptMetaData;
import com.sun.star.script.framework.provider.*;
import com.sun.star.script.framework.log.LogUtils;
public class ScriptProviderForJava
{
public static class _ScriptProviderForJava extends ScriptProvider
{
public class ScriptProviderForJava {
public static class _ScriptProviderForJava extends ScriptProvider {
private Resolver m_resolutionPolicy = new StrictResolver();
public _ScriptProviderForJava( XComponentContext ctx )
{
super (ctx, "Java");
public _ScriptProviderForJava(XComponentContext ctx) {
super(ctx, "Java");
}
@Override
public XScript getScript( /*IN*/String scriptURI )
throws com.sun.star.uno.RuntimeException,
ScriptFrameworkErrorException
{
ScriptMetaData scriptData = getScriptData( scriptURI );
try
{
ScriptImpl script = new ScriptImpl( m_xContext, m_resolutionPolicy, scriptData, m_xModel, m_xInvocContext );
public XScript getScript(/*IN*/String scriptURI)
throws com.sun.star.uno.RuntimeException,
ScriptFrameworkErrorException {
ScriptMetaData scriptData = getScriptData(scriptURI);
try {
ScriptImpl script = new ScriptImpl(m_xContext, m_resolutionPolicy, scriptData,
m_xModel, m_xInvocContext);
return script;
}
catch ( com.sun.star.uno.RuntimeException re )
{
} catch (com.sun.star.uno.RuntimeException re) {
ScriptFrameworkErrorException e2 =
new ScriptFrameworkErrorException(
"Failed to create script object: " + re,
null, scriptData.getLanguageName(), language,
ScriptFrameworkErrorType.UNKNOWN );
e2.initCause( re );
"Failed to create script object: " + re,
null, scriptData.getLanguageName(), language,
ScriptFrameworkErrorType.UNKNOWN);
e2.initCause(re);
throw e2;
}
}
@Override
public boolean hasScriptEditor()
{
public boolean hasScriptEditor() {
return false;
}
@Override
public ScriptEditor getScriptEditor()
{
public ScriptEditor getScriptEditor() {
return null;
}
}
@@ -101,245 +94,223 @@ public class ScriptProviderForJava
* the component
* @see com.sun.star.comp.loader.JavaLoader
*/
public static XSingleServiceFactory __getServiceFactory( String implName,
public static XSingleServiceFactory __getServiceFactory(String implName,
XMultiServiceFactory multiFactory,
XRegistryKey regKey )
{
XRegistryKey regKey) {
XSingleServiceFactory xSingleServiceFactory = null;
if ( implName.equals( ScriptProviderForJava._ScriptProviderForJava.class.getName() ) )
{
xSingleServiceFactory = FactoryHelper.getServiceFactory(
ScriptProviderForJava._ScriptProviderForJava.class,
"com.sun.star.script.provider.ScriptProviderForJava",
multiFactory,
regKey );
if (implName.equals(
ScriptProviderForJava._ScriptProviderForJava.class.getName())) {
xSingleServiceFactory = FactoryHelper.getServiceFactory(
ScriptProviderForJava._ScriptProviderForJava.class,
"com.sun.star.script.provider.ScriptProviderForJava",
multiFactory,
regKey);
}
return xSingleServiceFactory;
}
}
class ScriptImpl implements XScript
{
class ScriptImpl implements XScript {
private ScriptMetaData metaData;
private XComponentContext m_xContext;
private XModel m_xModel;
private XScriptInvocationContext m_xInvocContext;
private XMultiComponentFactory m_xMultiComponentFactory;
private Resolver m_resolutionPolicy;
ScriptImpl( XComponentContext ctx, Resolver resolver, ScriptMetaData metaData, XModel xModel, XScriptInvocationContext xInvocContext ) throws com.sun.star.uno.RuntimeException
{
ScriptImpl(XComponentContext ctx, Resolver resolver, ScriptMetaData metaData,
XModel xModel, XScriptInvocationContext xInvocContext) throws
com.sun.star.uno.RuntimeException {
this.metaData = metaData;
this.m_xContext = ctx;
this.m_xModel = xModel;
this.m_xInvocContext = xInvocContext;
this.m_resolutionPolicy = resolver;
try
{
try {
this.m_xMultiComponentFactory = m_xContext.getServiceManager();
}
catch ( Exception e )
{
LogUtils.DEBUG( LogUtils.getTrace( e ) );
} catch (Exception e) {
LogUtils.DEBUG(LogUtils.getTrace(e));
com.sun.star.uno.RuntimeException e2 =
new com.sun.star.uno.RuntimeException(
"Error constructing ScriptProvider: " + e );
e2.initCause( e );
"Error constructing ScriptProvider: " + e);
e2.initCause(e);
throw e2;
}
LogUtils.DEBUG("ScriptImpl [java] script data = " + metaData );
LogUtils.DEBUG("ScriptImpl [java] script data = " + metaData);
}
/**
* Invoke
*
*
* @param params All parameters; pure, out params are undefined in
* sequence, i.e., the value has to be ignored by the callee
* @param aOutParamIndex Out indices
* @param aOutParam Out parameters
* @return The value returned from the function being invoked
* @throws IllegalArgumentException If there is no matching script name
* @throws com.sun.star.reflection.InvocationTargetException If the running script throws an exception
* this information is captured and rethrown as this exception type.
*/
/**
* Invoke
*
*
* @param params All parameters; pure, out params are undefined in
* sequence, i.e., the value has to be ignored by the callee
* @param aOutParamIndex Out indices
* @param aOutParam Out parameters
* @return The value returned from the function being invoked
* @throws IllegalArgumentException If there is no matching script name
* @throws com.sun.star.reflection.InvocationTargetException If the running script throws an exception
* this information is captured and rethrown as this exception type.
*/
public Object invoke(
/*IN*/Object[] params,
/*OUT*/short[][] aOutParamIndex,
/*OUT*/Object[][] aOutParam )
public Object invoke(
/*IN*/Object[] params,
/*OUT*/short[][] aOutParamIndex,
/*OUT*/Object[][] aOutParam)
throws ScriptFrameworkErrorException, com.sun.star.reflection.InvocationTargetException
{
LogUtils.DEBUG( "** ScriptProviderForJava::invoke: Starting..." );
throws ScriptFrameworkErrorException,
com.sun.star.reflection.InvocationTargetException {
LogUtils.DEBUG("** ScriptProviderForJava::invoke: Starting...");
// Initialise the out parameters - not used at the moment
aOutParamIndex[0] = new short[0];
aOutParam[0] = new Object[0];
// Initialise the out parameters - not used at the moment
aOutParamIndex[0] = new short[0];
aOutParam[0] = new Object[0];
Map<String,String> languageProps = metaData.getLanguageProperties();
Map<String, String> languageProps = metaData.getLanguageProperties();
ScriptDescriptor scriptDesc =
new ScriptDescriptor( metaData.getLanguageName() );
ScriptDescriptor scriptDesc =
new ScriptDescriptor(metaData.getLanguageName());
ClassLoader scriptLoader = null;
ClassLoader scriptLoader = null;
try {
LogUtils.DEBUG("Classloader starting...");
scriptLoader = ClassLoaderFactory.getURLClassLoader(
metaData);
LogUtils.DEBUG("Classloader finished...");
} catch (ArrayStoreException e) {
// Framework error
ScriptFrameworkErrorException e2 =
new ScriptFrameworkErrorException(
e.toString(), null,
metaData.getLanguageName(), metaData.getLanguage(),
ScriptFrameworkErrorType.UNKNOWN);
e2.initCause(e);
throw e2;
}
ArrayList<Object> invocationArgList = new ArrayList<Object>();
Object[] invocationArgs = null;
LogUtils.DEBUG("Parameter Mapping...");
// Setup Context Object
XScriptContext xSc = ScriptContext.createContext(m_xModel, m_xInvocContext,
m_xContext, m_xMultiComponentFactory);
scriptDesc.addArgumentType(XScriptContext.class);
invocationArgList.add(xSc);
for (int i = 0; i < params.length; i++) {
scriptDesc.addArgumentType(params[ i ].getClass());
invocationArgList.add(params[ i ]);
}
if (!invocationArgList.isEmpty()) {
invocationArgs = invocationArgList.toArray();
}
LogUtils.DEBUG("ScriptProxy starting... ");
ScriptProxy script = null;
try {
String className = metaData.getLanguageName().substring(0,
metaData.getLanguageName().lastIndexOf('.'));
LogUtils.DEBUG("About to load Class " + className + " starting... ");
long start = new java.util.Date().getTime();
Class<?> c = scriptLoader.loadClass(className);
long end = new java.util.Date().getTime();
LogUtils.DEBUG("loadClass took: " + String.valueOf(end - start) +
"milliseconds");
try {
LogUtils.DEBUG( "Classloader starting..." );
scriptLoader = ClassLoaderFactory.getURLClassLoader(
metaData );
LogUtils.DEBUG( "Classloader finished..." );
}
catch (ArrayStoreException e )
{
LogUtils.DEBUG("class loaded ... ");
script = m_resolutionPolicy.getProxy(scriptDesc, c);
LogUtils.DEBUG("script resolved ... ");
} catch (NoSuchMethodException e) {
// Framework error
ScriptFrameworkErrorException e2 =
new ScriptFrameworkErrorException(
e.toString(), null,
metaData.getLanguageName(), metaData.getLanguage(),
ScriptFrameworkErrorType.UNKNOWN );
e2.initCause( e );
e.toString(), null,
metaData.getLanguageName(), metaData.getLanguage(),
ScriptFrameworkErrorType.NO_SUCH_SCRIPT);
e2.initCause(e);
throw e2;
}
ArrayList<Object> invocationArgList = new ArrayList<Object>();
Object[] invocationArgs = null;
LogUtils.DEBUG( "Parameter Mapping..." );
// Setup Context Object
XScriptContext xSc = ScriptContext.createContext(m_xModel, m_xInvocContext,
m_xContext, m_xMultiComponentFactory);
scriptDesc.addArgumentType( XScriptContext.class );
invocationArgList.add( xSc );
for ( int i = 0; i < params.length; i++ )
{
scriptDesc.addArgumentType( params[ i ].getClass() );
invocationArgList.add( params[ i ] );
}
if ( !invocationArgList.isEmpty() )
{
invocationArgs = invocationArgList.toArray();
}
LogUtils.DEBUG( "ScriptProxy starting... " );
ScriptProxy script = null;
try
{
String className = metaData.getLanguageName().substring( 0,
metaData.getLanguageName().lastIndexOf( '.' ) );
LogUtils.DEBUG( "About to load Class " + className + " starting... " );
long start = new java.util.Date().getTime();
Class<?> c = scriptLoader.loadClass( className );
long end = new java.util.Date().getTime();
LogUtils.DEBUG("loadClass took: " + String.valueOf(end - start) +
"milliseconds");
try
{
LogUtils.DEBUG( "class loaded ... " );
script = m_resolutionPolicy.getProxy( scriptDesc, c );
LogUtils.DEBUG( "script resolved ... " );
}
catch( NoSuchMethodException e )
{
// Framework error
ScriptFrameworkErrorException e2 =
new ScriptFrameworkErrorException(
e.toString(), null,
metaData.getLanguageName(), metaData.getLanguage(),
ScriptFrameworkErrorType.NO_SUCH_SCRIPT );
e2.initCause( e );
throw e2;
}
}
catch ( ClassNotFoundException e )
{
// Framework error
ScriptFrameworkErrorException e2 =
new ScriptFrameworkErrorException(
e.toString(), null,
metaData.getLanguageName(), metaData.getLanguage(),
ScriptFrameworkErrorType.NO_SUCH_SCRIPT );
e2.initCause( e );
throw e2;
}
LogUtils.DEBUG( "Starting Invoke on Proxy ..." );
Object result = null;
try
{
long start = new java.util.Date().getTime();
result = script.invoke( invocationArgs );
long end = new java.util.Date().getTime();
LogUtils.DEBUG("invoke took: " +
String.valueOf(end - start) + "milliseconds");
}
catch ( java.lang.IllegalArgumentException iae )
{
ScriptFrameworkErrorException e2 =
new ScriptFrameworkErrorException(
iae.getMessage(), null,
metaData.getLanguageName(), metaData.getLanguage(),
ScriptFrameworkErrorType.UNKNOWN );
e2.initCause( iae );
throw e2;
}
catch ( java.lang.IllegalAccessException ia )
{
ScriptFrameworkErrorException e2 =
new ScriptFrameworkErrorException(
ia.toString(), null,
metaData.getLanguageName(), metaData.getLanguage(),
ScriptFrameworkErrorType.UNKNOWN );
e2.initCause( ia );
throw e2;
}
catch ( java.lang.reflect.InvocationTargetException ite )
{
Throwable targetException = ite.getTargetException();
ScriptExceptionRaisedException se =
new ScriptExceptionRaisedException(
targetException.toString() );
se.lineNum = -1;
se.scriptName = metaData.getLanguageName();
se.language = "Java";
se.exceptionType = targetException.getClass().getName();
throw new com.sun.star.reflection.InvocationTargetException(
"Scripting Framework error executing script ", null, se );
}
catch ( Exception unknown )
{
ScriptExceptionRaisedException se =
new ScriptExceptionRaisedException(
unknown.toString() );
se.lineNum = -1;
se.scriptName = metaData.getLanguageName();
se.language = "Java";
se.exceptionType = unknown.getClass().getName();
throw new com.sun.star.reflection.InvocationTargetException(
"Scripting Framework error executing script ", null, se );
}
if ( result == null )
{
LogUtils.DEBUG( "Got Nothing Back" );
// in the case where there is no return type
Any voidAny = new Any(new Type(), null);
result = voidAny;
}
else
{
LogUtils.DEBUG( "Got object " + result );
}
return result;
} catch (ClassNotFoundException e) {
// Framework error
ScriptFrameworkErrorException e2 =
new ScriptFrameworkErrorException(
e.toString(), null,
metaData.getLanguageName(), metaData.getLanguage(),
ScriptFrameworkErrorType.NO_SUCH_SCRIPT);
e2.initCause(e);
throw e2;
}
LogUtils.DEBUG("Starting Invoke on Proxy ...");
Object result = null;
try {
long start = new java.util.Date().getTime();
result = script.invoke(invocationArgs);
long end = new java.util.Date().getTime();
LogUtils.DEBUG("invoke took: " +
String.valueOf(end - start) + "milliseconds");
} catch (java.lang.IllegalArgumentException iae) {
ScriptFrameworkErrorException e2 =
new ScriptFrameworkErrorException(
iae.getMessage(), null,
metaData.getLanguageName(), metaData.getLanguage(),
ScriptFrameworkErrorType.UNKNOWN);
e2.initCause(iae);
throw e2;
} catch (java.lang.IllegalAccessException ia) {
ScriptFrameworkErrorException e2 =
new ScriptFrameworkErrorException(
ia.toString(), null,
metaData.getLanguageName(), metaData.getLanguage(),
ScriptFrameworkErrorType.UNKNOWN);
e2.initCause(ia);
throw e2;
} catch (java.lang.reflect.InvocationTargetException ite) {
Throwable targetException = ite.getTargetException();
ScriptExceptionRaisedException se =
new ScriptExceptionRaisedException(
targetException.toString());
se.lineNum = -1;
se.scriptName = metaData.getLanguageName();
se.language = "Java";
se.exceptionType = targetException.getClass().getName();
throw new com.sun.star.reflection.InvocationTargetException(
"Scripting Framework error executing script ", null, se);
} catch (Exception unknown) {
ScriptExceptionRaisedException se =
new ScriptExceptionRaisedException(
unknown.toString());
se.lineNum = -1;
se.scriptName = metaData.getLanguageName();
se.language = "Java";
se.exceptionType = unknown.getClass().getName();
throw new com.sun.star.reflection.InvocationTargetException(
"Scripting Framework error executing script ", null, se);
}
if (result == null) {
LogUtils.DEBUG("Got Nothing Back");
// in the case where there is no return type
Any voidAny = new Any(new Type(), null);
result = voidAny;
} else {
LogUtils.DEBUG("Got object " + result);
}
return result;
}
}

View File

@@ -26,8 +26,7 @@ import java.lang.reflect.InvocationTargetException;
*
* @see java.lang.reflect.Method
*/
public class ScriptProxy
{
public class ScriptProxy {
private Object m_targetObject;
private Method m_method;
@@ -38,8 +37,7 @@ public class ScriptProxy
*
* @param method Description of the Parameter
*/
public ScriptProxy( Method method )
{
public ScriptProxy(Method method) {
this.m_method = method;
}
@@ -50,8 +48,7 @@ public class ScriptProxy
*
* @param obj The new targetObject value
*/
public void setTargetObject( Object obj )
{
public void setTargetObject(Object obj) {
m_targetObject = obj;
}
@@ -67,11 +64,10 @@ public class ScriptProxy
* @see java.lang.reflect.Method for the exceptions
* that may be thrown
*/
public Object invoke( Object[] args )
public Object invoke(Object[] args)
throws IllegalAccessException, InvocationTargetException,
IllegalArgumentException
{
return m_method.invoke( m_targetObject, args );
IllegalArgumentException {
return m_method.invoke(m_targetObject, args);
}
}

View File

@@ -28,14 +28,12 @@ import com.sun.star.script.framework.log.LogUtils;
* method accepting all of the arguments specified in the ScriptDescriptor
* can be found in the Class.
*/
public class StrictResolver implements Resolver
{
public class StrictResolver implements Resolver {
/**
*Constructor for the StrictResolver object
*/
public StrictResolver()
{
LogUtils.DEBUG( this.getClass().getName() + " created" );
public StrictResolver() {
LogUtils.DEBUG(this.getClass().getName() + " created");
}
/**
@@ -47,49 +45,40 @@ public class StrictResolver implements Resolver
* @param c the Class file in which to search for the method
* @return the ScriptProxy matching the criteria, or null if no match is found
*/
public ScriptProxy getProxy( ScriptDescriptor sd, Class<?> c )
throws NoSuchMethodException
{
public ScriptProxy getProxy(ScriptDescriptor sd, Class<?> c)
throws NoSuchMethodException {
Method m = null;
LogUtils.DEBUG( "StrictResolver.getProxy() for: " + sd.toString() );
LogUtils.DEBUG("StrictResolver.getProxy() for: " + sd.toString());
try
{
m = resolveArguments( sd, c );
}
catch ( ClassNotFoundException e )
{
throw new NoSuchMethodException( "StrictResolver.getProxy: Can't find method: "
+ sd.getMethodName() + ":" + e.getMessage() );
}
catch ( NoSuchMethodException e )
{
throw new NoSuchMethodException( "StrictResolver.getProxy: Can't find method: "
+ sd.getMethodName() + ":" + e.getMessage() );
try {
m = resolveArguments(sd, c);
} catch (ClassNotFoundException e) {
throw new NoSuchMethodException("StrictResolver.getProxy: Can't find method: "
+ sd.getMethodName() + ":" + e.getMessage());
} catch (NoSuchMethodException e) {
throw new NoSuchMethodException("StrictResolver.getProxy: Can't find method: "
+ sd.getMethodName() + ":" + e.getMessage());
}
ScriptProxy sp = new ScriptProxy( m );
ScriptProxy sp = new ScriptProxy(m);
int modifiers = m.getModifiers();
if ( !Modifier.isStatic( modifiers ) )
{
if (!Modifier.isStatic(modifiers)) {
Object o;
try
{
try {
o = c.newInstance();
} catch (InstantiationException ie) {
throw new NoSuchMethodException("getScriptProxy: Can't instantiate: " +
c.getName());
} catch (IllegalAccessException iae) {
throw new NoSuchMethodException("getScriptProxy: Can't access: "
+ c.getName());
}
catch ( InstantiationException ie )
{
throw new NoSuchMethodException( "getScriptProxy: Can't instantiate: " +
c.getName() );
}
catch ( IllegalAccessException iae )
{
throw new NoSuchMethodException( "getScriptProxy: Can't access: "
+ c.getName() );
}
sp.setTargetObject( o );
sp.setTargetObject(o);
}
return sp;
@@ -105,10 +94,9 @@ public class StrictResolver implements Resolver
* @exception ClassNotFoundException
* @exception NoSuchMethodException
*/
private Method resolveArguments( ScriptDescriptor sd, Class<?> c )
throws ClassNotFoundException, NoSuchMethodException
{
return c.getMethod( sd.getMethodName(), sd.getArgumentTypes() );
private Method resolveArguments(ScriptDescriptor sd, Class<?> c)
throws ClassNotFoundException, NoSuchMethodException {
return c.getMethod(sd.getMethodName(), sd.getArgumentTypes());
}
}

View File

@@ -40,8 +40,7 @@ import java.util.HashMap;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class ScriptEditorForJavaScript implements ScriptEditor
{
public class ScriptEditorForJavaScript implements ScriptEditor {
// global ScriptEditorForJavaScript instance
private static ScriptEditorForJavaScript theScriptEditorForJavaScript;
@@ -51,7 +50,8 @@ public class ScriptEditorForJavaScript implements ScriptEditor
private Main rhinoWindow;
private URL scriptURL;
// global list of ScriptEditors, key is URL of file being edited
private static Map<URL,ScriptEditorForJavaScript> BEING_EDITED = new HashMap<URL,ScriptEditorForJavaScript>();
private static Map<URL, ScriptEditorForJavaScript> BEING_EDITED = new
HashMap<URL, ScriptEditorForJavaScript>();
static {
try {
@@ -62,6 +62,7 @@ public class ScriptEditorForJavaScript implements ScriptEditor
StringBuilder buf = new StringBuilder();
byte[] b = new byte[1024];
int len;
while ((len = in.read(b)) != -1) {
buf.append(new String(b, 0, len));
}
@@ -69,11 +70,9 @@ public class ScriptEditorForJavaScript implements ScriptEditor
in.close();
JSTEMPLATE = buf.toString();
}
catch (IOException ioe) {
} catch (IOException ioe) {
JSTEMPLATE = "// JavaScript script";
}
catch (Exception e) {
} catch (Exception e) {
JSTEMPLATE = "// JavaScript script";
}
}
@@ -81,13 +80,13 @@ public class ScriptEditorForJavaScript implements ScriptEditor
/**
* Returns the global ScriptEditorForJavaScript instance.
*/
public static synchronized ScriptEditorForJavaScript getEditor()
{
if (theScriptEditorForJavaScript == null)
{
public static synchronized ScriptEditorForJavaScript getEditor() {
if (theScriptEditorForJavaScript == null) {
theScriptEditorForJavaScript =
new ScriptEditorForJavaScript();
}
return theScriptEditorForJavaScript;
}
@@ -99,8 +98,7 @@ public class ScriptEditorForJavaScript implements ScriptEditor
* @return The ScriptEditorForJavaScript associated with
* the given URL if one exists, otherwise null.
*/
public static ScriptEditorForJavaScript getEditor(URL url)
{
public static ScriptEditorForJavaScript getEditor(URL url) {
synchronized (BEING_EDITED) {
return BEING_EDITED.get(url);
}
@@ -110,9 +108,8 @@ public class ScriptEditorForJavaScript implements ScriptEditor
* Returns whether or not the script source being edited in this
* ScriptEditorForJavaScript has been modified
*/
public boolean isModified()
{
return rhinoWindow.isModified( scriptURL );
public boolean isModified() {
return rhinoWindow.isModified(scriptURL);
}
/**
@@ -120,9 +117,8 @@ public class ScriptEditorForJavaScript implements ScriptEditor
*
* @return The text displayed in this ScriptEditorForJavaScript
*/
public String getText()
{
return rhinoWindow.getText( scriptURL );
public String getText() {
return rhinoWindow.getText(scriptURL);
}
/**
@@ -130,8 +126,7 @@ public class ScriptEditorForJavaScript implements ScriptEditor
*
* @return The url of this ScriptEditorForJavaScript
*/
public String getURL()
{
public String getURL() {
return scriptURL.toString();
}
@@ -140,8 +135,7 @@ public class ScriptEditorForJavaScript implements ScriptEditor
*
* @return The template text for JavaScript scripts
*/
public String getTemplate()
{
public String getTemplate() {
return JSTEMPLATE;
}
@@ -150,8 +144,7 @@ public class ScriptEditorForJavaScript implements ScriptEditor
*
* @return The default extension for JavaScript scripts
*/
public String getExtension()
{
public String getExtension() {
return "js";
}
@@ -163,36 +156,36 @@ public class ScriptEditorForJavaScript implements ScriptEditor
* @param context The context in which to execute the script
* @param entry The metadata describing the script
*/
public void edit(final XScriptContext context, ScriptMetaData entry)
{
public void edit(final XScriptContext context, ScriptMetaData entry) {
try {
String sUrl = entry.getParcelLocation();
if ( !sUrl.endsWith( "/" ) )
{
if (!sUrl.endsWith("/")) {
sUrl += "/";
}
sUrl += entry.getLanguageName();
final URL url = entry.getSourceURL();
SwingInvocation.invoke(
new Runnable() {
public void run() {
synchronized (BEING_EDITED) {
ScriptEditorForJavaScript editor =
BEING_EDITED.get(url);
if (editor == null) {
editor = new ScriptEditorForJavaScript(
context, url);
BEING_EDITED.put(url, editor);
}
new Runnable() {
public void run() {
synchronized (BEING_EDITED) {
ScriptEditorForJavaScript editor =
BEING_EDITED.get(url);
if (editor == null) {
editor = new ScriptEditorForJavaScript(
context, url);
BEING_EDITED.put(url, editor);
}
assert rhinoWindow != null;
rhinoWindow.showScriptWindow(url);
rhinoWindow.toFront();
}
});
}
catch ( IOException e )
{
assert rhinoWindow != null;
rhinoWindow.showScriptWindow(url);
rhinoWindow.toFront();
}
});
} catch (IOException e) {
LogUtils.DEBUG("Caught exception: " + e);
LogUtils.DEBUG(LogUtils.getTrace(e));
}
@@ -200,15 +193,13 @@ public class ScriptEditorForJavaScript implements ScriptEditor
// Ensures that new instances of this class can only be created using
// the factory methods
private ScriptEditorForJavaScript()
{
private ScriptEditorForJavaScript() {
}
private ScriptEditorForJavaScript(XScriptContext context, URL url)
{
private ScriptEditorForJavaScript(XScriptContext context, URL url) {
initUI();
Scriptable scope = getScope( context );
this.rhinoWindow.openFile(url, scope, new closeHandler( url ) );
Scriptable scope = getScope(context);
this.rhinoWindow.openFile(url, scope, new closeHandler(url));
this.scriptURL = url;
@@ -219,30 +210,26 @@ public class ScriptEditorForJavaScript implements ScriptEditor
*
*/
public Object execute() throws Exception
{
public Object execute() throws Exception {
rhinoWindow.toFront();
return this.rhinoWindow.runScriptWindow( scriptURL );
return this.rhinoWindow.runScriptWindow(scriptURL);
}
/**
* Indicates the line where error occurred
*
*/
public void indicateErrorLine( int lineNum )
{
public void indicateErrorLine(int lineNum) {
this.rhinoWindow.toFront();
this.rhinoWindow.highlighLineInScriptWindow( scriptURL, lineNum );
this.rhinoWindow.highlighLineInScriptWindow(scriptURL, lineNum);
}
// This code is based on the main method of the Rhino Debugger Main class
// We pass in the XScriptContext in the global scope for script execution
private void initUI() {
try {
synchronized ( ScriptEditorForJavaScript.class )
{
if ( this.rhinoWindow != null )
{
synchronized (ScriptEditorForJavaScript.class) {
if (this.rhinoWindow != null) {
return;
}
@@ -263,7 +250,7 @@ public class ScriptEditorForJavaScript implements ScriptEditor
return org.mozilla.javascript.tools.shell.Main.getScope();
}
});
sdb.addWindowListener( new WindowAdapter() {
sdb.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
shutdown();
@@ -272,35 +259,34 @@ public class ScriptEditorForJavaScript implements ScriptEditor
this.rhinoWindow = sdb;
}
} catch (Exception exc) {
LogUtils.DEBUG( LogUtils.getTrace( exc ) );
LogUtils.DEBUG(LogUtils.getTrace(exc));
}
}
private void shutdown()
{
private void shutdown() {
// dereference Rhino Debugger window
this.rhinoWindow = null;
this.scriptURL = null;
// remove all scripts from BEING_EDITED
synchronized( BEING_EDITED )
{
synchronized (BEING_EDITED) {
java.util.Iterator<URL> iter = BEING_EDITED.keySet().iterator();
java.util.ArrayList<URL> keysToRemove = new java.util.ArrayList<URL>();
while ( iter.hasNext() )
{
while (iter.hasNext()) {
URL key = iter.next();
keysToRemove.add( key );
keysToRemove.add(key);
}
for ( int i=0; i<keysToRemove.size(); i++ )
{
BEING_EDITED.remove( keysToRemove.get( i ) );
for (int i = 0; i < keysToRemove.size(); i++) {
BEING_EDITED.remove(keysToRemove.get(i));
}
keysToRemove = null;
}
}
private Scriptable getScope(XScriptContext xsctxt )
{
private Scriptable getScope(XScriptContext xsctxt) {
Context ctxt = Context.enter();
ImporterTopLevel scope = new ImporterTopLevel(ctxt);
@@ -308,25 +294,21 @@ public class ScriptEditorForJavaScript implements ScriptEditor
scope.put("XSCRIPTCONTEXT", scope, jsCtxt);
Scriptable jsArgs = Context.toObject(
new Object[0], scope);
new Object[0], scope);
scope.put("ARGUMENTS", scope, jsArgs);
Context.exit();
return scope;
}
private class closeHandler implements Runnable
{
private class closeHandler implements Runnable {
private URL url;
private closeHandler( URL url )
{
private closeHandler(URL url) {
this.url = url;
}
public void run()
{
synchronized( BEING_EDITED )
{
BEING_EDITED.remove( this.url );
public void run() {
synchronized (BEING_EDITED) {
BEING_EDITED.remove(this.url);
}
}
}

View File

@@ -48,43 +48,37 @@ import org.mozilla.javascript.ImporterTopLevel;
import org.mozilla.javascript.Scriptable;
import org.mozilla.javascript.JavaScriptException;
public class ScriptProviderForJavaScript
{
public static class ScriptProviderForJavaScript_2 extends ScriptProvider
{
public ScriptProviderForJavaScript_2(XComponentContext ctx)
{
public class ScriptProviderForJavaScript {
public static class ScriptProviderForJavaScript_2 extends ScriptProvider {
public ScriptProviderForJavaScript_2(XComponentContext ctx) {
super(ctx, "JavaScript");
}
@Override
public XScript getScript( /*IN*/String scriptURI )
throws com.sun.star.uno.RuntimeException,
ScriptFrameworkErrorException
{
public XScript getScript(/*IN*/String scriptURI)
throws com.sun.star.uno.RuntimeException,
ScriptFrameworkErrorException {
ScriptMetaData scriptData = null;
try
{
scriptData = getScriptData( scriptURI );
ScriptImpl script = new ScriptImpl( m_xContext, scriptData, m_xModel, m_xInvocContext );
try {
scriptData = getScriptData(scriptURI);
ScriptImpl script = new ScriptImpl(m_xContext, scriptData, m_xModel,
m_xInvocContext);
return script;
}
catch ( com.sun.star.uno.RuntimeException re )
{
throw new ScriptFrameworkErrorException( "Failed to create script object: " + re.getMessage(),
null, scriptData.getLanguageName(), language, ScriptFrameworkErrorType.UNKNOWN );
} catch (com.sun.star.uno.RuntimeException re) {
throw new ScriptFrameworkErrorException("Failed to create script object: " +
re.getMessage(),
null, scriptData.getLanguageName(), language, ScriptFrameworkErrorType.UNKNOWN);
}
}
@Override
public boolean hasScriptEditor()
{
public boolean hasScriptEditor() {
return true;
}
@Override
public ScriptEditor getScriptEditor()
{
public ScriptEditor getScriptEditor() {
return ScriptEditorForJavaScript.getEditor();
}
}
@@ -101,242 +95,231 @@ public class ScriptProviderForJavaScript
* the component
* @see com.sun.star.comp.loader.JavaLoader
*/
public static XSingleServiceFactory __getServiceFactory( String implName,
public static XSingleServiceFactory __getServiceFactory(String implName,
XMultiServiceFactory multiFactory,
XRegistryKey regKey )
{
XRegistryKey regKey) {
XSingleServiceFactory xSingleServiceFactory = null;
if ( implName.equals( ScriptProviderForJavaScript.ScriptProviderForJavaScript_2.class.getName() ) )
{
if (implName.equals(
ScriptProviderForJavaScript.ScriptProviderForJavaScript_2.class.getName())) {
xSingleServiceFactory = FactoryHelper.getServiceFactory(
ScriptProviderForJavaScript.ScriptProviderForJavaScript_2.class,
"com.sun.star.script.provider.ScriptProviderForJavaScript",
multiFactory,
regKey );
ScriptProviderForJavaScript.ScriptProviderForJavaScript_2.class,
"com.sun.star.script.provider.ScriptProviderForJavaScript",
multiFactory,
regKey);
}
return xSingleServiceFactory;
}
}
class ScriptImpl implements XScript
{
class ScriptImpl implements XScript {
private ScriptMetaData metaData;
private XComponentContext m_xContext;
private XMultiComponentFactory m_xMultiComponentFactory;
private XModel m_xModel;
private XScriptInvocationContext m_xInvocContext;
ScriptImpl( XComponentContext ctx, ScriptMetaData metaData, XModel xModel, XScriptInvocationContext xInvocContext ) throws com.sun.star.uno.RuntimeException
{
ScriptImpl(XComponentContext ctx, ScriptMetaData metaData, XModel xModel,
XScriptInvocationContext xInvocContext) throws
com.sun.star.uno.RuntimeException {
this.metaData = metaData;
this.m_xContext = ctx;
this.m_xModel = xModel;
this.m_xInvocContext = xInvocContext;
try
{
try {
this.m_xMultiComponentFactory = m_xContext.getServiceManager();
}
catch ( Exception e )
{
LogUtils.DEBUG( LogUtils.getTrace( e ) );
} catch (Exception e) {
LogUtils.DEBUG(LogUtils.getTrace(e));
throw new com.sun.star.uno.RuntimeException(
"Error constructing ScriptImpl: [javascript]");
}
LogUtils.DEBUG("ScriptImpl [javascript] script data = " + metaData );
LogUtils.DEBUG("ScriptImpl [javascript] script data = " + metaData);
}
/**
* The invoke method of the ScriptProviderForJavaScript runs the
* JavaScript script specified in the URI
*
*
*
* @param params All parameters; pure, out params are
* undefined in sequence, i.e., the value
* has to be ignored by the callee
*
* @param aOutParamIndex Out indices
*
* @param aOutParam Out parameters
*
* @return The value returned from the function
* being invoked
*
* @throws ScriptFrameworkErrorException If there is no matching script name
*
*
* @throws InvocationTargetException If the running script throws
* an exception this information
* is captured and rethrown as
* ScriptErrorRaisedException or
* ScriptExceptionRaisedException
*/
/**
* The invoke method of the ScriptProviderForJavaScript runs the
* JavaScript script specified in the URI
*
*
*
* @param params All parameters; pure, out params are
* undefined in sequence, i.e., the value
* has to be ignored by the callee
*
* @param aOutParamIndex Out indices
*
* @param aOutParam Out parameters
*
* @return The value returned from the function
* being invoked
*
* @throws ScriptFrameworkErrorException If there is no matching script name
*
*
* @throws InvocationTargetException If the running script throws
* an exception this information
* is captured and rethrown as
* ScriptErrorRaisedException or
* ScriptExceptionRaisedException
*/
public Object invoke(
/*IN*/Object[] params,
/*OUT*/short[][] aOutParamIndex,
/*OUT*/Object[][] aOutParam )
public Object invoke(
/*IN*/Object[] params,
/*OUT*/short[][] aOutParamIndex,
/*OUT*/Object[][] aOutParam)
throws ScriptFrameworkErrorException, InvocationTargetException
{
// Initialise the out parameters - not used at the moment
aOutParamIndex[0] = new short[0];
aOutParam[0] = new Object[0];
throws ScriptFrameworkErrorException, InvocationTargetException {
// Initialise the out parameters - not used at the moment
aOutParamIndex[0] = new short[0];
aOutParam[0] = new Object[0];
ClassLoader cl = null;
URL sourceUrl = null;
try {
cl = ClassLoaderFactory.getURLClassLoader( metaData );
sourceUrl = metaData.getSourceURL();
}
catch ( java.net.MalformedURLException mfu )
{
throw new ScriptFrameworkErrorException(
mfu.getMessage(), null,
metaData.getLanguageName(), metaData.getLanguage(),
ScriptFrameworkErrorType.MALFORMED_URL );
}
Context ctxt = null;
ClassLoader cl = null;
URL sourceUrl = null;
try
{
String editorURL = sourceUrl.toString();
Object result = null;
ScriptEditorForJavaScript editor =
ScriptEditorForJavaScript.getEditor(
metaData.getSourceURL() );
if (editor != null)
{
editorURL = editor.getURL();
result = editor.execute();
if ( result != null &&
result.getClass().getName().equals( "org.mozilla.javascript.Undefined" ) )
{
// Always return a string
// TODO revisit
return Context.toString( result );
}
}
String source;
if (editor != null && editor.isModified())
{
LogUtils.DEBUG("GOT A MODIFIED SOURCE");
source = editor.getText();
}
else
{
metaData.loadSource();
source = metaData.getSource();
}
if ( source == null || source.length() == 0 ) {
throw new ScriptFrameworkErrorException(
"Failed to read source data for script", null,
metaData.getLanguageName(), metaData.getLanguage(),
ScriptFrameworkErrorType.UNKNOWN );
}
/* Set the context ClassLoader on the current thread to
be our custom ClassLoader. This is the suggested method
for setting up a ClassLoader to be used by the Rhino
interpreter
*/
if (cl != null) {
Thread.currentThread().setContextClassLoader(cl);
}
// Initialize a Rhino Context object
ctxt = Context.enter();
/* The ImporterTopLevel ensures that importClass and
importPackage statements work in Javascript scripts
Make the XScriptContext available as a global variable
to the script
*/
ImporterTopLevel scope = new ImporterTopLevel(ctxt);
Scriptable jsCtxt = Context.toObject(
ScriptContext.createContext(
m_xModel, m_xInvocContext, m_xContext,
m_xMultiComponentFactory), scope);
scope.put("XSCRIPTCONTEXT", scope, jsCtxt);
Scriptable jsArgs = Context.toObject(params, scope);
scope.put("ARGUMENTS", scope, jsArgs);
result = ctxt.evaluateString(scope,
source, "<stdin>", 1, null);
result = Context.toString(result);
return result;
}
catch (JavaScriptException jse) {
LogUtils.DEBUG( "Caught JavaScriptException exception for JavaScript type = " + jse.getClass() );
String message = jse.getMessage();
Object wrap = jse.getValue();
LogUtils.DEBUG( "\t message " + message );
LogUtils.DEBUG( "\t wrapped type " + wrap.getClass() );
LogUtils.DEBUG( "\t wrapped toString " + wrap.toString() );
ScriptExceptionRaisedException se = new
ScriptExceptionRaisedException( message );
se.lineNum = -1;
se.language = "JavaScript";
se.scriptName = metaData.getLanguageName();
se.exceptionType = wrap.getClass().getName();
se.language = metaData.getLanguage();
LogUtils.DEBUG( "ExceptionRaised exception " );
LogUtils.DEBUG( "\t message " + se.getMessage() );
LogUtils.DEBUG( "\t lineNum " + se.lineNum );
LogUtils.DEBUG( "\t language " + se.language );
LogUtils.DEBUG( "\t scriptName " + se.scriptName );
raiseEditor( se.lineNum );
throw new InvocationTargetException( "JavaScript uncaught exception" + metaData.getLanguageName(), null, se );
}
catch (Exception ex) {
LogUtils.DEBUG("Caught Exception " + ex );
LogUtils.DEBUG("rethrowing as ScriptFramework error" );
throw new ScriptFrameworkErrorException(
ex.getMessage(), null,
metaData.getLanguageName(), metaData.getLanguage(),
ScriptFrameworkErrorType.UNKNOWN );
}
finally {
if ( ctxt != null )
{
Context.exit();
}
}
try {
cl = ClassLoaderFactory.getURLClassLoader(metaData);
sourceUrl = metaData.getSourceURL();
} catch (java.net.MalformedURLException mfu) {
throw new ScriptFrameworkErrorException(
mfu.getMessage(), null,
metaData.getLanguageName(), metaData.getLanguage(),
ScriptFrameworkErrorType.MALFORMED_URL);
}
private void raiseEditor( int lineNum )
{
try
{
URL sourceUrl = metaData.getSourceURL();
ScriptEditorForJavaScript editor = ScriptEditorForJavaScript.getEditor( sourceUrl );
if ( editor == null )
{
editor = ScriptEditorForJavaScript.getEditor();
editor.edit(
ScriptContext.createContext(m_xModel, m_xInvocContext,
m_xContext, m_xMultiComponentFactory), metaData );
editor = ScriptEditorForJavaScript.getEditor( sourceUrl );
}
if ( editor != null )
{
System.out.println("** Have raised IDE for JavaScript, calling indicateErrorLine for line " + lineNum );
editor.indicateErrorLine( lineNum );
Context ctxt = null;
try {
String editorURL = sourceUrl.toString();
Object result = null;
ScriptEditorForJavaScript editor =
ScriptEditorForJavaScript.getEditor(
metaData.getSourceURL());
if (editor != null) {
editorURL = editor.getURL();
result = editor.execute();
if (result != null &&
result.getClass().getName().equals("org.mozilla.javascript.Undefined")) {
// Always return a string
// TODO revisit
return Context.toString(result);
}
}
catch( Exception ignore )
{
String source;
if (editor != null && editor.isModified()) {
LogUtils.DEBUG("GOT A MODIFIED SOURCE");
source = editor.getText();
} else {
metaData.loadSource();
source = metaData.getSource();
}
if (source == null || source.length() == 0) {
throw new ScriptFrameworkErrorException(
"Failed to read source data for script", null,
metaData.getLanguageName(), metaData.getLanguage(),
ScriptFrameworkErrorType.UNKNOWN);
}
/* Set the context ClassLoader on the current thread to
be our custom ClassLoader. This is the suggested method
for setting up a ClassLoader to be used by the Rhino
interpreter
*/
if (cl != null) {
Thread.currentThread().setContextClassLoader(cl);
}
// Initialize a Rhino Context object
ctxt = Context.enter();
/* The ImporterTopLevel ensures that importClass and
importPackage statements work in Javascript scripts
Make the XScriptContext available as a global variable
to the script
*/
ImporterTopLevel scope = new ImporterTopLevel(ctxt);
Scriptable jsCtxt = Context.toObject(
ScriptContext.createContext(
m_xModel, m_xInvocContext, m_xContext,
m_xMultiComponentFactory), scope);
scope.put("XSCRIPTCONTEXT", scope, jsCtxt);
Scriptable jsArgs = Context.toObject(params, scope);
scope.put("ARGUMENTS", scope, jsArgs);
result = ctxt.evaluateString(scope,
source, "<stdin>", 1, null);
result = Context.toString(result);
return result;
} catch (JavaScriptException jse) {
LogUtils.DEBUG("Caught JavaScriptException exception for JavaScript type = " +
jse.getClass());
String message = jse.getMessage();
Object wrap = jse.getValue();
LogUtils.DEBUG("\t message " + message);
LogUtils.DEBUG("\t wrapped type " + wrap.getClass());
LogUtils.DEBUG("\t wrapped toString " + wrap.toString());
ScriptExceptionRaisedException se = new
ScriptExceptionRaisedException(message);
se.lineNum = -1;
se.language = "JavaScript";
se.scriptName = metaData.getLanguageName();
se.exceptionType = wrap.getClass().getName();
se.language = metaData.getLanguage();
LogUtils.DEBUG("ExceptionRaised exception ");
LogUtils.DEBUG("\t message " + se.getMessage());
LogUtils.DEBUG("\t lineNum " + se.lineNum);
LogUtils.DEBUG("\t language " + se.language);
LogUtils.DEBUG("\t scriptName " + se.scriptName);
raiseEditor(se.lineNum);
throw new InvocationTargetException("JavaScript uncaught exception" +
metaData.getLanguageName(), null, se);
} catch (Exception ex) {
LogUtils.DEBUG("Caught Exception " + ex);
LogUtils.DEBUG("rethrowing as ScriptFramework error");
throw new ScriptFrameworkErrorException(
ex.getMessage(), null,
metaData.getLanguageName(), metaData.getLanguage(),
ScriptFrameworkErrorType.UNKNOWN);
} finally {
if (ctxt != null) {
Context.exit();
}
}
}
private void raiseEditor(int lineNum) {
try {
URL sourceUrl = metaData.getSourceURL();
ScriptEditorForJavaScript editor = ScriptEditorForJavaScript.getEditor(
sourceUrl);
if (editor == null) {
editor = ScriptEditorForJavaScript.getEditor();
editor.edit(
ScriptContext.createContext(m_xModel, m_xInvocContext,
m_xContext, m_xMultiComponentFactory), metaData);
editor = ScriptEditorForJavaScript.getEditor(sourceUrl);
}
if (editor != null) {
System.out.println("** Have raised IDE for JavaScript, calling indicateErrorLine for line "
+ lineNum);
editor.indicateErrorLine(lineNum);
}
} catch (Exception ignore) {
}
}
}