Difference between revisions of "Documentation/DevGuide/Scripting/Implementing the XScript Interface"
From Apache OpenOffice Wiki
< Documentation | DevGuide
OOoWikiBot (Talk | contribs) m (FINAL VERSION FOR L10N) |
|||
Line 8: | Line 8: | ||
{{DISPLAYTITLE:Implementing the XScript interface}} | {{DISPLAYTITLE:Implementing the XScript interface}} | ||
The next step is to provide the <code>YourLanguageScript</code> implementation which will execute the macro code. The following example shows the code for the <code>YourLanguageScript</code> class: | The next step is to provide the <code>YourLanguageScript</code> implementation which will execute the macro code. The following example shows the code for the <code>YourLanguageScript</code> class: | ||
− | + | <syntaxhighlight lang="java"> | |
import com.sun.star.uno.Type; | import com.sun.star.uno.Type; | ||
import com.sun.star.uno.Any; | import com.sun.star.uno.Any; | ||
Line 80: | Line 80: | ||
} | } | ||
} | } | ||
− | + | </syntaxhighlight> | |
If the interpreter for <code>YourLanguage</code> supports Java class loading, then the <code>ClassLoaderFactory</code> helper class can be used to load any class or jar files associated with a macro. The <code>ClassLoaderFactory</code> uses the ''parcel-descriptor.xml'' file (see [[Documentation/DevGuide/Scripting/Writing Macros#Compiling and Deploying Java macros| Compiling and Deploying Java macros]]) to discover what class and jar files need to be loaded by the script. | If the interpreter for <code>YourLanguage</code> supports Java class loading, then the <code>ClassLoaderFactory</code> helper class can be used to load any class or jar files associated with a macro. The <code>ClassLoaderFactory</code> uses the ''parcel-descriptor.xml'' file (see [[Documentation/DevGuide/Scripting/Writing Macros#Compiling and Deploying Java macros| Compiling and Deploying Java macros]]) to discover what class and jar files need to be loaded by the script. | ||
Latest revision as of 18:25, 21 December 2020
The next step is to provide the YourLanguageScript
implementation which will execute the macro code. The following example shows the code for the YourLanguageScript
class:
import com.sun.star.uno.Type; import com.sun.star.uno.Any; import com.sun.star.lang.IllegalArgumentException; import com.sun.star.lang.WrappedTargetException; import com.sun.star.reflection.InvocationTargetException; import com.sun.star.script.CannotConvertException; import com.sun.star.script.provider.XScriptContext; import com.sun.star.script.provider.XScript; import com.sun.star.script.provider.ScriptFrameworkErrorException; import com.sun.star.script.provider.ScriptFrameworkErrorType; import com.sun.star.script.framework.provider.ClassLoaderFactory; import com.sun.star.script.framework.container.ScriptMetaData; public class YourLanguageScript implements XScript { private XScriptContext xScriptContext; private ScriptMetaData scriptMetaData; public YourLanguageScript(XScriptContext xsc, ScriptMetaData smd) { this.xScriptContext = xsc; this.scriptMetaData = smd; } public Object invoke( Object[] aParams, short[][] aOutParamIndex, Object[][] aOutParam ) throws com.sun.star.script.provider.ScriptFrameworkErrorException, com.sun.star.reflection.InvocationTargetException { // Initialise the out paramters - not used at the moment aOutParamIndex[0] = new short[0]; aOutParam[0] = new Object[0]; // Use the following code to set up a ClassLoader if you need one ClassLoader cl = null; try { cl = ClassLoaderFactory.getURLClassLoader( scriptMetaData ); } catch ( java.lang.Exception e ) { // Framework error throw new ScriptFrameworkErrorException( e.getMessage(), null, scriptMetaData.getLanguageName(), scriptMetaData.getLanguage(), ScriptFrameworkErrorType.UNKNOWN ); } // Load the source of your script using the scriptMetaData object scriptMetaData.loadSource(); String source = scriptMetaData.getSource(); Any result = null; // This is where you add the code to execute your script // You should pass the xScriptContext variable to the script // so that it can access the application API result = yourlanguageinterpreter.run( source ); // The invoke method should return a com.sun.star.uno.Any object // containing the result of the script. This can be created using // the com.sun.star.uno.AnyConverter helper class if (result == null) { return new Any(new Type(), null); } return result; } }
If the interpreter for YourLanguage
supports Java class loading, then the ClassLoaderFactory
helper class can be used to load any class or jar files associated with a macro. The ClassLoaderFactory
uses the parcel-descriptor.xml file (see Compiling and Deploying Java macros) to discover what class and jar files need to be loaded by the script.
The ScriptMetaData
class will load the source code of the macro which can then be passed to the YourLanguage
interpreter.
Content on this page is licensed under the Public Documentation License (PDL). |