Hi, i already solved it. It was a error made by netbeans, that didn't refresh the packages on the build.xml files, and but a wrong package on the description file of the extension.
Thanks, Joel Filipe Antunes Cordeiro [EMAIL PROTECTED] [EMAIL PROTECTED] On Mon, Oct 6, 2008 at 5:03 PM, Joel Cordeiro <[EMAIL PROTECTED]> wrote: > Hi, > > i need to thank you for the very complete explanation. > I already made some modifications so i got a implementation as you said, > except for the listeners on the interceptor and haven't already implemented > the protocolhandler for the commandUrl (but there is the class implementing > the interface XDispatchProvider, XDispatch and XServiceInfo, but the methods > are just empty for now). But know i'm getting this error, when i try to load > the extension: ImplementationRegistration::registerImplementation() > InvalidRegistryException during registration (prepareRegistry(): source is > empty). Do you know what it means? > > Regards, > Joel Filipe Antunes Cordeiro > [EMAIL PROTECTED] > [EMAIL PROTECTED] > > > On Mon, Oct 6, 2008 at 3:00 AM, Ariel Constenla-Haile < > [EMAIL PROTECTED]> wrote: > >> Hi Joel, >> >> Joel Cordeiro escribió: >> >>> Hi again, >>> >>> The problem is that i'm out of time. I'm working on a project, and the >>> time >>> is getting out, and i can't solve the problems. I have already read >>> what's >>> important on dev's guide, but it didn't helped me. >>> Follow i write my doubts that i try to find over the internet and the >>> dev's >>> guide, and i couldn't find a answer about how to do that (if it is in the >>> dev's guide, please tell me where): >>> >>> 1. If i'm using a job, i should register the interceptor class that >>> implements XContextMenuInterceptor, on the execute method, right? >>> >> >> yes (but that's not all: as the controller can be disposed - and so your >> interceptor-, you'll have to listen to some events and register your >> interceptor again) >> >> 2. How does i do that? The book doesn't explain that, they give a little >>> example using a client application. >>> >> >> yes, it's true. The example is a good starting point, but far away from >> reality. >> >> When your execute() method is invoked, you'll get a css.beans.NamedValue >> sequence. If your Job is registered for document events (EnvType is >> "DOCUMENTEVENT"), then you'll get a reference to the document model >> (css.frame.XModel). >> First, check if the doc. model is of the type you're interested in >> (let's say OOo Writer) >> Then get the controller from the model ( XModel.getCurrentController() >> ), and register the interceptor. >> >> 3. I have to write a protocol handler to create a action when a user >>> click >>> one of my new entries on the context. I have a class that implement >>> XDisptachProvider and XDispatch, and the method queryDispatch returns >>> itself. The method dispatch have to parameters, url and property value. >>> With >>> that, how can i know the name of the menu entry the user selected? >>> >> >> both queryDispatch() and dispatch() are invoked with a css.util.URL, >> check this URL to see if it matches with the command URL you set in your >> new context menu entry. >> >> Did you see the example I told you before in >> >> http://www.arielconstenlahaile.com.ar/ooo/tmp/dbaccess/DatabaseControllerDemo.zip >> ? >> >> Just pay attention at: >> >> * The Job: >> - DatabaseControllerDemo/src/Jobs.xcu is the configuration file that >> register the Job for the events OnLoad and OnNew >> - >> DatabaseControllerDemo/src/ar/com/arielconstenlahaile/openoffice/menuinterceptor/JobImplementation.java >> >> implements the Job. Only look at how execute() reads the arguments it >> gets when invoked, how it gets the css.frame.XModel and >> css.frame.XController, how it checks the component type . You can >> register the interceptor there, in the example I instantiate a class >> that handles all these things: >> >> // only the component is of the type we are interested in >> if ( Helper.checkComponent( sModuleIdentifier ) ) { >> DocumentHandler demo = new DocumentHandler( >> m_xModel, m_xFrame, m_xController, >> OfficeComponentType.get(sModuleIdentifier)); >> } >> >> I register the interceptor in the constructor: >> >> // REGISTER THE CONTEXT MENU INTERCEPTOR >> // here an css.frame.XModel2.getControllers() may also be useful >> if ( xController!=null ) { >> if ( registerInterceptor( xController, this ) ){ >> m_aInterceptorsCollection.add( xController ); >> //xController.addEventListener( ); >> } >> } >> >> >> >> where registerInterceptor() is >> >> private boolean registerInterceptor( >> XController xController, >> XContextMenuInterceptor >> aContextMenuInterceptor) >> { >> boolean bRegistered = false; >> >> if ( xController != null && aContextMenuInterceptor != null ) { >> XContextMenuInterception xContextMenuInterception= >> (XContextMenuInterception) >> UnoRuntime.queryInterface( >> XContextMenuInterception.class, xController); >> if ( xContextMenuInterception != null ) { >> xContextMenuInterception.registerContextMenuInterceptor( >> aContextMenuInterceptor); >> bRegistered = true; >> } >> } >> Helper.debug("\nTrying to register a context menu >> interceptor...\n" + >> "\t%s", >> bRegistered ? "Context menu registered." : "Imposible >> to register the interceptor"); >> return bRegistered; >> } >> >> >> >> >> * The ProtocolHandler: >> - DatabaseControllerDemo/src/ProtocolHandler.xcu is the configuration >> file that registers my ProtocolHandler to handle command whose URL >> protocol is ar.com.arielconstenlahaile.openoffice.Menuinterceptor:* >> Then, I must set in the context menu entry a CommandURL using this >> protocol >> >> - >> >> DatabaseControllerDemo/src/ar/com/arielconstenlahaile/openoffice/menuinterceptor/ProtocolHandlerImpl.java >> is the protocol handler/ dispatch object implementation >> Look how in queryDispatch() and dispatch() the URL they get is checked >> if matches the protocol registered in the config. file >> >> >> * the context menu interceptor in >> DatabaseControllerDemo/src/ar/com/arielconstenlahaile/openoffice/menuinterceptor/DocumentHandler.java >> >> may be rather confusing, just pay attention at >> >> public ContextMenuInterceptorAction notifyContextMenuExecute( >> ContextMenuExecuteEvent aEvent) >> >> and how as CommandURL of the context menu entry, I set commands that my >> ProtocolHandler can handle: >> >> ... >> xMenuEntry.setPropertyValue( "CommandURL", ProtocolHandlerImpl.FUNCTION1 >> ); >> ... >> >> (it does other things, one useful is inspectActionTriggerContainer() where >> it prints a tree with the content of the context menu it recivies; and shows >> how to add entries at a desired position) >> >> >> On Sat, Oct 4, 2008 at 5:30 AM, Ariel Constenla-Haile < >>> [EMAIL PROTECTED]> wrote: >>> >>> Hi Joel, >>>> >>>> What you're trying to do is something complex: if there was an example >>>> for adding a context menu entry via an extension, and we should set a >>>> level of knowledge required to understand it, I'd set the level to >>>> DIFFICULT/COMPLEX and the like; so you will have to be patient and study >>>> gradually. >>>> >>>> I'd summarize the requirements as follow: >>>> >>>> * knowledge about how a context menu interceptor works (this includes >>>> handling the document selection) >>>> * knowledge about ProtocolHandler implementation >>>> * knowledge about Job implementation >>>> * obviously a general knowledge about how extension work in OOo >>>> (configuration files, etc.) >>>> >>> >> I forgot to add that one has to know how to listen to Frame actions, >> listen to document events (like OnViewCreated), ... , in short: a deep >> understanding of the application framework. >> >> >> >> Regards >> Ariel. >> >> -- >> Ariel Constenla-Haile >> La Plata, Argentina >> >> [EMAIL PROTECTED] >> http://www.ArielConstenlaHaile.com.ar/ooo/ >> >> >> >> "Aus der Kriegsschule des Lebens >> - Was mich nicht umbringt, >> macht mich härter." >> Nietzsche Götzendämmerung, Sprüche und Pfeile, 8. >> >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: [EMAIL PROTECTED] >> For additional commands, e-mail: [EMAIL PROTECTED] >> >> >
