Hi Jürgen,

thanks for your answer. According to my version of the developer's guide
there is no need for a function named _getComponentFactory. Maybe I
misunderstood something here...
For a better understanding I'm posting my 3 classes. As you can see
there is no "real" language implemented. That's because I just want to
try if I can get that thing working.
---------------------------
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 JavaScript implements XScript {
        private XScriptContext xScriptContext;
        private ScriptMetaData scriptMetaData;
        
        public JavaScript(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 {
                aOutParamIndex[0] = new short[0];
                aOutParam[0] = new Object[0];
                
                ClassLoader cl = null;
                try {
                        cl = 
ClassLoaderFactory.getURLClassLoader(scriptMetaData);
                }
                catch (java.lang.Exception e) {
                        throw new ScriptFrameworkErrorException(e.getMessage(), 
null, scriptMetaData.getLanguageName(), scriptMetaData.getLanguage(), 
ScriptFrameworkErrorType.UNKNOWN);
                }
                scriptMetaData.loadSource();
                String source = scriptMetaData.getSource();
                Any result = null;
                if (result == null) {
                        return new Any(new Type(), null);
                }
                else {
                        return result;
                }
        }
}
---------------------------
import com.sun.star.script.framework.provider.ScriptEditor;
import com.sun.star.script.provider.XScriptContext;
import com.sun.star.script.framework.container.ScriptMetaData;

import javax.swing.*;

public class ScriptEditorForJava implements ScriptEditor {
        public Object execute() throws Exception {
                return null;
        }
        public void indicateErrorLine(int lineNum) {
                return;
        }
        public void edit(XScriptContext context, ScriptMetaData entry) {
                JFrame frame = new JFrame();
                frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
                JTextArea ts = new JTextArea();
                entry.loadSource();
                ts.setText(entry.getSource());
                
                frame.getContentPane().add(ts);
                frame.setSize(400, 400);
                frame.show();
        }
        
        public String getTemplate() {
                return "the code for Java script";
        }
        
        public String getExtension() {
                return "y1";
        }
}
---------------------------
import com.sun.star.uno.XComponentContext;
import com.sun.star.lang.XMultiServiceFactory;
import com.sun.star.lang.XSingleServiceFactory;
import com.sun.star.registry.XRegistryKey;
import com.sun.star.comp.loader.FactoryHelper;
import com.sun.star.lang.XServiceInfo;
import com.sun.star.lang.XInitialization;

import com.sun.star.script.provider.ScriptFrameworkErrorException;
import com.sun.star.script.provider.XScriptContext;
import com.sun.star.script.provider.XScript;
import com.sun.star.script.framework.provider.ScriptProvider;
import com.sun.star.script.framework.provider.ScriptEditor;
import com.sun.star.script.framework.container.ScriptMetaData;

public class ScriptProviderForJava {
public static class _ScriptProviderForJava extends ScriptProvider {
        public _ScriptProviderForJava(XComponentContext ctx) {
                super(ctx, "Java");
        }
        public XScript getScript(String scriptURI) throws 
com.sun.star.uno.RuntimeException, ScriptFrameworkErrorException {
                JavaScript script = null;
                try {
                        ScriptMetaData scriptMetaData = 
getScriptData(scriptURI);
                        XScriptContext xScriptContext = getScriptingContext();
                        script = new JavaScript(xScriptContext, scriptMetaData);
                }
                catch (com.sun.star.uno.Exception e) {
                        System.err.println("Failed to get script: " + 
scriptURI);
                }
                
                return script;
        }
        public boolean hasScriptEditor() {
                return true;
        }
        public ScriptEditor getScriptEditor() {
                return new ScriptEditorForJava();
        }
}
public static XSingleServiceFactory _getServiceFactory(String implName, 
XMultiServiceFactory multiFactory, XRegistryKey regKey) {
        XSingleServiceFactory xSingleServiceFactory = null;
        
if(implName.equals(ScriptProviderForJava._ScriptProviderForJava.class.getName()))
 {
                xSingleServiceFactory = 
FactoryHelper.getServiceFactory(ScriptProviderForJava._ScriptProviderForJava.class,
 "com.sun.star.script.provider.ScriptProviderForJava", multiFactory, regKey);
        }
        return xSingleServiceFactory;
        }
public static boolean __writeRegistryServiceInfo(XRegistryKey regKey) {
        String impl = "ScriptProviderForJava$_ScriptProvderForJava";
        String service1 = "com.sun.star.script.provider.ScriptProvider";
        String service2 = "com.sun.star.script.provider.LanguageScriptProvider";
        String service3= "com.sun.star.script.provider.JavaScriptProvider";
        
        FactoryHelper.writeRegistryServiceInfo(impl, service1, regKey);
        FactoryHelper.writeRegistryServiceInfo(impl, service2, regKey);
        FactoryHelper.writeRegistryServiceInfo(impl, service3, regKey);
        
        return true;
}
}

Greeting,-
Rainer Hahnekamp
Jürgen Schmidt:
> Hi Rainer,
> 
> Rainer Hahnekamp wrote:
> > Hello,
> > 
> > I've tried to write my own ScriptProvider component in Java according to
> > the Developer's Guide instructions in chapter 18.5. I managed to compile
> > all four classes and packed them into a jar file called
> > ScriptProviderForJava.jar. Further more I appended the subdirectory
> > META-INF which has just one file called MANIFEST.MF with following two
> > rows:
> > Built-By: Rainer Hahnekamp
> > RegistrationClassName: ScriptProviderForJava
> > Then I packed this jar-file into a zip file named
> > ScriptProviderForJava.uno.pkg including a the subfolder META-INF and the
> > file manifest.xml with following content:
> > <manifest:file-entry 
> > manifest:media-type="application/vnd.sun.star.uno-component;type=Java" 
> > manifest:full-path="ScriptProviderForJava.jar"/>
> > Finally I added the package via
> > unopkg add ScriptProviderForJava.uno.pkg
> > Unfortunately it did not succeed. Still in OpenOffice.org under
> > Tools->Package Manager... it is listed as disabled. When I want to
> > enable it I get the error message:
> > Enable: Cannot determine registration class.
> > If the registration class is the entry in MANIFEST.MF OpenOffice should
> > be able to find it, since there exists a class called
> > ScriptProviderForJava.
> > 
> 
> Are you sure that ScriptProviderForJava is the correct name of your 
> implemention class and that this class does implement the necessary 
> component helper funtions (__getComponentFactory, 
> __writeRegistryServiceInfo)? If your file is defined in a package you 
> have to use the full qualified class name. All dependencies to external 
> Java files have to be resolved. Either by extending the office class 
> path manually or or you put all dependecies in the package as well. A 
> further solution is to provide an own classlaoder for external classes 
> and load them explicitly from your package.
> 
> Juergen



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to