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 package ifc.beans; 25*b1cdbd2cSJim Jagielski 26*b1cdbd2cSJim Jagielski import java.util.Vector; 27*b1cdbd2cSJim Jagielski 28*b1cdbd2cSJim Jagielski import lib.MultiMethodTest; 29*b1cdbd2cSJim Jagielski import util.ValueChanger; 30*b1cdbd2cSJim Jagielski import util.utils; 31*b1cdbd2cSJim Jagielski 32*b1cdbd2cSJim Jagielski import com.sun.star.beans.Property; 33*b1cdbd2cSJim Jagielski import com.sun.star.beans.PropertyAttribute; 34*b1cdbd2cSJim Jagielski import com.sun.star.beans.PropertyChangeEvent; 35*b1cdbd2cSJim Jagielski import com.sun.star.beans.XPropertyChangeListener; 36*b1cdbd2cSJim Jagielski import com.sun.star.beans.XPropertySet; 37*b1cdbd2cSJim Jagielski import com.sun.star.beans.XPropertySetInfo; 38*b1cdbd2cSJim Jagielski import com.sun.star.beans.XVetoableChangeListener; 39*b1cdbd2cSJim Jagielski import com.sun.star.lang.EventObject; 40*b1cdbd2cSJim Jagielski 41*b1cdbd2cSJim Jagielski /** 42*b1cdbd2cSJim Jagielski * Testing <code>com.sun.star.beans.XPropertySet</code> 43*b1cdbd2cSJim Jagielski * interface methods : 44*b1cdbd2cSJim Jagielski * <ul> 45*b1cdbd2cSJim Jagielski * <li><code>getPropertySetInfo()</code></li> 46*b1cdbd2cSJim Jagielski * <li><code>setPropertyValue()</code></li> 47*b1cdbd2cSJim Jagielski * <li><code>getPropertyValue()</code></li> 48*b1cdbd2cSJim Jagielski * <li><code>addPropertyChangeListener()</code></li> 49*b1cdbd2cSJim Jagielski * <li><code>removePropertyChangeListener()</code></li> 50*b1cdbd2cSJim Jagielski * <li><code>addVetoableChangeListener()</code></li> 51*b1cdbd2cSJim Jagielski * <li><code>removeVetoableChangeListener()</code></li> 52*b1cdbd2cSJim Jagielski * </ul> 53*b1cdbd2cSJim Jagielski * @see com.sun.star.beans.XPropertySet 54*b1cdbd2cSJim Jagielski */ 55*b1cdbd2cSJim Jagielski public class _XPropertySet extends MultiMethodTest { 56*b1cdbd2cSJim Jagielski 57*b1cdbd2cSJim Jagielski public XPropertySet oObj = null; 58*b1cdbd2cSJim Jagielski 59*b1cdbd2cSJim Jagielski /** 60*b1cdbd2cSJim Jagielski * Flag that indicates change listener was called. 61*b1cdbd2cSJim Jagielski */ 62*b1cdbd2cSJim Jagielski private boolean propertyChanged = false; 63*b1cdbd2cSJim Jagielski 64*b1cdbd2cSJim Jagielski /** 65*b1cdbd2cSJim Jagielski * Listener that must be called on bound property changing. 66*b1cdbd2cSJim Jagielski */ 67*b1cdbd2cSJim Jagielski public class MyChangeListener implements XPropertyChangeListener { 68*b1cdbd2cSJim Jagielski /** 69*b1cdbd2cSJim Jagielski * Just set <code>propertyChanged</code> flag to true. 70*b1cdbd2cSJim Jagielski */ propertyChange(PropertyChangeEvent e)71*b1cdbd2cSJim Jagielski public void propertyChange(PropertyChangeEvent e) { 72*b1cdbd2cSJim Jagielski propertyChanged = true; 73*b1cdbd2cSJim Jagielski } disposing(EventObject obj)74*b1cdbd2cSJim Jagielski public void disposing (EventObject obj) {} 75*b1cdbd2cSJim Jagielski } 76*b1cdbd2cSJim Jagielski 77*b1cdbd2cSJim Jagielski private final XPropertyChangeListener PClistener = new MyChangeListener(); 78*b1cdbd2cSJim Jagielski 79*b1cdbd2cSJim Jagielski /** 80*b1cdbd2cSJim Jagielski * Flag that indicates veto listener was called. 81*b1cdbd2cSJim Jagielski */ 82*b1cdbd2cSJim Jagielski private boolean vetoableChanged = false; 83*b1cdbd2cSJim Jagielski 84*b1cdbd2cSJim Jagielski /** 85*b1cdbd2cSJim Jagielski * Listener that must be called on constrained property changing. 86*b1cdbd2cSJim Jagielski */ 87*b1cdbd2cSJim Jagielski public class MyVetoListener implements XVetoableChangeListener { 88*b1cdbd2cSJim Jagielski /** 89*b1cdbd2cSJim Jagielski * Just set <code>vetoableChanged</code> flag to true. 90*b1cdbd2cSJim Jagielski */ vetoableChange(PropertyChangeEvent e)91*b1cdbd2cSJim Jagielski public void vetoableChange(PropertyChangeEvent e) { 92*b1cdbd2cSJim Jagielski vetoableChanged = true; 93*b1cdbd2cSJim Jagielski } disposing(EventObject obj)94*b1cdbd2cSJim Jagielski public void disposing (EventObject obj) {} 95*b1cdbd2cSJim Jagielski } 96*b1cdbd2cSJim Jagielski 97*b1cdbd2cSJim Jagielski private final XVetoableChangeListener VClistener = new MyVetoListener(); 98*b1cdbd2cSJim Jagielski 99*b1cdbd2cSJim Jagielski /** 100*b1cdbd2cSJim Jagielski * Structure that collects the properties of different types to test : 101*b1cdbd2cSJim Jagielski * Constrained, Bound and Normal. 102*b1cdbd2cSJim Jagielski */ 103*b1cdbd2cSJim Jagielski private final class PropsToTest { 104*b1cdbd2cSJim Jagielski Vector< String > constrained = new Vector< String >(); 105*b1cdbd2cSJim Jagielski Vector< String > bound = new Vector< String >(); 106*b1cdbd2cSJim Jagielski Vector< String > normal = new Vector< String >(); 107*b1cdbd2cSJim Jagielski } 108*b1cdbd2cSJim Jagielski 109*b1cdbd2cSJim Jagielski private final PropsToTest PTT = new PropsToTest(); 110*b1cdbd2cSJim Jagielski 111*b1cdbd2cSJim Jagielski /** 112*b1cdbd2cSJim Jagielski * Tests method <code>getPropertySetInfo</code>. After test completed 113*b1cdbd2cSJim Jagielski * call {@link #getPropsToTest} method to retrieve different kinds 114*b1cdbd2cSJim Jagielski * of properties to test then. <p> 115*b1cdbd2cSJim Jagielski * Has OK status if not null <code>XPropertySetInfo</code> 116*b1cdbd2cSJim Jagielski * object returned.<p> 117*b1cdbd2cSJim Jagielski * Since <code>getPropertySetInfo</code> is optional, it may return null, 118*b1cdbd2cSJim Jagielski * if it is not implemented. This method uses then an object relation 119*b1cdbd2cSJim Jagielski * <code>PTT</code> (Properties To Test) to determine available properties. 120*b1cdbd2cSJim Jagielski * All tests for services without <code>getPropertySetInfo</code> must 121*b1cdbd2cSJim Jagielski * provide this object relation. 122*b1cdbd2cSJim Jagielski */ _getPropertySetInfo()123*b1cdbd2cSJim Jagielski public void _getPropertySetInfo() { 124*b1cdbd2cSJim Jagielski 125*b1cdbd2cSJim Jagielski XPropertySetInfo propertySetInfo = oObj.getPropertySetInfo(); 126*b1cdbd2cSJim Jagielski 127*b1cdbd2cSJim Jagielski if (propertySetInfo == null) { 128*b1cdbd2cSJim Jagielski log.println("getPropertySetInfo() method returned null"); 129*b1cdbd2cSJim Jagielski tRes.tested("getPropertySetInfo()", true) ; 130*b1cdbd2cSJim Jagielski String[] ptt = (String[]) tEnv.getObjRelation("PTT"); 131*b1cdbd2cSJim Jagielski PTT.normal.clear(); 132*b1cdbd2cSJim Jagielski PTT.bound.clear(); 133*b1cdbd2cSJim Jagielski PTT.constrained.clear(); 134*b1cdbd2cSJim Jagielski PTT.normal.add( ptt[0] ); 135*b1cdbd2cSJim Jagielski PTT.bound.add( ptt[1] ); 136*b1cdbd2cSJim Jagielski PTT.constrained.add( ptt[2] ); 137*b1cdbd2cSJim Jagielski } else { 138*b1cdbd2cSJim Jagielski tRes.tested("getPropertySetInfo()", true ); 139*b1cdbd2cSJim Jagielski getPropsToTest(propertySetInfo); 140*b1cdbd2cSJim Jagielski } 141*b1cdbd2cSJim Jagielski 142*b1cdbd2cSJim Jagielski return; 143*b1cdbd2cSJim Jagielski 144*b1cdbd2cSJim Jagielski } // end of getPropertySetInfo() 145*b1cdbd2cSJim Jagielski 146*b1cdbd2cSJim Jagielski /** 147*b1cdbd2cSJim Jagielski * Tests change listener which added for bound properties. 148*b1cdbd2cSJim Jagielski * Adds listener to bound property (if it exists), then changes 149*b1cdbd2cSJim Jagielski * its value and check if listener was called. <p> 150*b1cdbd2cSJim Jagielski * Method tests to be successfully completed before : 151*b1cdbd2cSJim Jagielski * <ul> 152*b1cdbd2cSJim Jagielski * <li> <code>getPropertySetInfo</code> : in this method test 153*b1cdbd2cSJim Jagielski * one of bound properties is retrieved. </li> 154*b1cdbd2cSJim Jagielski * </ul> <p> 155*b1cdbd2cSJim Jagielski * Has OK status if NO bound properties exist or if listener 156*b1cdbd2cSJim Jagielski * was successfully called. 157*b1cdbd2cSJim Jagielski */ _addPropertyChangeListener()158*b1cdbd2cSJim Jagielski public void _addPropertyChangeListener() { 159*b1cdbd2cSJim Jagielski 160*b1cdbd2cSJim Jagielski requiredMethod("getPropertySetInfo()"); 161*b1cdbd2cSJim Jagielski 162*b1cdbd2cSJim Jagielski int count = PTT.bound.size(); 163*b1cdbd2cSJim Jagielski if ( count==0 || PTT.bound.get(0).equals("none") ) { 164*b1cdbd2cSJim Jagielski log.println("*** No bound properties found ***"); 165*b1cdbd2cSJim Jagielski tRes.tested("addPropertyChangeListener()", true) ; 166*b1cdbd2cSJim Jagielski } else { 167*b1cdbd2cSJim Jagielski boolean error = false; 168*b1cdbd2cSJim Jagielski for (int i = 0; i < count; i++) { 169*b1cdbd2cSJim Jagielski String propertyName = PTT.bound.get(i); 170*b1cdbd2cSJim Jagielski propertyChanged = false; 171*b1cdbd2cSJim Jagielski try { 172*b1cdbd2cSJim Jagielski oObj.addPropertyChangeListener(propertyName,PClistener); 173*b1cdbd2cSJim Jagielski Object gValue = oObj.getPropertyValue(propertyName); 174*b1cdbd2cSJim Jagielski log.println("Check bound property: " + propertyName ); 175*b1cdbd2cSJim Jagielski oObj.setPropertyValue(propertyName, 176*b1cdbd2cSJim Jagielski ValueChanger.changePValue(gValue)); 177*b1cdbd2cSJim Jagielski } catch (com.sun.star.beans.PropertyVetoException e) { 178*b1cdbd2cSJim Jagielski log.println("Exception occured while trying to change "+ 179*b1cdbd2cSJim Jagielski "property '"+ propertyName+"'"); 180*b1cdbd2cSJim Jagielski e.printStackTrace(log); 181*b1cdbd2cSJim Jagielski } catch (com.sun.star.lang.IllegalArgumentException e) { 182*b1cdbd2cSJim Jagielski log.println("Exception occured while trying to change "+ 183*b1cdbd2cSJim Jagielski "property '"+ propertyName+"'"); 184*b1cdbd2cSJim Jagielski e.printStackTrace(log); 185*b1cdbd2cSJim Jagielski } catch (com.sun.star.beans.UnknownPropertyException e) { 186*b1cdbd2cSJim Jagielski log.println("Exception occured while trying to change "+ 187*b1cdbd2cSJim Jagielski "property '"+ propertyName+"'"); 188*b1cdbd2cSJim Jagielski e.printStackTrace(log); 189*b1cdbd2cSJim Jagielski } catch (com.sun.star.lang.WrappedTargetException e) { 190*b1cdbd2cSJim Jagielski log.println("Exception occured while trying to change "+ 191*b1cdbd2cSJim Jagielski "property '"+ propertyName+"'"); 192*b1cdbd2cSJim Jagielski e.printStackTrace(log); 193*b1cdbd2cSJim Jagielski } // end of try-catch 194*b1cdbd2cSJim Jagielski error = error || !propertyChanged; 195*b1cdbd2cSJim Jagielski if (!propertyChanged) { 196*b1cdbd2cSJim Jagielski log.println("propertyChangeListener wasn't called for '"+ 197*b1cdbd2cSJim Jagielski propertyName+"'"); 198*b1cdbd2cSJim Jagielski } 199*b1cdbd2cSJim Jagielski } 200*b1cdbd2cSJim Jagielski tRes.tested("addPropertyChangeListener()", !error); 201*b1cdbd2cSJim Jagielski } 202*b1cdbd2cSJim Jagielski 203*b1cdbd2cSJim Jagielski return; 204*b1cdbd2cSJim Jagielski 205*b1cdbd2cSJim Jagielski } // end of addPropertyChangeListener() 206*b1cdbd2cSJim Jagielski 207*b1cdbd2cSJim Jagielski /** 208*b1cdbd2cSJim Jagielski * Tests vetoable listener which added for constrained properties. 209*b1cdbd2cSJim Jagielski * Adds listener to constrained property (if it exists), then changes 210*b1cdbd2cSJim Jagielski * its value and check if listener was called. <p> 211*b1cdbd2cSJim Jagielski * Method tests to be successfully completed before : 212*b1cdbd2cSJim Jagielski * <ul> 213*b1cdbd2cSJim Jagielski * <li> <code>getPropertySetInfo</code> : in this method test 214*b1cdbd2cSJim Jagielski * one of constrained properties is retrieved. </li> 215*b1cdbd2cSJim Jagielski * </ul> <p> 216*b1cdbd2cSJim Jagielski * Has OK status if NO constrained properties exist or if listener 217*b1cdbd2cSJim Jagielski * was successfully called. 218*b1cdbd2cSJim Jagielski */ _addVetoableChangeListener()219*b1cdbd2cSJim Jagielski public void _addVetoableChangeListener() { 220*b1cdbd2cSJim Jagielski 221*b1cdbd2cSJim Jagielski requiredMethod("getPropertySetInfo()"); 222*b1cdbd2cSJim Jagielski 223*b1cdbd2cSJim Jagielski int count = PTT.constrained.size(); 224*b1cdbd2cSJim Jagielski if ( count==0 || PTT.constrained.get(0).equals("none") ) { 225*b1cdbd2cSJim Jagielski log.println("*** No constrained properties found ***"); 226*b1cdbd2cSJim Jagielski tRes.tested("addVetoableChangeListener()", true) ; 227*b1cdbd2cSJim Jagielski } else { 228*b1cdbd2cSJim Jagielski boolean error = false; 229*b1cdbd2cSJim Jagielski for (int i = 0; i < count; i++) { 230*b1cdbd2cSJim Jagielski String propertyName = PTT.constrained.get(i); 231*b1cdbd2cSJim Jagielski vetoableChanged = false; 232*b1cdbd2cSJim Jagielski try { 233*b1cdbd2cSJim Jagielski oObj.addVetoableChangeListener(propertyName,VClistener); 234*b1cdbd2cSJim Jagielski Object gValue = oObj.getPropertyValue(propertyName); 235*b1cdbd2cSJim Jagielski oObj.setPropertyValue(propertyName, 236*b1cdbd2cSJim Jagielski ValueChanger.changePValue(gValue)); 237*b1cdbd2cSJim Jagielski } catch (com.sun.star.beans.PropertyVetoException e) { 238*b1cdbd2cSJim Jagielski log.println("Exception occured while trying to change "+ 239*b1cdbd2cSJim Jagielski "property '"+ propertyName+"'"); 240*b1cdbd2cSJim Jagielski e.printStackTrace(log); 241*b1cdbd2cSJim Jagielski } catch (com.sun.star.lang.IllegalArgumentException e) { 242*b1cdbd2cSJim Jagielski log.println("Exception occured while trying to change "+ 243*b1cdbd2cSJim Jagielski "property '"+ propertyName+"'"); 244*b1cdbd2cSJim Jagielski e.printStackTrace(log); 245*b1cdbd2cSJim Jagielski } catch (com.sun.star.beans.UnknownPropertyException e) { 246*b1cdbd2cSJim Jagielski log.println("Exception occured while trying to change "+ 247*b1cdbd2cSJim Jagielski "property '"+ propertyName+"'"); 248*b1cdbd2cSJim Jagielski e.printStackTrace(log); 249*b1cdbd2cSJim Jagielski } catch (com.sun.star.lang.WrappedTargetException e) { 250*b1cdbd2cSJim Jagielski log.println("Exception occured while trying to change "+ 251*b1cdbd2cSJim Jagielski "property '"+ propertyName+"'"); 252*b1cdbd2cSJim Jagielski e.printStackTrace(log); 253*b1cdbd2cSJim Jagielski } // end of try-catch 254*b1cdbd2cSJim Jagielski error = error || !vetoableChanged; 255*b1cdbd2cSJim Jagielski if (!vetoableChanged) { 256*b1cdbd2cSJim Jagielski log.println("vetoableChangeListener wasn't called for '"+ 257*b1cdbd2cSJim Jagielski propertyName+"'"); 258*b1cdbd2cSJim Jagielski } 259*b1cdbd2cSJim Jagielski } 260*b1cdbd2cSJim Jagielski tRes.tested("addVetoableChangeListener()",!error); 261*b1cdbd2cSJim Jagielski } 262*b1cdbd2cSJim Jagielski 263*b1cdbd2cSJim Jagielski return; 264*b1cdbd2cSJim Jagielski 265*b1cdbd2cSJim Jagielski } // end of addVetoableChangeListener() 266*b1cdbd2cSJim Jagielski 267*b1cdbd2cSJim Jagielski 268*b1cdbd2cSJim Jagielski /** 269*b1cdbd2cSJim Jagielski * Tests <code>setPropertyValue</code> method. 270*b1cdbd2cSJim Jagielski * Stores value before call, and compares it with value after 271*b1cdbd2cSJim Jagielski * call. <p> 272*b1cdbd2cSJim Jagielski * Method tests to be successfully completed before : 273*b1cdbd2cSJim Jagielski * <ul> 274*b1cdbd2cSJim Jagielski * <li> <code>getPropertySetInfo</code> : in this method test 275*b1cdbd2cSJim Jagielski * one of normal properties is retrieved. </li> 276*b1cdbd2cSJim Jagielski * </ul> <p> 277*b1cdbd2cSJim Jagielski * Has OK status if NO normal properties exist or if value before 278*b1cdbd2cSJim Jagielski * method call is not equal to value after. 279*b1cdbd2cSJim Jagielski */ _setPropertyValue()280*b1cdbd2cSJim Jagielski public void _setPropertyValue() { 281*b1cdbd2cSJim Jagielski 282*b1cdbd2cSJim Jagielski requiredMethod("getPropertySetInfo()"); 283*b1cdbd2cSJim Jagielski 284*b1cdbd2cSJim Jagielski Object gValue = null; 285*b1cdbd2cSJim Jagielski Object sValue = null; 286*b1cdbd2cSJim Jagielski 287*b1cdbd2cSJim Jagielski int count = PTT.normal.size(); 288*b1cdbd2cSJim Jagielski if ( count==0 || PTT.normal.get(0).equals("none") ) { 289*b1cdbd2cSJim Jagielski log.println("*** No changeable properties found ***"); 290*b1cdbd2cSJim Jagielski tRes.tested("setPropertyValue()", true) ; 291*b1cdbd2cSJim Jagielski } else { 292*b1cdbd2cSJim Jagielski boolean error = false; 293*b1cdbd2cSJim Jagielski for (int i = 0; i < count; i++) { 294*b1cdbd2cSJim Jagielski String propertyName = PTT.normal.get(i); 295*b1cdbd2cSJim Jagielski try { 296*b1cdbd2cSJim Jagielski log.println("try to change value of property '" + propertyName + "'" ); 297*b1cdbd2cSJim Jagielski gValue = oObj.getPropertyValue(propertyName); 298*b1cdbd2cSJim Jagielski sValue = ValueChanger.changePValue(gValue); 299*b1cdbd2cSJim Jagielski oObj.setPropertyValue(propertyName, sValue); 300*b1cdbd2cSJim Jagielski sValue = oObj.getPropertyValue(propertyName); 301*b1cdbd2cSJim Jagielski } catch (com.sun.star.beans.PropertyVetoException e) { 302*b1cdbd2cSJim Jagielski log.println("Exception occured while trying to change "+ 303*b1cdbd2cSJim Jagielski "property '"+ propertyName+"'"); 304*b1cdbd2cSJim Jagielski e.printStackTrace(log); 305*b1cdbd2cSJim Jagielski } catch (com.sun.star.lang.IllegalArgumentException e) { 306*b1cdbd2cSJim Jagielski log.println("Exception occured while trying to change "+ 307*b1cdbd2cSJim Jagielski "property '"+ propertyName+"'"); 308*b1cdbd2cSJim Jagielski e.printStackTrace(log); 309*b1cdbd2cSJim Jagielski } catch (com.sun.star.beans.UnknownPropertyException e) { 310*b1cdbd2cSJim Jagielski log.println("Exception occured while trying to change "+ 311*b1cdbd2cSJim Jagielski "property '"+ propertyName+"'"); 312*b1cdbd2cSJim Jagielski e.printStackTrace(log); 313*b1cdbd2cSJim Jagielski } catch (com.sun.star.lang.WrappedTargetException e) { 314*b1cdbd2cSJim Jagielski log.println("Exception occured while trying to change "+ 315*b1cdbd2cSJim Jagielski "property '"+ propertyName+"'"); 316*b1cdbd2cSJim Jagielski e.printStackTrace(log); 317*b1cdbd2cSJim Jagielski } // end of try-catch 318*b1cdbd2cSJim Jagielski if( gValue.equals(sValue) ) 319*b1cdbd2cSJim Jagielski { 320*b1cdbd2cSJim Jagielski log.println("setting property '"+ propertyName+"' failed"); 321*b1cdbd2cSJim Jagielski error = true; 322*b1cdbd2cSJim Jagielski } 323*b1cdbd2cSJim Jagielski } 324*b1cdbd2cSJim Jagielski tRes.tested("setPropertyValue()",!error); 325*b1cdbd2cSJim Jagielski } //endif 326*b1cdbd2cSJim Jagielski 327*b1cdbd2cSJim Jagielski return; 328*b1cdbd2cSJim Jagielski 329*b1cdbd2cSJim Jagielski } // end of setPropertyValue() 330*b1cdbd2cSJim Jagielski 331*b1cdbd2cSJim Jagielski /** 332*b1cdbd2cSJim Jagielski * Tests <code>getPropertyValue</code> method for the given property. 333*b1cdbd2cSJim Jagielski * Returns true if no exceptions occured 334*b1cdbd2cSJim Jagielski */ getSinglePropertyValue( String propertyName )335*b1cdbd2cSJim Jagielski private boolean getSinglePropertyValue( String propertyName ) 336*b1cdbd2cSJim Jagielski { 337*b1cdbd2cSJim Jagielski boolean runOk = false; 338*b1cdbd2cSJim Jagielski try { 339*b1cdbd2cSJim Jagielski oObj.getPropertyValue(propertyName); 340*b1cdbd2cSJim Jagielski runOk = true; 341*b1cdbd2cSJim Jagielski } catch (com.sun.star.beans.UnknownPropertyException e) { 342*b1cdbd2cSJim Jagielski log.println("Exception occured while trying to get property '"+ 343*b1cdbd2cSJim Jagielski propertyName+"'"); 344*b1cdbd2cSJim Jagielski e.printStackTrace(log); 345*b1cdbd2cSJim Jagielski } catch (com.sun.star.lang.WrappedTargetException e) { 346*b1cdbd2cSJim Jagielski log.println("Exception occured while trying to get property '"+ 347*b1cdbd2cSJim Jagielski propertyName+"'"); 348*b1cdbd2cSJim Jagielski e.printStackTrace(log); 349*b1cdbd2cSJim Jagielski } 350*b1cdbd2cSJim Jagielski return runOk; 351*b1cdbd2cSJim Jagielski } 352*b1cdbd2cSJim Jagielski 353*b1cdbd2cSJim Jagielski /** 354*b1cdbd2cSJim Jagielski * Tests <code>getPropertyValue</code> method. 355*b1cdbd2cSJim Jagielski * Just call this method and checks for no exceptions <p> 356*b1cdbd2cSJim Jagielski * Method tests to be successfully completed before : 357*b1cdbd2cSJim Jagielski * <ul> 358*b1cdbd2cSJim Jagielski * <li> <code>getPropertySetInfo</code> : in this method test 359*b1cdbd2cSJim Jagielski * one of normal properties is retrieved. </li> 360*b1cdbd2cSJim Jagielski * </ul> <p> 361*b1cdbd2cSJim Jagielski * Has OK status if NO normal properties exist or if no 362*b1cdbd2cSJim Jagielski * exceptions were thrown. 363*b1cdbd2cSJim Jagielski */ _getPropertyValue()364*b1cdbd2cSJim Jagielski public void _getPropertyValue() { 365*b1cdbd2cSJim Jagielski 366*b1cdbd2cSJim Jagielski requiredMethod("getPropertySetInfo()"); 367*b1cdbd2cSJim Jagielski 368*b1cdbd2cSJim Jagielski int count = PTT.normal.size(); 369*b1cdbd2cSJim Jagielski if ( count==0 || PTT.normal.get(0).equals("none") ) { 370*b1cdbd2cSJim Jagielski Property[] properties = oObj.getPropertySetInfo().getProperties(); 371*b1cdbd2cSJim Jagielski if( properties.length > 0 ) { 372*b1cdbd2cSJim Jagielski String propertyName = properties[0].Name; 373*b1cdbd2cSJim Jagielski log.println("All properties are Read Only"); 374*b1cdbd2cSJim Jagielski log.println("Using: "+propertyName); 375*b1cdbd2cSJim Jagielski tRes.tested("getPropertyValue()", getSinglePropertyValue( propertyName ) ); 376*b1cdbd2cSJim Jagielski } 377*b1cdbd2cSJim Jagielski else { 378*b1cdbd2cSJim Jagielski log.println("*** No properties found ***"); 379*b1cdbd2cSJim Jagielski tRes.tested("getPropertyValue()", true) ; 380*b1cdbd2cSJim Jagielski } 381*b1cdbd2cSJim Jagielski } else { 382*b1cdbd2cSJim Jagielski boolean error = false; 383*b1cdbd2cSJim Jagielski for (int i = 0; i < count; i++) { 384*b1cdbd2cSJim Jagielski String propertyName = PTT.normal.get(i); 385*b1cdbd2cSJim Jagielski boolean runOk = getSinglePropertyValue( propertyName ); 386*b1cdbd2cSJim Jagielski if( !runOk ) 387*b1cdbd2cSJim Jagielski { 388*b1cdbd2cSJim Jagielski error = true; 389*b1cdbd2cSJim Jagielski log.println("getPropertyValue() failed for property '"+propertyName+"'"); 390*b1cdbd2cSJim Jagielski } 391*b1cdbd2cSJim Jagielski } 392*b1cdbd2cSJim Jagielski tRes.tested("getPropertyValue()", !error) ; 393*b1cdbd2cSJim Jagielski } 394*b1cdbd2cSJim Jagielski 395*b1cdbd2cSJim Jagielski return; 396*b1cdbd2cSJim Jagielski } 397*b1cdbd2cSJim Jagielski 398*b1cdbd2cSJim Jagielski /** 399*b1cdbd2cSJim Jagielski * Tests <code>removePropertyChangeListener</code> method. 400*b1cdbd2cSJim Jagielski * Removes change listener, then changes bound property value 401*b1cdbd2cSJim Jagielski * and checks if the listener was NOT called. 402*b1cdbd2cSJim Jagielski * Method tests to be successfully completed before : 403*b1cdbd2cSJim Jagielski * <ul> 404*b1cdbd2cSJim Jagielski * <li> <code>addPropertyChangeListener</code> : here listener 405*b1cdbd2cSJim Jagielski * was added. </li> 406*b1cdbd2cSJim Jagielski * </ul> <p> 407*b1cdbd2cSJim Jagielski * Has OK status if NO bound properties exist or if listener 408*b1cdbd2cSJim Jagielski * was not called and no exceptions arose. 409*b1cdbd2cSJim Jagielski */ _removePropertyChangeListener()410*b1cdbd2cSJim Jagielski public void _removePropertyChangeListener() { 411*b1cdbd2cSJim Jagielski 412*b1cdbd2cSJim Jagielski requiredMethod("addPropertyChangeListener()"); 413*b1cdbd2cSJim Jagielski 414*b1cdbd2cSJim Jagielski int count = PTT.bound.size(); 415*b1cdbd2cSJim Jagielski if ( count==0 || PTT.bound.get(0).equals("none") ) { 416*b1cdbd2cSJim Jagielski log.println("*** No bound properties found ***"); 417*b1cdbd2cSJim Jagielski tRes.tested("removePropertyChangeListener()", true) ; 418*b1cdbd2cSJim Jagielski } else { 419*b1cdbd2cSJim Jagielski 420*b1cdbd2cSJim Jagielski //remove all listeners first 421*b1cdbd2cSJim Jagielski for (int i = 0; i < count; i++) { 422*b1cdbd2cSJim Jagielski String propertyName = PTT.bound.get(i); 423*b1cdbd2cSJim Jagielski try { 424*b1cdbd2cSJim Jagielski oObj.removePropertyChangeListener(propertyName,PClistener); 425*b1cdbd2cSJim Jagielski } catch (Exception e) { 426*b1cdbd2cSJim Jagielski log.println("Exception occured while removing change listener from"+ 427*b1cdbd2cSJim Jagielski "property '"+ propertyName+"'"); 428*b1cdbd2cSJim Jagielski e.printStackTrace(log); 429*b1cdbd2cSJim Jagielski } 430*b1cdbd2cSJim Jagielski } 431*b1cdbd2cSJim Jagielski 432*b1cdbd2cSJim Jagielski boolean error = false; 433*b1cdbd2cSJim Jagielski for (int i = 0; i < count; i++) { 434*b1cdbd2cSJim Jagielski String propertyName = PTT.bound.get(i); 435*b1cdbd2cSJim Jagielski try { 436*b1cdbd2cSJim Jagielski propertyChanged = false; 437*b1cdbd2cSJim Jagielski oObj.addPropertyChangeListener(propertyName,PClistener); 438*b1cdbd2cSJim Jagielski oObj.removePropertyChangeListener(propertyName,PClistener); 439*b1cdbd2cSJim Jagielski Object gValue = oObj.getPropertyValue(propertyName); 440*b1cdbd2cSJim Jagielski oObj.setPropertyValue(propertyName, 441*b1cdbd2cSJim Jagielski ValueChanger.changePValue(gValue)); 442*b1cdbd2cSJim Jagielski } catch (com.sun.star.beans.PropertyVetoException e) { 443*b1cdbd2cSJim Jagielski log.println("Exception occured while trying to change "+ 444*b1cdbd2cSJim Jagielski "property '"+ propertyName+"'"); 445*b1cdbd2cSJim Jagielski e.printStackTrace(log); 446*b1cdbd2cSJim Jagielski } catch (com.sun.star.lang.IllegalArgumentException e) { 447*b1cdbd2cSJim Jagielski log.println("Exception occured while trying to change "+ 448*b1cdbd2cSJim Jagielski "property '"+ propertyName+"'"); 449*b1cdbd2cSJim Jagielski e.printStackTrace(log); 450*b1cdbd2cSJim Jagielski } catch (com.sun.star.beans.UnknownPropertyException e) { 451*b1cdbd2cSJim Jagielski log.println("Exception occured while trying to change "+ 452*b1cdbd2cSJim Jagielski "property '"+ propertyName+"'"); 453*b1cdbd2cSJim Jagielski e.printStackTrace(log); 454*b1cdbd2cSJim Jagielski } catch (com.sun.star.lang.WrappedTargetException e) { 455*b1cdbd2cSJim Jagielski log.println("Exception occured while trying to change "+ 456*b1cdbd2cSJim Jagielski "property '"+ propertyName+"'"); 457*b1cdbd2cSJim Jagielski e.printStackTrace(log); 458*b1cdbd2cSJim Jagielski } // end of try-catch 459*b1cdbd2cSJim Jagielski 460*b1cdbd2cSJim Jagielski error = error || propertyChanged; 461*b1cdbd2cSJim Jagielski if (propertyChanged) { 462*b1cdbd2cSJim Jagielski log.println("propertyChangeListener was called after removing"+ 463*b1cdbd2cSJim Jagielski " for '"+propertyName+"'"); 464*b1cdbd2cSJim Jagielski } 465*b1cdbd2cSJim Jagielski } 466*b1cdbd2cSJim Jagielski tRes.tested("removePropertyChangeListener()",!error); 467*b1cdbd2cSJim Jagielski } 468*b1cdbd2cSJim Jagielski 469*b1cdbd2cSJim Jagielski return; 470*b1cdbd2cSJim Jagielski 471*b1cdbd2cSJim Jagielski } // end of removePropertyChangeListener() 472*b1cdbd2cSJim Jagielski 473*b1cdbd2cSJim Jagielski 474*b1cdbd2cSJim Jagielski /** 475*b1cdbd2cSJim Jagielski * Tests <code>removeVetoableChangeListener</code> method. 476*b1cdbd2cSJim Jagielski * Removes vetoable listener, then changes constrained property value 477*b1cdbd2cSJim Jagielski * and checks if the listener was NOT called. 478*b1cdbd2cSJim Jagielski * Method tests to be successfully completed before : 479*b1cdbd2cSJim Jagielski * <ul> 480*b1cdbd2cSJim Jagielski * <li> <code>addPropertyChangeListener</code> : here vetoable listener 481*b1cdbd2cSJim Jagielski * was added. </li> 482*b1cdbd2cSJim Jagielski * </ul> <p> 483*b1cdbd2cSJim Jagielski * Has OK status if NO constrained properties exist or if listener 484*b1cdbd2cSJim Jagielski * was NOT called and no exceptions arose. 485*b1cdbd2cSJim Jagielski */ _removeVetoableChangeListener()486*b1cdbd2cSJim Jagielski public void _removeVetoableChangeListener() { 487*b1cdbd2cSJim Jagielski 488*b1cdbd2cSJim Jagielski requiredMethod("addVetoableChangeListener()"); 489*b1cdbd2cSJim Jagielski 490*b1cdbd2cSJim Jagielski int count = PTT.constrained.size(); 491*b1cdbd2cSJim Jagielski if ( count==0 || PTT.constrained.get(0).equals("none") ) { 492*b1cdbd2cSJim Jagielski log.println("*** No constrained properties found ***"); 493*b1cdbd2cSJim Jagielski tRes.tested("removeVetoableChangeListener()", true) ; 494*b1cdbd2cSJim Jagielski } else { 495*b1cdbd2cSJim Jagielski 496*b1cdbd2cSJim Jagielski //remove all listeners first 497*b1cdbd2cSJim Jagielski for (int i = 0; i < count; i++) { 498*b1cdbd2cSJim Jagielski String propertyName = PTT.constrained.get(i); 499*b1cdbd2cSJim Jagielski try { 500*b1cdbd2cSJim Jagielski oObj.removeVetoableChangeListener(propertyName,VClistener); 501*b1cdbd2cSJim Jagielski } catch (Exception e) { 502*b1cdbd2cSJim Jagielski log.println("Exception occured while removing veto listener from"+ 503*b1cdbd2cSJim Jagielski "property '"+ propertyName+"'"); 504*b1cdbd2cSJim Jagielski e.printStackTrace(log); 505*b1cdbd2cSJim Jagielski } 506*b1cdbd2cSJim Jagielski } 507*b1cdbd2cSJim Jagielski 508*b1cdbd2cSJim Jagielski boolean error = false; 509*b1cdbd2cSJim Jagielski for (int i = 0; i < count; i++) { 510*b1cdbd2cSJim Jagielski String propertyName = PTT.constrained.get(i); 511*b1cdbd2cSJim Jagielski vetoableChanged = false; 512*b1cdbd2cSJim Jagielski try { 513*b1cdbd2cSJim Jagielski oObj.addVetoableChangeListener(propertyName,VClistener); 514*b1cdbd2cSJim Jagielski oObj.removeVetoableChangeListener(propertyName,VClistener); 515*b1cdbd2cSJim Jagielski Object gValue = oObj.getPropertyValue(propertyName); 516*b1cdbd2cSJim Jagielski oObj.setPropertyValue(propertyName, 517*b1cdbd2cSJim Jagielski ValueChanger.changePValue(gValue)); 518*b1cdbd2cSJim Jagielski } catch (com.sun.star.beans.PropertyVetoException e) { 519*b1cdbd2cSJim Jagielski log.println("Exception occured while trying to change "+ 520*b1cdbd2cSJim Jagielski "property '"+ propertyName+"'"); 521*b1cdbd2cSJim Jagielski e.printStackTrace(log); 522*b1cdbd2cSJim Jagielski } catch (com.sun.star.lang.IllegalArgumentException e) { 523*b1cdbd2cSJim Jagielski log.println("Exception occured while trying to change "+ 524*b1cdbd2cSJim Jagielski "property '"+ propertyName+"'"); 525*b1cdbd2cSJim Jagielski e.printStackTrace(log); 526*b1cdbd2cSJim Jagielski } catch (com.sun.star.beans.UnknownPropertyException e) { 527*b1cdbd2cSJim Jagielski log.println("Exception occured while trying to change "+ 528*b1cdbd2cSJim Jagielski "property '"+ propertyName+"'"); 529*b1cdbd2cSJim Jagielski e.printStackTrace(log); 530*b1cdbd2cSJim Jagielski } catch (com.sun.star.lang.WrappedTargetException e) { 531*b1cdbd2cSJim Jagielski log.println("Exception occured while trying to change "+ 532*b1cdbd2cSJim Jagielski "property '"+ propertyName+"'"); 533*b1cdbd2cSJim Jagielski e.printStackTrace(log); 534*b1cdbd2cSJim Jagielski } // end of try-catch 535*b1cdbd2cSJim Jagielski error = error || vetoableChanged; 536*b1cdbd2cSJim Jagielski if (vetoableChanged) { 537*b1cdbd2cSJim Jagielski log.println("vetoableChangeListener was called after "+ 538*b1cdbd2cSJim Jagielski "removing for '"+propertyName+"'"); 539*b1cdbd2cSJim Jagielski } 540*b1cdbd2cSJim Jagielski } 541*b1cdbd2cSJim Jagielski tRes.tested("removeVetoableChangeListener()",!error); 542*b1cdbd2cSJim Jagielski } 543*b1cdbd2cSJim Jagielski 544*b1cdbd2cSJim Jagielski return; 545*b1cdbd2cSJim Jagielski 546*b1cdbd2cSJim Jagielski } // end of removeVetoableChangeListener() 547*b1cdbd2cSJim Jagielski 548*b1cdbd2cSJim Jagielski /** 549*b1cdbd2cSJim Jagielski * Gets the properties being tested. Searches and stores by one 550*b1cdbd2cSJim Jagielski * property of each kind (Bound, Vetoable, Normal). 551*b1cdbd2cSJim Jagielski */ getPropsToTest(XPropertySetInfo xPSI)552*b1cdbd2cSJim Jagielski public void getPropsToTest(XPropertySetInfo xPSI) { 553*b1cdbd2cSJim Jagielski 554*b1cdbd2cSJim Jagielski Property[] properties = xPSI.getProperties(); 555*b1cdbd2cSJim Jagielski // some properties should not be changed in a unspecific way 556*b1cdbd2cSJim Jagielski String[] skip = {"PrinterName", "CharRelief", "IsLayerMode"}; 557*b1cdbd2cSJim Jagielski 558*b1cdbd2cSJim Jagielski for (int i = 0; i < properties.length; i++) { 559*b1cdbd2cSJim Jagielski 560*b1cdbd2cSJim Jagielski Property property = properties[i]; 561*b1cdbd2cSJim Jagielski String name = property.Name; 562*b1cdbd2cSJim Jagielski 563*b1cdbd2cSJim Jagielski boolean cont = false; 564*b1cdbd2cSJim Jagielski for (int j = 0; j < skip.length; j++) { 565*b1cdbd2cSJim Jagielski if (name.equals(skip[j])){ 566*b1cdbd2cSJim Jagielski log.println("skipping '" + name + "'"); 567*b1cdbd2cSJim Jagielski cont = true; 568*b1cdbd2cSJim Jagielski } 569*b1cdbd2cSJim Jagielski } 570*b1cdbd2cSJim Jagielski 571*b1cdbd2cSJim Jagielski if (cont) continue; 572*b1cdbd2cSJim Jagielski 573*b1cdbd2cSJim Jagielski if (name.equals(oObj)) 574*b1cdbd2cSJim Jagielski log.println("Checking '"+name+"'"); 575*b1cdbd2cSJim Jagielski boolean isWritable = ((property.Attributes & 576*b1cdbd2cSJim Jagielski PropertyAttribute.READONLY) == 0); 577*b1cdbd2cSJim Jagielski boolean isNotNull = ((property.Attributes & 578*b1cdbd2cSJim Jagielski PropertyAttribute.MAYBEVOID) == 0); 579*b1cdbd2cSJim Jagielski boolean isBound = ((property.Attributes & 580*b1cdbd2cSJim Jagielski PropertyAttribute.BOUND) != 0); 581*b1cdbd2cSJim Jagielski boolean isConstr = ((property.Attributes & 582*b1cdbd2cSJim Jagielski PropertyAttribute.CONSTRAINED) != 0); 583*b1cdbd2cSJim Jagielski boolean canChange = false; 584*b1cdbd2cSJim Jagielski 585*b1cdbd2cSJim Jagielski if ( !isWritable ) log.println("Property '"+name+"' is READONLY"); 586*b1cdbd2cSJim Jagielski 587*b1cdbd2cSJim Jagielski if (name.endsWith("URL")) isWritable = false; 588*b1cdbd2cSJim Jagielski if (name.startsWith("Fill")) isWritable = false; 589*b1cdbd2cSJim Jagielski if (name.startsWith("Font")) isWritable = false; 590*b1cdbd2cSJim Jagielski if (name.startsWith("IsNumbering")) isWritable = false; 591*b1cdbd2cSJim Jagielski if (name.startsWith("LayerName")) isWritable = false; 592*b1cdbd2cSJim Jagielski if (name.startsWith("Line")) isWritable = false; 593*b1cdbd2cSJim Jagielski if (name.startsWith("TextWriting")) isWritable = false; 594*b1cdbd2cSJim Jagielski 595*b1cdbd2cSJim Jagielski //if (name.equals("xinterfaceA") || name.equals("xtypeproviderA") 596*b1cdbd2cSJim Jagielski //|| name.equals("arAnyA")) isWritable=false; 597*b1cdbd2cSJim Jagielski 598*b1cdbd2cSJim Jagielski if ( isWritable && isNotNull ) canChange = isChangeable(name); 599*b1cdbd2cSJim Jagielski 600*b1cdbd2cSJim Jagielski if ( isWritable && isNotNull && isBound && canChange) { 601*b1cdbd2cSJim Jagielski PTT.bound.add(name); 602*b1cdbd2cSJim Jagielski } 603*b1cdbd2cSJim Jagielski 604*b1cdbd2cSJim Jagielski if ( isWritable && isNotNull && isConstr && canChange) { 605*b1cdbd2cSJim Jagielski PTT.constrained.add(name); 606*b1cdbd2cSJim Jagielski } 607*b1cdbd2cSJim Jagielski 608*b1cdbd2cSJim Jagielski if ( isWritable && isNotNull && canChange) { 609*b1cdbd2cSJim Jagielski PTT.normal.add(name); 610*b1cdbd2cSJim Jagielski } 611*b1cdbd2cSJim Jagielski 612*b1cdbd2cSJim Jagielski 613*b1cdbd2cSJim Jagielski } // endfor 614*b1cdbd2cSJim Jagielski } 615*b1cdbd2cSJim Jagielski isChangeable(String name)616*b1cdbd2cSJim Jagielski public boolean isChangeable(String name) { 617*b1cdbd2cSJim Jagielski boolean hasChanged = false; 618*b1cdbd2cSJim Jagielski try { 619*b1cdbd2cSJim Jagielski Object getProp = oObj.getPropertyValue(name); 620*b1cdbd2cSJim Jagielski log.println("Getting: "+getProp); 621*b1cdbd2cSJim Jagielski if (name.equals("xinterfaceA")) { 622*b1cdbd2cSJim Jagielski System.out.println("drin"); 623*b1cdbd2cSJim Jagielski } 624*b1cdbd2cSJim Jagielski 625*b1cdbd2cSJim Jagielski Object setValue = null; 626*b1cdbd2cSJim Jagielski if (getProp != null) { 627*b1cdbd2cSJim Jagielski if (!utils.isVoid(getProp)) 628*b1cdbd2cSJim Jagielski setValue = ValueChanger.changePValue(getProp); 629*b1cdbd2cSJim Jagielski else log.println("Property '"+name+ 630*b1cdbd2cSJim Jagielski "' is void but MAYBEVOID isn't set"); 631*b1cdbd2cSJim Jagielski } else log.println("Property '"+name+"'is null and can't be changed"); 632*b1cdbd2cSJim Jagielski if (name.equals("LineStyle")) setValue = null; 633*b1cdbd2cSJim Jagielski if (setValue != null) { 634*b1cdbd2cSJim Jagielski log.println("Setting to :"+setValue); 635*b1cdbd2cSJim Jagielski oObj.setPropertyValue(name, setValue); 636*b1cdbd2cSJim Jagielski hasChanged = (! getProp.equals(oObj.getPropertyValue(name))); 637*b1cdbd2cSJim Jagielski } else log.println("Couldn't change Property '"+name+"'"); 638*b1cdbd2cSJim Jagielski } catch (com.sun.star.beans.PropertyVetoException e) { 639*b1cdbd2cSJim Jagielski log.println("'" + name + "' throws exception '" + e + "'"); 640*b1cdbd2cSJim Jagielski e.printStackTrace(log); 641*b1cdbd2cSJim Jagielski } catch (com.sun.star.lang.IllegalArgumentException e) { 642*b1cdbd2cSJim Jagielski log.println("'" + name + "' throws exception '" + e + "'"); 643*b1cdbd2cSJim Jagielski e.printStackTrace(log); 644*b1cdbd2cSJim Jagielski } catch (com.sun.star.beans.UnknownPropertyException e) { 645*b1cdbd2cSJim Jagielski log.println("'" + name + "' throws exception '" + e + "'"); 646*b1cdbd2cSJim Jagielski e.printStackTrace(log); 647*b1cdbd2cSJim Jagielski } catch (com.sun.star.lang.WrappedTargetException e) { 648*b1cdbd2cSJim Jagielski log.println("'" + name + "' throws exception '" + e + "'"); 649*b1cdbd2cSJim Jagielski e.printStackTrace(log); 650*b1cdbd2cSJim Jagielski } catch (com.sun.star.uno.RuntimeException e) { 651*b1cdbd2cSJim Jagielski log.println("'" + name + "' throws exception '" + e + "'"); 652*b1cdbd2cSJim Jagielski e.printStackTrace(log); 653*b1cdbd2cSJim Jagielski } catch (java.lang.ArrayIndexOutOfBoundsException e) { 654*b1cdbd2cSJim Jagielski log.println("'" + name + "' throws exception '" + e + "'"); 655*b1cdbd2cSJim Jagielski e.printStackTrace(log); 656*b1cdbd2cSJim Jagielski } 657*b1cdbd2cSJim Jagielski 658*b1cdbd2cSJim Jagielski return hasChanged; 659*b1cdbd2cSJim Jagielski } 660*b1cdbd2cSJim Jagielski 661*b1cdbd2cSJim Jagielski /** 662*b1cdbd2cSJim Jagielski * Forces environment recreation. 663*b1cdbd2cSJim Jagielski */ after()664*b1cdbd2cSJim Jagielski protected void after() { 665*b1cdbd2cSJim Jagielski disposeEnvironment(); 666*b1cdbd2cSJim Jagielski } 667*b1cdbd2cSJim Jagielski 668*b1cdbd2cSJim Jagielski 669*b1cdbd2cSJim Jagielski } // finish class _XPropertySet 670*b1cdbd2cSJim Jagielski 671