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