1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 24 class ExampleAddInResult implements com.sun.star.sheet.XVolatileResult 25 { 26 private String aName; 27 private int nValue; 28 private java.util.Vector aListeners = new java.util.Vector(); 29 ExampleAddInResult( String aNewName )30 public ExampleAddInResult( String aNewName ) 31 { 32 aName = aNewName; 33 } 34 getResult()35 private com.sun.star.sheet.ResultEvent getResult() 36 { 37 com.sun.star.sheet.ResultEvent aEvent = 38 new com.sun.star.sheet.ResultEvent(); 39 aEvent.Value = aName + " " + String.valueOf( nValue ); 40 aEvent.Source = this; 41 return aEvent; 42 } 43 addResultListener(com.sun.star.sheet.XResultListener aListener)44 public void addResultListener(com.sun.star.sheet.XResultListener aListener) 45 { 46 aListeners.addElement( aListener ); 47 48 // immediately notify of initial value 49 aListener.modified( getResult() ); 50 } 51 removeResultListener(com.sun.star.sheet.XResultListener aListener)52 public void removeResultListener(com.sun.star.sheet.XResultListener aListener) 53 { 54 aListeners.removeElement( aListener ); 55 } 56 incrementValue()57 public void incrementValue() 58 { 59 ++nValue; 60 com.sun.star.sheet.ResultEvent aEvent = getResult(); 61 62 java.util.Enumeration aEnum = aListeners.elements(); 63 while (aEnum.hasMoreElements()) 64 ((com.sun.star.sheet.XResultListener)aEnum.nextElement()).modified( 65 aEvent); 66 } 67 } 68 69 class ExampleAddInThread extends Thread 70 { 71 private java.util.Hashtable aCounters; 72 ExampleAddInThread( java.util.Hashtable aResults )73 public ExampleAddInThread( java.util.Hashtable aResults ) 74 { 75 aCounters = aResults; 76 } 77 run()78 public void run() 79 { 80 while ( true ) 81 { 82 try 83 { 84 sleep(1000); 85 } 86 catch( InterruptedException exception ) 87 { 88 } 89 90 // increment all counters 91 java.util.Enumeration aEnum = aCounters.elements(); 92 while (aEnum.hasMoreElements()) 93 ((ExampleAddInResult)aEnum.nextElement()).incrementValue(); 94 } 95 } 96 } 97 98 public class ExampleAddIn 99 { 100 static public class _ExampleAddIn extends com.sun.star.lib.uno.helper.WeakBase 101 implements org.openoffice.sheet.addin.XExampleAddIn, 102 com.sun.star.sheet.XAddIn, 103 com.sun.star.lang.XServiceName, 104 com.sun.star.lang.XServiceInfo 105 { 106 static private final String aExampleService = "org.openoffice.sheet.addin.ExampleAddIn"; 107 static private final String aAddInService = "com.sun.star.sheet.AddIn"; 108 static private final String aImplName = _ExampleAddIn.class.getName(); 109 110 private static final short FUNCTION_INVALID = -1; 111 private static final short FUNCTION_INCREMENT = 0; 112 private static final short FUNCTION_COUNTER = 1; 113 114 private static final String[] aFunctionNames = 115 { 116 "getIncremented", 117 "getCounter" 118 }; 119 private static final String[] aDisplayFunctionNames = 120 { 121 "Increment", 122 "Counter" 123 }; 124 private static final String[] aDescriptions = 125 { 126 "Increments a value", 127 "Returns a counter" 128 }; 129 private static final String[] aFirstArgumentNames = 130 { 131 "Value", 132 "Name" 133 }; 134 private static final String[] aFirstArgumentDescriptions = 135 { 136 "The value that is incremented", 137 "The name of the counter" 138 }; 139 140 private com.sun.star.lang.Locale aFuncLocale; 141 private java.util.Hashtable aResults; 142 _ExampleAddIn( com.sun.star.lang.XMultiServiceFactory xFactory )143 public _ExampleAddIn( com.sun.star.lang.XMultiServiceFactory xFactory ) 144 { 145 } 146 getFunctionID( String aProgrammaticFunctionName )147 private int getFunctionID( String aProgrammaticFunctionName ) 148 { 149 for ( int i = 0; i < aFunctionNames.length; i++ ) 150 if ( aProgrammaticFunctionName.equals(aFunctionNames[i]) ) 151 return i; 152 return FUNCTION_INVALID; 153 } 154 155 // XExampleAddIn 156 getIncremented( int nValue )157 public int getIncremented( int nValue ) 158 { 159 return nValue + 1; 160 } 161 getCounter(String aName)162 public com.sun.star.sheet.XVolatileResult getCounter(String aName) 163 { 164 if ( aResults == null ) 165 { 166 // create the table of results, and start a thread to increment 167 // all counters 168 aResults = new java.util.Hashtable(); 169 ExampleAddInThread aThread = new ExampleAddInThread( aResults ); 170 aThread.start(); 171 } 172 173 ExampleAddInResult aResult = (ExampleAddInResult) aResults.get(aName); 174 if ( aResult == null ) 175 { 176 aResult = new ExampleAddInResult(aName); 177 aResults.put( aName, aResult ); 178 } 179 return aResult; 180 } 181 182 // XAddIn 183 getProgrammaticFuntionName(String aDisplayName)184 public String getProgrammaticFuntionName(String aDisplayName) 185 { 186 for ( int i = 0; i < aFunctionNames.length; i++ ) 187 if ( aDisplayName.equals(aDisplayFunctionNames[i]) ) 188 return aFunctionNames[i]; 189 return ""; 190 } 191 getDisplayFunctionName(String aProgrammaticName)192 public String getDisplayFunctionName(String aProgrammaticName) 193 { 194 int nFunction = getFunctionID( aProgrammaticName ); 195 return ( nFunction == FUNCTION_INVALID ) ? "" : 196 aDisplayFunctionNames[nFunction]; 197 } 198 getFunctionDescription(String aProgrammaticName)199 public String getFunctionDescription(String aProgrammaticName) 200 { 201 int nFunction = getFunctionID( aProgrammaticName ); 202 return ( nFunction == FUNCTION_INVALID ) ? "" : 203 aDescriptions[nFunction]; 204 } 205 getDisplayArgumentName(String aProgrammaticFunctionName, int nArgument)206 public String getDisplayArgumentName(String aProgrammaticFunctionName, 207 int nArgument) 208 { 209 // both functions in this example only have a first argument 210 int nFunction = getFunctionID( aProgrammaticFunctionName ); 211 return ( nFunction == FUNCTION_INVALID || nArgument != 0) ? "" : 212 aFirstArgumentNames[nFunction]; 213 } 214 getArgumentDescription(String aProgrammaticFunctionName, int nArgument )215 public String getArgumentDescription(String aProgrammaticFunctionName, 216 int nArgument ) 217 { 218 // both functions in this example only have a first argument 219 int nFunction = getFunctionID( aProgrammaticFunctionName ); 220 return ( nFunction == FUNCTION_INVALID || nArgument != 0) ? "" : 221 aFirstArgumentDescriptions[nFunction]; 222 } 223 getProgrammaticCategoryName(String aProgrammaticFunctionName)224 public String getProgrammaticCategoryName(String aProgrammaticFunctionName) 225 { 226 return( "Add-In" ); 227 } 228 getDisplayCategoryName(String aProgrammaticFunctionName)229 public String getDisplayCategoryName(String aProgrammaticFunctionName) 230 { 231 return( "Add-In" ); 232 } 233 234 // XLocalizable 235 setLocale( com.sun.star.lang.Locale aLocale )236 public void setLocale( com.sun.star.lang.Locale aLocale ) 237 { 238 // the locale is stored and used for getLocale, but otherwise 239 // ignored in this example 240 aFuncLocale = aLocale; 241 } 242 getLocale()243 public com.sun.star.lang.Locale getLocale() 244 { 245 return aFuncLocale; 246 } 247 248 // XServiceName 249 getServiceName()250 public String getServiceName() 251 { 252 return aExampleService; 253 } 254 255 // XServiceInfo 256 getImplementationName()257 public String getImplementationName() 258 { 259 return aImplName; 260 } 261 getSupportedServiceNames()262 public String[] getSupportedServiceNames() 263 { 264 String [] aSupportedServices = new String[ 2 ]; 265 aSupportedServices[ 0 ] = aExampleService; 266 aSupportedServices[ 1 ] = aAddInService; 267 return aSupportedServices; 268 } 269 supportsService( String aService )270 public boolean supportsService( String aService ) 271 { 272 return (aService.equals( aExampleService ) || 273 aService.equals( aAddInService ) ); 274 } 275 276 } 277 278 __getServiceFactory( String implName, com.sun.star.lang.XMultiServiceFactory multiFactory, com.sun.star.registry.XRegistryKey regKey)279 public static com.sun.star.lang.XSingleServiceFactory __getServiceFactory( 280 String implName, 281 com.sun.star.lang.XMultiServiceFactory multiFactory, 282 com.sun.star.registry.XRegistryKey regKey) 283 { 284 com.sun.star.lang.XSingleServiceFactory xSingleServiceFactory = null; 285 if ( implName.equals(_ExampleAddIn.aImplName) ) 286 xSingleServiceFactory = 287 com.sun.star.comp.loader.FactoryHelper.getServiceFactory( 288 _ExampleAddIn.class, _ExampleAddIn.aExampleService, 289 multiFactory, regKey); 290 return xSingleServiceFactory; 291 } 292 293 // This method not longer necessary since OOo 3.4 where the component registration 294 // was changed to passive component registration. For more details see 295 // https://wiki.openoffice.org/wiki/Passive_Component_Registration 296 297 // public static boolean __writeRegistryServiceInfo( 298 // com.sun.star.registry.XRegistryKey regKey) 299 // { 300 // // register for both the base AddIn and the own service 301 // return com.sun.star.comp.loader.FactoryHelper.writeRegistryServiceInfo( 302 // _ExampleAddIn.aImplName, _ExampleAddIn.aExampleService, regKey) 303 // && com.sun.star.comp.loader.FactoryHelper.writeRegistryServiceInfo( 304 // _ExampleAddIn.aImplName, _ExampleAddIn.aAddInService, regKey); 305 // } 306 } 307 308