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 // used interfaces 25*b1cdbd2cSJim Jagielski import com.sun.star.uno.XComponentContext; 26*b1cdbd2cSJim Jagielski import com.sun.star.lang.XMultiComponentFactory; 27*b1cdbd2cSJim Jagielski import com.sun.star.linguistic2.XLinguServiceManager; 28*b1cdbd2cSJim Jagielski import com.sun.star.linguistic2.XSpellChecker; 29*b1cdbd2cSJim Jagielski import com.sun.star.linguistic2.XHyphenator; 30*b1cdbd2cSJim Jagielski import com.sun.star.linguistic2.XThesaurus; 31*b1cdbd2cSJim Jagielski import com.sun.star.linguistic2.XSpellAlternatives; 32*b1cdbd2cSJim Jagielski import com.sun.star.linguistic2.XHyphenatedWord; 33*b1cdbd2cSJim Jagielski import com.sun.star.linguistic2.XPossibleHyphens; 34*b1cdbd2cSJim Jagielski import com.sun.star.linguistic2.XMeaning; 35*b1cdbd2cSJim Jagielski import com.sun.star.linguistic2.XSearchableDictionaryList; 36*b1cdbd2cSJim Jagielski import com.sun.star.linguistic2.XLinguServiceEventListener; 37*b1cdbd2cSJim Jagielski import com.sun.star.linguistic2.LinguServiceEvent; 38*b1cdbd2cSJim Jagielski import com.sun.star.beans.XPropertySet; 39*b1cdbd2cSJim Jagielski import com.sun.star.beans.PropertyValue; 40*b1cdbd2cSJim Jagielski import com.sun.star.uno.XComponentContext; 41*b1cdbd2cSJim Jagielski import com.sun.star.uno.XNamingService; 42*b1cdbd2cSJim Jagielski import com.sun.star.lang.XMultiComponentFactory; 43*b1cdbd2cSJim Jagielski import com.sun.star.lang.EventObject; 44*b1cdbd2cSJim Jagielski import com.sun.star.lang.Locale; 45*b1cdbd2cSJim Jagielski import com.sun.star.bridge.XUnoUrlResolver; 46*b1cdbd2cSJim Jagielski import com.sun.star.uno.UnoRuntime; 47*b1cdbd2cSJim Jagielski import com.sun.star.uno.Any; 48*b1cdbd2cSJim Jagielski import com.sun.star.lang.XComponent; 49*b1cdbd2cSJim Jagielski 50*b1cdbd2cSJim Jagielski public class LinguisticExamples 51*b1cdbd2cSJim Jagielski { 52*b1cdbd2cSJim Jagielski // The remote office ocntext 53*b1cdbd2cSJim Jagielski protected XComponentContext mxRemoteContext = null; 54*b1cdbd2cSJim Jagielski // The MultiServiceFactory interface of the Office 55*b1cdbd2cSJim Jagielski protected XMultiComponentFactory mxRemoteServiceManager = null; 56*b1cdbd2cSJim Jagielski 57*b1cdbd2cSJim Jagielski // The LinguServiceManager interface 58*b1cdbd2cSJim Jagielski protected XLinguServiceManager mxLinguSvcMgr = null; 59*b1cdbd2cSJim Jagielski 60*b1cdbd2cSJim Jagielski // The SpellChecker interface 61*b1cdbd2cSJim Jagielski protected XSpellChecker mxSpell = null; 62*b1cdbd2cSJim Jagielski 63*b1cdbd2cSJim Jagielski // The Hyphenator interface 64*b1cdbd2cSJim Jagielski protected XHyphenator mxHyph = null; 65*b1cdbd2cSJim Jagielski 66*b1cdbd2cSJim Jagielski // The Thesaurus interface 67*b1cdbd2cSJim Jagielski protected XThesaurus mxThes = null; 68*b1cdbd2cSJim Jagielski 69*b1cdbd2cSJim Jagielski // The DictionaryList interface 70*b1cdbd2cSJim Jagielski protected XSearchableDictionaryList mxDicList = null; 71*b1cdbd2cSJim Jagielski 72*b1cdbd2cSJim Jagielski // The LinguProperties interface 73*b1cdbd2cSJim Jagielski protected XPropertySet mxLinguProps = null; 74*b1cdbd2cSJim Jagielski 75*b1cdbd2cSJim Jagielski main(String args[])76*b1cdbd2cSJim Jagielski public static void main(String args[]) 77*b1cdbd2cSJim Jagielski { 78*b1cdbd2cSJim Jagielski // Create an instance of the class and call it's begin method 79*b1cdbd2cSJim Jagielski try { 80*b1cdbd2cSJim Jagielski LinguisticExamples aExample = new LinguisticExamples(); 81*b1cdbd2cSJim Jagielski aExample.Connect(); 82*b1cdbd2cSJim Jagielski aExample.Run(); 83*b1cdbd2cSJim Jagielski } catch (Exception e) { 84*b1cdbd2cSJim Jagielski System.err.println("failed to run examples"); 85*b1cdbd2cSJim Jagielski e.printStackTrace(); 86*b1cdbd2cSJim Jagielski } 87*b1cdbd2cSJim Jagielski } 88*b1cdbd2cSJim Jagielski 89*b1cdbd2cSJim Jagielski Connect()90*b1cdbd2cSJim Jagielski public void Connect() 91*b1cdbd2cSJim Jagielski throws java.lang.Exception 92*b1cdbd2cSJim Jagielski { 93*b1cdbd2cSJim Jagielski // get the remote office context. If necessary a new office 94*b1cdbd2cSJim Jagielski // process is started 95*b1cdbd2cSJim Jagielski mxRemoteContext = com.sun.star.comp.helper.Bootstrap.bootstrap(); 96*b1cdbd2cSJim Jagielski System.out.println("Connected to a running office ..."); 97*b1cdbd2cSJim Jagielski mxRemoteServiceManager = mxRemoteContext.getServiceManager(); 98*b1cdbd2cSJim Jagielski } 99*b1cdbd2cSJim Jagielski 100*b1cdbd2cSJim Jagielski 101*b1cdbd2cSJim Jagielski /** Get the LinguServiceManager to be used. For example to access spell 102*b1cdbd2cSJim Jagielski checker, thesaurus and hyphenator, also the component may choose to 103*b1cdbd2cSJim Jagielski register itself as listener to it in order to get notified of relevant 104*b1cdbd2cSJim Jagielski events. */ GetLinguSvcMgr()105*b1cdbd2cSJim Jagielski public boolean GetLinguSvcMgr() 106*b1cdbd2cSJim Jagielski throws com.sun.star.uno.Exception 107*b1cdbd2cSJim Jagielski { 108*b1cdbd2cSJim Jagielski if (mxRemoteContext != null && mxRemoteServiceManager != null) { 109*b1cdbd2cSJim Jagielski Object aObj = mxRemoteServiceManager.createInstanceWithContext( 110*b1cdbd2cSJim Jagielski "com.sun.star.linguistic2.LinguServiceManager", mxRemoteContext ); 111*b1cdbd2cSJim Jagielski mxLinguSvcMgr = (XLinguServiceManager) 112*b1cdbd2cSJim Jagielski UnoRuntime.queryInterface(XLinguServiceManager.class, aObj); 113*b1cdbd2cSJim Jagielski } 114*b1cdbd2cSJim Jagielski return mxLinguSvcMgr != null; 115*b1cdbd2cSJim Jagielski } 116*b1cdbd2cSJim Jagielski 117*b1cdbd2cSJim Jagielski 118*b1cdbd2cSJim Jagielski /** Get the SpellChecker to be used. 119*b1cdbd2cSJim Jagielski */ GetSpell()120*b1cdbd2cSJim Jagielski public boolean GetSpell() 121*b1cdbd2cSJim Jagielski throws com.sun.star.uno.Exception, 122*b1cdbd2cSJim Jagielski com.sun.star.uno.RuntimeException 123*b1cdbd2cSJim Jagielski { 124*b1cdbd2cSJim Jagielski if (mxLinguSvcMgr != null) 125*b1cdbd2cSJim Jagielski mxSpell = mxLinguSvcMgr.getSpellChecker(); 126*b1cdbd2cSJim Jagielski return mxSpell != null; 127*b1cdbd2cSJim Jagielski } 128*b1cdbd2cSJim Jagielski 129*b1cdbd2cSJim Jagielski /** Get the Hyphenator to be used. 130*b1cdbd2cSJim Jagielski */ GetHyph()131*b1cdbd2cSJim Jagielski public boolean GetHyph() 132*b1cdbd2cSJim Jagielski throws com.sun.star.uno.Exception, 133*b1cdbd2cSJim Jagielski com.sun.star.uno.RuntimeException 134*b1cdbd2cSJim Jagielski { 135*b1cdbd2cSJim Jagielski if (mxLinguSvcMgr != null) 136*b1cdbd2cSJim Jagielski mxHyph = mxLinguSvcMgr.getHyphenator(); 137*b1cdbd2cSJim Jagielski return mxHyph != null; 138*b1cdbd2cSJim Jagielski } 139*b1cdbd2cSJim Jagielski 140*b1cdbd2cSJim Jagielski /** Get the Thesaurus to be used. 141*b1cdbd2cSJim Jagielski */ GetThes()142*b1cdbd2cSJim Jagielski public boolean GetThes() 143*b1cdbd2cSJim Jagielski throws com.sun.star.uno.Exception, 144*b1cdbd2cSJim Jagielski com.sun.star.uno.RuntimeException 145*b1cdbd2cSJim Jagielski { 146*b1cdbd2cSJim Jagielski if (mxLinguSvcMgr != null) 147*b1cdbd2cSJim Jagielski mxThes = mxLinguSvcMgr.getThesaurus(); 148*b1cdbd2cSJim Jagielski return mxThes != null; 149*b1cdbd2cSJim Jagielski } 150*b1cdbd2cSJim Jagielski 151*b1cdbd2cSJim Jagielski Run()152*b1cdbd2cSJim Jagielski public void Run() 153*b1cdbd2cSJim Jagielski throws Exception 154*b1cdbd2cSJim Jagielski { 155*b1cdbd2cSJim Jagielski GetLinguSvcMgr(); 156*b1cdbd2cSJim Jagielski 157*b1cdbd2cSJim Jagielski 158*b1cdbd2cSJim Jagielski // list of property values to used in function calls below. 159*b1cdbd2cSJim Jagielski // Only properties with values different from the (default) values 160*b1cdbd2cSJim Jagielski // in the LinguProperties property set need to be supllied. 161*b1cdbd2cSJim Jagielski // Thus we may stay with an empty list in order to use the ones 162*b1cdbd2cSJim Jagielski // form the property set. 163*b1cdbd2cSJim Jagielski PropertyValue[] aEmptyProps = new PropertyValue[0]; 164*b1cdbd2cSJim Jagielski 165*b1cdbd2cSJim Jagielski // use american english as language 166*b1cdbd2cSJim Jagielski Locale aLocale = new Locale("en","US",""); 167*b1cdbd2cSJim Jagielski 168*b1cdbd2cSJim Jagielski 169*b1cdbd2cSJim Jagielski 170*b1cdbd2cSJim Jagielski // another list of property values to used in function calls below. 171*b1cdbd2cSJim Jagielski // Only properties with values different from the (default) values 172*b1cdbd2cSJim Jagielski // in the LinguProperties property set need to be supllied. 173*b1cdbd2cSJim Jagielski PropertyValue[] aProps = new PropertyValue[1]; 174*b1cdbd2cSJim Jagielski aProps[0] = new PropertyValue(); 175*b1cdbd2cSJim Jagielski aProps[0].Name = "IsGermanPreReform"; 176*b1cdbd2cSJim Jagielski aProps[0].Value = new Boolean( true ); 177*b1cdbd2cSJim Jagielski 178*b1cdbd2cSJim Jagielski 179*b1cdbd2cSJim Jagielski GetSpell(); 180*b1cdbd2cSJim Jagielski if (mxSpell != null) 181*b1cdbd2cSJim Jagielski { 182*b1cdbd2cSJim Jagielski // test with correct word 183*b1cdbd2cSJim Jagielski String aWord = "horseback"; 184*b1cdbd2cSJim Jagielski boolean bIsCorrect = mxSpell.isValid( aWord, aLocale, aEmptyProps ); 185*b1cdbd2cSJim Jagielski System.out.println( aWord + ": " + bIsCorrect ); 186*b1cdbd2cSJim Jagielski 187*b1cdbd2cSJim Jagielski // test with incorrect word 188*b1cdbd2cSJim Jagielski aWord = "course"; 189*b1cdbd2cSJim Jagielski bIsCorrect = mxSpell.isValid( aWord, aLocale , aEmptyProps ); 190*b1cdbd2cSJim Jagielski System.out.println( aWord + ": " + bIsCorrect ); 191*b1cdbd2cSJim Jagielski 192*b1cdbd2cSJim Jagielski 193*b1cdbd2cSJim Jagielski aWord = "house"; 194*b1cdbd2cSJim Jagielski XSpellAlternatives xAlt = mxSpell.spell( aWord, aLocale, aEmptyProps ); 195*b1cdbd2cSJim Jagielski if (xAlt == null) 196*b1cdbd2cSJim Jagielski System.out.println( aWord + " is correct." ); 197*b1cdbd2cSJim Jagielski else 198*b1cdbd2cSJim Jagielski { 199*b1cdbd2cSJim Jagielski System.out.println( aWord + " is not correct. A list of proposals follows." ); 200*b1cdbd2cSJim Jagielski String[] aAlternatives = xAlt.getAlternatives(); 201*b1cdbd2cSJim Jagielski if (aAlternatives.length == 0) 202*b1cdbd2cSJim Jagielski System.out.println( "no proposal found." ); 203*b1cdbd2cSJim Jagielski else 204*b1cdbd2cSJim Jagielski { 205*b1cdbd2cSJim Jagielski for (int i = 0; i < aAlternatives.length; ++i) 206*b1cdbd2cSJim Jagielski System.out.println( aAlternatives[i] ); 207*b1cdbd2cSJim Jagielski } 208*b1cdbd2cSJim Jagielski } 209*b1cdbd2cSJim Jagielski } 210*b1cdbd2cSJim Jagielski 211*b1cdbd2cSJim Jagielski 212*b1cdbd2cSJim Jagielski GetHyph(); 213*b1cdbd2cSJim Jagielski if (mxHyph != null) 214*b1cdbd2cSJim Jagielski { 215*b1cdbd2cSJim Jagielski // maximum number of characters to remain before the hyphen 216*b1cdbd2cSJim Jagielski // character in the resulting word of the hyphenation 217*b1cdbd2cSJim Jagielski short nMaxLeading = 6; 218*b1cdbd2cSJim Jagielski 219*b1cdbd2cSJim Jagielski XHyphenatedWord xHyphWord = mxHyph.hyphenate( "waterfall", 220*b1cdbd2cSJim Jagielski aLocale, nMaxLeading , 221*b1cdbd2cSJim Jagielski aEmptyProps ); 222*b1cdbd2cSJim Jagielski if (xHyphWord == null) 223*b1cdbd2cSJim Jagielski System.out.println( "no valid hyphenation position found" ); 224*b1cdbd2cSJim Jagielski else 225*b1cdbd2cSJim Jagielski { 226*b1cdbd2cSJim Jagielski System.out.println( "valid hyphenation pos found at " 227*b1cdbd2cSJim Jagielski + xHyphWord.getHyphenationPos() 228*b1cdbd2cSJim Jagielski + " in " + xHyphWord.getWord() ); 229*b1cdbd2cSJim Jagielski System.out.println( "hyphenation char will be after char " 230*b1cdbd2cSJim Jagielski + xHyphWord.getHyphenPos() 231*b1cdbd2cSJim Jagielski + " in " + xHyphWord.getHyphenatedWord() ); 232*b1cdbd2cSJim Jagielski } 233*b1cdbd2cSJim Jagielski 234*b1cdbd2cSJim Jagielski 235*b1cdbd2cSJim Jagielski //! Note: 'aProps' needs to have set 'IsGermanPreReform' to true! 236*b1cdbd2cSJim Jagielski xHyphWord = mxHyph.queryAlternativeSpelling( "Schiffahrt", 237*b1cdbd2cSJim Jagielski new Locale("de","DE",""), (short)4, aProps ); 238*b1cdbd2cSJim Jagielski if (xHyphWord == null) 239*b1cdbd2cSJim Jagielski System.out.println( "no alternative spelling found at specified position." ); 240*b1cdbd2cSJim Jagielski else 241*b1cdbd2cSJim Jagielski { 242*b1cdbd2cSJim Jagielski if (xHyphWord.isAlternativeSpelling()) 243*b1cdbd2cSJim Jagielski System.out.println( "alternative spelling detectetd!" ); 244*b1cdbd2cSJim Jagielski System.out.println( "valid hyphenation pos found at " 245*b1cdbd2cSJim Jagielski + xHyphWord.getHyphenationPos() 246*b1cdbd2cSJim Jagielski + " in " + xHyphWord.getWord() ); 247*b1cdbd2cSJim Jagielski System.out.println( "hyphenation char will be after char " 248*b1cdbd2cSJim Jagielski + xHyphWord.getHyphenPos() 249*b1cdbd2cSJim Jagielski + " in " + xHyphWord.getHyphenatedWord() ); 250*b1cdbd2cSJim Jagielski } 251*b1cdbd2cSJim Jagielski 252*b1cdbd2cSJim Jagielski 253*b1cdbd2cSJim Jagielski XPossibleHyphens xPossHyph = mxHyph.createPossibleHyphens("waterfall", 254*b1cdbd2cSJim Jagielski aLocale, 255*b1cdbd2cSJim Jagielski aEmptyProps ); 256*b1cdbd2cSJim Jagielski if (xPossHyph == null) 257*b1cdbd2cSJim Jagielski System.out.println( "no hyphenation positions found." ); 258*b1cdbd2cSJim Jagielski else 259*b1cdbd2cSJim Jagielski System.out.println( xPossHyph.getPossibleHyphens() ); 260*b1cdbd2cSJim Jagielski } 261*b1cdbd2cSJim Jagielski 262*b1cdbd2cSJim Jagielski 263*b1cdbd2cSJim Jagielski GetThes(); 264*b1cdbd2cSJim Jagielski if (mxThes != null) 265*b1cdbd2cSJim Jagielski { 266*b1cdbd2cSJim Jagielski XMeaning[] xMeanings = mxThes.queryMeanings("house", aLocale, 267*b1cdbd2cSJim Jagielski aEmptyProps ); 268*b1cdbd2cSJim Jagielski if (xMeanings == null) 269*b1cdbd2cSJim Jagielski System.out.println( "nothing found." ); 270*b1cdbd2cSJim Jagielski else 271*b1cdbd2cSJim Jagielski { 272*b1cdbd2cSJim Jagielski for (int i = 0; i < xMeanings.length; ++i) 273*b1cdbd2cSJim Jagielski { 274*b1cdbd2cSJim Jagielski System.out.println( "Meaning: " + xMeanings[i].getMeaning() ); 275*b1cdbd2cSJim Jagielski String[] aSynonyms = xMeanings[i].querySynonyms(); 276*b1cdbd2cSJim Jagielski for (int k = 0; k < aSynonyms.length; ++k) 277*b1cdbd2cSJim Jagielski System.out.println( " Synonym: " + aSynonyms[k] ); 278*b1cdbd2cSJim Jagielski } 279*b1cdbd2cSJim Jagielski } 280*b1cdbd2cSJim Jagielski } 281*b1cdbd2cSJim Jagielski 282*b1cdbd2cSJim Jagielski 283*b1cdbd2cSJim Jagielski 284*b1cdbd2cSJim Jagielski XLinguServiceEventListener aClient = new Client(); 285*b1cdbd2cSJim Jagielski 286*b1cdbd2cSJim Jagielski // get access to LinguProperties property set 287*b1cdbd2cSJim Jagielski Object aObj = mxRemoteServiceManager.createInstanceWithContext( 288*b1cdbd2cSJim Jagielski "com.sun.star.linguistic2.LinguProperties", mxRemoteContext); 289*b1cdbd2cSJim Jagielski XPropertySet aLinguProps = (XPropertySet) UnoRuntime.queryInterface( 290*b1cdbd2cSJim Jagielski XPropertySet.class,aObj); 291*b1cdbd2cSJim Jagielski 292*b1cdbd2cSJim Jagielski // set a spellchecker and hyphenator property value to a defined state 293*b1cdbd2cSJim Jagielski try { 294*b1cdbd2cSJim Jagielski aLinguProps.setPropertyValue("IsGermanPreReform", new Boolean(true)); 295*b1cdbd2cSJim Jagielski } catch (Exception e) { 296*b1cdbd2cSJim Jagielski } 297*b1cdbd2cSJim Jagielski 298*b1cdbd2cSJim Jagielski // now add the client as listener to the service manager to 299*b1cdbd2cSJim Jagielski // get informed when spellchecking or hyphenation may produce 300*b1cdbd2cSJim Jagielski // different results then before. 301*b1cdbd2cSJim Jagielski mxLinguSvcMgr.addLinguServiceManagerListener(aClient); 302*b1cdbd2cSJim Jagielski 303*b1cdbd2cSJim Jagielski // change that property value in order to trigger a property change 304*b1cdbd2cSJim Jagielski // event that eventually results in the listeners 305*b1cdbd2cSJim Jagielski // 'processLinguServiceEvent' function being called 306*b1cdbd2cSJim Jagielski try { 307*b1cdbd2cSJim Jagielski aLinguProps.setPropertyValue("IsGermanPreReform", new Boolean(false)); 308*b1cdbd2cSJim Jagielski } catch (Exception e) { 309*b1cdbd2cSJim Jagielski } 310*b1cdbd2cSJim Jagielski 311*b1cdbd2cSJim Jagielski //! keep the listener and the program alive until the event will 312*b1cdbd2cSJim Jagielski //! be launched. 313*b1cdbd2cSJim Jagielski //! There is a voluntary delay before launching the event! 314*b1cdbd2cSJim Jagielski // Of course this code would usually not be in a *real* client 315*b1cdbd2cSJim Jagielski // its 316*b1cdbd2cSJim Jagielski synchronized(this) { 317*b1cdbd2cSJim Jagielski try { 318*b1cdbd2cSJim Jagielski this.wait(4000); 319*b1cdbd2cSJim Jagielski } catch(Exception e) { 320*b1cdbd2cSJim Jagielski 321*b1cdbd2cSJim Jagielski } 322*b1cdbd2cSJim Jagielski } 323*b1cdbd2cSJim Jagielski 324*b1cdbd2cSJim Jagielski //! remove listener before programm termination. 325*b1cdbd2cSJim Jagielski //! should not be omitted. 326*b1cdbd2cSJim Jagielski mxLinguSvcMgr.removeLinguServiceManagerListener(aClient); 327*b1cdbd2cSJim Jagielski 328*b1cdbd2cSJim Jagielski 329*b1cdbd2cSJim Jagielski System.exit(0); 330*b1cdbd2cSJim Jagielski } 331*b1cdbd2cSJim Jagielski 332*b1cdbd2cSJim Jagielski /** simple sample implementation of a clients XLinguServiceEventListener 333*b1cdbd2cSJim Jagielski * interface implementation 334*b1cdbd2cSJim Jagielski */ 335*b1cdbd2cSJim Jagielski public class Client 336*b1cdbd2cSJim Jagielski implements XLinguServiceEventListener 337*b1cdbd2cSJim Jagielski { disposing( EventObject aEventObj )338*b1cdbd2cSJim Jagielski public void disposing ( EventObject aEventObj ) 339*b1cdbd2cSJim Jagielski { 340*b1cdbd2cSJim Jagielski //! any references to the EventObjects source have to be 341*b1cdbd2cSJim Jagielski //! released here now! 342*b1cdbd2cSJim Jagielski 343*b1cdbd2cSJim Jagielski System.out.println("object listened to will be disposed"); 344*b1cdbd2cSJim Jagielski } 345*b1cdbd2cSJim Jagielski processLinguServiceEvent( LinguServiceEvent aServiceEvent )346*b1cdbd2cSJim Jagielski public void processLinguServiceEvent( LinguServiceEvent aServiceEvent ) 347*b1cdbd2cSJim Jagielski { 348*b1cdbd2cSJim Jagielski //! do here whatever you think needs to be done depending 349*b1cdbd2cSJim Jagielski //! on the event recieved (e.g. trigger background spellchecking 350*b1cdbd2cSJim Jagielski //! or hyphenation again.) 351*b1cdbd2cSJim Jagielski 352*b1cdbd2cSJim Jagielski System.out.println("Listener called"); 353*b1cdbd2cSJim Jagielski } 354*b1cdbd2cSJim Jagielski }; 355*b1cdbd2cSJim Jagielski 356*b1cdbd2cSJim Jagielski } 357*b1cdbd2cSJim Jagielski 358