diff options
Diffstat (limited to 'scripting/java/com/sun/star/script/framework/provider/beanshell/ScriptProviderForBeanShell.java')
-rw-r--r-- | scripting/java/com/sun/star/script/framework/provider/beanshell/ScriptProviderForBeanShell.java | 442 |
1 files changed, 211 insertions, 231 deletions
diff --git a/scripting/java/com/sun/star/script/framework/provider/beanshell/ScriptProviderForBeanShell.java b/scripting/java/com/sun/star/script/framework/provider/beanshell/ScriptProviderForBeanShell.java index da534d602d57..1f56cbe325d4 100644 --- a/scripting/java/com/sun/star/script/framework/provider/beanshell/ScriptProviderForBeanShell.java +++ b/scripting/java/com/sun/star/script/framework/provider/beanshell/ScriptProviderForBeanShell.java @@ -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. - */ - - 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(); - - 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)); - - 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 ); - } - - try { - Object result; + /** + * 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. + */ - ScriptEditorForBeanShell editor = - ScriptEditorForBeanShell.getEditor( - sourceUrl ); + 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); + } - if ( editor != null ) - { - result = editor.execute(); + // Set class loader to be used for class files + // and jar files + Thread.currentThread().setContextClassLoader(cl); + Interpreter interpreter = new Interpreter(); + + 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)); + + 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(); + 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); + } - raiseEditor( lineNum ); + if (e instanceof bsh.TargetError) { + LogUtils.DEBUG("got instance of TargetError"); - if ( usefulInfoIndex > -1 ) - { - message = message.substring( usefulInfoIndex + 2 ); + if (usefulInfoIndex == -1) { + message = ((bsh.TargetError)e).getTarget().getMessage(); } - 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); } + } } |