1*b1cdbd2cSJim Jagielski /************************************************************** 2*b1cdbd2cSJim Jagielski * 3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one 4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file 5*b1cdbd2cSJim Jagielski * distributed with this work for additional information 6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file 7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the 8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance 9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at 10*b1cdbd2cSJim Jagielski * 11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0 12*b1cdbd2cSJim Jagielski * 13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing, 14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an 15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the 17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations 18*b1cdbd2cSJim Jagielski * under the License. 19*b1cdbd2cSJim Jagielski * 20*b1cdbd2cSJim Jagielski *************************************************************/ 21*b1cdbd2cSJim Jagielski 22*b1cdbd2cSJim Jagielski 23*b1cdbd2cSJim Jagielski 24*b1cdbd2cSJim Jagielski package com.sun.star.comp.smoketest; 25*b1cdbd2cSJim Jagielski 26*b1cdbd2cSJim Jagielski import com.sun.star.lib.uno.helper.Factory; 27*b1cdbd2cSJim Jagielski import com.sun.star.lang.XMultiComponentFactory; 28*b1cdbd2cSJim Jagielski import com.sun.star.lang.XSingleComponentFactory; 29*b1cdbd2cSJim Jagielski import com.sun.star.lib.uno.helper.WeakBase; 30*b1cdbd2cSJim Jagielski import com.sun.star.uno.UnoRuntime; 31*b1cdbd2cSJim Jagielski import com.sun.star.uno.XComponentContext; 32*b1cdbd2cSJim Jagielski import com.sun.star.registry.XRegistryKey; 33*b1cdbd2cSJim Jagielski import com.sun.star.lang.XInitialization; 34*b1cdbd2cSJim Jagielski import com.sun.star.lang.XTypeProvider; 35*b1cdbd2cSJim Jagielski import com.sun.star.lang.XServiceInfo; 36*b1cdbd2cSJim Jagielski import com.sun.star.uno.Type; 37*b1cdbd2cSJim Jagielski 38*b1cdbd2cSJim Jagielski /** This class capsulates the class, that implements the minimal component, a 39*b1cdbd2cSJim Jagielski * factory for creating the service (<CODE>__getComponentFactory</CODE>) and a 40*b1cdbd2cSJim Jagielski * method, that writes the information into the given registry key 41*b1cdbd2cSJim Jagielski * (<CODE>__writeRegistryServiceInfo</CODE>). 42*b1cdbd2cSJim Jagielski */ 43*b1cdbd2cSJim Jagielski public class TestExtension { 44*b1cdbd2cSJim Jagielski /** This class implements the component. At least the interfaces XServiceInfo, 45*b1cdbd2cSJim Jagielski * XTypeProvider, and XInitialization should be provided by the service. 46*b1cdbd2cSJim Jagielski */ 47*b1cdbd2cSJim Jagielski public static class _TestExtension extends WeakBase 48*b1cdbd2cSJim Jagielski implements XServiceInfo { 49*b1cdbd2cSJim Jagielski /** The service name, that must be used to get an instance of this service. 50*b1cdbd2cSJim Jagielski */ 51*b1cdbd2cSJim Jagielski static private final String __serviceName = 52*b1cdbd2cSJim Jagielski "com.sun.star.comp.smoketest.TestExtension"; 53*b1cdbd2cSJim Jagielski 54*b1cdbd2cSJim Jagielski /** The initial component contextr, that gives access to 55*b1cdbd2cSJim Jagielski * the service manager, supported singletons, ... 56*b1cdbd2cSJim Jagielski * It's often later used 57*b1cdbd2cSJim Jagielski */ 58*b1cdbd2cSJim Jagielski private XComponentContext m_cmpCtx; 59*b1cdbd2cSJim Jagielski 60*b1cdbd2cSJim Jagielski /** The service manager, that gives access to all registered services. 61*b1cdbd2cSJim Jagielski * It's often later used 62*b1cdbd2cSJim Jagielski */ 63*b1cdbd2cSJim Jagielski private XMultiComponentFactory m_xMCF; 64*b1cdbd2cSJim Jagielski 65*b1cdbd2cSJim Jagielski /** The constructor of the inner class has a XMultiServiceFactory parameter. 66*b1cdbd2cSJim Jagielski * @param xmultiservicefactoryInitialization A special service factory 67*b1cdbd2cSJim Jagielski * could be introduced while initializing. 68*b1cdbd2cSJim Jagielski */ _TestExtension(XComponentContext xCompContext)69*b1cdbd2cSJim Jagielski public _TestExtension(XComponentContext xCompContext) { 70*b1cdbd2cSJim Jagielski try { 71*b1cdbd2cSJim Jagielski m_cmpCtx = xCompContext; 72*b1cdbd2cSJim Jagielski m_xMCF = m_cmpCtx.getServiceManager(); 73*b1cdbd2cSJim Jagielski } 74*b1cdbd2cSJim Jagielski catch( Exception e ) { 75*b1cdbd2cSJim Jagielski e.printStackTrace(); 76*b1cdbd2cSJim Jagielski } 77*b1cdbd2cSJim Jagielski } 78*b1cdbd2cSJim Jagielski 79*b1cdbd2cSJim Jagielski /** This method returns an array of all supported service names. 80*b1cdbd2cSJim Jagielski * @return Array of supported service names. 81*b1cdbd2cSJim Jagielski */ getSupportedServiceNames()82*b1cdbd2cSJim Jagielski public String[] getSupportedServiceNames() { 83*b1cdbd2cSJim Jagielski return getServiceNames(); 84*b1cdbd2cSJim Jagielski } 85*b1cdbd2cSJim Jagielski 86*b1cdbd2cSJim Jagielski /** This method is a simple helper function to used in the 87*b1cdbd2cSJim Jagielski * static component initialisation functions as well as in 88*b1cdbd2cSJim Jagielski * getSupportedServiceNames. 89*b1cdbd2cSJim Jagielski */ getServiceNames()90*b1cdbd2cSJim Jagielski public static String[] getServiceNames() { 91*b1cdbd2cSJim Jagielski String[] sSupportedServiceNames = { __serviceName }; 92*b1cdbd2cSJim Jagielski return sSupportedServiceNames; 93*b1cdbd2cSJim Jagielski } 94*b1cdbd2cSJim Jagielski 95*b1cdbd2cSJim Jagielski /** This method returns true, if the given service will be 96*b1cdbd2cSJim Jagielski * supported by the component. 97*b1cdbd2cSJim Jagielski * @param sServiceName Service name. 98*b1cdbd2cSJim Jagielski * @return True, if the given service name will be supported. 99*b1cdbd2cSJim Jagielski */ supportsService( String sServiceName )100*b1cdbd2cSJim Jagielski public boolean supportsService( String sServiceName ) { 101*b1cdbd2cSJim Jagielski return sServiceName.equals( __serviceName ); 102*b1cdbd2cSJim Jagielski } 103*b1cdbd2cSJim Jagielski 104*b1cdbd2cSJim Jagielski /** Return the class name of the component. 105*b1cdbd2cSJim Jagielski * @return Class name of the component. 106*b1cdbd2cSJim Jagielski */ getImplementationName()107*b1cdbd2cSJim Jagielski public String getImplementationName() { 108*b1cdbd2cSJim Jagielski return _TestExtension.class.getName(); 109*b1cdbd2cSJim Jagielski } 110*b1cdbd2cSJim Jagielski } 111*b1cdbd2cSJim Jagielski 112*b1cdbd2cSJim Jagielski 113*b1cdbd2cSJim Jagielski /** 114*b1cdbd2cSJim Jagielski * Gives a factory for creating the service. 115*b1cdbd2cSJim Jagielski * This method is called by the <code>JavaLoader</code> 116*b1cdbd2cSJim Jagielski * <p> 117*b1cdbd2cSJim Jagielski * @return returns a <code>XSingleComponentFactory</code> for creating 118*b1cdbd2cSJim Jagielski * the component 119*b1cdbd2cSJim Jagielski * @param sImplName the name of the implementation for which a 120*b1cdbd2cSJim Jagielski * service is desired 121*b1cdbd2cSJim Jagielski * @see com.sun.star.comp.loader.JavaLoader 122*b1cdbd2cSJim Jagielski */ __getComponentFactory(String sImplName)123*b1cdbd2cSJim Jagielski public static XSingleComponentFactory __getComponentFactory(String sImplName) 124*b1cdbd2cSJim Jagielski { 125*b1cdbd2cSJim Jagielski XSingleComponentFactory xFactory = null; 126*b1cdbd2cSJim Jagielski 127*b1cdbd2cSJim Jagielski if ( sImplName.equals( _TestExtension.class.getName() ) ) 128*b1cdbd2cSJim Jagielski xFactory = Factory.createComponentFactory(_TestExtension.class, 129*b1cdbd2cSJim Jagielski _TestExtension.getServiceNames()); 130*b1cdbd2cSJim Jagielski 131*b1cdbd2cSJim Jagielski return xFactory; 132*b1cdbd2cSJim Jagielski } 133*b1cdbd2cSJim Jagielski 134*b1cdbd2cSJim Jagielski /** 135*b1cdbd2cSJim Jagielski * Writes the service information into the given registry key. 136*b1cdbd2cSJim Jagielski * This method is called by the <code>JavaLoader</code> 137*b1cdbd2cSJim Jagielski * <p> 138*b1cdbd2cSJim Jagielski * @return returns true if the operation succeeded 139*b1cdbd2cSJim Jagielski * @param regKey the registryKey 140*b1cdbd2cSJim Jagielski * @see com.sun.star.comp.loader.JavaLoader 141*b1cdbd2cSJim Jagielski */ __writeRegistryServiceInfo(XRegistryKey regKey)142*b1cdbd2cSJim Jagielski public static boolean __writeRegistryServiceInfo(XRegistryKey regKey) { 143*b1cdbd2cSJim Jagielski return Factory.writeRegistryServiceInfo(_TestExtension.class.getName(), 144*b1cdbd2cSJim Jagielski _TestExtension.getServiceNames(), 145*b1cdbd2cSJim Jagielski regKey); 146*b1cdbd2cSJim Jagielski } 147*b1cdbd2cSJim Jagielski /** This method is a member of the interface for initializing an object 148*b1cdbd2cSJim Jagielski * directly after its creation. 149*b1cdbd2cSJim Jagielski * @param object This array of arbitrary objects will be passed to the 150*b1cdbd2cSJim Jagielski * component after its creation. 151*b1cdbd2cSJim Jagielski * @throws Exception Every exception will not be handled, but will be 152*b1cdbd2cSJim Jagielski * passed to the caller. 153*b1cdbd2cSJim Jagielski */ initialize( Object[] object )154*b1cdbd2cSJim Jagielski public void initialize( Object[] object ) 155*b1cdbd2cSJim Jagielski throws com.sun.star.uno.Exception { 156*b1cdbd2cSJim Jagielski /* The component describes what arguments its expected and in which 157*b1cdbd2cSJim Jagielski * order!At this point you can read the objects and can intialize 158*b1cdbd2cSJim Jagielski * your component using these objects. 159*b1cdbd2cSJim Jagielski */ 160*b1cdbd2cSJim Jagielski } 161*b1cdbd2cSJim Jagielski 162*b1cdbd2cSJim Jagielski } 163