scripting/Jar_ScriptFramework.mk | 1 scripting/java/com/sun/star/script/framework/provider/ClassLoaderFactory.java | 4 scripting/java/com/sun/star/script/framework/provider/ScriptEditor.java | 61 ------ scripting/java/com/sun/star/script/framework/provider/ScriptEditorBase.java | 73 ++++++++ scripting/java/com/sun/star/script/framework/provider/beanshell/ScriptEditorForBeanShell.java | 6 scripting/java/com/sun/star/script/framework/provider/java/ScriptProviderForJava.java | 91 ++++------ scripting/java/com/sun/star/script/framework/provider/javascript/ScriptEditorForJavaScript.java | 6 7 files changed, 129 insertions(+), 113 deletions(-)
New commits: commit 92617320938b6710dc9cb8eac48ab85c2ceaa867 Author: Samuel Mehrbrodt <samuel.mehrbr...@allotropia.de> AuthorDate: Tue May 31 09:10:57 2022 +0200 Commit: Samuel Mehrbrodt <samuel.mehrbr...@allotropia.de> CommitDate: Tue May 31 09:10:57 2022 +0200 Revert "Related tdf#116767: Call URLClassLoader.close" This reverts commit 418533f0af7cd303d559c8fb136c49e7e9fb0d79. diff --git a/scripting/java/com/sun/star/script/framework/provider/ClassLoaderFactory.java b/scripting/java/com/sun/star/script/framework/provider/ClassLoaderFactory.java index 0974b8874110..b5e6e3085bd2 100644 --- a/scripting/java/com/sun/star/script/framework/provider/ClassLoaderFactory.java +++ b/scripting/java/com/sun/star/script/framework/provider/ClassLoaderFactory.java @@ -33,7 +33,7 @@ public class ClassLoaderFactory { private ClassLoaderFactory() {} - public static URLClassLoader 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); @@ -45,7 +45,7 @@ public class ClassLoaderFactory { return getURLClassLoader(parent, classPath); } - public static URLClassLoader getURLClassLoader(final ClassLoader parent, + public static ClassLoader getURLClassLoader(final ClassLoader parent, final URL[] classpath) { return AccessController.doPrivileged( new PrivilegedAction<URLClassLoader>() { diff --git a/scripting/java/com/sun/star/script/framework/provider/java/ScriptProviderForJava.java b/scripting/java/com/sun/star/script/framework/provider/java/ScriptProviderForJava.java index 63dc3169f759..eeea0d49ebe5 100644 --- a/scripting/java/com/sun/star/script/framework/provider/java/ScriptProviderForJava.java +++ b/scripting/java/com/sun/star/script/framework/provider/java/ScriptProviderForJava.java @@ -45,8 +45,6 @@ import com.sun.star.uno.Any; import com.sun.star.uno.Type; import com.sun.star.uno.XComponentContext; -import java.io.IOException; -import java.net.URLClassLoader; import java.util.ArrayList; public class ScriptProviderForJava { @@ -184,63 +182,56 @@ class ScriptImpl implements XScript { ScriptDescriptor scriptDesc = new ScriptDescriptor(metaData.getLanguageName()); + LogUtils.DEBUG("Classloader starting..."); + + ClassLoader scriptLoader = + ClassLoaderFactory.getURLClassLoader(metaData); + + LogUtils.DEBUG("Classloader finished..."); + + ArrayList<Object> invocationArgList = new ArrayList<Object>(); Object[] invocationArgs = null; - ScriptProxy script = null; - LogUtils.DEBUG("Classloader starting..."); + LogUtils.DEBUG("Parameter Mapping..."); - try (URLClassLoader scriptLoader = ClassLoaderFactory.getURLClassLoader(metaData)) { - LogUtils.DEBUG("Classloader finished..."); + // Setup Context Object + XScriptContext xSc = + ScriptContext.createContext(m_xModel, m_xInvocContext, + m_xContext, m_xMultiComponentFactory); - ArrayList<Object> invocationArgList = new ArrayList<Object>(); + scriptDesc.addArgumentType(XScriptContext.class); + invocationArgList.add(xSc); - LogUtils.DEBUG("Parameter Mapping..."); + for (int i = 0; i < params.length; i++) { + scriptDesc.addArgumentType(params[ i ].getClass()); + invocationArgList.add(params[ i ]); + } - // Setup Context Object - XScriptContext xSc = - ScriptContext.createContext(m_xModel, m_xInvocContext, - m_xContext, m_xMultiComponentFactory); + if (!invocationArgList.isEmpty()) { + invocationArgs = invocationArgList.toArray(); + } - scriptDesc.addArgumentType(XScriptContext.class); - invocationArgList.add(xSc); + LogUtils.DEBUG("ScriptProxy starting... "); + ScriptProxy script = null; - for (int i = 0; i < params.length; i++) { - scriptDesc.addArgumentType(params[ i ].getClass()); - invocationArgList.add(params[ i ]); - } + try { - if (!invocationArgList.isEmpty()) { - invocationArgs = invocationArgList.toArray(); - } + String className = metaData.getLanguageName().substring(0, + metaData.getLanguageName().lastIndexOf('.')); - LogUtils.DEBUG("ScriptProxy starting... "); + LogUtils.DEBUG("About to load Class " + className + " starting... "); - try { + long start = new java.util.Date().getTime(); + Class<?> c = scriptLoader.loadClass(className); + long end = new java.util.Date().getTime(); - 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: " + (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) { + LogUtils.DEBUG("loadClass took: " + (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(), @@ -248,11 +239,11 @@ class ScriptImpl implements XScript { e2.initCause(e); throw e2; } - } catch (IOException e) { + } catch (ClassNotFoundException e) { // Framework error ScriptFrameworkErrorException e2 = new ScriptFrameworkErrorException( - e.toString(), null, metaData.getLanguageName(), metaData.getLanguage(), - ScriptFrameworkErrorType.NO_SUCH_SCRIPT); + e.toString(), null, metaData.getLanguageName(), + metaData.getLanguage(), ScriptFrameworkErrorType.NO_SUCH_SCRIPT); e2.initCause(e); throw e2; } commit fedf2e4c4b2800698a23e88ef65a8a2c6ba68684 Author: Stephan Bergmann <sberg...@redhat.com> AuthorDate: Mon Oct 18 14:37:05 2021 +0200 Commit: Samuel Mehrbrodt <samuel.mehrbr...@allotropia.de> CommitDate: Mon May 30 11:51:06 2022 +0200 Revert incompatible ScriptEditor change ...from interface to abstract class, in 1c42afc194da2288c5a738b727952e80c323885c "Respect DisableMacrosExecution option in javascript editor". It caused 3rd- party code like ScriptProviderForooRexx.oxt to fail to install. Change-Id: I532f27fdce806e471a8551646adbb3aecf80bcee Reviewed-on: https://gerrit.libreoffice.org/c/core/+/123745 Tested-by: Jenkins Reviewed-by: Stephan Bergmann <sberg...@redhat.com> (cherry picked from commit d425cd604cb4d30862640851b11a31e742d81336) diff --git a/scripting/Jar_ScriptFramework.mk b/scripting/Jar_ScriptFramework.mk index 9bf31b62cb64..0a2aa86f8cac 100644 --- a/scripting/Jar_ScriptFramework.mk +++ b/scripting/Jar_ScriptFramework.mk @@ -49,6 +49,7 @@ $(eval $(call gb_Jar_add_sourcefiles,ScriptFramework,\ scripting/java/com/sun/star/script/framework/provider/PathUtils \ scripting/java/com/sun/star/script/framework/provider/ScriptContext \ scripting/java/com/sun/star/script/framework/provider/ScriptEditor \ + scripting/java/com/sun/star/script/framework/provider/ScriptEditorBase \ scripting/java/com/sun/star/script/framework/provider/ScriptProvider \ scripting/java/com/sun/star/script/framework/provider/SwingInvocation \ scripting/java/Framework/com/sun/star/script/framework/security/SecurityDialog \ diff --git a/scripting/java/com/sun/star/script/framework/provider/ScriptEditor.java b/scripting/java/com/sun/star/script/framework/provider/ScriptEditor.java index 395a1b6a8abb..32ebd2fefb41 100644 --- a/scripting/java/com/sun/star/script/framework/provider/ScriptEditor.java +++ b/scripting/java/com/sun/star/script/framework/provider/ScriptEditor.java @@ -18,62 +18,13 @@ package com.sun.star.script.framework.provider; -import com.sun.star.beans.NamedValue; -import com.sun.star.configuration.theDefaultProvider; -import com.sun.star.container.XNameAccess; -import com.sun.star.lang.XMultiServiceFactory; import com.sun.star.script.framework.container.ScriptMetaData; import com.sun.star.script.provider.XScriptContext; -import com.sun.star.uno.AnyConverter; -import com.sun.star.uno.UnoRuntime; -import javax.swing.JOptionPane; -import javax.swing.JDialog; - -public abstract class ScriptEditor { - public XScriptContext context; - - public abstract Object execute() throws Exception; - public abstract void indicateErrorLine(int lineNum); - public abstract void edit(XScriptContext context, ScriptMetaData entry); - public abstract String getTemplate(); - public abstract String getExtension(); - - public void setContext(XScriptContext context) { - this.context = context; - } - - public boolean isMacroExecutionEnabled() { - XNameAccess xNameAccess = null; - try { - String sAccess = "com.sun.star.configuration.ConfigurationAccess"; - XMultiServiceFactory xMSFCfg = theDefaultProvider.get(context.getComponentContext()); - Object oAccess = xMSFCfg.createInstanceWithArguments(sAccess, - new Object[] { new NamedValue("nodepath", "org.openoffice.Office.Common/Security/Scripting") }); - xNameAccess = UnoRuntime.queryInterface(XNameAccess.class, oAccess); - Object result = xNameAccess.getByName("DisableMacrosExecution"); - boolean bMacrosDisabled = AnyConverter.toBoolean(result); - if (bMacrosDisabled) - return false; - } catch (com.sun.star.uno.Exception e) { - return false; - } - return true; - } - - // Wraps long error messages - private static class NarrowOptionPane extends JOptionPane { - private static final long serialVersionUID = 1L; - public int getMaxCharactersPerLineCount() { - return 100; - } - } - - public void showErrorMessage(String message) { - JOptionPane optionPane = new NarrowOptionPane(); - optionPane.setMessage(message); - optionPane.setMessageType(JOptionPane.ERROR_MESSAGE); - JDialog dialog = optionPane.createDialog(null, "Error"); - dialog.setVisible(true); - } +public interface ScriptEditor { + Object execute() throws Exception; + void indicateErrorLine(int lineNum); + void edit(XScriptContext context, ScriptMetaData entry); + String getTemplate(); + String getExtension(); } \ No newline at end of file diff --git a/scripting/java/com/sun/star/script/framework/provider/ScriptEditorBase.java b/scripting/java/com/sun/star/script/framework/provider/ScriptEditorBase.java new file mode 100644 index 000000000000..1a8bf33a5395 --- /dev/null +++ b/scripting/java/com/sun/star/script/framework/provider/ScriptEditorBase.java @@ -0,0 +1,73 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +package com.sun.star.script.framework.provider; + +import com.sun.star.beans.NamedValue; +import com.sun.star.configuration.theDefaultProvider; +import com.sun.star.container.XNameAccess; +import com.sun.star.lang.XMultiServiceFactory; +import com.sun.star.script.framework.container.ScriptMetaData; +import com.sun.star.script.provider.XScriptContext; +import com.sun.star.uno.AnyConverter; +import com.sun.star.uno.UnoRuntime; + +import javax.swing.JOptionPane; +import javax.swing.JDialog; + +public abstract class ScriptEditorBase implements ScriptEditor { + public XScriptContext context; + + public void setContext(XScriptContext context) { + this.context = context; + } + + public boolean isMacroExecutionEnabled() { + XNameAccess xNameAccess = null; + try { + String sAccess = "com.sun.star.configuration.ConfigurationAccess"; + XMultiServiceFactory xMSFCfg = theDefaultProvider.get(context.getComponentContext()); + Object oAccess = xMSFCfg.createInstanceWithArguments(sAccess, + new Object[] { new NamedValue("nodepath", "org.openoffice.Office.Common/Security/Scripting") }); + xNameAccess = UnoRuntime.queryInterface(XNameAccess.class, oAccess); + Object result = xNameAccess.getByName("DisableMacrosExecution"); + boolean bMacrosDisabled = AnyConverter.toBoolean(result); + if (bMacrosDisabled) + return false; + } catch (com.sun.star.uno.Exception e) { + return false; + } + return true; + } + + // Wraps long error messages + private static class NarrowOptionPane extends JOptionPane { + private static final long serialVersionUID = 1L; + public int getMaxCharactersPerLineCount() { + return 100; + } + } + + public void showErrorMessage(String message) { + JOptionPane optionPane = new NarrowOptionPane(); + optionPane.setMessage(message); + optionPane.setMessageType(JOptionPane.ERROR_MESSAGE); + JDialog dialog = optionPane.createDialog(null, "Error"); + dialog.setVisible(true); + } +} \ No newline at end of file diff --git a/scripting/java/com/sun/star/script/framework/provider/beanshell/ScriptEditorForBeanShell.java b/scripting/java/com/sun/star/script/framework/provider/beanshell/ScriptEditorForBeanShell.java index 2a972df92ff6..0ab265ecc799 100644 --- a/scripting/java/com/sun/star/script/framework/provider/beanshell/ScriptEditorForBeanShell.java +++ b/scripting/java/com/sun/star/script/framework/provider/beanshell/ScriptEditorForBeanShell.java @@ -19,7 +19,7 @@ package com.sun.star.script.framework.provider.beanshell; import com.sun.star.script.framework.container.ScriptMetaData; import com.sun.star.script.framework.provider.ClassLoaderFactory; -import com.sun.star.script.framework.provider.ScriptEditor; +import com.sun.star.script.framework.provider.ScriptEditorBase; import com.sun.star.script.framework.provider.SwingInvocation; import com.sun.star.script.provider.XScriptContext; @@ -49,7 +49,7 @@ import javax.swing.JPanel; import javax.swing.JToolBar; import javax.swing.BorderFactory; -public class ScriptEditorForBeanShell extends ScriptEditor implements ActionListener { +public class ScriptEditorForBeanShell extends ScriptEditorBase implements ActionListener { private JFrame frame; private String filename; diff --git a/scripting/java/com/sun/star/script/framework/provider/javascript/ScriptEditorForJavaScript.java b/scripting/java/com/sun/star/script/framework/provider/javascript/ScriptEditorForJavaScript.java index 8bb0828aff03..1f0e8fd72a16 100644 --- a/scripting/java/com/sun/star/script/framework/provider/javascript/ScriptEditorForJavaScript.java +++ b/scripting/java/com/sun/star/script/framework/provider/javascript/ScriptEditorForJavaScript.java @@ -20,7 +20,7 @@ package com.sun.star.script.framework.provider.javascript; import com.sun.star.script.framework.container.ScriptMetaData; import com.sun.star.script.framework.log.LogUtils; -import com.sun.star.script.framework.provider.ScriptEditor; +import com.sun.star.script.framework.provider.ScriptEditorBase; import com.sun.star.script.framework.provider.SwingInvocation; import com.sun.star.script.provider.XScriptContext; @@ -40,7 +40,7 @@ import org.mozilla.javascript.Scriptable; import org.mozilla.javascript.tools.debugger.Main; import org.mozilla.javascript.tools.debugger.ScopeProvider; -public class ScriptEditorForJavaScript extends ScriptEditor { +public class ScriptEditorForJavaScript extends ScriptEditorBase { // global ScriptEditorForJavaScript instance private static ScriptEditorForJavaScript theScriptEditorForJavaScript; commit 0fd8f6e35896689633ee0fa9e63bc4f55904c836 Author: Andrea Gelmini <andrea.gelm...@gelma.net> AuthorDate: Fri Aug 28 11:59:42 2020 +0200 Commit: Samuel Mehrbrodt <samuel.mehrbr...@allotropia.de> CommitDate: Mon May 30 11:50:55 2022 +0200 Fix typos in code It passed "make check" on Linux Change-Id: Id7c7ac1b88d290ed71f03fa28dec144bcd29b692 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/101590 Tested-by: Jenkins Reviewed-by: Julien Nabet <serval2...@yahoo.fr> (cherry picked from commit f10a4e20100515f1fc95b3254ac52894ec59bdda) diff --git a/scripting/java/com/sun/star/script/framework/provider/ScriptEditor.java b/scripting/java/com/sun/star/script/framework/provider/ScriptEditor.java index dbcb3b0bc7a9..395a1b6a8abb 100644 --- a/scripting/java/com/sun/star/script/framework/provider/ScriptEditor.java +++ b/scripting/java/com/sun/star/script/framework/provider/ScriptEditor.java @@ -43,7 +43,7 @@ public abstract class ScriptEditor { this.context = context; } - public boolean isMacroExectionEnabled() { + public boolean isMacroExecutionEnabled() { XNameAccess xNameAccess = null; try { String sAccess = "com.sun.star.configuration.ConfigurationAccess"; diff --git a/scripting/java/com/sun/star/script/framework/provider/beanshell/ScriptEditorForBeanShell.java b/scripting/java/com/sun/star/script/framework/provider/beanshell/ScriptEditorForBeanShell.java index 31c26dc51334..2a972df92ff6 100644 --- a/scripting/java/com/sun/star/script/framework/provider/beanshell/ScriptEditorForBeanShell.java +++ b/scripting/java/com/sun/star/script/framework/provider/beanshell/ScriptEditorForBeanShell.java @@ -170,7 +170,7 @@ public class ScriptEditorForBeanShell extends ScriptEditor implements ActionList * */ public Object execute() throws Exception { - if (!isMacroExectionEnabled()) { + if (!isMacroExecutionEnabled()) { showErrorMessage("Macro Execution has been disabled."); return null; } diff --git a/scripting/java/com/sun/star/script/framework/provider/javascript/ScriptEditorForJavaScript.java b/scripting/java/com/sun/star/script/framework/provider/javascript/ScriptEditorForJavaScript.java index 4cf5cc3384ca..8bb0828aff03 100644 --- a/scripting/java/com/sun/star/script/framework/provider/javascript/ScriptEditorForJavaScript.java +++ b/scripting/java/com/sun/star/script/framework/provider/javascript/ScriptEditorForJavaScript.java @@ -196,7 +196,7 @@ public class ScriptEditorForJavaScript extends ScriptEditor { private ScriptEditorForJavaScript(XScriptContext context, URL url) { setContext(context); // Need to check that before showing the window. Checking in execute() has no effect. - if (!isMacroExectionEnabled()) { + if (!isMacroExecutionEnabled()) { showErrorMessage("Macro Execution has been disabled."); return ; }