diff --git a/scripting/java/com/sun/star/script/framework/browse/ParcelBrowseNode.java b/scripting/java/com/sun/star/script/framework/browse/ParcelBrowseNode.java index 5dcd2b74d89a..4f2de6ed060d 100644 --- a/scripting/java/com/sun/star/script/framework/browse/ParcelBrowseNode.java +++ b/scripting/java/com/sun/star/script/framework/browse/ParcelBrowseNode.java @@ -21,11 +21,13 @@ package com.sun.star.script.framework.browse; import com.sun.star.beans.XIntrospectionAccess; import com.sun.star.lang.XMultiComponentFactory; -import com.sun.star.lib.uno.helper.PropertySet; +import com.sun.star.lib.uno.helper.ComponentBase; -import com.sun.star.script.XInvocation; import com.sun.star.script.browse.BrowseNodeTypes; import com.sun.star.script.browse.XBrowseNode; +import com.sun.star.script.browse.XCreatableBrowseNode; +import com.sun.star.script.browse.XDeletableBrowseNode; +import com.sun.star.script.browse.XRenamableBrowseNode; import com.sun.star.script.framework.container.Parcel; import com.sun.star.script.framework.container.ParcelContainer; import com.sun.star.script.framework.container.ScriptEntry; @@ -46,18 +48,16 @@ import java.util.Collection; import javax.swing.JOptionPane; -public class ParcelBrowseNode extends PropertySet implements - XBrowseNode, XInvocation { +public class ParcelBrowseNode extends ComponentBase implements + XBrowseNode, XCreatableBrowseNode, XDeletableBrowseNode, XRenamableBrowseNode { private final ScriptProvider provider; private Collection browsenodes; private final ParcelContainer container; private Parcel parcel; - // these four are properties, they are accessed via reflection - public boolean deletable = true; - public boolean editable = false; - public boolean creatable = false; - public boolean renamable = true; + private boolean deletable = true; + private boolean creatable = false; + private boolean renamable = true; public ParcelBrowseNode(ScriptProvider provider, ParcelContainer container, String parcelName) throws @@ -69,10 +69,6 @@ public class ParcelBrowseNode extends PropertySet implements this.parcel = (Parcel)this.container.getByName(parcelName); - registerProperty("Deletable", new Type(boolean.class), (short)0, "deletable"); - registerProperty("Editable", new Type(boolean.class), (short)0, "editable"); - registerProperty("Creatable", new Type(boolean.class), (short)0, "creatable"); - registerProperty("Renamable", new Type(boolean.class), (short)0, "renamable"); if (provider.hasScriptEditor()) { this.creatable = true; @@ -91,7 +87,6 @@ public class ParcelBrowseNode extends PropertySet implements container.isUnoPkg() ) ) { deletable = false; - editable = false; creatable = false; renamable = false; } @@ -147,165 +142,89 @@ public class ParcelBrowseNode extends PropertySet implements return getName(); } - // implementation of XInvocation interface - public XIntrospectionAccess getIntrospection() { + @Override + public boolean isCreatableNode() { + return creatable; + } + + @Override + public boolean isDeletableNode() { + return deletable; + } + + @Override + public boolean isRenamableNode() { + return renamable; + } + + @Override + public ScriptBrowseNode createNode(String newName) { + if (newName == null || newName.length() == 0) + return null; + + try { + String source = provider.getScriptEditor().getTemplate(); + + String languageName = + newName + "." + provider.getScriptEditor().getExtension(); + + String language = container.getLanguage(); + + ScriptEntry entry = new ScriptEntry(language, languageName); + + Parcel parcel = (Parcel)container.getByName(getName()); + ScriptMetaData data = new ScriptMetaData(parcel, entry, source); + parcel.insertByName(languageName, data); + + ScriptBrowseNode sbn = + new ScriptBrowseNode(provider, parcel, languageName); + + if (browsenodes == null) { + LogUtils.DEBUG("browsenodes null!!"); + browsenodes = new ArrayList(4); + } + + browsenodes.add(sbn); + return sbn; + } catch (Exception e) { + LogUtils.DEBUG("ParcelBrowseNode[create] failed with: " + e); + LogUtils.DEBUG(LogUtils.getTrace(e)); + } return null; } - 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); - - // Initialise the out parameters - not used but prevents error in - // UNO bridge - aOutParamIndex[0] = new short[0]; - aOutParam[0] = new Object[0]; - - Any result = new Any(new Type(Boolean.class), Boolean.TRUE); - - if (aFunctionName.equals("Creatable")) { - try { - String newName; - - if (aParams == null || aParams.length < 1 - || !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 { - DialogFactory dialogFactory = DialogFactory.getDialogFactory(); - newName = dialogFactory.showInputDialog(title, prompt); - } catch (Exception e) { - - newName = JOptionPane.showInputDialog(null, prompt, title, - JOptionPane.QUESTION_MESSAGE); - - } - } else { - newName = AnyConverter.toString(aParams[0]); - } - - if (newName == null || newName.length() == 0) { - result = new Any(new Type(Boolean.class), Boolean.FALSE); - } else { - String source = provider.getScriptEditor().getTemplate(); - - String languageName = - newName + "." + provider.getScriptEditor().getExtension(); - - String language = container.getLanguage(); - - ScriptEntry entry = new ScriptEntry(language, languageName); - - Parcel parcel = (Parcel)container.getByName(getName()); - ScriptMetaData data = new ScriptMetaData(parcel, entry, source); - parcel.insertByName(languageName, data); - - ScriptBrowseNode sbn = - new ScriptBrowseNode(provider, parcel, languageName); - - if (browsenodes == null) { - LogUtils.DEBUG("browsenodes null!!"); - browsenodes = new ArrayList(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)); - result = new Any(new Type(Boolean.class), Boolean.FALSE); - } - } else if (aFunctionName.equals("Deletable")) { - try { - if (container.deleteParcel(getName())) { - result = new Any(new Type(Boolean.class), Boolean.TRUE); - } else { - result = new Any(new Type(Boolean.class), Boolean.FALSE); - } - } catch (Exception e) { - result = new Any(new Type(Boolean.class), Boolean.FALSE); - } - } else if (aFunctionName.equals("Renamable")) { - - String newName = null; - - try { - - if (aParams == null || aParams.length < 1 || - !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 { - DialogFactory dialogFactory = DialogFactory.getDialogFactory(); - newName = dialogFactory.showInputDialog(title, prompt); - } catch (Exception e) { - - newName = JOptionPane.showInputDialog(null, prompt, title, - JOptionPane.QUESTION_MESSAGE); - - } - } else { - newName = AnyConverter.toString(aParams[0]); - } - - container.renameParcel(getName(), newName); - Parcel p = (Parcel)container.getByName(newName); - - if (browsenodes == null) { - getChildNodes(); - } - - if (browsenodes != null) { - 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) { - result = new Any(new Type(Boolean.class), Boolean.FALSE); - } + @Override + public boolean deleteNode() { + try { + if (container.deleteParcel(getName())) + return true; + } catch (Exception e) { } - - else { - throw new com.sun.star.lang.IllegalArgumentException( - "Function " + aFunctionName + " not supported."); - } - - return result; - } - - public void setValue(String aPropertyName, Object aValue) 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 { - return null; - } - - public boolean hasMethod(String aName) { return false; } - public boolean hasProperty(String aName) { - return false; + @Override + public ParcelBrowseNode renameNode(String newName) { + try { + container.renameParcel(getName(), newName); + Parcel p = (Parcel)container.getByName(newName); + + if (browsenodes == null) { + getChildNodes(); + } + + if (browsenodes != null) { + ScriptBrowseNode[] childNodes = + browsenodes.toArray(new ScriptBrowseNode[browsenodes.size()]); + + for (int index = 0; index < childNodes.length; index++) { + childNodes[ index ].updateURI(p); + } + } + + return this; + } catch (Exception e) { + return null; + } } } diff --git a/scripting/java/com/sun/star/script/framework/browse/PkgProviderBrowseNode.java b/scripting/java/com/sun/star/script/framework/browse/PkgProviderBrowseNode.java index 6cdfd2a774d3..5c9e738fcbc8 100644 --- a/scripting/java/com/sun/star/script/framework/browse/PkgProviderBrowseNode.java +++ b/scripting/java/com/sun/star/script/framework/browse/PkgProviderBrowseNode.java @@ -37,8 +37,6 @@ public class PkgProviderBrowseNode extends ProviderBrowseNode { container.getParcelContainerDir()); LogUtils.DEBUG("*** PkgProviderBrowseNode ctor, container has num parcels = " + container.getElementNames().length); - deletable = false; - editable = false; creatable = false; } diff --git a/scripting/java/com/sun/star/script/framework/browse/ProviderBrowseNode.java b/scripting/java/com/sun/star/script/framework/browse/ProviderBrowseNode.java index 91c2566be5ae..972fdc525f59 100644 --- a/scripting/java/com/sun/star/script/framework/browse/ProviderBrowseNode.java +++ b/scripting/java/com/sun/star/script/framework/browse/ProviderBrowseNode.java @@ -22,11 +22,11 @@ import com.sun.star.beans.XIntrospectionAccess; import com.sun.star.lang.XMultiComponentFactory; -import com.sun.star.lib.uno.helper.PropertySet; +import com.sun.star.lib.uno.helper.ComponentBase; -import com.sun.star.script.XInvocation; import com.sun.star.script.browse.BrowseNodeTypes; import com.sun.star.script.browse.XBrowseNode; +import com.sun.star.script.browse.XCreatableBrowseNode; import com.sun.star.script.framework.container.ParcelContainer; import com.sun.star.script.framework.log.LogUtils; import com.sun.star.script.framework.provider.ScriptProvider; @@ -44,18 +44,15 @@ import java.util.Collection; import javax.swing.JOptionPane; -public class ProviderBrowseNode extends PropertySet implements - XBrowseNode, XInvocation { +public class ProviderBrowseNode extends ComponentBase implements + XBrowseNode, XCreatableBrowseNode { private final ScriptProvider provider; private Collection browsenodes; private final String name; protected ParcelContainer container; private final XComponentContext m_xCtx; - // these are properties, they are accessed by reflection - public boolean deletable = true; - public boolean creatable = true; - public boolean editable = false; + protected boolean creatable = true; public ProviderBrowseNode(ScriptProvider provider, ParcelContainer container, XComponentContext xCtx) { @@ -66,9 +63,6 @@ public class ProviderBrowseNode extends PropertySet implements this.provider = provider; this.m_xCtx = xCtx; - registerProperty("Deletable", new Type(boolean.class), (short)0, "deletable"); - registerProperty("Creatable", new Type(boolean.class), (short)0, "creatable"); - registerProperty("Editable", new Type(boolean.class), (short)0, "editable"); XMultiComponentFactory xFac = m_xCtx.getServiceManager(); try { @@ -78,7 +72,6 @@ public class ProviderBrowseNode extends PropertySet implements xCtx)); if ( container.isUnoPkg() || xSFA.isReadOnly( container.getParcelContainerDir() ) ) { - deletable = false; creatable = false; } } @@ -165,100 +158,36 @@ public class ProviderBrowseNode extends PropertySet implements return getName(); } - // implementation of XInvocation interface - public XIntrospectionAccess getIntrospection() { - return null; + @Override + public boolean isCreatableNode() { + return creatable; } - 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 { + @Override + public ParcelBrowseNode createNode(String name) { + try { + if (name == null || name.length() == 0) + return null; - // Initialise the out parameters - not used but prevents error in - // UNO bridge - aOutParamIndex[0] = new short[0]; - aOutParam[0] = new Object[0]; + Object newParcel = container.createParcel(name); + LogUtils.DEBUG("Parcel created " + name + " " + newParcel); - Any result = new Any(new Type(Boolean.class), Boolean.TRUE); + if (newParcel == null) + return null; - if (aFunctionName.equals("Creatable")) { - try { - String name; + ParcelBrowseNode parcel = new ParcelBrowseNode(provider, container, name); + LogUtils.DEBUG("created parcel node "); - if (aParams == null || aParams.length < 1 || - !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 { - DialogFactory dialogFactory = DialogFactory.getDialogFactory(); - name = dialogFactory.showInputDialog(title, prompt); - } catch (Exception e) { - - name = JOptionPane.showInputDialog(null, prompt, title, - JOptionPane.QUESTION_MESSAGE); - - } - } else { - name = AnyConverter.toString(aParams[0]); - } - - if (name == null || name.length() == 0) { - result = new Any(new Type(Boolean.class), Boolean.FALSE); - } else { - - 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); - LogUtils.DEBUG("created parcel node "); - - if (browsenodes == null) { - browsenodes = new ArrayList(5); - } - - browsenodes.add(parcel); - result = new Any(new Type(XBrowseNode.class), parcel); - } - } - } catch (Exception e) { - LogUtils.DEBUG("ProviderBrowseNode[create] failed with: " + e); - LogUtils.DEBUG(LogUtils.getTrace(e)); - result = new Any(new Type(Boolean.class), Boolean.FALSE); + if (browsenodes == null) { + browsenodes = new ArrayList(5); } - } else { - throw new com.sun.star.lang.IllegalArgumentException( - "Function " + aFunctionName + " not supported."); + + browsenodes.add(parcel); + return parcel; + } catch (Exception e) { + LogUtils.DEBUG("ProviderBrowseNode[create] failed with: " + e); + LogUtils.DEBUG(LogUtils.getTrace(e)); + return null; } - - return result; - } - - public void setValue(String aPropertyName, Object aValue) 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 { - - return null; - } - - public boolean hasMethod(String aName) { - return false; - } - - public boolean hasProperty(String aName) { - return false; } } diff --git a/scripting/java/com/sun/star/script/framework/browse/ScriptBrowseNode.java b/scripting/java/com/sun/star/script/framework/browse/ScriptBrowseNode.java index 5f91b1a78699..72acf2b2d428 100644 --- a/scripting/java/com/sun/star/script/framework/browse/ScriptBrowseNode.java +++ b/scripting/java/com/sun/star/script/framework/browse/ScriptBrowseNode.java @@ -19,20 +19,15 @@ package com.sun.star.script.framework.browse; import com.sun.star.beans.XIntrospectionAccess; -import com.sun.star.container.ElementExistException; -import com.sun.star.container.NoSuchElementException; - -import com.sun.star.lang.NoSupportException; -import com.sun.star.lang.WrappedTargetException; import com.sun.star.lang.XMultiComponentFactory; import com.sun.star.lib.uno.helper.PropertySet; -import com.sun.star.reflection.InvocationTargetException; - -import com.sun.star.script.XInvocation; import com.sun.star.script.browse.BrowseNodeTypes; import com.sun.star.script.browse.XBrowseNode; +import com.sun.star.script.browse.XDeletableBrowseNode; +import com.sun.star.script.browse.XEditableBrowseNode; +import com.sun.star.script.browse.XRenamableBrowseNode; import com.sun.star.script.framework.container.Parcel; import com.sun.star.script.framework.container.ScriptEntry; import com.sun.star.script.framework.container.ScriptMetaData; @@ -44,12 +39,13 @@ import com.sun.star.ucb.XSimpleFileAccess; import com.sun.star.uno.Any; import com.sun.star.uno.AnyConverter; +import com.sun.star.uno.DeploymentException; import com.sun.star.uno.Type; import com.sun.star.uno.UnoRuntime; import com.sun.star.uno.XComponentContext; public class ScriptBrowseNode extends PropertySet implements - XBrowseNode, XInvocation { + XBrowseNode, XDeletableBrowseNode, XEditableBrowseNode, XRenamableBrowseNode { private final ScriptProvider provider; @@ -59,9 +55,10 @@ public class ScriptBrowseNode extends PropertySet implements // these are properties, accessed by reflection public String uri; public String description; - public boolean editable; - public boolean deletable = false; - public boolean renamable = false; + + private boolean editable = false; + private boolean deletable = false; + private boolean renamable = false; public ScriptBrowseNode(ScriptProvider provider, Parcel parent, String name) { @@ -111,9 +108,6 @@ public class ScriptBrowseNode extends PropertySet implements } - registerProperty("Deletable", new Type(boolean.class), (short)0, "deletable"); - registerProperty("Editable", new Type(boolean.class), (short)0, "editable"); - registerProperty("Renamable", new Type(boolean.class), (short)0, "renamable"); registerProperty("URI", new Type(String.class), (short)0, "uri"); registerProperty("Description", new Type(String.class), (short)0, "description"); @@ -154,147 +148,88 @@ public class ScriptBrowseNode extends PropertySet implements } } - // implementation of XInvocation interface - public XIntrospectionAccess getIntrospection() { - return null; + @Override + public boolean isDeletableNode() { + return deletable; } - 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 { + @Override + public boolean isEditableNode() { + return editable; + } - // Initialise the out parameters - not used but prevents error in - // UNO bridge - aOutParamIndex[0] = new short[0]; - aOutParam[0] = new Object[0]; + @Override + public boolean isRenamableNode() { + return renamable; + } - Any result = new Any(new Type(Boolean.class), Boolean.TRUE); - - if (aFunctionName.equals("Editable")) { - if (!editable) { - - NoSupportException nse = - new NoSupportException(aFunctionName + " is not editable "); - - throw new InvocationTargetException( - "Scripting framework error editing script", null, nse); - - } - - XScriptContext ctxt = provider.getScriptingContext(); - ScriptMetaData data = null; - - try { - data = parent.getByName(name); - } catch (NoSuchElementException nse) { - throw new com.sun.star.lang.IllegalArgumentException(nse, - 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); - } - - provider.getScriptEditor().edit(ctxt, data); - } else if (aFunctionName.equals("Deletable")) { - if (!deletable) { - - NoSupportException nse = new NoSupportException( - aFunctionName + " is not supported for this node"); - - throw new InvocationTargetException( - "Scripting framework error deleting script", null, nse); - } - - try { - parent.removeByName(name); - result = new Any(new Type(Boolean.class), Boolean.TRUE); - } catch (NoSuchElementException nse) { - throw new com.sun.star.lang.IllegalArgumentException(nse, - name + " does not exist or can't be found "); - } catch (WrappedTargetException wte) { - // rethrow - throw new InvocationTargetException( - "Scripting framework deleting script ", null, wte.TargetException); - } - - } else if (aFunctionName.equals("Renamable")) { - result = new Any(new Type(XBrowseNode.class), new XBrowseNode[0]); - - if (!renamable) { - - NoSupportException nse = new NoSupportException( - aFunctionName + " is not supported for this node"); - - throw new InvocationTargetException( - "Scripting framework error renaming script", null, nse); - } - - try { - String newName = AnyConverter.toString(aParams[0]); - ScriptMetaData oldData = parent.getByName(name); - oldData.loadSource(); - String oldSource = oldData.getSource(); - - LogUtils.DEBUG("Create renamed script"); - - String languageName = - newName + "." + provider.getScriptEditor().getExtension(); - - String language = provider.getName(); - - ScriptEntry entry = new ScriptEntry(language, languageName); - - ScriptMetaData data = - new ScriptMetaData(parent, entry, oldSource); - - parent.insertByName(languageName, data); - - LogUtils.DEBUG("Now remove old script"); - parent.removeByName(name); - - uri = data.getShortFormScriptURL(); - name = languageName; - result = new Any(new Type(XBrowseNode.class), this); - } catch (NoSuchElementException nse) { - throw new com.sun.star.lang.IllegalArgumentException(nse, - 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) { - // rethrow - throw new InvocationTargetException( - "Scripting framework rename script ", null, wte.TargetException); - } - } else { - throw new com.sun.star.lang.IllegalArgumentException( - "Function " + aFunctionName + " not supported."); + @Override + public boolean editNode() { + if (!editable) { + throw new DeploymentException("Called editable on non-editable node"); } - return result; + XScriptContext ctxt = provider.getScriptingContext(); + ScriptMetaData data = null; + + try { + data = parent.getByName(name); + } catch (Exception e) { + return false; + } + + provider.getScriptEditor().edit(ctxt, data); + + return true; } - public void setValue(String aPropertyName, Object aValue) throws - com.sun.star.beans.UnknownPropertyException, - com.sun.star.script.CannotConvertException, - com.sun.star.reflection.InvocationTargetException { + @Override + public boolean deleteNode() { + if (!deletable) { + throw new DeploymentException("Called delete on non-deletable node"); + } + + try { + parent.removeByName(name); + return true; + } catch (Exception e) { + return false; + } } - public Object getValue(String aPropertyName) throws - com.sun.star.beans.UnknownPropertyException { + @Override + public ScriptBrowseNode renameNode(String newName) { + if (!renamable) { + throw new DeploymentException("Called rename on non-renamable node"); + } - return null; - } + try { + ScriptMetaData oldData = parent.getByName(name); + oldData.loadSource(); + String oldSource = oldData.getSource(); - public boolean hasMethod(String aName) { - return false; - } + LogUtils.DEBUG("Create renamed script"); - public boolean hasProperty(String aName) { - return false; + String languageName = + newName + "." + provider.getScriptEditor().getExtension(); + + String language = provider.getName(); + + ScriptEntry entry = new ScriptEntry(language, languageName); + + ScriptMetaData data = + new ScriptMetaData(parent, entry, oldSource); + + parent.insertByName(languageName, data); + + LogUtils.DEBUG("Now remove old script"); + parent.removeByName(name); + + uri = data.getShortFormScriptURL(); + name = languageName; + return this; + } catch (Exception e) { + return null; + } } } diff --git a/scripting/java/com/sun/star/script/framework/provider/ScriptProvider.java b/scripting/java/com/sun/star/script/framework/provider/ScriptProvider.java index e48bc48fbb45..97ea3d0788ed 100644 --- a/scripting/java/com/sun/star/script/framework/provider/ScriptProvider.java +++ b/scripting/java/com/sun/star/script/framework/provider/ScriptProvider.java @@ -38,9 +38,12 @@ import com.sun.star.lang.XMultiComponentFactory; import com.sun.star.lang.XServiceInfo; import com.sun.star.lang.XTypeProvider; -import com.sun.star.script.XInvocation; import com.sun.star.script.browse.BrowseNodeTypes; import com.sun.star.script.browse.XBrowseNode; +import com.sun.star.script.browse.XCreatableBrowseNode; +import com.sun.star.script.browse.XDeletableBrowseNode; +import com.sun.star.script.browse.XEditableBrowseNode; +import com.sun.star.script.browse.XRenamableBrowseNode; import com.sun.star.script.framework.browse.DialogFactory; import com.sun.star.script.framework.browse.ProviderBrowseNode; import com.sun.star.script.framework.container.ParcelContainer; @@ -74,8 +77,9 @@ import com.sun.star.uno.XComponentContext; import com.sun.star.util.XMacroExpander; public abstract class ScriptProvider implements - XScriptProvider, XBrowseNode, XPropertySet, XInvocation, XInitialization, - XTypeProvider, XServiceInfo, XNameContainer { + XScriptProvider, XBrowseNode, XCreatableBrowseNode, XDeletableBrowseNode, + XEditableBrowseNode, XRenamableBrowseNode, XPropertySet, XInitialization, XTypeProvider, + XServiceInfo, XNameContainer { private final String[] __serviceNames = { "com.sun.star.script.provider.ScriptProviderFor", @@ -94,10 +98,13 @@ public abstract class ScriptProvider implements // proxies to helper objects which implement interfaces private XPropertySet m_xPropertySetProxy; - private XInvocation m_xInvocationProxy; // TODO should this be implemented in this class private XBrowseNode m_xBrowseNodeProxy; + private XCreatableBrowseNode m_xCreatableBrowseNodeProxy; + private XDeletableBrowseNode m_xDeletableBrowseNodeProxy; + private XEditableBrowseNode m_xEditableBrowseNodeProxy; + private XRenamableBrowseNode m_xRenamableBrowseNodeProxy; private XScriptContext m_xScriptContext; public ScriptProvider(XComponentContext ctx, String language) { @@ -243,9 +250,15 @@ public abstract class ScriptProvider implements // delegation???? m_xBrowseNodeProxy = new ProviderBrowseNode(this, m_container, m_xContext); + m_xCreatableBrowseNodeProxy = + UnoRuntime.queryInterface(XCreatableBrowseNode.class, m_xBrowseNodeProxy); + m_xDeletableBrowseNodeProxy = + UnoRuntime.queryInterface(XDeletableBrowseNode.class, m_xBrowseNodeProxy); + m_xEditableBrowseNodeProxy = + UnoRuntime.queryInterface(XEditableBrowseNode.class, m_xBrowseNodeProxy); + m_xRenamableBrowseNodeProxy = + UnoRuntime.queryInterface(XRenamableBrowseNode.class, m_xBrowseNodeProxy); - m_xInvocationProxy = - UnoRuntime.queryInterface(XInvocation.class, m_xBrowseNodeProxy); m_xPropertySetProxy = UnoRuntime.queryInterface(XPropertySet.class, m_xBrowseNodeProxy); } else { @@ -264,15 +277,18 @@ public abstract class ScriptProvider implements * @return The types value */ public com.sun.star.uno.Type[] getTypes() { - Type[] retValue = new Type[ 8 ]; + Type[] retValue = new Type[ 11 ]; 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[ 6 ] = new Type(XCreatableBrowseNode.class); + retValue[ 7 ] = new Type(XDeletableBrowseNode.class); + retValue[ 8 ] = new Type(XEditableBrowseNode.class); + retValue[ 9 ] = new Type(XRenamableBrowseNode.class); + retValue[ 10 ] = new Type(com.sun.star.container.XNameContainer.class); return retValue; } @@ -415,44 +431,80 @@ public abstract class ScriptProvider implements return getName(); } - // implementation of XInvocation interface - public XIntrospectionAccess getIntrospection() { - return m_xInvocationProxy.getIntrospection(); + @Override + public boolean isCreatableNode() + { + if (m_xCreatableBrowseNodeProxy != null) + return m_xCreatableBrowseNodeProxy.isCreatableNode(); + else + return false; } - 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 { - - return m_xInvocationProxy.invoke( - aFunctionName, aParams, aOutParamIndex, aOutParam); + @Override + public XBrowseNode createNode(String newName) + { + if (m_xCreatableBrowseNodeProxy != null) + return m_xCreatableBrowseNodeProxy.createNode(newName); + else + return null; } - public void setValue(String aPropertyName, Object aValue) throws - com.sun.star.beans.UnknownPropertyException, - com.sun.star.script.CannotConvertException, - com.sun.star.reflection.InvocationTargetException { - - m_xInvocationProxy.setValue(aPropertyName, aValue); + @Override + public boolean isDeletableNode() + { + if (m_xDeletableBrowseNodeProxy != null) + return m_xDeletableBrowseNodeProxy.isDeletableNode(); + else + return false; } - public Object getValue(String aPropertyName) throws - com.sun.star.beans.UnknownPropertyException { - return m_xInvocationProxy.getValue(aPropertyName); + @Override + public boolean deleteNode() + { + if (m_xDeletableBrowseNodeProxy != null) + return m_xDeletableBrowseNodeProxy.deleteNode(); + else + return false; } - public boolean hasMethod(String aName) { - return m_xInvocationProxy.hasMethod(aName); + @Override + public boolean isEditableNode() + { + if (m_xEditableBrowseNodeProxy != null) + return m_xEditableBrowseNodeProxy.isEditableNode(); + else + return false; } - public boolean hasProperty(String aName) { - return m_xInvocationProxy.hasProperty(aName); + @Override + public boolean editNode() + { + if (m_xEditableBrowseNodeProxy != null) + return m_xEditableBrowseNodeProxy.editNode(); + else + return false; + } + + @Override + public boolean isRenamableNode() + { + if (m_xRenamableBrowseNodeProxy != null) + return m_xRenamableBrowseNodeProxy.isRenamableNode(); + else + return false; + } + + @Override + public XBrowseNode renameNode(String newName) + { + if (m_xRenamableBrowseNodeProxy != null) + return m_xRenamableBrowseNodeProxy.renameNode(newName); + else + return null; } public XPropertySetInfo getPropertySetInfo() { - return m_xPropertySetProxy.getPropertySetInfo(); + return m_xPropertySetProxy == null ? null : m_xPropertySetProxy.getPropertySetInfo(); } public void setPropertyValue(String aPropertyName, Object aValue) throws @@ -461,14 +513,18 @@ public abstract class ScriptProvider implements com.sun.star.lang.IllegalArgumentException, com.sun.star.lang.WrappedTargetException { - m_xPropertySetProxy.setPropertyValue(aPropertyName, aValue); + if (m_xPropertySetProxy != null) + m_xPropertySetProxy.setPropertyValue(aPropertyName, aValue); } public Object getPropertyValue(String PropertyName) throws com.sun.star.beans.UnknownPropertyException, com.sun.star.lang.WrappedTargetException { - return m_xPropertySetProxy.getPropertyValue(PropertyName); + if (m_xPropertySetProxy == null) + return null; + else + return m_xPropertySetProxy.getPropertyValue(PropertyName); } public void addPropertyChangeListener(String aPropertyName, @@ -476,7 +532,8 @@ public abstract class ScriptProvider implements com.sun.star.beans.UnknownPropertyException, com.sun.star.lang.WrappedTargetException { - m_xPropertySetProxy.addPropertyChangeListener(aPropertyName, xListener); + if (m_xPropertySetProxy != null) + m_xPropertySetProxy.addPropertyChangeListener(aPropertyName, xListener); } public void removePropertyChangeListener( @@ -484,8 +541,8 @@ public abstract class ScriptProvider implements com.sun.star.beans.UnknownPropertyException, com.sun.star.lang.WrappedTargetException { - m_xPropertySetProxy.removePropertyChangeListener( - aPropertyName, aListener); + if (m_xPropertySetProxy != null) + m_xPropertySetProxy.removePropertyChangeListener(aPropertyName, aListener); } public void addVetoableChangeListener( @@ -493,7 +550,8 @@ public abstract class ScriptProvider implements com.sun.star.beans.UnknownPropertyException, com.sun.star.lang.WrappedTargetException { - m_xPropertySetProxy.addVetoableChangeListener(PropertyName, aListener); + if (m_xPropertySetProxy != null) + m_xPropertySetProxy.addVetoableChangeListener(PropertyName, aListener); } public void removeVetoableChangeListener(String PropertyName, @@ -501,9 +559,8 @@ public abstract class ScriptProvider implements com.sun.star.beans.UnknownPropertyException, com.sun.star.lang.WrappedTargetException { - m_xPropertySetProxy.removeVetoableChangeListener( - PropertyName, aListener); - + if (m_xPropertySetProxy != null) + m_xPropertySetProxy.removeVetoableChangeListener(PropertyName, aListener); } public java.lang.Object getByName(String aName) throws com.sun.star.container.NoSuchElementException, diff --git a/scripting/qa/cppunit/beanshell/beanshelltest.cxx b/scripting/qa/cppunit/beanshell/beanshelltest.cxx index d4966ffc08e0..6643bf0350a8 100644 --- a/scripting/qa/cppunit/beanshell/beanshelltest.cxx +++ b/scripting/qa/cppunit/beanshell/beanshelltest.cxx @@ -13,7 +13,8 @@ #include #include -#include +#include +#include #include namespace @@ -51,25 +52,23 @@ void BeanShellTest::setUp() xUcb->registerContentProvider(xExpandProvider, u"vnd.sun.star.expand"_ustr, true); } -void createChild(css::uno::Reference& xInvocation, const OUString& sName) +void createChild(css::uno::Reference& xNode, + const OUString& sName) { - css::uno::Sequence aArgs = { css::uno::Any(sName) }; - css::uno::Sequence aOutParamIndex; - css::uno::Sequence aOutParam; - xInvocation->invoke("Creatable", aArgs, aOutParamIndex, aOutParam); + css::uno::Reference xCreatable( + xNode, css::uno::UNO_QUERY_THROW); + css::uno::Reference xResult = xCreatable->createNode(sName); + CPPUNIT_ASSERT(xResult.is()); } -void renameLibrary(css::uno::Reference& xInvocation, +void renameLibrary(css::uno::Reference& xNode, const OUString& sName) { - css::uno::Sequence aArgs = { css::uno::Any(sName) }; - css::uno::Sequence aOutParamIndex; - css::uno::Sequence aOutParam; - css::uno::Any xResult = xInvocation->invoke("Renamable", aArgs, aOutParamIndex, aOutParam); + css::uno::Reference xRenamable( + xNode, css::uno::UNO_QUERY_THROW); + css::uno::Reference xResult = xRenamable->renameNode(sName); - css::uno::Reference xRenamedInvocation; - CPPUNIT_ASSERT(xResult >>= xRenamedInvocation); - CPPUNIT_ASSERT_EQUAL(xInvocation, xRenamedInvocation); + CPPUNIT_ASSERT_EQUAL(xResult, xNode); } css::uno::Reference @@ -96,14 +95,12 @@ void BeanShellTest::testRenameEmptyLibrary() u"com.sun.star.script.provider.ScriptProviderForBeanShell"_ustr, aArgs, m_xContext), css::uno::UNO_QUERY_THROW); - css::uno::Reference xInvocation(xRoot, css::uno::UNO_QUERY_THROW); - // Create an empty library - createChild(xInvocation, "EmptyLibrary"); + createChild(xRoot, "EmptyLibrary"); // Make sure the library we just created exists in the hierarchy - css::uno::Reference xEmptyLibrary(findChild(xRoot, u"EmptyLibrary"), - css::uno::UNO_QUERY_THROW); + css::uno::Reference xEmptyLibrary + = findChild(xRoot, u"EmptyLibrary"); // Try renaming it renameLibrary(xEmptyLibrary, "RenamedEmptyLibrary"); @@ -121,14 +118,12 @@ void BeanShellTest::testRenameNonEmptyLibrary() u"com.sun.star.script.provider.ScriptProviderForBeanShell"_ustr, aArgs, m_xContext), css::uno::UNO_QUERY_THROW); - css::uno::Reference xInvocation(xRoot, css::uno::UNO_QUERY_THROW); - // Create an empty library - createChild(xInvocation, "NonEmptyLibrary"); + createChild(xRoot, "NonEmptyLibrary"); // Make sure the library we just created exists in the hierarchy - css::uno::Reference xNewLibrary(findChild(xRoot, u"NonEmptyLibrary"), - css::uno::UNO_QUERY_THROW); + css::uno::Reference xNewLibrary + = findChild(xRoot, u"NonEmptyLibrary"); // Create a script within the new library createChild(xNewLibrary, "SomeScript");