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); 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); } }
private void raiseEditor(int lineNum) { ScriptEditorForBeanShell editor = null; try { URL sourceUrl = metaData.getSourceURL(); 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); } } catch (Exception ignore) { } }
/** * 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 * @returns The value returned from the function being invoked * @throws IllegalArgumentException If there is no matching script name * @throws CannotConvertException If args do not match or cannot be converted the those of the * invokee * @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); } catch (NoSuitableClassLoaderException nsc) { // Framework error throw new ScriptFrameworkErrorException( nsc.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(); 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 { String source = null; Object result = null; ScriptEditorForBeanShell editor = ScriptEditorForBeanShell.getEditor(sourceUrl); if (editor != null) { result = editor.execute(); if (result == null) { return new Any(new Type(), null); } return result; } metaData.loadSource(); source = metaData.getSource(); 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 (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); } }