Use a new-style singelton (aka interface-based singleton) instead!
(Look up those terms in the DevGuide if you are not familiar with them.)
foo/XSentence.idl:
---8<---
module foo {
interface XSentence {
void reverse();
void getInput;
};
};
---8<---
foo/theSentence.idl:
---8<---
module foo {
interface XSentence;
singleton theSentence: XSentence;
};
---8<---
Java:
---8<---
foo.XSentence sentence = foo.theSentence.get(xContext);
---8<---
I have attached my 2 idl files and 1 java file. I edited them according to
your direction to support singleton. I get the following errors:
/usr/lib/openoffice/sdk/linux/bin/idlc.bin: compile 'theSentence.idl' ...
/home/tfm/ooo/myAddon/theSentence.idl(15) : Malformed interface declaration:
syntax error, unexpected IDL_SCOPESEPARATOR, expecting ';'
/home/tfm/ooo/myAddon/theSentence.idl(18) : Statement can not be parsed:
interface definition
/home/tfm/ooo/myAddon/theSentence.idl(21) : Illegal syntax following module
export(s): syntax error, unexpected $end, expecting '}'
SentenceProtocolHandler.java:129: cannot find symbol
symbol : variable theSentence
location: class com.sun.star.ex.comp.SentenceProtocolHandler.OwnDispatch
XSentence sentence = theSentence.get(xContext);
Please correct me where I'm wrong.
Thanks
On 11/15/06, Stephan Bergmann <[EMAIL PROTECTED]> wrote:
Use a new-style singelton (aka interface-based singleton) instead!
(Look up those terms in the DevGuide if you are not familiar with them.)
foo/XSentence.idl:
---8<---
module foo {
interface XSentence {
void reverse();
void getInput;
};
};
---8<---
foo/theSentence.idl:
---8<---
module foo {
interface XSentence;
singleton theSentence: XSentence;
};
---8<---
Java:
---8<---
foo.XSentence sentence = foo.theSentence.get(xContext);
---8<---
-Stephan
Tabish F. Mufti wrote:
> I have Sentence.idl:
>
> module com { module sun { module star { module ex { module comp {
> service Sentence
> {
> interface com::sun::star::ex::comp::XSentence;
> };
> singleton theSentence
> {
> service com::sun::star::ex::comp::Sentence;
> };
> }; }; }; }; };
>
> and XSentence.idl:
>
> module com { module sun { module star { module ex { module comp {
> interface XSentence: com::sun::star::uno::XInterface
> {
> void reverse();
> void getInput();
> };
> }; }; }; }; };
>
> I have a class Sentence.java which provides the service Sentence:
> static final String SERVICENAME = "com.sun.star.ex.comp.Sentence";
>
>
> I want to know how do I create a Singleton service given the above
> context ?
> The code which I'm using to create the service Sentence is the
following:
>
> XMultiComponentFactory factory = xContext.getServiceManager();
> Object transObj = factory.createInstanceWithContext("
> com.sun.star.ex.comp.Sentence", xContext);
> XSentence sentence = (XSentence)UnoRuntime.queryInterface(
XSentence.class,
> transObj);
>
> But this does not returns me Sentence as Singleton class infact
everytime a
> new instance of the class Sentence is returned.
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
#ifndef __com_sun_star_ex_comp_Sentence_idl__
#define __com_sun_star_ex_comp_Sentence_idl__
// Avoid redefinition of already included types or interface, for instance,
// the following case, com/sun/star/foo/Bar.idl have XSentence interface
// definition.
#ifndef __com_sun_star_foo_Bar_idl__
#include "XSentence.idl"
#endif
module com { module sun { module star { module ex { module comp {
interface com::sun::star::ex::comp::XSentence;
singleton theSentence:XSentence
}; }; }; }; };
#endif
#ifndef __com_sun_star_ex_comp_XSentence_idl__
#define __com_sun_star_ex_comp_XSentence_idl__
#ifndef __com_sun_star_uno_XInterface_idl__
#include <com/sun/star/uno/XInterface.idl>
#endif
module com { module sun { module star { module ex { module comp {
interface XSentence: com::sun::star::uno::XInterface
{
/** return translated string for source string
@param source
source text
*/
void reverse();
void getInput();
};
}; }; }; }; };
#endif
/*
* SentenceProtocolHandler.java
*
* Protocol Handler
*
* $Id: SentenceProtocolHandler.java,v 1.1.1.1 2005/11/04 05:57:10 toshi Exp $
*/
/*************************************************************************
*
* The Contents of this file are made available subject to the terms of
* the BSD license.
*
* Copyright (c) 2004-2005 SAITOU Toshihide <[EMAIL PROTECTED]>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. The name of the author may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY SAITOU Toshihide AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SAITOU Toshihide OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*************************************************************************/
// Integrate Components into OpenOffice.org
//
// To call from OpenOffice.org user interface, it must be able to take
// part in the communication between the UI layer and the application
// objects. OpenOffice.org uses command URLs for this purpose.
// ...
// From version 1.1, OpenOffice.org provides user interface support
// for custom components by two basic mechanisms:
// (Developer's Guide June 2003, Sun Microsystems, Inc, pp. 230.)
//
// 1. Add components that can be enabled to process command URLs
// (a) make a protocol handler for them(command URLs)
// (b) integrate them into the job execution environment
//
// 2. The user interface can be adjust to new components.
// In short replacement. This also means, it is possible to
// disable existing command. This dose not need a additional
// components differ from the 1.
//
// * This example is 1. (a).
package com.sun.star.ex.comp;
// For the above this component implements as inner class with
// Sentence component. Look the work directory and the Sentence.java.
import com.sun.star.ex.comp.XSentence;
import com.sun.star.beans.PropertyValue;
import com.sun.star.container.XIndexAccess;
import com.sun.star.frame.DispatchDescriptor;
import com.sun.star.frame.XDispatch;
import com.sun.star.frame.XDispatchProvider;
import com.sun.star.frame.XFrame;
import com.sun.star.frame.XModel;
import com.sun.star.frame.XStatusListener;
import com.sun.star.lang.XInitialization;
import com.sun.star.lang.XMultiComponentFactory;
import com.sun.star.lang.XServiceInfo;
import com.sun.star.lib.uno.helper.ComponentBase;
import com.sun.star.text.XTextRange;
import com.sun.star.uno.UnoRuntime;
import com.sun.star.uno.XComponentContext;
import com.sun.star.util.URL;
/** SentenceProtocolHandler service implementation */
public class SentenceProtocolHandler
extends ComponentBase
implements XServiceInfo,
XDispatchProvider,
XInitialization
{
/** points to the component context in which this handler object creates,
is set in SentenceProtocolHandler(). constructor
*/
private XComponentContext xContext;
/** points to the frame context in which this handler runs, is set in
initialize()
*/
private XFrame xFrame;
/** Dispatch object as inner class */
class OwnDispatch implements XDispatch {
/** take over all necessary parameters from outside. */
public OwnDispatch(XComponentContext context, XFrame frame) {
xContext = context;
xFrame = frame;
}
/** execute the functionality, which is described by this URL. */
public void dispatch(URL aURL, PropertyValue[] lArgs)
{
try
{
// ------------------------------
// creates an instance of the XSentence
//XMultiComponentFactory factory = xContext.getServiceManager();
//Object transObj = factory.createInstanceWithContext("/singletons/com.sun.star.ex.comp.theSentence", xContext);
//XSentence sentence = (XSentence)UnoRuntime.queryInterface(XSentence.class, transObj);
XSentence sentence = theSentence.get(xContext);
System.out.println("In dispatch in ProtocolHandler: " + aURL.Protocol);
if (aURL.Protocol.equals("Reverse:"))
{
//call reverse method of Sentence service
sentence.reverse();
}
else if (aURL.Protocol.equals("myInput:"))
{
//call getInput method of Sentence service
sentence.getInput();
}
else
{
//targetText = aURL.Main.toString();
aURL.Main.toString();
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
/** register a new listener and bind it toe given URL. */
public void addStatusListener(XStatusListener l, URL url)
{}
/** deregister a listener for this URL. */
public void removeStatusListener(XStatusListener l, URL url)
{}
}
/** initialize a new instance of this class with default values. */
public SentenceProtocolHandler( XComponentContext context )
{
xContext = context;
}
// ------------------------------------------------------------
/** XInitialization implementation */
public void initialize(Object[] object) throws com.sun.star.uno.Exception
{
if (object.length > 0)
{
xFrame = (XFrame)UnoRuntime.queryInterface(XFrame.class, object[0]);
}
}
// ------------------------------------------------------------
/** XDispatchProvider implementation */
// should return a valid dispatch object for the given URL.
//
// In case the URL is not valid an empty reference can be returned. The
// parameter sTarget and nFlags can be ignored. These will be "_self" and 0
// everytime.
// (Developer's Guide June 2003, Sun Microsystems, Inc, pp. 236.)
public XDispatch queryDispatch(com.sun.star.util.URL aURL, String sTarget, int nFlags )
{
System.out.println("In queryDispatch in ProtocolHandler: " + aURL.Protocol);
if (aURL.Protocol.equals("Reverse:"))
{
return new OwnDispatch( xContext, xFrame );
}
if (aURL.Protocol.equals("myInput:"))
{
return new OwnDispatch( xContext, xFrame );
}
return null;
}
// optimized API call for remote.
//
// It should be forwarded to queryDispatch() for every request item of the
// given DispatchDescriptor list.
//
// But note: it is not allowed to pack the return list of dispatch objects.
// Every request in source list must match to a reference (null or valid) in
// the destination list!
// (Developer's Guide June 2003, Sun Microsystems, Inc, pp. 236.)
public XDispatch[] queryDispatches(DispatchDescriptor[] descs)
{
XDispatch[] lDispatcher = new XDispatch[descs.length];
System.out.println("In queryDispatches in ProtocolHandler descs length: " + descs.length);
for(int i = 0; i < descs.length; ++i ) {
lDispatcher[i] = queryDispatch(descs[i].FeatureURL,
descs[i].FrameName,
descs[i].SearchFlags );
}
return lDispatcher;
}
// ------------------------------------------------------------
/** XServiceInfo implementation */
static final String SERVICENAME = "com.sun.star.frame.ProtocolHandler";
public String getImplementationName() {
return getClass().getName();
}
public boolean supportsService(String serviceName) {
if (serviceName.equals(SERVICENAME))
return true;
return false;
}
public String[] getSupportedServiceNames() {
return new String[] {
SERVICENAME
};
}
}
// End of file.
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]