/** * Copyright (C) 2011-2015 The XDocReport Team <xdocreport@googlegroups.com> * * All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ package fr.opensagres.xdocreport; import fr.opensagres.xdocreport.util.Util; import fr.opensagres.xdocreport.gui.SettingsDialog; import com.sun.star.uno.UnoRuntime; import com.sun.star.uno.XComponentContext; import com.sun.star.lib.uno.helper.Factory; import com.sun.star.lang.XSingleComponentFactory; import com.sun.star.registry.XRegistryKey; import com.sun.star.lib.uno.helper.WeakBase; import fr.opensagres.xdocreport.gui.ShowDialogBox; public final class XDocReportDesignTool extends WeakBase implements com.sun.star.lang.XInitialization, com.sun.star.frame.XDispatch, com.sun.star.lang.XServiceInfo, com.sun.star.frame.XDispatchProvider { private final XComponentContext m_xContext; private com.sun.star.frame.XFrame m_xFrame; private static final String m_implementationName = XDocReportDesignTool.class.getName(); private static final String[] m_serviceNames = { "com.sun.star.frame.ProtocolHandler" }; public XDocReportDesignTool( XComponentContext context ) { m_xContext = context; }; public static XSingleComponentFactory __getComponentFactory( String sImplementationName ) { XSingleComponentFactory xFactory = null; if ( sImplementationName.equals( m_implementationName ) ) xFactory = Factory.createComponentFactory(XDocReportDesignTool.class, m_serviceNames); return xFactory; } public static boolean __writeRegistryServiceInfo( XRegistryKey xRegistryKey ) { return Factory.writeRegistryServiceInfo(m_implementationName, m_serviceNames, xRegistryKey); } // com.sun.star.lang.XInitialization: public void initialize( Object[] object ) throws com.sun.star.uno.Exception { if ( object.length > 0 ) { m_xFrame = (com.sun.star.frame.XFrame)UnoRuntime.queryInterface( com.sun.star.frame.XFrame.class, object[0]); } } // com.sun.star.frame.XDispatch: public void dispatch( com.sun.star.util.URL aURL, com.sun.star.beans.PropertyValue[] aArguments ) { if ( aURL.Protocol.compareTo("fr.opensagres.xdocreport.xdocreportdesigntool:") == 0 ) { if ( aURL.Path.compareTo("XDocReport") == 0 ) { //m_xFrame. // add your own code here startNewThread(new Runnable() { public void run() { try { SettingsDialog settingsDialog= new SettingsDialog(null, true); settingsDialog.setVisible(true); } catch (Exception e) { e.printStackTrace();; } } }); return; } else if( aURL.Path.compareTo("ListExisting") == 0 ) { startNewThread(new Runnable() { public void run() { ShowDialogBox showDialogBox= new ShowDialogBox(); System.out.println(showDialogBox); } }); return; } } } public void addStatusListener( com.sun.star.frame.XStatusListener xControl, com.sun.star.util.URL aURL ) { // add your own code here } public void removeStatusListener( com.sun.star.frame.XStatusListener xControl, com.sun.star.util.URL aURL ) { // add your own code here } // com.sun.star.lang.XServiceInfo: public String getImplementationName() { return m_implementationName; } public boolean supportsService( String sService ) { int len = m_serviceNames.length; for( int i=0; i < len; i++) { if (sService.equals(m_serviceNames[i])) return true; } return false; } public String[] getSupportedServiceNames() { return m_serviceNames; } com.sun.star.frame.XDispatch dispatcher = new XDocReportQueryDispatch(); // com.sun.star.frame.XDispatchProvider: public com.sun.star.frame.XDispatch queryDispatch( com.sun.star.util.URL aURL, String sTargetFrameName, int iSearchFlags ) { if ( aURL.Protocol.compareTo("fr.opensagres.xdocreport.xdocreportdesigntool:") == 0 ) { return dispatcher; } return null; } // com.sun.star.frame.XDispatchProvider: public com.sun.star.frame.XDispatch[] queryDispatches( com.sun.star.frame.DispatchDescriptor[] seqDescriptors ) { int nCount = seqDescriptors.length; com.sun.star.frame.XDispatch[] seqDispatcher = new com.sun.star.frame.XDispatch[seqDescriptors.length]; for( int i=0; i < nCount; ++i ) { seqDispatcher[i] = queryDispatch(seqDescriptors[i].FeatureURL, seqDescriptors[i].FrameName, seqDescriptors[i].SearchFlags ); } return seqDispatcher; } //PLQ private void startNewThread(Runnable runnable) { // Configuration.setClassLoader(this.getClass().getClassLoader()); Util.startNewThread(getClass().getClassLoader(), runnable); } }