| /************************************************************** |
| * |
| * 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. |
| * |
| *************************************************************/ |
| |
| |
| import com.sun.star.beans.XPropertySet; |
| import com.sun.star.frame.DispatchDescriptor; |
| import com.sun.star.frame.FrameSearchFlag; |
| import com.sun.star.frame.XController; |
| import com.sun.star.frame.XDesktop; |
| 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.XServiceInfo; |
| import com.sun.star.lang.XSingleComponentFactory; |
| import com.sun.star.lib.uno.helper.WeakBase; |
| import com.sun.star.registry.XRegistryKey; |
| import com.sun.star.uno.UnoRuntime; |
| import com.sun.star.uno.XComponentContext; |
| import com.sun.star.lib.uno.helper.Factory; |
| |
| |
| public class InspectorAddon { |
| /** This class implements the component. At least the interfaces XServiceInfo, |
| * XTypeProvider, and XInitialization should be provided by the service. |
| */ |
| public static class InspectorAddonImpl extends WeakBase implements XDispatchProvider, XInitialization, XServiceInfo { |
| private static XModel xModel = null; |
| org.openoffice.XInstanceInspector xInstInspector = null; |
| // Dispatcher oDispatcher = null; |
| XFrame m_xFrame = null; |
| |
| private static final String[] m_serviceNames = { |
| "org.openoffice.InstanceInspectorAddon", |
| "com.sun.star.frame.ProtocolHandler" }; |
| ; |
| private XComponentContext m_xContext = null; |
| |
| /** Creates a new instance of InspectorAddon */ |
| public InspectorAddonImpl(XComponentContext _xContext) { |
| m_xContext = _xContext; |
| } |
| |
| 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.Inspector:") == 0 ) { |
| if ( aURL.Path.compareTo( "inspect" ) == 0 ){ |
| // Todo: Check if the frame is already administered (use hashtable) |
| xRet = new Dispatcher(m_xFrame); |
| } |
| } |
| 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; |
| } |
| |
| |
| public void initialize( Object[] object ) throws com.sun.star.uno.Exception { |
| if ( object.length > 0 ){ |
| m_xFrame = ( XFrame ) UnoRuntime.queryInterface(XFrame.class, object[ 0 ] ); |
| } |
| } |
| |
| public class Dispatcher implements XDispatch{ |
| private XFrame m_xFrame = null; |
| private XModel xModel = null; |
| |
| public Dispatcher(XFrame _xFrame){ |
| m_xFrame = _xFrame; |
| if (m_xFrame != null){ |
| XController xController = m_xFrame.getController(); |
| if (xController != null){ |
| xModel = xController.getModel(); |
| } |
| } |
| } |
| |
| // XDispatch |
| public void dispatch( /*IN*/com.sun.star.util.URL _aURL, /*IN*/com.sun.star.beans.PropertyValue[] aArguments ) { |
| try{ |
| if ( _aURL.Protocol.compareTo("org.openoffice.Office.addon.Inspector:") == 0 ){ |
| if ( _aURL.Path.equals("inspect")){ |
| Object oUnoInspectObject = xModel; |
| com.sun.star.lang.XMultiComponentFactory xMCF = m_xContext.getServiceManager(); |
| if (xInstInspector == null){ |
| Object obj= xMCF.createInstanceWithContext("org.openoffice.InstanceInspector", m_xContext); |
| xInstInspector = (org.openoffice.XInstanceInspector)UnoRuntime.queryInterface(org.openoffice.XInstanceInspector.class, obj); |
| } |
| if ((m_xFrame == null) || (xModel == null)){ |
| Object oDesktop = xMCF.createInstanceWithContext("com.sun.star.frame.Desktop", m_xContext); |
| m_xFrame = (XFrame) UnoRuntime.queryInterface(XFrame.class, oDesktop); |
| oUnoInspectObject = m_xFrame; |
| } |
| XPropertySet xFramePropertySet = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, m_xFrame); |
| String sTitle = (String) xFramePropertySet.getPropertyValue("Title"); |
| String[] sTitleList = sTitle.split(" - "); |
| if (sTitleList.length > 0){ |
| sTitle = sTitleList[0]; |
| } |
| xInstInspector.inspect(oUnoInspectObject, sTitle); |
| } |
| } |
| } catch( Exception e ) { |
| System.err.println( e + e.getMessage()); |
| e.printStackTrace(System.out); |
| }} |
| |
| 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 static String[] getServiceNames() { |
| return m_serviceNames; |
| } |
| |
| // Implement the interface XServiceInfo |
| /** Get all supported service names. |
| * @return Supported service names. |
| */ |
| public String[] getSupportedServiceNames() { |
| return getServiceNames(); |
| } |
| |
| // Implement the interface XServiceInfo |
| /** Test, if the given service will be supported. |
| * @param sService Service name. |
| * @return Return true, if the service will be supported. |
| */ |
| public boolean supportsService( String sServiceName ) { |
| int len = m_serviceNames.length; |
| |
| for( int i=0; i < len; i++) { |
| if ( sServiceName.equals( m_serviceNames[i] ) ) |
| return true; |
| } |
| |
| return false; |
| } |
| |
| // Implement the interface XServiceInfo |
| /** Get the implementation name of the component. |
| * @return Implementation name of the component. |
| */ |
| public String getImplementationName() { |
| return InspectorAddonImpl.class.getName(); |
| } |
| |
| } |
| |
| |
| /** |
| * Gives a factory for creating the service. |
| * This method is called by the <code>JavaLoader</code> |
| * <p> |
| * @return returns a <code>XSingleComponentFactory</code> for creating |
| * the component |
| * @param sImplName the name of the implementation for which a |
| * service is desired |
| * @see com.sun.star.comp.loader.JavaLoader |
| */ |
| public static XSingleComponentFactory __getComponentFactory( String sImplName ) |
| { |
| XSingleComponentFactory xFactory = null; |
| if ( sImplName.equals( InspectorAddonImpl.class.getName() ) ) |
| xFactory = Factory.createComponentFactory(InspectorAddonImpl.class, InspectorAddonImpl.getServiceNames()); |
| return xFactory; |
| } |
| |
| /** |
| * Writes the service information into the given registry key. |
| * This method is called by the <code>JavaLoader</code> |
| * <p> |
| * @return returns true if the operation succeeded |
| * @param regKey the registryKey |
| * @see com.sun.star.comp.loader.JavaLoader |
| */ |
| public static boolean __writeRegistryServiceInfo(XRegistryKey regKey) { |
| return Factory.writeRegistryServiceInfo(InspectorAddonImpl.class.getName(), InspectorAddonImpl.getServiceNames(), regKey); |
| } |
| |
| // __create( XComponentContext ){ |
| // |
| // } |
| } |