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 // uno 25*b1cdbd2cSJim Jagielski import com.sun.star.lib.uno.helper.ComponentBase; 26*b1cdbd2cSJim Jagielski import com.sun.star.uno.UnoRuntime; 27*b1cdbd2cSJim Jagielski 28*b1cdbd2cSJim Jagielski // factories 29*b1cdbd2cSJim Jagielski import com.sun.star.lang.XMultiServiceFactory; 30*b1cdbd2cSJim Jagielski import com.sun.star.lang.XSingleServiceFactory; 31*b1cdbd2cSJim Jagielski 32*b1cdbd2cSJim Jagielski // supported Interfaces 33*b1cdbd2cSJim Jagielski import com.sun.star.linguistic2.XThesaurus; 34*b1cdbd2cSJim Jagielski import com.sun.star.lang.XInitialization; 35*b1cdbd2cSJim Jagielski import com.sun.star.lang.XComponent; 36*b1cdbd2cSJim Jagielski import com.sun.star.lang.XServiceInfo; 37*b1cdbd2cSJim Jagielski import com.sun.star.lang.XServiceDisplayName; 38*b1cdbd2cSJim Jagielski 39*b1cdbd2cSJim Jagielski // Exceptions 40*b1cdbd2cSJim Jagielski import com.sun.star.uno.Exception; 41*b1cdbd2cSJim Jagielski import com.sun.star.uno.RuntimeException; 42*b1cdbd2cSJim Jagielski import com.sun.star.lang.IllegalArgumentException; 43*b1cdbd2cSJim Jagielski 44*b1cdbd2cSJim Jagielski //used Interfaces 45*b1cdbd2cSJim Jagielski import com.sun.star.linguistic2.XMeaning; 46*b1cdbd2cSJim Jagielski import com.sun.star.lang.Locale; 47*b1cdbd2cSJim Jagielski import com.sun.star.lang.XEventListener; 48*b1cdbd2cSJim Jagielski import com.sun.star.lang.EventObject; 49*b1cdbd2cSJim Jagielski import com.sun.star.beans.XPropertySet; 50*b1cdbd2cSJim Jagielski import com.sun.star.beans.PropertyValue; 51*b1cdbd2cSJim Jagielski import com.sun.star.uno.AnyConverter; 52*b1cdbd2cSJim Jagielski import com.sun.star.lang.XTypeProvider; 53*b1cdbd2cSJim Jagielski import com.sun.star.uno.Type; 54*b1cdbd2cSJim Jagielski 55*b1cdbd2cSJim Jagielski import java.util.ArrayList; 56*b1cdbd2cSJim Jagielski 57*b1cdbd2cSJim Jagielski public class SampleThesaurus extends ComponentBase implements 58*b1cdbd2cSJim Jagielski XThesaurus, 59*b1cdbd2cSJim Jagielski XInitialization, 60*b1cdbd2cSJim Jagielski XServiceDisplayName, 61*b1cdbd2cSJim Jagielski XServiceInfo 62*b1cdbd2cSJim Jagielski { 63*b1cdbd2cSJim Jagielski PropChgHelper aPropChgHelper; 64*b1cdbd2cSJim Jagielski ArrayList aEvtListeners; 65*b1cdbd2cSJim Jagielski boolean bDisposing; 66*b1cdbd2cSJim Jagielski SampleThesaurus()67*b1cdbd2cSJim Jagielski public SampleThesaurus() 68*b1cdbd2cSJim Jagielski { 69*b1cdbd2cSJim Jagielski // names of relevant properties to be used 70*b1cdbd2cSJim Jagielski String[] aProps = new String[] 71*b1cdbd2cSJim Jagielski { 72*b1cdbd2cSJim Jagielski "IsIgnoreControlCharacters", 73*b1cdbd2cSJim Jagielski "IsUseDictionaryList", 74*b1cdbd2cSJim Jagielski "IsGermanPreReform", 75*b1cdbd2cSJim Jagielski }; 76*b1cdbd2cSJim Jagielski 77*b1cdbd2cSJim Jagielski // this service has no listeners thus we may use the base class, 78*b1cdbd2cSJim Jagielski // which is here basically used only to keep track of the 79*b1cdbd2cSJim Jagielski // property set (and it's lifetime) since it gets used in the 80*b1cdbd2cSJim Jagielski // 'GetValueToUse' function 81*b1cdbd2cSJim Jagielski aPropChgHelper = new PropChgHelper( (XThesaurus) this, aProps ); 82*b1cdbd2cSJim Jagielski 83*b1cdbd2cSJim Jagielski aEvtListeners = new ArrayList(); 84*b1cdbd2cSJim Jagielski bDisposing = false; 85*b1cdbd2cSJim Jagielski } 86*b1cdbd2cSJim Jagielski IsEqual( Locale aLoc1, Locale aLoc2 )87*b1cdbd2cSJim Jagielski private boolean IsEqual( Locale aLoc1, Locale aLoc2 ) 88*b1cdbd2cSJim Jagielski { 89*b1cdbd2cSJim Jagielski return aLoc1.Language.equals( aLoc2.Language ) && 90*b1cdbd2cSJim Jagielski aLoc1.Country .equals( aLoc2.Country ) && 91*b1cdbd2cSJim Jagielski aLoc1.Variant .equals( aLoc2.Variant ); 92*b1cdbd2cSJim Jagielski } 93*b1cdbd2cSJim Jagielski GetValueToUse( String aPropName, boolean bDefaultVal, PropertyValue[] aProps )94*b1cdbd2cSJim Jagielski private boolean GetValueToUse( 95*b1cdbd2cSJim Jagielski String aPropName, 96*b1cdbd2cSJim Jagielski boolean bDefaultVal, 97*b1cdbd2cSJim Jagielski PropertyValue[] aProps ) 98*b1cdbd2cSJim Jagielski { 99*b1cdbd2cSJim Jagielski boolean bRes = bDefaultVal; 100*b1cdbd2cSJim Jagielski 101*b1cdbd2cSJim Jagielski try 102*b1cdbd2cSJim Jagielski { 103*b1cdbd2cSJim Jagielski // use temporary value if supplied 104*b1cdbd2cSJim Jagielski for (int i = 0; i < aProps.length; ++i) 105*b1cdbd2cSJim Jagielski { 106*b1cdbd2cSJim Jagielski if (aPropName.equals( aProps[i].Name )) 107*b1cdbd2cSJim Jagielski { 108*b1cdbd2cSJim Jagielski Object aObj = aProps[i].Value; 109*b1cdbd2cSJim Jagielski if (AnyConverter.isBoolean( aObj )) 110*b1cdbd2cSJim Jagielski { 111*b1cdbd2cSJim Jagielski bRes = AnyConverter.toBoolean( aObj ); 112*b1cdbd2cSJim Jagielski return bRes; 113*b1cdbd2cSJim Jagielski } 114*b1cdbd2cSJim Jagielski } 115*b1cdbd2cSJim Jagielski } 116*b1cdbd2cSJim Jagielski 117*b1cdbd2cSJim Jagielski // otherwise use value from property set (if available) 118*b1cdbd2cSJim Jagielski XPropertySet xPropSet = aPropChgHelper.GetPropSet(); 119*b1cdbd2cSJim Jagielski if (xPropSet != null) // should always be the case 120*b1cdbd2cSJim Jagielski { 121*b1cdbd2cSJim Jagielski Object aObj = xPropSet.getPropertyValue( aPropName ); 122*b1cdbd2cSJim Jagielski if (AnyConverter.isBoolean( aObj )) 123*b1cdbd2cSJim Jagielski bRes = AnyConverter.toBoolean( aObj ); 124*b1cdbd2cSJim Jagielski } 125*b1cdbd2cSJim Jagielski } 126*b1cdbd2cSJim Jagielski catch (Exception e) { 127*b1cdbd2cSJim Jagielski bRes = bDefaultVal; 128*b1cdbd2cSJim Jagielski } 129*b1cdbd2cSJim Jagielski 130*b1cdbd2cSJim Jagielski return bRes; 131*b1cdbd2cSJim Jagielski } 132*b1cdbd2cSJim Jagielski 133*b1cdbd2cSJim Jagielski // __________ interface methods __________ 134*b1cdbd2cSJim Jagielski 135*b1cdbd2cSJim Jagielski 136*b1cdbd2cSJim Jagielski //***************** 137*b1cdbd2cSJim Jagielski //XSupportedLocales 138*b1cdbd2cSJim Jagielski //***************** getLocales()139*b1cdbd2cSJim Jagielski public Locale[] getLocales() 140*b1cdbd2cSJim Jagielski throws com.sun.star.uno.RuntimeException 141*b1cdbd2cSJim Jagielski { 142*b1cdbd2cSJim Jagielski Locale aLocales[] = 143*b1cdbd2cSJim Jagielski { 144*b1cdbd2cSJim Jagielski new Locale( "en", "US", "" ) 145*b1cdbd2cSJim Jagielski }; 146*b1cdbd2cSJim Jagielski 147*b1cdbd2cSJim Jagielski return aLocales; 148*b1cdbd2cSJim Jagielski } 149*b1cdbd2cSJim Jagielski hasLocale( Locale aLocale )150*b1cdbd2cSJim Jagielski public boolean hasLocale( Locale aLocale ) 151*b1cdbd2cSJim Jagielski throws com.sun.star.uno.RuntimeException 152*b1cdbd2cSJim Jagielski { 153*b1cdbd2cSJim Jagielski boolean bRes = false; 154*b1cdbd2cSJim Jagielski if (IsEqual( aLocale, new Locale( "en", "US", "" ) )) 155*b1cdbd2cSJim Jagielski bRes = true; 156*b1cdbd2cSJim Jagielski return bRes; 157*b1cdbd2cSJim Jagielski } 158*b1cdbd2cSJim Jagielski 159*b1cdbd2cSJim Jagielski //********** 160*b1cdbd2cSJim Jagielski //XThesaurus 161*b1cdbd2cSJim Jagielski //********** queryMeanings( String aTerm, Locale aLocale, PropertyValue[] aProperties )162*b1cdbd2cSJim Jagielski public XMeaning[] queryMeanings( 163*b1cdbd2cSJim Jagielski String aTerm, Locale aLocale, 164*b1cdbd2cSJim Jagielski PropertyValue[] aProperties ) 165*b1cdbd2cSJim Jagielski throws com.sun.star.lang.IllegalArgumentException, 166*b1cdbd2cSJim Jagielski com.sun.star.uno.RuntimeException 167*b1cdbd2cSJim Jagielski { 168*b1cdbd2cSJim Jagielski if (IsEqual( aLocale, new Locale() ) || aTerm.length() == 0) 169*b1cdbd2cSJim Jagielski return null; 170*b1cdbd2cSJim Jagielski 171*b1cdbd2cSJim Jagielski // linguistic is currently not allowed to throw exceptions 172*b1cdbd2cSJim Jagielski // thus we return null fwhich means 'word cannot be looked up' 173*b1cdbd2cSJim Jagielski if (!hasLocale( aLocale )) 174*b1cdbd2cSJim Jagielski return null; 175*b1cdbd2cSJim Jagielski 176*b1cdbd2cSJim Jagielski // get values of relevant properties that may be used. 177*b1cdbd2cSJim Jagielski //! The values for 'IsIgnoreControlCharacters' and 'IsUseDictionaryList' 178*b1cdbd2cSJim Jagielski //! are handled by the dispatcher! Thus there is no need to access 179*b1cdbd2cSJim Jagielski //! them here. 180*b1cdbd2cSJim Jagielski boolean bIsGermanPreReform = GetValueToUse( "IsGermanPreReform", false, aProperties ); 181*b1cdbd2cSJim Jagielski 182*b1cdbd2cSJim Jagielski XMeaning[] aRes = null; 183*b1cdbd2cSJim Jagielski 184*b1cdbd2cSJim Jagielski //!! This code needs to be replaced by code calling the actual 185*b1cdbd2cSJim Jagielski //!! implementation of your thesaurus 186*b1cdbd2cSJim Jagielski if (aTerm.equals( "house" ) && 187*b1cdbd2cSJim Jagielski IsEqual( aLocale, new Locale( "en", "US", "" ) ) ) 188*b1cdbd2cSJim Jagielski { 189*b1cdbd2cSJim Jagielski aRes = new XMeaning[] 190*b1cdbd2cSJim Jagielski { 191*b1cdbd2cSJim Jagielski new XMeaning_impl( "a building where one lives", 192*b1cdbd2cSJim Jagielski new String[]{ "home", "place", "dwelling" } ), 193*b1cdbd2cSJim Jagielski new XMeaning_impl( "a group of people sharing common ancestry", 194*b1cdbd2cSJim Jagielski new String[]{ "family", "clan", "kindred" } ), 195*b1cdbd2cSJim Jagielski new XMeaning_impl( "to provide with lodging", 196*b1cdbd2cSJim Jagielski new String[]{ "room", "board", "put up" } ) 197*b1cdbd2cSJim Jagielski }; 198*b1cdbd2cSJim Jagielski } 199*b1cdbd2cSJim Jagielski 200*b1cdbd2cSJim Jagielski return aRes; 201*b1cdbd2cSJim Jagielski } 202*b1cdbd2cSJim Jagielski 203*b1cdbd2cSJim Jagielski 204*b1cdbd2cSJim Jagielski //******************** 205*b1cdbd2cSJim Jagielski // XServiceDisplayName 206*b1cdbd2cSJim Jagielski //******************** getServiceDisplayName( Locale aLocale )207*b1cdbd2cSJim Jagielski public String getServiceDisplayName( Locale aLocale ) 208*b1cdbd2cSJim Jagielski throws com.sun.star.uno.RuntimeException 209*b1cdbd2cSJim Jagielski { 210*b1cdbd2cSJim Jagielski return "Java Samples"; 211*b1cdbd2cSJim Jagielski } 212*b1cdbd2cSJim Jagielski 213*b1cdbd2cSJim Jagielski //**************** 214*b1cdbd2cSJim Jagielski // XInitialization 215*b1cdbd2cSJim Jagielski //**************** initialize( Object[] aArguments )216*b1cdbd2cSJim Jagielski public void initialize( Object[] aArguments ) 217*b1cdbd2cSJim Jagielski throws com.sun.star.uno.Exception, 218*b1cdbd2cSJim Jagielski com.sun.star.uno.RuntimeException 219*b1cdbd2cSJim Jagielski { 220*b1cdbd2cSJim Jagielski int nLen = aArguments.length; 221*b1cdbd2cSJim Jagielski if (2 == nLen) 222*b1cdbd2cSJim Jagielski { 223*b1cdbd2cSJim Jagielski XPropertySet xPropSet = (XPropertySet)UnoRuntime.queryInterface( 224*b1cdbd2cSJim Jagielski XPropertySet.class, aArguments[0]); 225*b1cdbd2cSJim Jagielski // start listening to property changes 226*b1cdbd2cSJim Jagielski aPropChgHelper.AddAsListenerTo( xPropSet ); 227*b1cdbd2cSJim Jagielski } 228*b1cdbd2cSJim Jagielski } 229*b1cdbd2cSJim Jagielski 230*b1cdbd2cSJim Jagielski //************* 231*b1cdbd2cSJim Jagielski // XServiceInfo 232*b1cdbd2cSJim Jagielski //************* supportsService( String aServiceName )233*b1cdbd2cSJim Jagielski public boolean supportsService( String aServiceName ) 234*b1cdbd2cSJim Jagielski throws com.sun.star.uno.RuntimeException 235*b1cdbd2cSJim Jagielski { 236*b1cdbd2cSJim Jagielski String[] aServices = getSupportedServiceNames_Static(); 237*b1cdbd2cSJim Jagielski int i, nLength = aServices.length; 238*b1cdbd2cSJim Jagielski boolean bResult = false; 239*b1cdbd2cSJim Jagielski 240*b1cdbd2cSJim Jagielski for( i = 0; !bResult && i < nLength; ++i ) 241*b1cdbd2cSJim Jagielski bResult = aServiceName.equals( aServices[ i ] ); 242*b1cdbd2cSJim Jagielski 243*b1cdbd2cSJim Jagielski return bResult; 244*b1cdbd2cSJim Jagielski } 245*b1cdbd2cSJim Jagielski getImplementationName()246*b1cdbd2cSJim Jagielski public String getImplementationName() 247*b1cdbd2cSJim Jagielski throws com.sun.star.uno.RuntimeException 248*b1cdbd2cSJim Jagielski { 249*b1cdbd2cSJim Jagielski return _aSvcImplName; 250*b1cdbd2cSJim Jagielski } 251*b1cdbd2cSJim Jagielski getSupportedServiceNames()252*b1cdbd2cSJim Jagielski public String[] getSupportedServiceNames() 253*b1cdbd2cSJim Jagielski throws com.sun.star.uno.RuntimeException 254*b1cdbd2cSJim Jagielski { 255*b1cdbd2cSJim Jagielski return getSupportedServiceNames_Static(); 256*b1cdbd2cSJim Jagielski } 257*b1cdbd2cSJim Jagielski 258*b1cdbd2cSJim Jagielski // __________ static things __________ 259*b1cdbd2cSJim Jagielski 260*b1cdbd2cSJim Jagielski public static String _aSvcImplName = SampleThesaurus.class.getName(); 261*b1cdbd2cSJim Jagielski getSupportedServiceNames_Static()262*b1cdbd2cSJim Jagielski public static String[] getSupportedServiceNames_Static() 263*b1cdbd2cSJim Jagielski { 264*b1cdbd2cSJim Jagielski String[] aResult = { "com.sun.star.linguistic2.Thesaurus" }; 265*b1cdbd2cSJim Jagielski return aResult; 266*b1cdbd2cSJim Jagielski } 267*b1cdbd2cSJim Jagielski 268*b1cdbd2cSJim Jagielski 269*b1cdbd2cSJim Jagielski /** 270*b1cdbd2cSJim Jagielski * Returns a factory for creating the service. 271*b1cdbd2cSJim Jagielski * This method is called by the <code>JavaLoader</code> 272*b1cdbd2cSJim Jagielski * <p> 273*b1cdbd2cSJim Jagielski * @return returns a <code>XSingleServiceFactory</code> for creating the component 274*b1cdbd2cSJim Jagielski * @param implName the name of the implementation for which a service is desired 275*b1cdbd2cSJim Jagielski * @param multiFactory the service manager to be used if needed 276*b1cdbd2cSJim Jagielski * @param regKey the registryKey 277*b1cdbd2cSJim Jagielski * @see com.sun.star.comp.loader.JavaLoader 278*b1cdbd2cSJim Jagielski */ __getServiceFactory( String aImplName, XMultiServiceFactory xMultiFactory, com.sun.star.registry.XRegistryKey xRegKey )279*b1cdbd2cSJim Jagielski public static XSingleServiceFactory __getServiceFactory( 280*b1cdbd2cSJim Jagielski String aImplName, 281*b1cdbd2cSJim Jagielski XMultiServiceFactory xMultiFactory, 282*b1cdbd2cSJim Jagielski com.sun.star.registry.XRegistryKey xRegKey ) 283*b1cdbd2cSJim Jagielski { 284*b1cdbd2cSJim Jagielski XSingleServiceFactory xSingleServiceFactory = null; 285*b1cdbd2cSJim Jagielski if( aImplName.equals( _aSvcImplName ) ) 286*b1cdbd2cSJim Jagielski { 287*b1cdbd2cSJim Jagielski xSingleServiceFactory = new OneInstanceFactory( 288*b1cdbd2cSJim Jagielski SampleThesaurus.class, _aSvcImplName, 289*b1cdbd2cSJim Jagielski getSupportedServiceNames_Static(), 290*b1cdbd2cSJim Jagielski xMultiFactory ); 291*b1cdbd2cSJim Jagielski } 292*b1cdbd2cSJim Jagielski return xSingleServiceFactory; 293*b1cdbd2cSJim Jagielski } 294*b1cdbd2cSJim Jagielski 295*b1cdbd2cSJim Jagielski /** 296*b1cdbd2cSJim Jagielski * Writes the service information into the given registry key. 297*b1cdbd2cSJim Jagielski * This method is called by the <code>JavaLoader</code> 298*b1cdbd2cSJim Jagielski * <p> 299*b1cdbd2cSJim Jagielski * @return returns true if the operation succeeded 300*b1cdbd2cSJim Jagielski * @param xRegKey the registryKey 301*b1cdbd2cSJim Jagielski * @see com.sun.star.comp.loader.JavaLoader 302*b1cdbd2cSJim Jagielski */ 303*b1cdbd2cSJim Jagielski // This method not longer necessary since OOo 3.4 where the component registration 304*b1cdbd2cSJim Jagielski // was changed to passive component registration. For more details see 305*b1cdbd2cSJim Jagielski // http://wiki.services.openoffice.org/wiki/Passive_Component_Registration 306*b1cdbd2cSJim Jagielski 307*b1cdbd2cSJim Jagielski // public static boolean __writeRegistryServiceInfo( 308*b1cdbd2cSJim Jagielski // com.sun.star.registry.XRegistryKey xRegKey ) 309*b1cdbd2cSJim Jagielski // { 310*b1cdbd2cSJim Jagielski // boolean bResult = true; 311*b1cdbd2cSJim Jagielski // String[] aServices = getSupportedServiceNames_Static(); 312*b1cdbd2cSJim Jagielski // int i, nLength = aServices.length; 313*b1cdbd2cSJim Jagielski // for( i = 0; i < nLength; ++i ) 314*b1cdbd2cSJim Jagielski // { 315*b1cdbd2cSJim Jagielski // bResult = bResult && com.sun.star.comp.loader.FactoryHelper.writeRegistryServiceInfo( 316*b1cdbd2cSJim Jagielski // _aSvcImplName, aServices[i], xRegKey ); 317*b1cdbd2cSJim Jagielski // } 318*b1cdbd2cSJim Jagielski // return bResult; 319*b1cdbd2cSJim Jagielski // } 320*b1cdbd2cSJim Jagielski } 321*b1cdbd2cSJim Jagielski 322