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 // Template for an Office Calc add-in Java implementation file. 25*b1cdbd2cSJim Jagielski 26*b1cdbd2cSJim Jagielski /** You can find more 27*b1cdbd2cSJim Jagielski * information on the following web page: 28*b1cdbd2cSJim Jagielski * http://api.openoffice.org/common/ref/com/sun/star/index.html 29*b1cdbd2cSJim Jagielski */ 30*b1cdbd2cSJim Jagielski import com.sun.star.comp.loader.FactoryHelper; 31*b1cdbd2cSJim Jagielski import com.sun.star.lang.XMultiServiceFactory; 32*b1cdbd2cSJim Jagielski import com.sun.star.lang.XSingleServiceFactory; 33*b1cdbd2cSJim Jagielski import com.sun.star.registry.XRegistryKey; 34*b1cdbd2cSJim Jagielski import com.sun.star.uno.UnoRuntime; 35*b1cdbd2cSJim Jagielski import com.sun.star.lib.uno.helper.WeakBase; 36*b1cdbd2cSJim Jagielski import com.sun.star.lang.XInitialization; 37*b1cdbd2cSJim Jagielski import com.sun.star.beans.XPropertySet; 38*b1cdbd2cSJim Jagielski import com.sun.star.lang.XServiceInfo; 39*b1cdbd2cSJim Jagielski import com.sun.star.lang.XServiceName; 40*b1cdbd2cSJim Jagielski import com.sun.star.sheet.XAddIn; 41*b1cdbd2cSJim Jagielski import com.sun.star.lang.Locale; 42*b1cdbd2cSJim Jagielski import com.sun.star.lang.XTypeProvider; 43*b1cdbd2cSJim Jagielski import com.sun.star.uno.Type; 44*b1cdbd2cSJim Jagielski 45*b1cdbd2cSJim Jagielski import org.openoffice.sheet.addin.XCalcAddins; 46*b1cdbd2cSJim Jagielski 47*b1cdbd2cSJim Jagielski /** This outer class provides an inner class to implement the service 48*b1cdbd2cSJim Jagielski * description, a method to instantiate the 49*b1cdbd2cSJim Jagielski * component on demand (__getServiceFactory()), and a method to give 50*b1cdbd2cSJim Jagielski * information about the component (__writeRegistryServiceInfo()). 51*b1cdbd2cSJim Jagielski */ 52*b1cdbd2cSJim Jagielski public class CalcAddins { 53*b1cdbd2cSJim Jagielski 54*b1cdbd2cSJim Jagielski /** This inner class provides the component as a concrete implementation 55*b1cdbd2cSJim Jagielski * of the service description. It implements the needed interfaces. 56*b1cdbd2cSJim Jagielski * @implements XCalcAddins, XAddIn, XServiceName, XServiceInfo, XTypeProvider 57*b1cdbd2cSJim Jagielski */ 58*b1cdbd2cSJim Jagielski static public class _CalcAddins extends WeakBase implements 59*b1cdbd2cSJim Jagielski XCalcAddins, 60*b1cdbd2cSJim Jagielski XAddIn, 61*b1cdbd2cSJim Jagielski XServiceName, 62*b1cdbd2cSJim Jagielski XServiceInfo 63*b1cdbd2cSJim Jagielski { 64*b1cdbd2cSJim Jagielski 65*b1cdbd2cSJim Jagielski /** The component will be registered under this name. 66*b1cdbd2cSJim Jagielski */ 67*b1cdbd2cSJim Jagielski static private final String __serviceName = "org.openoffice.sheet.addin.CalcAddins"; 68*b1cdbd2cSJim Jagielski 69*b1cdbd2cSJim Jagielski static private final String ADDIN_SERVICE = "com.sun.star.sheet.AddIn"; 70*b1cdbd2cSJim Jagielski 71*b1cdbd2cSJim Jagielski private Locale aFuncLoc; 72*b1cdbd2cSJim Jagielski 73*b1cdbd2cSJim Jagielski private static final String[] stringFunctionName = { 74*b1cdbd2cSJim Jagielski /** TO DO: 75*b1cdbd2cSJim Jagielski * You should replace these method names by the method names of your interface. 76*b1cdbd2cSJim Jagielski */ 77*b1cdbd2cSJim Jagielski "getMyFirstValue", 78*b1cdbd2cSJim Jagielski "getMySecondValue" 79*b1cdbd2cSJim Jagielski }; 80*b1cdbd2cSJim Jagielski 81*b1cdbd2cSJim Jagielski private static final short shortINVALID = -1; 82*b1cdbd2cSJim Jagielski 83*b1cdbd2cSJim Jagielski /** TO DO: 84*b1cdbd2cSJim Jagielski * For each of your methods you should make up a new constant with a different value. 85*b1cdbd2cSJim Jagielski */ 86*b1cdbd2cSJim Jagielski private static final short shortGETMYFIRSTVALUE = 0; 87*b1cdbd2cSJim Jagielski private static final short shortGETMYSECONDVALUE = 1; 88*b1cdbd2cSJim Jagielski 89*b1cdbd2cSJim Jagielski 90*b1cdbd2cSJim Jagielski /** TO DO: 91*b1cdbd2cSJim Jagielski * This is where you implement all methods of your interface. The parameters have to 92*b1cdbd2cSJim Jagielski * be the same as in your IDL file and their types have to be the correct 93*b1cdbd2cSJim Jagielski * IDL-to-Java mappings of their types in the IDL file. 94*b1cdbd2cSJim Jagielski */ getMyFirstValue( com.sun.star.beans.XPropertySet xOptions )95*b1cdbd2cSJim Jagielski public int getMyFirstValue( 96*b1cdbd2cSJim Jagielski com.sun.star.beans.XPropertySet xOptions 97*b1cdbd2cSJim Jagielski ) { 98*b1cdbd2cSJim Jagielski return (int) 1; 99*b1cdbd2cSJim Jagielski } 100*b1cdbd2cSJim Jagielski getMySecondValue( com.sun.star.beans.XPropertySet xOptions, int intDummy )101*b1cdbd2cSJim Jagielski public int getMySecondValue( 102*b1cdbd2cSJim Jagielski com.sun.star.beans.XPropertySet xOptions, 103*b1cdbd2cSJim Jagielski int intDummy 104*b1cdbd2cSJim Jagielski ) { 105*b1cdbd2cSJim Jagielski return( (int) ( 2 + intDummy ) ); 106*b1cdbd2cSJim Jagielski } 107*b1cdbd2cSJim Jagielski 108*b1cdbd2cSJim Jagielski 109*b1cdbd2cSJim Jagielski // Implement method from interface XServiceName getServiceName()110*b1cdbd2cSJim Jagielski public String getServiceName() { 111*b1cdbd2cSJim Jagielski return( __serviceName ); 112*b1cdbd2cSJim Jagielski } 113*b1cdbd2cSJim Jagielski 114*b1cdbd2cSJim Jagielski // Implement methods from interface XServiceInfo supportsService(String stringServiceName)115*b1cdbd2cSJim Jagielski public boolean supportsService(String stringServiceName) { 116*b1cdbd2cSJim Jagielski return( stringServiceName.equals( ADDIN_SERVICE ) || 117*b1cdbd2cSJim Jagielski stringServiceName.equals( __serviceName ) ); 118*b1cdbd2cSJim Jagielski } 119*b1cdbd2cSJim Jagielski getImplementationName()120*b1cdbd2cSJim Jagielski public String getImplementationName() { 121*b1cdbd2cSJim Jagielski return( _CalcAddins.class.getName() ); 122*b1cdbd2cSJim Jagielski } 123*b1cdbd2cSJim Jagielski getSupportedServiceNames()124*b1cdbd2cSJim Jagielski public String[] getSupportedServiceNames() { 125*b1cdbd2cSJim Jagielski String[] stringSupportedServiceNames = { ADDIN_SERVICE, __serviceName }; 126*b1cdbd2cSJim Jagielski return( stringSupportedServiceNames ); 127*b1cdbd2cSJim Jagielski } 128*b1cdbd2cSJim Jagielski 129*b1cdbd2cSJim Jagielski // Implement methods from interface XAddIn getDisplayArgumentName(String stringProgrammaticFunctionName,int intArgument)130*b1cdbd2cSJim Jagielski public String getDisplayArgumentName(String stringProgrammaticFunctionName,int intArgument) { 131*b1cdbd2cSJim Jagielski String stringReturn = ""; 132*b1cdbd2cSJim Jagielski 133*b1cdbd2cSJim Jagielski switch( this.getFunctionID( stringProgrammaticFunctionName ) ) { 134*b1cdbd2cSJim Jagielski /** TO DO: 135*b1cdbd2cSJim Jagielski * You should list all argument names for each of your methods, here. 136*b1cdbd2cSJim Jagielski */ 137*b1cdbd2cSJim Jagielski case shortGETMYFIRSTVALUE: 138*b1cdbd2cSJim Jagielski switch( intArgument ) { 139*b1cdbd2cSJim Jagielski case 0: 140*b1cdbd2cSJim Jagielski stringReturn = "(internal)"; 141*b1cdbd2cSJim Jagielski break; 142*b1cdbd2cSJim Jagielski } 143*b1cdbd2cSJim Jagielski break; 144*b1cdbd2cSJim Jagielski case shortGETMYSECONDVALUE: 145*b1cdbd2cSJim Jagielski switch( intArgument ) { 146*b1cdbd2cSJim Jagielski case 0: 147*b1cdbd2cSJim Jagielski stringReturn = "(internal)"; 148*b1cdbd2cSJim Jagielski break; 149*b1cdbd2cSJim Jagielski case 1: 150*b1cdbd2cSJim Jagielski stringReturn = "intDummy"; 151*b1cdbd2cSJim Jagielski break; 152*b1cdbd2cSJim Jagielski } 153*b1cdbd2cSJim Jagielski break; 154*b1cdbd2cSJim Jagielski } 155*b1cdbd2cSJim Jagielski return( stringReturn ); 156*b1cdbd2cSJim Jagielski } 157*b1cdbd2cSJim Jagielski getDisplayFunctionName(String stringProgrammaticName)158*b1cdbd2cSJim Jagielski public String getDisplayFunctionName(String stringProgrammaticName) { 159*b1cdbd2cSJim Jagielski String stringReturn = ""; 160*b1cdbd2cSJim Jagielski 161*b1cdbd2cSJim Jagielski switch( this.getFunctionID( stringProgrammaticName ) ) { 162*b1cdbd2cSJim Jagielski /** TO DO: 163*b1cdbd2cSJim Jagielski * Assign the name of each of your methods. 164*b1cdbd2cSJim Jagielski */ 165*b1cdbd2cSJim Jagielski case shortGETMYFIRSTVALUE: 166*b1cdbd2cSJim Jagielski stringReturn = "getMyFirstValue"; 167*b1cdbd2cSJim Jagielski break; 168*b1cdbd2cSJim Jagielski case shortGETMYSECONDVALUE: 169*b1cdbd2cSJim Jagielski stringReturn = "getMySecondValue"; 170*b1cdbd2cSJim Jagielski break; 171*b1cdbd2cSJim Jagielski } 172*b1cdbd2cSJim Jagielski 173*b1cdbd2cSJim Jagielski return( stringReturn ); 174*b1cdbd2cSJim Jagielski } 175*b1cdbd2cSJim Jagielski getProgrammaticCategoryName(String p1)176*b1cdbd2cSJim Jagielski public String getProgrammaticCategoryName(String p1) { 177*b1cdbd2cSJim Jagielski return( "Add-In" ); 178*b1cdbd2cSJim Jagielski } 179*b1cdbd2cSJim Jagielski getDisplayCategoryName(String p1)180*b1cdbd2cSJim Jagielski public String getDisplayCategoryName(String p1) { 181*b1cdbd2cSJim Jagielski return( "Add-In" ); 182*b1cdbd2cSJim Jagielski } 183*b1cdbd2cSJim Jagielski getFunctionDescription(String stringProgrammaticName)184*b1cdbd2cSJim Jagielski public String getFunctionDescription(String stringProgrammaticName) { 185*b1cdbd2cSJim Jagielski String stringReturn = ""; 186*b1cdbd2cSJim Jagielski 187*b1cdbd2cSJim Jagielski switch( this.getFunctionID( stringProgrammaticName ) ) { 188*b1cdbd2cSJim Jagielski /** TO DO: 189*b1cdbd2cSJim Jagielski * Enter a description for each of your methods that office users will understand. 190*b1cdbd2cSJim Jagielski */ 191*b1cdbd2cSJim Jagielski case shortGETMYFIRSTVALUE: 192*b1cdbd2cSJim Jagielski stringReturn = "This is your first method."; 193*b1cdbd2cSJim Jagielski break; 194*b1cdbd2cSJim Jagielski case shortGETMYSECONDVALUE: 195*b1cdbd2cSJim Jagielski stringReturn = "This is your second method."; 196*b1cdbd2cSJim Jagielski break; 197*b1cdbd2cSJim Jagielski } 198*b1cdbd2cSJim Jagielski 199*b1cdbd2cSJim Jagielski return( stringReturn ); 200*b1cdbd2cSJim Jagielski } 201*b1cdbd2cSJim Jagielski getArgumentDescription(String stringProgrammaticFunctionName,int intArgument)202*b1cdbd2cSJim Jagielski public String getArgumentDescription(String stringProgrammaticFunctionName,int intArgument) { 203*b1cdbd2cSJim Jagielski String stringReturn = ""; 204*b1cdbd2cSJim Jagielski 205*b1cdbd2cSJim Jagielski switch( this.getFunctionID( stringProgrammaticFunctionName ) ) { 206*b1cdbd2cSJim Jagielski /** TO DO: 207*b1cdbd2cSJim Jagielski * Enter a description for every argument of every method. Make them so that office users will understand. 208*b1cdbd2cSJim Jagielski */ 209*b1cdbd2cSJim Jagielski case shortGETMYFIRSTVALUE: 210*b1cdbd2cSJim Jagielski switch( intArgument ) { 211*b1cdbd2cSJim Jagielski case 0: 212*b1cdbd2cSJim Jagielski stringReturn = "(internal)"; 213*b1cdbd2cSJim Jagielski break; 214*b1cdbd2cSJim Jagielski } 215*b1cdbd2cSJim Jagielski break; 216*b1cdbd2cSJim Jagielski case shortGETMYSECONDVALUE: 217*b1cdbd2cSJim Jagielski switch( intArgument ) { 218*b1cdbd2cSJim Jagielski case 0: 219*b1cdbd2cSJim Jagielski stringReturn = "(internal)"; 220*b1cdbd2cSJim Jagielski break; 221*b1cdbd2cSJim Jagielski case 1: 222*b1cdbd2cSJim Jagielski stringReturn = "You can add this value."; 223*b1cdbd2cSJim Jagielski break; 224*b1cdbd2cSJim Jagielski } 225*b1cdbd2cSJim Jagielski break; 226*b1cdbd2cSJim Jagielski } 227*b1cdbd2cSJim Jagielski return( stringReturn ); 228*b1cdbd2cSJim Jagielski } 229*b1cdbd2cSJim Jagielski getProgrammaticFuntionName(String p1)230*b1cdbd2cSJim Jagielski public String getProgrammaticFuntionName(String p1) { 231*b1cdbd2cSJim Jagielski return( "" ); 232*b1cdbd2cSJim Jagielski } 233*b1cdbd2cSJim Jagielski 234*b1cdbd2cSJim Jagielski // Implement methods from interface XLocalizable getLocale()235*b1cdbd2cSJim Jagielski public Locale getLocale() { 236*b1cdbd2cSJim Jagielski return( aFuncLoc ); 237*b1cdbd2cSJim Jagielski } 238*b1cdbd2cSJim Jagielski setLocale(Locale p1)239*b1cdbd2cSJim Jagielski public void setLocale(Locale p1) { 240*b1cdbd2cSJim Jagielski aFuncLoc = p1; 241*b1cdbd2cSJim Jagielski } 242*b1cdbd2cSJim Jagielski 243*b1cdbd2cSJim Jagielski // Auxiliary functions getFunctionID( String stringProgrammaticName )244*b1cdbd2cSJim Jagielski private short getFunctionID( String stringProgrammaticName ) { 245*b1cdbd2cSJim Jagielski for ( int i = 0; i < stringFunctionName.length; i++ ) { 246*b1cdbd2cSJim Jagielski if ( stringProgrammaticName.equals( stringFunctionName[ i ] ) ) { 247*b1cdbd2cSJim Jagielski return( ( short ) i ); 248*b1cdbd2cSJim Jagielski } 249*b1cdbd2cSJim Jagielski } 250*b1cdbd2cSJim Jagielski 251*b1cdbd2cSJim Jagielski return( -1 ); 252*b1cdbd2cSJim Jagielski } 253*b1cdbd2cSJim Jagielski } 254*b1cdbd2cSJim Jagielski 255*b1cdbd2cSJim Jagielski /** 256*b1cdbd2cSJim Jagielski * Returns a factory for creating the service. 257*b1cdbd2cSJim Jagielski * This method is called by the <code>JavaLoader</code> 258*b1cdbd2cSJim Jagielski * <p> 259*b1cdbd2cSJim Jagielski * @return returns a <code>XSingleServiceFactory</code> for creating the component 260*b1cdbd2cSJim Jagielski * @param implName the name of the implementation for which a service is desired 261*b1cdbd2cSJim Jagielski * @param multiFactory the service manager to be used if needed 262*b1cdbd2cSJim Jagielski * @param regKey the registryKey 263*b1cdbd2cSJim Jagielski * @see com.sun.star.comp.loader.JavaLoader 264*b1cdbd2cSJim Jagielski */ __getServiceFactory(String implName, XMultiServiceFactory multiFactory, XRegistryKey regKey)265*b1cdbd2cSJim Jagielski public static XSingleServiceFactory __getServiceFactory(String implName, 266*b1cdbd2cSJim Jagielski XMultiServiceFactory multiFactory, 267*b1cdbd2cSJim Jagielski XRegistryKey regKey) { 268*b1cdbd2cSJim Jagielski XSingleServiceFactory xSingleServiceFactory = null; 269*b1cdbd2cSJim Jagielski 270*b1cdbd2cSJim Jagielski if (implName.equals(_CalcAddins.class.getName()) ) 271*b1cdbd2cSJim Jagielski xSingleServiceFactory = FactoryHelper.getServiceFactory(_CalcAddins.class, 272*b1cdbd2cSJim Jagielski _CalcAddins.__serviceName, 273*b1cdbd2cSJim Jagielski multiFactory, 274*b1cdbd2cSJim Jagielski regKey); 275*b1cdbd2cSJim Jagielski 276*b1cdbd2cSJim Jagielski return xSingleServiceFactory; 277*b1cdbd2cSJim Jagielski } 278*b1cdbd2cSJim Jagielski 279*b1cdbd2cSJim Jagielski /** 280*b1cdbd2cSJim Jagielski * Writes the service information into the given registry key. 281*b1cdbd2cSJim Jagielski * This method is called by the <code>JavaLoader</code> 282*b1cdbd2cSJim Jagielski * <p> 283*b1cdbd2cSJim Jagielski * @return returns true if the operation succeeded 284*b1cdbd2cSJim Jagielski * @param regKey the registryKey 285*b1cdbd2cSJim Jagielski * @see com.sun.star.comp.loader.JavaLoader 286*b1cdbd2cSJim Jagielski */ 287*b1cdbd2cSJim Jagielski // This method not longer necessary since OOo 3.4 where the component registration 288*b1cdbd2cSJim Jagielski // was changed to passive component registration. For more details see 289*b1cdbd2cSJim Jagielski // http://wiki.services.openoffice.org/wiki/Passive_Component_Registration 290*b1cdbd2cSJim Jagielski 291*b1cdbd2cSJim Jagielski // public static boolean __writeRegistryServiceInfo(XRegistryKey regKey) { 292*b1cdbd2cSJim Jagielski // return FactoryHelper.writeRegistryServiceInfo(_CalcAddins.class.getName(), 293*b1cdbd2cSJim Jagielski // _CalcAddins.__serviceName, regKey) 294*b1cdbd2cSJim Jagielski // && FactoryHelper.writeRegistryServiceInfo(_CalcAddins.class.getName(), 295*b1cdbd2cSJim Jagielski // _CalcAddins.ADDIN_SERVICE, regKey); 296*b1cdbd2cSJim Jagielski // } 297*b1cdbd2cSJim Jagielski } 298