Tabish F. Mufti wrote:
------------------------------------------------------------------------
#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
You do not need the above include, the below forward declaration is enough.
module com { module sun { module star { module ex { module comp {
interface com::sun::star::ex::comp::XSentence;
singleton theSentence:XSentence
missing ;
}; }; }; }; };
#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);
XSentence and theSentence are both in package com.sun.star.ex.comp.
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]