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]
>>
>>
>

Reply via email to