Hi i tried to add a Addon to Writer using ProtocolHandlerAddon.java given in the SDK . ProtocolHandleraddon.java found in OpenOffice.org2.0_SDK\examples\DevelopersGuide\Components\Addons\ProtocolHandlerAddon_java The addon creates toolbar button in openoffice writer and should display a message box when it is clicked. I used UNOPKG to do it instead of pkgchk. The toolbar buttons appear. but they are not activated here are the steps i have followed ...please tell me if i have missed out anything or gone wrong anywhere.
1) compile the ProtocolHandlerAddon.java and get the ProtocolHandlerAddon.class and ProtocolHandlerAddon$ProtocolHandlerAddonImpl.class 2) write the ProtocolHandlerAddon.uno.manifest file which Contains Code: RegistrationClassName:ProtocolHandlerAddon \n 3) Using this command i get ProtocolHandlerAddon.uno.jar file Code: jar cvf ProtocolHandlerAddon.uno.jar ProtocolHandlerAddon. class ProtocolHandlerAddon$ProtocolHandlerAddonImpl.class ProtocolHandlerAddon.uno.manifest 4) put the manifest.xml in a folder called META-INF. the manifest.xml is as follows Code: <?xml versionfiltered="1.0" encoding="UTF-8"?> <!DOCTYPE manifest:manifest PUBLIC "-//OpenOffice.org//DTD Manifest 1.0//EN" "Manifest.dtd"> <manifest:manifest xmlns:manifest="http://openoffice.org/2001/manifest"> <manifest:file-entry manifest:media-type="application/vnd.sun.star.configuration-data" manifest:full-path=" Addons.xcu"/> <manifest:file-entry manifest:media-type="application/vnd.sun.star.configuration-data" manifest:full-path="ProtocolHandler.xcu"/> <manifest:file-entry manifest:media-type="applicatio n/vnd.sun.star.uno-component;type\u003dJava" manifest:full-path\u003d"\nProtocolHandlerAddon.uno.jar"/> </manifest:manifest> 5) now zip the following files into ProtocolHandlerAddon.uno.zip i) ProtocolHandlerAddon.uno.jar which inturn contains META-INF/MANIFEST.MF \n ProtocolHandlerAddon.class ProtocolHandlerAddon$ProtocolHandlerAddonImpl.class ProtocolHandlerAddon.uno.manifest ii)Addons.xcu iii) ProtocolHandler.xcu iv) META-INF/manifest.xml 6) exit OpenOffice(including Quickstart) and add the package using \n unopkg add ProtocolHandlerAddon.uno.zip Here is the ProtocolHandlerAddon.java I hav used import com.sun.star.uno.XComponentContext; import com.sun.star.lib.uno.helper.Factory; import com.sun.star.lang.XSingleComponentFactory\n; import com.sun.star.lib.uno.helper.WeakBase; import com.sun.star.uno.UnoRuntime; import com.sun.star.registry.XRegistryKey; import com.sun.star.lang.XInitialization; import com.sun.star.lang.XTypeProvider\n; import com.sun.star.lang.XServiceInfo; import com.sun.star.uno.Type; import com.sun.star.frame.XStatusListener; import com.sun.star.frame.XDispatchProvider; import com.sun.star.frame.XDispatch; import \ncom.sun.star.frame.XModel; import com.sun.star.frame.XFrame; import com.sun.star.frame.DispatchDescriptor; import com.sun.star.awt.XToolkit; import com.sun.star.awt.XWindowPeer; import com.sun.star.awt.XMessageBox\n; import com.sun.star.awt.WindowAttribute; import com.sun.star.awt.WindowClass; import com.sun.star.awt.WindowDescriptor; import com.sun.star.awt.Rectangle; public class ProtocolHandlerAddon { \npublic static class ProtocolHandlerAddonImpl extends WeakBase implements XDispatchProvider, XDispatch, XInitialization, XServiceInfo { static private final String[] m_serviceNames \u003d { "com.sun.star.frame.ProtocolHand",1] ); //-->n/vnd.sun.star.uno-component;type=Java" manifest:full-path=" ProtocolHandlerAddon.uno.jar"/> </manifest:manifest> 5) now zip the following files into ProtocolHandlerAddon.uno.zip i) ProtocolHandlerAddon.uno.jar which inturn contains META-INF/MANIFEST.MF ProtocolHandlerAddon.class ProtocolHandlerAddon$ProtocolHandlerAddonImpl.class ProtocolHandlerAddon.uno.manifest ii)Addons.xcu iii) ProtocolHandler.xcu iv) META-INF/manifest.xml 6) exit OpenOffice(including Quickstart) and add the package using unopkg add ProtocolHandlerAddon.uno.zip Here is the ProtocolHandlerAddon.java I hav used import com.sun.star.uno.XComponentContext; import com.sun.star.lib.uno.helper.Factory; import com.sun.star.lang.XSingleComponentFactory ; import com.sun.star.lib.uno.helper.WeakBase; import com.sun.star.uno.UnoRuntime; import com.sun.star.registry.XRegistryKey; import com.sun.star.lang.XInitialization; import com.sun.star.lang.XTypeProvider ; import com.sun.star.lang.XServiceInfo; import com.sun.star.uno.Type; import com.sun.star.frame.XStatusListener; import com.sun.star.frame.XDispatchProvider; import com.sun.star.frame.XDispatch; import com.sun.star.frame.XModel; import com.sun.star.frame.XFrame; import com.sun.star.frame.DispatchDescriptor; import com.sun.star.awt.XToolkit; import com.sun.star.awt.XWindowPeer; import com.sun.star.awt.XMessageBox ; import com.sun.star.awt.WindowAttribute; import com.sun.star.awt.WindowClass; import com.sun.star.awt.WindowDescriptor; import com.sun.star.awt.Rectangle; public class ProtocolHandlerAddon { public static class ProtocolHandlerAddonImpl extends WeakBase implements XDispatchProvider, XDispatch, XInitialization, XServiceInfo { static private final String[] m_serviceNames = { "com.sun.star.frame.ProtocolHand ler\n" }; private XComponentContext m_xCmpCtx; private XToolkit m_xToolkit; private XFrame m_xFrame; private XStatusListener m_xStatusListener; public ProtocolHandlerAddonImpl( XComponentContext xComponentContext ) { \n m_xCmpCtx \u003d xComponentContext; } public void initialize( Object[] object ) throws com.sun.star.uno.Exception { if ( object.length > 0 ) { m_xFrame \u003d ( XFrame ) UnoRuntime.queryInterface( \n XFrame.class, object[ 0 ] ); } m_xToolkit \u003d (XToolkit) UnoRuntime.queryInterface( XToolkit.class, m_xCmpCtx.getServiceManager().createInstanceWithContext("com.sun.star.awt.Toolkit", m_xCmpCtx)); \n } public String[] getSupportedServiceNames() { return getServiceNames(); } public static String[] getServiceNames() { return m_serviceNames;} public boolean supportsService( String sService ) { \nint len \u003d m_serviceNames.length; for( int i\u003d0; i < len; i++) { if ( sService.equals( m_serviceNames[i] ) ) return true; } return false; } public String getImplementationName() { return ProtocolHandlerAddonImpl.class.getName\n(); } // XDispatchProvider public XDispatch queryDispatch( __/*IN*/com.sun.star.util.URL aURL, __/*IN*/String sTargetFrameName, __/*IN*/int iSearchFlags ) { XDispatch xRet \u003d null; if ( aURL.Protocol.compareTo\n("org.openoffice.Office.addon.example:") \u003d\u003d 0 ) { if ( aURL.Path.compareTo( "Function1" ) \u003d\u003d 0 ) xRet \u003d this; if ( aURL.Path.compareTo( "Function2" ) \u003d\u003d 0 ) \n xRet \u003d this; } return xRet; } public XDispatch[] queryDispatches( __/*IN*/DispatchDescriptor[] seqDescripts ) { int nCount \u003d seqDescripts.length; XDispatch[] lDispatcher \u003d new XDispatch[nCount]; \n for( int i\u003d0; i<nCount; ++i ) lDispatcher[i] \u003d queryDispatch( seqDescripts[i].FeatureURL, seqDescripts[i].FrameName, seqDescripts[i].SearchFlags ); ",1] ); //-->ler " }; private XComponentContext m_xCmpCtx; private XToolkit m_xToolkit; private XFrame m_xFrame; private XStatusListener m_xStatusListener; public ProtocolHandlerAddonImpl( XComponentContext xComponentContext ) { m_xCmpCtx = xComponentContext; } public void initialize( Object[] object ) throws com.sun.star.uno.Exception { if ( object.length > 0 ) { m_xFrame = ( XFrame ) UnoRuntime.queryInterface( XFrame.class, object[ 0 ] ); } m_xToolkit = (XToolkit) UnoRuntime.queryInterface( XToolkit.class, m_xCmpCtx.getServiceManager().createInstanceWithContext("com.sun.star.awt.Toolkit", m_xCmpCtx)); } public String[] getSupportedServiceNames() { return getServiceNames(); } public static String[] getServiceNames() { return m_serviceNames;} public boolean supportsService( String sService ) { int len = m_serviceNames.length; for( int i=0; i < len; i++) { if ( sService.equals( m_serviceNames[i] ) ) return true; } return false; } public String getImplementationName() { return ProtocolHandlerAddonImpl.class.getName (); } // XDispatchProvider public XDispatch queryDispatch( __/*IN*/com.sun.star.util.URL aURL, __/*IN*/String sTargetFrameName, __/*IN*/int iSearchFlags ) { XDispatch xRet = null; if ( aURL.Protocol.compareTo ("org.openoffice.Office.addon.example:") == 0 ) { if ( aURL.Path.compareTo( "Function1" ) == 0 ) xRet = this; if ( aURL.Path.compareTo( "Function2" ) == 0 ) xRet = this; } return xRet; } public XDispatch[] queryDispatches( __/*IN*/DispatchDescriptor[] seqDescripts ) { int nCount = seqDescripts.length; XDispatch[] lDispatcher = new XDispatch[nCount]; for( int i=0; i<nCount; ++i ) lDispatcher[i] = queryDispatch( seqDescripts[i].FeatureURL, seqDescripts[i].FrameName, seqDescripts[i].SearchFlags ); return lDispatcher; } // XDispatch public void dispatch( __/*IN*/com.sun.star.util.URL aURL, \n __/*IN*/com.sun.star.beans.PropertyValue[] aArguments ) { if ( aURL.Protocol.compareTo("org.openoffice.Office.addon.example:") \u003d\u003d 0 ) { if ( aURL.Path.compareTo\n( "Function1" ) \u003d\u003d 0 ) { showMessageBox("SDK DevGuide Add-On example", "Function 1 activated");} if ( aURL.Path.compareTo( "Function2" ) \u003d\u003d 0 ) \n { showMessageBox("SDK DevGuide Add-On example", "Function 2 activated");} }} public void addStatusListener( __/*IN*/XStatusListener xControl, __/*IN*/com.sun.star.util.URL aURL ) {} \npublic void removeStatusListener( __/*IN*/XStatusListener xControl, __/*IN*/com.sun.star.util.URL aURL ) {} public void showMessageBox(String sTitle, String sMessage) { try { if ( null !\u003d m_xFrame && null !\u003d m_xToolkit ) { \n // describe window properties. WindowDescriptor aDescriptor \u003d new WindowDescriptor(); aDescriptor.Type \u003d WindowClass.MODALTOP; aDescriptor.WindowServiceName \u003d new String( "infobox" ); aDescriptor.ParentIndex\n \u003d -1; aDescriptor.Parent (XWindowPeer)UnoRuntime.queryInterface( XWindowPeer.class, m_xFrame.getContainerWindow()); aDescriptor.Bounds \u003d new Rectangle(0,0,300,200); aDescriptor.WindowAttributes \u003d WindowAttribute.BORDER\n |WindowAttribute.MOVEABLE | WindowAttribute.CLOSEABLE; XWindowPeer xPeer \u003d m_xToolkit.createWindow( aDescriptor ); if ( null !\u003d xPeer ) { XMessageBox xMsgBox \u003d (XMessageBox)UnoRuntime.queryInterface( \nXMessageBox.class, xPeer); if ( null !\u003d xMsgBox ) { xMsgBox.setCaptionText( sTitle ); xMsgBox.setMessageText( sMessage ); xMsgBox.execute(); }}}} catch ( com.sun.star.uno.Exception e) { // do your error handling \n }} } public static XSingleComponentFactory __getComponentFactory( String sImplementationName ) { ",1] ); //--> return lDispatcher; } // XDispatch public void dispatch( __/*IN*/com.sun.star.util.URL aURL, __/*IN*/com.sun.star.beans.PropertyValue[] aArguments ) { if ( aURL.Protocol.compareTo("org.openoffice.Office.addon.example:") == 0 ) { if ( aURL.Path.compareTo ( "Function1" ) == 0 ) { showMessageBox("SDK DevGuide Add-On example", "Function 1 activated");} if ( aURL.Path.compareTo( "Function2" ) == 0 ) { showMessageBox("SDK DevGuide Add-On example", "Function 2 activated");} }} public void addStatusListener( __/*IN*/XStatusListener xControl, __/*IN*/com.sun.star.util.URL aURL ) {} public void removeStatusListener( __/*IN*/XStatusListener xControl, __/*IN*/com.sun.star.util.URL aURL ) {} public void showMessageBox(String sTitle, String sMessage) { try { if ( null != m_xFrame && null != m_xToolkit ) { // describe window properties. WindowDescriptor aDescriptor = new WindowDescriptor(); aDescriptor.Type = WindowClass.MODALTOP; aDescriptor.WindowServiceName = new String( "infobox" ); aDescriptor.ParentIndex = -1; aDescriptor.Parent (XWindowPeer)UnoRuntime.queryInterface( XWindowPeer.class, m_xFrame.getContainerWindow()); aDescriptor.Bounds = new Rectangle(0,0,300,200); aDescriptor.WindowAttributes = WindowAttribute.BORDER |WindowAttribute.MOVEABLE | WindowAttribute.CLOSEABLE; XWindowPeer xPeer = m_xToolkit.createWindow( aDescriptor ); if ( null != xPeer ) { XMessageBox xMsgBox = (XMessageBox)UnoRuntime.queryInterface( XMessageBox.class, xPeer); if ( null != xMsgBox ) { xMsgBox.setCaptionText( sTitle ); xMsgBox.setMessageText( sMessage ); xMsgBox.execute(); }}}} catch ( com.sun.star.uno.Exception e) { // do your error handling }} } public static XSingleComponentFactory __getComponentFactory( String sImplementationName ) { XSingleComponentFactory xFactory \u003d null; if ( sImplementationName.equals( ProtocolHandlerAddonImpl.class.getName\n() ) ) xFactory \u003d Factory.createComponentFactory(ProtocolHandlerAddonImpl.class, ProtocolHandlerAddonImpl.getServiceNames()); return xFactory; } public static boolean __writeRegistryServiceInfo( XRegistryKey xRegistryKey ) { \n return Factory.writeRegistryServiceInfo( ProtocolHandlerAddonImpl.class.getName(), ProtocolHandlerAddonImpl.getServiceNames(),xRegistryKey )}} This is the ProtocolHandlerAddon.xcu <?xml version\u003d\'\n1.0\' encoding\u003d\'UTF-8\'?> <oor:component-data oor:name\u003d"ProtocolHandler" oor:package\u003d"org.openoffice.Office" xmlns:oor\u003d"http://openoffice.org/2001/registry\n" xmlns:xs\u003d"http://www.w3.org/2001/XMLSchema" xmlns:xsi\u003d"http://www.w3.org/2001/XMLSchema-instance\n"> <node oor:name\u003d"HandlerSet"> <node oor:name\u003d"ProtocolHandlerAddon$ProtocolHandlerAddonImpl" oor:op\u003d"replace"> <prop oor:name\u003d"Protocols" oor:type\u003d"oor:string-list"> \n <value>org.openoffice.Office.addon.example:*</value> </prop> </node> </node> </oor:component-data> Here is the Addons.xcu\n that adds a toolbar buttons <?xml version\u003d\'1.0\' encoding\u003d\'UTF-8\'?> <oor:component-data xmlns:oor\u003d"http://openoffice.org/2001",1] ); //--> XSingleComponentFactory xFactory = null; if ( sImplementationName.equals( ProtocolHandlerAddonImpl.class.getName () ) ) xFactory = Factory.createComponentFactory(ProtocolHandlerAddonImpl.class, ProtocolHandlerAddonImpl.getServiceNames()); return xFactory; } public static boolean __writeRegistryServiceInfo( XRegistryKey xRegistryKey ) { return Factory.writeRegistryServiceInfo( ProtocolHandlerAddonImpl.class.getName(), ProtocolHandlerAddonImpl.getServiceNames(),xRegistryKey )}} This is the ProtocolHandler.xcu <?xml versionfiltered=' 1.0' encoding='UTF-8'?> <oor:component-data oor:name="ProtocolHandler" oor:package="org.openoffice.Office" xmlns:oor="http://openoffice.org/2001/registry " xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance "> <node oor:name="HandlerSet"> <node oor:name="ProtocolHandlerAddon$ProtocolHandlerAddonImpl" oor:op="replace"> <prop oor:name="Protocols" oor:type="oor:string-list"> <value>org.openoffice.Office.addon.example:*</value> </prop> </node> </node> </oor:component-data> Here is the Addons.xcu that adds a toolbar buttons <?xml versionfiltered='1.0' encoding='UTF-8'?> <oor:component-data xmlns:oor="http://openoffice.org/2001 /registry" xmlns:xs\u003d"\nhttp://www.w3.org/2001/XMLSchema" oor:name\u003d"Addons" oor:package\u003d"org.openoffice.Office"> <node oor:name\u003d"AddonUI"> <node oor:name\u003d"OfficeToolBar"> \n <node oor:name\u003d"org.openoffice.Office.addon.example" oor:op\u003d"replace"> <node oor:name\u003d"m1" oor:op\u003d"replace"> <prop oor:name\u003d"URL" oor:type\u003d"xs:string"> \n <value>org.openoffice.Office.addon.example:Function1</value> </prop> <prop oor:name\u003d"ImageIdentifier" oor:type\u003d"xs:string"> <value/> </prop> \n<prop oor:name\u003d"Title" oor:type\u003d"xs:string"> <value/> <value xml:lang\u003d"en-US">Function 1</value> </prop> <prop oor:name\u003d"Target" oor:type\u003d"xs:string"> \n <value>_self</value> </prop> <prop oor:name\u003d"Context" oor:type\u003d"xs:string"> <value>com.sun.star.text.TextDocument</value> </prop> </node> \n <node oor:name\u003d"m2" oor:op\u003d"replace"> <prop oor:name\u003d"URL" oor:type\u003d"xs:string"> <value>org.openoffice.Office.addon.example:Function2\n</value> </prop> <prop oor:name\u003d"ImageIdentifier" oor:type\u003d"xs:string"> <value/> </prop> <prop oor:name\u003d"Title" oor:type\u003d"xs:string"> \n <value/> <value xml:lang\u003d"en-US">Function 2</value> </prop> <prop oor:name\u003d"Target" oor:type\u003d"xs:string"> <value>_self</value> ",1] ); //-->/registry" xmlns:xs=" http://www.w3.org/2001/XMLSchema" oor:name="Addons" oor:package="org.openoffice.Office"> <node oor:name="AddonUI"> <node oor:name="OfficeToolBar"> <node oor:name="org.openoffice.Office.addon.example" oor:op="replace"> <node oor:name="m1" oor:op="replace"> <prop oor:name="URL" oor:type="xs:string"> <value>org.openoffice.Office.addon.example:Function1</value> </prop> <prop oor:name="ImageIdentifier" oor:type="xs:string"> <value/> </prop> <prop oor:name="Title" oor:type="xs:string"> <value/> <value xml:lang="en-US">Function 1</value> </prop> <prop oor:name="Target" oor:type="xs:string"> <value>_self</value> </prop> <prop oor:name="Context" oor:type="xs:string"> <value>com.sun.star.text.TextDocument</value> </prop> </node> <node oor:name="m2" oor:op="replace"> <prop oor:name="URL" oor:type="xs:string"> <value>org.openoffice.Office.addon.example:Function2 </value> </prop> <prop oor:name="ImageIdentifier" oor:type="xs:string"> <value/> </prop> <prop oor:name="Title" oor:type="xs:string"> <value/> <value xml:lang="en-US">Function 2</value> </prop> <prop oor:name="Target" oor:type="xs:string"> <value>_self</value> \n</prop> <prop oor:name\u003d"Context" oor:type\u003d"xs:string" <value>com.sun.star.text.TextDocument</value> </prop> </node> </node> </node> \n </oor:component-data> Why are the buttons in the toolbar not getting activated? What does this mean in the Addons.xcu \n <prop oor:name\u003d"URL" oor:type\u003d"xs:string"> <value>org.openoffice.Office.addon.example:Function1</value> </prop> What is the maeaning of \norg.openoffice.Office.addon.example:Function1 What is Function1? Is it Function1.java? Where should I place Function1? Should I include it in the ProtocolHandlerAddon.uno.zip\n? Please help me ... Thank you in advance.. With Regards Bharathy B \n\n ",0] ); D(["ce"]); //--> </prop> <prop oor:name="Context" oor:type="xs:string" <value>com.sun.star.text.TextDocument</value> </prop> </node> </node> </node> </oor:component-data> Why are the buttons in the toolbar not getting activated? What does this mean in the Addons.xcu <prop oor:name="URL" oor:type="xs:string"> <value>org.openoffice.Office.addon.example:Function1</value> </prop> What is the maeaning of org.openoffice.Office.addon.example:Function1 What is Function1? Is it Function1.java? Where should I place Function1? Should I include it in the ProtocolHandlerAddon.uno.zip ? Please help me ... Thank you in advance.. With Regards Bharathy B --------------------------------- How low will we go? Check out Yahoo! Messengers low PC-to-Phone call rates.
