/************************************************************** * * 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; } }