/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
package basicrunner.basichelper;
import com.sun.star.lang.XSingleServiceFactory;
import com.sun.star.lang.XServiceInfo;
import com.sun.star.lang.XTypeProvider;
import com.sun.star.uno.Type;
import com.sun.star.frame.XDispatchProviderInterceptor;
import com.sun.star.frame.XDispatchProvider;
import com.sun.star.frame.XDispatch;
import com.sun.star.frame.DispatchDescriptor;
import com.sun.star.util.URL;
/**
* This implementation provides an implementation of an interceptor.
* @see com.sun.star.lang.XSingleServiceFactory
* @see com.sun.star.lang.XServiceInfo
*/
public class DispatchProviderInterceptor implements XServiceInfo,
XSingleServiceFactory {
/** The service name **/
static final String __serviceName =
"basichelper.DispatchProviderInterceptor";
/** Create an instance of the interceptor
* Arguments are not supported here, so they will be ignored.
* @param args The arguments.
* @return A new instance of the interceptor.
**/
public Object createInstanceWithArguments(Object[] args) {
return new InterceptorImpl();
}
/** Create an instance of the interceptor
* @return A new instance of the interceptor.
**/
public Object createInstance() {
return createInstanceWithArguments(null);
}
/** Get the unique id for this implementation
* @return The id.
*/
public byte[] getImplementationId() {
return toString().getBytes();
}
/** Get all implemented types.
* @return The implemented UNO types.
*/
public Type[] getTypes() {
Class interfaces[] = getClass().getInterfaces();
Type types[] = new Type[interfaces.length];
for(int i = 0; i < interfaces.length; ++ i)
types[i] = new Type(interfaces[i]);
return types;
}
/**
* Is this service supported?
* @param name The name of a service.
* @return True, if the service is supported.
*/
public boolean supportsService(String name) {
return __serviceName.equals(name);
}
/**
* Get all supported service names.
* @return All service names.
*/
public String[] getSupportedServiceNames() {
return new String[] {__serviceName};
}
/**
* Get the implementation name of this class.
* @return The name.
*/
public String getImplementationName() {
return getClass().getName();
}
}
/**
* The actual implementation of the interceptor.
* @see com.sun.star.lang.XTypeProvider
* @see com.sun.star.frame.XDispatchProviderInterceptor
* @see com.sun.star.frame.XDispatchProvider
*/
class InterceptorImpl implements XDispatchProvider,
XDispatchProviderInterceptor, XTypeProvider {
/** A master dispatch provider **/
public XDispatchProvider master = null;
/** A slave dispatch provider **/
public XDispatchProvider slave = null;
/** Get the slave dispatch provider
* @return The slave.
*/
public XDispatchProvider getSlaveDispatchProvider() {
return slave;
}
/** Get the master dispatch provider
* @return The master.
*/
public XDispatchProvider getMasterDispatchProvider() {
return master;
}
/** Set the slave dispatch provider
* @param prov The new slave.
*/
public void setSlaveDispatchProvider(XDispatchProvider prov) {
slave = prov ;
}
/** Set the master dispatch provider
* @param prov The new master.
*/
public void setMasterDispatchProvider(XDispatchProvider prov) {
master = prov ;
}
/** Searches for an XDispatch for the specified URL within
* the specified target frame.
* @param url The URL.
* @param frame The target frame
* @param flags Optional search flags.
* @return The dispatch object which provides the queried functionality
* or null if no dispatch object is available.
* @see com.sun.star.frame.XDispatch
*/
public XDispatch queryDispatch(URL url, String frame, int flags) {
return master.queryDispatch(url, frame, flags) ;
}
/**
* Query for an array of XDispatch.
* @param desc A list of dipatch requests.
* @return A list of dispatch objects.
*/
public XDispatch[] queryDispatches(DispatchDescriptor[] desc) {
return master.queryDispatches(desc) ;
}
/** Get the unique id for this implementation
* @return The id.
*/
public byte[] getImplementationId() {
return toString().getBytes();
}
/** Get all implemented types.
* @return The implemented UNO types.
*/
public Type[] getTypes() {
Class interfaces[] = getClass().getInterfaces();
Type types[] = new Type[interfaces.length];
for(int i = 0; i < interfaces.length; ++ i)
types[i] = new Type(interfaces[i]);
return types;
}
}