115ab5183SAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 315ab5183SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 415ab5183SAndrew Rist * or more contributor license agreements. See the NOTICE file 515ab5183SAndrew Rist * distributed with this work for additional information 615ab5183SAndrew Rist * regarding copyright ownership. The ASF licenses this file 715ab5183SAndrew Rist * to you under the Apache License, Version 2.0 (the 815ab5183SAndrew Rist * "License"); you may not use this file except in compliance 915ab5183SAndrew Rist * with the License. You may obtain a copy of the License at 10cdf0e10cSrcweir * 1115ab5183SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12cdf0e10cSrcweir * 1315ab5183SAndrew Rist * Unless required by applicable law or agreed to in writing, 1415ab5183SAndrew Rist * software distributed under the License is distributed on an 1515ab5183SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 1615ab5183SAndrew Rist * KIND, either express or implied. See the License for the 1715ab5183SAndrew Rist * specific language governing permissions and limitations 1815ab5183SAndrew Rist * under the License. 19cdf0e10cSrcweir * 2015ab5183SAndrew Rist *************************************************************/ 2115ab5183SAndrew Rist 22cdf0e10cSrcweir package complex.dataPilot; 23cdf0e10cSrcweir 24cdf0e10cSrcweir import com.sun.star.beans.Property; 25cdf0e10cSrcweir import com.sun.star.beans.PropertyAttribute; 26cdf0e10cSrcweir import com.sun.star.beans.PropertyChangeEvent; 27cdf0e10cSrcweir import com.sun.star.beans.XPropertyChangeListener; 28cdf0e10cSrcweir import com.sun.star.beans.XPropertySet; 29cdf0e10cSrcweir import com.sun.star.beans.XPropertySetInfo; 30cdf0e10cSrcweir import com.sun.star.beans.XVetoableChangeListener; 31cdf0e10cSrcweir import com.sun.star.lang.EventObject; 32cdf0e10cSrcweir import java.util.Random; 33cdf0e10cSrcweir import java.util.StringTokenizer; 34cdf0e10cSrcweir import lib.TestParameters; 35cdf0e10cSrcweir // import share.LogWriter; 36cdf0e10cSrcweir //import lib.MultiMethodTest; 37cdf0e10cSrcweir import util.ValueChanger; 38cdf0e10cSrcweir import util.utils; 39cdf0e10cSrcweir 40cdf0e10cSrcweir /** 41cdf0e10cSrcweir * Testing <code>com.sun.star.beans.XPropertySet</code> 42cdf0e10cSrcweir * interface methods : 43cdf0e10cSrcweir * <ul> 44cdf0e10cSrcweir * <li><code>getPropertySetInfo()</code></li> 45cdf0e10cSrcweir * <li><code>setPropertyValue()</code></li> 46cdf0e10cSrcweir * <li><code>getPropertyValue()</code></li> 47cdf0e10cSrcweir * <li><code>addPropertyChangeListener()</code></li> 48cdf0e10cSrcweir * <li><code>removePropertyChangeListener()</code></li> 49cdf0e10cSrcweir * <li><code>addVetoableChangeListener()</code></li> 50cdf0e10cSrcweir * <li><code>removeVetoableChangeListener()</code></li> 51cdf0e10cSrcweir * </ul> 52cdf0e10cSrcweir * @see com.sun.star.beans.XPropertySet 53cdf0e10cSrcweir */ 54cdf0e10cSrcweir public class _XPropertySet { 55cdf0e10cSrcweir 56cdf0e10cSrcweir /** 57*c64e43daSmseidel * The object that is tested. 58cdf0e10cSrcweir */ 59cdf0e10cSrcweir private XPropertySet oObj = null; 60cdf0e10cSrcweir 61cdf0e10cSrcweir /** 62cdf0e10cSrcweir * The test parameters 63cdf0e10cSrcweir */ 64cdf0e10cSrcweir private TestParameters param = null; 65cdf0e10cSrcweir 66cdf0e10cSrcweir /** 67cdf0e10cSrcweir * The log writer 68cdf0e10cSrcweir */ 69cdf0e10cSrcweir // private LogWriter log = null; 70cdf0e10cSrcweir 71cdf0e10cSrcweir /** 72cdf0e10cSrcweir * Flag that indicates change listener was called. 73cdf0e10cSrcweir */ 74cdf0e10cSrcweir boolean propertyChanged = false; 75cdf0e10cSrcweir 76cdf0e10cSrcweir 77cdf0e10cSrcweir /** 78cdf0e10cSrcweir * The own property change listener 79cdf0e10cSrcweir */ 80cdf0e10cSrcweir XPropertyChangeListener PClistener = new MyChangeListener(); 81cdf0e10cSrcweir 82cdf0e10cSrcweir /** 83cdf0e10cSrcweir * Listener that must be called on bound property changing. 84cdf0e10cSrcweir */ 85cdf0e10cSrcweir public class MyChangeListener implements XPropertyChangeListener { 86cdf0e10cSrcweir /** 87cdf0e10cSrcweir * Just set <code>propertyChanged</code> flag to true. 88cdf0e10cSrcweir */ propertyChange(PropertyChangeEvent e)89cdf0e10cSrcweir public void propertyChange(PropertyChangeEvent e) { 90cdf0e10cSrcweir propertyChanged = true; 91cdf0e10cSrcweir } disposing(EventObject obj)92cdf0e10cSrcweir public void disposing (EventObject obj) {} 93cdf0e10cSrcweir }; 94cdf0e10cSrcweir 95cdf0e10cSrcweir 96cdf0e10cSrcweir /** 97cdf0e10cSrcweir * Flag that indicates veto listener was called. 98cdf0e10cSrcweir */ 99cdf0e10cSrcweir boolean vetoableChanged = false; 100cdf0e10cSrcweir 101cdf0e10cSrcweir /** 102cdf0e10cSrcweir * The own vetoable change listener 103cdf0e10cSrcweir */ 104cdf0e10cSrcweir XVetoableChangeListener VClistener = new MyVetoListener(); 105cdf0e10cSrcweir 106cdf0e10cSrcweir /** 107cdf0e10cSrcweir * Listener that must be called on constrained property changing. 108cdf0e10cSrcweir */ 109cdf0e10cSrcweir public class MyVetoListener implements XVetoableChangeListener { 110cdf0e10cSrcweir /** 111cdf0e10cSrcweir * Just set <code>vetoableChanged</code> flag to true. 112cdf0e10cSrcweir */ vetoableChange(PropertyChangeEvent e)113cdf0e10cSrcweir public void vetoableChange(PropertyChangeEvent e) { 114cdf0e10cSrcweir vetoableChanged = true; 115cdf0e10cSrcweir } disposing(EventObject obj)116cdf0e10cSrcweir public void disposing (EventObject obj) {} 117cdf0e10cSrcweir }; 118cdf0e10cSrcweir 119cdf0e10cSrcweir 120cdf0e10cSrcweir /** 121cdf0e10cSrcweir * Properties to test 122cdf0e10cSrcweir */ 123cdf0e10cSrcweir PropsToTest PTT = new PropsToTest(); 124cdf0e10cSrcweir 125cdf0e10cSrcweir /** 126cdf0e10cSrcweir * Structure that collects three properties of each type to test : 127cdf0e10cSrcweir * Constrained, Bound and Normal. 128cdf0e10cSrcweir */ 129cdf0e10cSrcweir public class PropsToTest { 130cdf0e10cSrcweir String constrained = null; 131cdf0e10cSrcweir String bound = null; 132cdf0e10cSrcweir String normal = null; 133cdf0e10cSrcweir } 134cdf0e10cSrcweir 135cdf0e10cSrcweir /** 136cdf0e10cSrcweir * Constructor: gets the object to test, a logger and the test parameters 137cdf0e10cSrcweir * @param xObj The test object 138cdf0e10cSrcweir * @param log A log writer 139cdf0e10cSrcweir * @param param The test parameters 140cdf0e10cSrcweir */ _XPropertySet(XPropertySet xObj , TestParameters param)141cdf0e10cSrcweir public _XPropertySet(XPropertySet xObj/*, LogWriter log*/, TestParameters param) { 142cdf0e10cSrcweir oObj = xObj; 143cdf0e10cSrcweir // this.log = log; 144cdf0e10cSrcweir this.param = param; 145cdf0e10cSrcweir } 146cdf0e10cSrcweir 147cdf0e10cSrcweir /** 148cdf0e10cSrcweir * Tests method <code>getPropertySetInfo</code>. After test completed 149cdf0e10cSrcweir * call {@link #getPropsToTest} method to retrieve different kinds 150cdf0e10cSrcweir * of properties to test then. <p> 151cdf0e10cSrcweir * Has OK status if not null <code>XPropertySetInfo</code> 152cdf0e10cSrcweir * object returned.<p> 153cdf0e10cSrcweir * Since <code>getPropertySetInfo</code> is optional, it may return null, 154cdf0e10cSrcweir * if it is not implemented. This method uses then an object relation 155cdf0e10cSrcweir * <code>PTT</code> (Properties To Test) to determine available properties. 156cdf0e10cSrcweir * All tests for services without <code>getPropertySetInfo</code> must 157cdf0e10cSrcweir * provide this object relation. 158cdf0e10cSrcweir */ _getPropertySetInfo()159cdf0e10cSrcweir public boolean _getPropertySetInfo() { 160cdf0e10cSrcweir XPropertySetInfo propertySetInfo = oObj.getPropertySetInfo(); 161cdf0e10cSrcweir 162cdf0e10cSrcweir if (propertySetInfo == null) { 163cdf0e10cSrcweir System.out.println("getPropertySetInfo() method returned null"); 164cdf0e10cSrcweir String[] ptt = (String[]) param.get("PTT"); 165cdf0e10cSrcweir PTT.normal=ptt[0]; 166cdf0e10cSrcweir PTT.bound=ptt[1]; 167cdf0e10cSrcweir PTT.constrained=ptt[2]; 168cdf0e10cSrcweir } else { 169cdf0e10cSrcweir getPropsToTest(propertySetInfo); 170cdf0e10cSrcweir } 171cdf0e10cSrcweir 172cdf0e10cSrcweir return true; 173cdf0e10cSrcweir 174cdf0e10cSrcweir } // end of getPropertySetInfo() 175cdf0e10cSrcweir 176cdf0e10cSrcweir /** 177cdf0e10cSrcweir * Tests change listener which added for bound properties. 178cdf0e10cSrcweir * Adds listener to bound property (if it exists), then changes 179cdf0e10cSrcweir * its value and check if listener was called. <p> 180cdf0e10cSrcweir * Method tests to be successfully completed before : 181cdf0e10cSrcweir * <ul> 182cdf0e10cSrcweir * <li> <code>getPropertySetInfo</code> : in this method test 183cdf0e10cSrcweir * one of bound properties is retrieved. </li> 184cdf0e10cSrcweir * </ul> <p> 185cdf0e10cSrcweir * Has OK status if NO bound properties exist or if listener 186cdf0e10cSrcweir * was successfully called. 187cdf0e10cSrcweir */ _addPropertyChangeListener()188cdf0e10cSrcweir public boolean _addPropertyChangeListener() { 189cdf0e10cSrcweir 190cdf0e10cSrcweir propertyChanged = false; 191cdf0e10cSrcweir boolean result = true; 192cdf0e10cSrcweir 193cdf0e10cSrcweir if ( PTT.bound.equals("none") ) { 194cdf0e10cSrcweir System.out.println("*** No bound properties found ***"); 195cdf0e10cSrcweir } else { 196cdf0e10cSrcweir try { 197cdf0e10cSrcweir oObj.addPropertyChangeListener(PTT.bound,PClistener); 198cdf0e10cSrcweir Object gValue = oObj.getPropertyValue(PTT.bound); 199cdf0e10cSrcweir oObj.setPropertyValue(PTT.bound, 200cdf0e10cSrcweir ValueChanger.changePValue(gValue)); 201cdf0e10cSrcweir } catch (com.sun.star.beans.PropertyVetoException e) { 20286e1cf34SPedro Giffuni System.out.println("Exception occurred while trying to change "+ 203cdf0e10cSrcweir "property '"+ PTT.bound+"'"); 204cdf0e10cSrcweir e.printStackTrace(); 205cdf0e10cSrcweir } catch (com.sun.star.lang.IllegalArgumentException e) { 20686e1cf34SPedro Giffuni System.out.println("Exception occurred while trying to change "+ 207cdf0e10cSrcweir "property '"+ PTT.bound+"'"); 208cdf0e10cSrcweir e.printStackTrace(); 209cdf0e10cSrcweir } catch (com.sun.star.beans.UnknownPropertyException e) { 21086e1cf34SPedro Giffuni System.out.println("Exception occurred while trying to change "+ 211cdf0e10cSrcweir "property '"+ PTT.bound+"'"); 212cdf0e10cSrcweir e.printStackTrace(); 213cdf0e10cSrcweir } catch (com.sun.star.lang.WrappedTargetException e) { 21486e1cf34SPedro Giffuni System.out.println("Exception occurred while trying to change "+ 215cdf0e10cSrcweir "property '"+ PTT.bound+"'"); 216cdf0e10cSrcweir e.printStackTrace(); 217cdf0e10cSrcweir } // end of try-catch 218cdf0e10cSrcweir result = propertyChanged; 219cdf0e10cSrcweir if (!propertyChanged) { 220cdf0e10cSrcweir System.out.println("propertyChangeListener wasn't called for '"+ 221cdf0e10cSrcweir PTT.bound+"'"); 222cdf0e10cSrcweir } 223cdf0e10cSrcweir } //endif 224cdf0e10cSrcweir 225cdf0e10cSrcweir return result; 226cdf0e10cSrcweir 227cdf0e10cSrcweir } // end of addPropertyChangeListener() 228cdf0e10cSrcweir 229cdf0e10cSrcweir /** 230cdf0e10cSrcweir * Tests vetoable listener which added for constrained properties. 231cdf0e10cSrcweir * Adds listener to constrained property (if it exists), then changes 232cdf0e10cSrcweir * its value and check if listener was called. <p> 233cdf0e10cSrcweir * Method tests to be successfully completed before : 234cdf0e10cSrcweir * <ul> 235cdf0e10cSrcweir * <li> <code>getPropertySetInfo</code> : in this method test 236cdf0e10cSrcweir * one of constrained properties is retrieved. </li> 237cdf0e10cSrcweir * </ul> <p> 238cdf0e10cSrcweir * Has OK status if NO constrained properties exist or if listener 239cdf0e10cSrcweir * was successfully called. 240cdf0e10cSrcweir */ _addVetoableChangeListener()241cdf0e10cSrcweir public boolean _addVetoableChangeListener() { 242cdf0e10cSrcweir 243cdf0e10cSrcweir // requiredMethod("getPropertySetInfo()"); 244cdf0e10cSrcweir 245cdf0e10cSrcweir vetoableChanged = false; 246cdf0e10cSrcweir boolean result = true; 247cdf0e10cSrcweir 248cdf0e10cSrcweir if ( PTT.constrained.equals("none") ) { 249cdf0e10cSrcweir System.out.println("*** No constrained properties found ***"); 250cdf0e10cSrcweir } else { 251cdf0e10cSrcweir try { 252cdf0e10cSrcweir oObj.addVetoableChangeListener(PTT.constrained,VClistener); 253cdf0e10cSrcweir Object gValue = oObj.getPropertyValue(PTT.constrained); 254cdf0e10cSrcweir oObj.setPropertyValue(PTT.constrained, 255cdf0e10cSrcweir ValueChanger.changePValue(gValue)); 256cdf0e10cSrcweir } catch (com.sun.star.beans.PropertyVetoException e) { 25786e1cf34SPedro Giffuni System.out.println("Exception occurred while trying to change "+ 258cdf0e10cSrcweir "property '"+ PTT.constrained+"'"); 259cdf0e10cSrcweir e.printStackTrace(); 260cdf0e10cSrcweir } catch (com.sun.star.lang.IllegalArgumentException e) { 26186e1cf34SPedro Giffuni System.out.println("Exception occurred while trying to change "+ 262cdf0e10cSrcweir "property '"+ PTT.constrained+"'"); 263cdf0e10cSrcweir e.printStackTrace(); 264cdf0e10cSrcweir } catch (com.sun.star.beans.UnknownPropertyException e) { 26586e1cf34SPedro Giffuni System.out.println("Exception occurred while trying to change "+ 266cdf0e10cSrcweir "property '"+ PTT.constrained+"'"); 267cdf0e10cSrcweir e.printStackTrace(); 268cdf0e10cSrcweir } catch (com.sun.star.lang.WrappedTargetException e) { 26986e1cf34SPedro Giffuni System.out.println("Exception occurred while trying to change "+ 270cdf0e10cSrcweir "property '"+ PTT.constrained+"'"); 271cdf0e10cSrcweir e.printStackTrace(); 272cdf0e10cSrcweir } // end of try-catch 273cdf0e10cSrcweir result = vetoableChanged; 274cdf0e10cSrcweir if (!vetoableChanged) { 275cdf0e10cSrcweir System.out.println("vetoableChangeListener wasn't called for '"+ 276cdf0e10cSrcweir PTT.constrained+"'"); 277cdf0e10cSrcweir } 278cdf0e10cSrcweir } //endif 279cdf0e10cSrcweir 280cdf0e10cSrcweir return result; 281cdf0e10cSrcweir 282cdf0e10cSrcweir } // end of addVetoableChangeListener() 283cdf0e10cSrcweir 284cdf0e10cSrcweir 285cdf0e10cSrcweir /** 286cdf0e10cSrcweir * Tests <code>setPropertyValue</code> method. 287cdf0e10cSrcweir * Stores value before call, and compares it with value after 288cdf0e10cSrcweir * call. <p> 289cdf0e10cSrcweir * Method tests to be successfully completed before : 290cdf0e10cSrcweir * <ul> 291cdf0e10cSrcweir * <li> <code>getPropertySetInfo</code> : in this method test 292cdf0e10cSrcweir * one of normal properties is retrieved. </li> 293cdf0e10cSrcweir * </ul> <p> 294cdf0e10cSrcweir * Has OK status if NO normal properties exist or if value before 295cdf0e10cSrcweir * method call is not equal to value after. 296cdf0e10cSrcweir */ _setPropertyValue()297cdf0e10cSrcweir public boolean _setPropertyValue() { 298cdf0e10cSrcweir 299cdf0e10cSrcweir // requiredMethod("getPropertySetInfo()"); 300cdf0e10cSrcweir 301cdf0e10cSrcweir Object gValue = null; 302cdf0e10cSrcweir Object sValue = null; 303cdf0e10cSrcweir 304cdf0e10cSrcweir boolean result = true; 305cdf0e10cSrcweir 306cdf0e10cSrcweir if ( PTT.normal.equals("none") ) { 307cdf0e10cSrcweir System.out.println("*** No changeable properties found ***"); 308cdf0e10cSrcweir } else { 309cdf0e10cSrcweir try { 310cdf0e10cSrcweir gValue = oObj.getPropertyValue(PTT.normal); 311cdf0e10cSrcweir sValue = ValueChanger.changePValue(gValue); 312cdf0e10cSrcweir oObj.setPropertyValue(PTT.normal, sValue); 313cdf0e10cSrcweir sValue = oObj.getPropertyValue(PTT.normal); 314cdf0e10cSrcweir } catch (com.sun.star.beans.PropertyVetoException e) { 31586e1cf34SPedro Giffuni System.out.println("Exception occurred while trying to change "+ 316cdf0e10cSrcweir "property '"+ PTT.normal+"'"); 317cdf0e10cSrcweir e.printStackTrace(); 318cdf0e10cSrcweir } catch (com.sun.star.lang.IllegalArgumentException e) { 31986e1cf34SPedro Giffuni System.out.println("Exception occurred while trying to change "+ 320cdf0e10cSrcweir "property '"+ PTT.normal+"'"); 321cdf0e10cSrcweir e.printStackTrace(); 322cdf0e10cSrcweir } catch (com.sun.star.beans.UnknownPropertyException e) { 32386e1cf34SPedro Giffuni System.out.println("Exception occurred while trying to change "+ 324cdf0e10cSrcweir "property '"+ PTT.normal+"'"); 325cdf0e10cSrcweir e.printStackTrace(); 326cdf0e10cSrcweir } catch (com.sun.star.lang.WrappedTargetException e) { 32786e1cf34SPedro Giffuni System.out.println("Exception occurred while trying to change "+ 328cdf0e10cSrcweir "property '"+ PTT.normal+"'"); 329cdf0e10cSrcweir e.printStackTrace(); 330cdf0e10cSrcweir } // end of try-catch 331cdf0e10cSrcweir result = !gValue.equals(sValue); 332cdf0e10cSrcweir } //endif 333cdf0e10cSrcweir 334cdf0e10cSrcweir return result; 335cdf0e10cSrcweir 336cdf0e10cSrcweir } // end of setPropertyValue() 337cdf0e10cSrcweir 338cdf0e10cSrcweir /** 339cdf0e10cSrcweir * Tests <code>getPropertyValue</code> method. 340cdf0e10cSrcweir * Just call this method and checks for no exceptions <p> 341cdf0e10cSrcweir * Method tests to be successfully completed before : 342cdf0e10cSrcweir * <ul> 343cdf0e10cSrcweir * <li> <code>getPropertySetInfo</code> : in this method test 344cdf0e10cSrcweir * one of normal properties is retrieved. </li> 345cdf0e10cSrcweir * </ul> <p> 346cdf0e10cSrcweir * Has OK status if NO normal properties exist or if no 347cdf0e10cSrcweir * exceptions were thrown. 348cdf0e10cSrcweir */ _getPropertyValue()349cdf0e10cSrcweir public boolean _getPropertyValue() { 350cdf0e10cSrcweir 351cdf0e10cSrcweir // requiredMethod("getPropertySetInfo()"); 352cdf0e10cSrcweir 353cdf0e10cSrcweir boolean result = true; 354cdf0e10cSrcweir String toCheck = PTT.normal; 355cdf0e10cSrcweir 356cdf0e10cSrcweir if ( PTT.normal.equals("none") ) { 357cdf0e10cSrcweir toCheck = oObj.getPropertySetInfo().getProperties()[0].Name; 358cdf0e10cSrcweir System.out.println("All properties are Read Only"); 359cdf0e10cSrcweir System.out.println("Using: "+toCheck); 360cdf0e10cSrcweir } 361cdf0e10cSrcweir 362cdf0e10cSrcweir try { 363cdf0e10cSrcweir Object gValue = oObj.getPropertyValue(toCheck); 364cdf0e10cSrcweir } catch (com.sun.star.beans.UnknownPropertyException e) { 36586e1cf34SPedro Giffuni System.out.println("Exception occurred while trying to get property '"+ 366cdf0e10cSrcweir PTT.normal+"'"); 367cdf0e10cSrcweir e.printStackTrace(); 368cdf0e10cSrcweir result = false; 369cdf0e10cSrcweir } catch (com.sun.star.lang.WrappedTargetException e) { 37086e1cf34SPedro Giffuni System.out.println("Exception occurred while trying to get property '"+ 371cdf0e10cSrcweir PTT.normal+"'"); 372cdf0e10cSrcweir e.printStackTrace(); 373cdf0e10cSrcweir result = false; 374cdf0e10cSrcweir } // end of try-catch 375cdf0e10cSrcweir 376cdf0e10cSrcweir return result; 377cdf0e10cSrcweir } 378cdf0e10cSrcweir 379cdf0e10cSrcweir /** 380cdf0e10cSrcweir * Tests <code>removePropertyChangeListener</code> method. 381cdf0e10cSrcweir * Removes change listener, then changes bound property value 382cdf0e10cSrcweir * and checks if the listener was NOT called. 383cdf0e10cSrcweir * Method tests to be successfully completed before : 384cdf0e10cSrcweir * <ul> 385cdf0e10cSrcweir * <li> <code>addPropertyChangeListener</code> : here listener 386cdf0e10cSrcweir * was added. </li> 387cdf0e10cSrcweir * </ul> <p> 388cdf0e10cSrcweir * Has OK status if NO bound properties exist or if listener 389cdf0e10cSrcweir * was not called and no exceptions arose. 390cdf0e10cSrcweir */ _removePropertyChangeListener()391cdf0e10cSrcweir public boolean _removePropertyChangeListener() { 392cdf0e10cSrcweir 393cdf0e10cSrcweir // requiredMethod("addPropertyChangeListener()"); 394cdf0e10cSrcweir 395cdf0e10cSrcweir propertyChanged = false; 396cdf0e10cSrcweir boolean result = true; 397cdf0e10cSrcweir 398cdf0e10cSrcweir if ( PTT.bound.equals("none") ) { 399cdf0e10cSrcweir System.out.println("*** No bound properties found ***"); 400cdf0e10cSrcweir } else { 401cdf0e10cSrcweir try { 402cdf0e10cSrcweir propertyChanged = false; 403cdf0e10cSrcweir oObj.removePropertyChangeListener(PTT.bound,PClistener); 404cdf0e10cSrcweir Object gValue = oObj.getPropertyValue(PTT.bound); 405cdf0e10cSrcweir oObj.setPropertyValue(PTT.bound, 406cdf0e10cSrcweir ValueChanger.changePValue(gValue)); 407cdf0e10cSrcweir } catch (com.sun.star.beans.PropertyVetoException e) { 40886e1cf34SPedro Giffuni System.out.println("Exception occurred while trying to change "+ 409cdf0e10cSrcweir "property '"+ PTT.bound+"'"); 410cdf0e10cSrcweir e.printStackTrace(); 411cdf0e10cSrcweir } catch (com.sun.star.lang.IllegalArgumentException e) { 41286e1cf34SPedro Giffuni System.out.println("Exception occurred while trying to change "+ 413cdf0e10cSrcweir "property '"+ PTT.bound+"'"); 414cdf0e10cSrcweir e.printStackTrace(); 415cdf0e10cSrcweir } catch (com.sun.star.beans.UnknownPropertyException e) { 41686e1cf34SPedro Giffuni System.out.println("Exception occurred while trying to change "+ 417cdf0e10cSrcweir "property '"+ PTT.bound+"'"); 418cdf0e10cSrcweir e.printStackTrace(); 419cdf0e10cSrcweir } catch (com.sun.star.lang.WrappedTargetException e) { 42086e1cf34SPedro Giffuni System.out.println("Exception occurred while trying to change "+ 421cdf0e10cSrcweir "property '"+ PTT.bound+"'"); 422cdf0e10cSrcweir e.printStackTrace(); 423cdf0e10cSrcweir } // end of try-catch 424cdf0e10cSrcweir 425cdf0e10cSrcweir result = !propertyChanged; 426cdf0e10cSrcweir if (propertyChanged) { 427cdf0e10cSrcweir System.out.println("propertyChangeListener was called after removing"+ 428cdf0e10cSrcweir " for '"+PTT.bound+"'"); 429cdf0e10cSrcweir } 430cdf0e10cSrcweir } //endif 431cdf0e10cSrcweir 432cdf0e10cSrcweir return result; 433cdf0e10cSrcweir 434cdf0e10cSrcweir } // end of removePropertyChangeListener() 435cdf0e10cSrcweir 436cdf0e10cSrcweir 437cdf0e10cSrcweir /** 438cdf0e10cSrcweir * Tests <code>removeVetoableChangeListener</code> method. 439cdf0e10cSrcweir * Removes vetoable listener, then changes constrained property value 440cdf0e10cSrcweir * and checks if the listener was NOT called. 441cdf0e10cSrcweir * Method tests to be successfully completed before : 442cdf0e10cSrcweir * <ul> 443cdf0e10cSrcweir * <li> <code>addPropertyChangeListener</code> : here vetoable listener 444cdf0e10cSrcweir * was added. </li> 445cdf0e10cSrcweir * </ul> <p> 446cdf0e10cSrcweir * Has OK status if NO constrained properties exist or if listener 447cdf0e10cSrcweir * was NOT called and no exceptions arose. 448cdf0e10cSrcweir */ _removeVetoableChangeListener()449cdf0e10cSrcweir public boolean _removeVetoableChangeListener() { 450cdf0e10cSrcweir 451cdf0e10cSrcweir // requiredMethod("addVetoableChangeListener()"); 452cdf0e10cSrcweir 453cdf0e10cSrcweir vetoableChanged = false; 454cdf0e10cSrcweir boolean result = true; 455cdf0e10cSrcweir 456cdf0e10cSrcweir if ( PTT.constrained.equals("none") ) { 457cdf0e10cSrcweir System.out.println("*** No constrained properties found ***"); 458cdf0e10cSrcweir } else { 459cdf0e10cSrcweir try { 460cdf0e10cSrcweir oObj.removeVetoableChangeListener(PTT.constrained,VClistener); 461cdf0e10cSrcweir Object gValue = oObj.getPropertyValue(PTT.constrained); 462cdf0e10cSrcweir oObj.setPropertyValue(PTT.constrained, 463cdf0e10cSrcweir ValueChanger.changePValue(gValue)); 464cdf0e10cSrcweir } catch (com.sun.star.beans.PropertyVetoException e) { 46586e1cf34SPedro Giffuni System.out.println("Exception occurred while trying to change "+ 466cdf0e10cSrcweir "property '"+ PTT.constrained+"'"); 467cdf0e10cSrcweir e.printStackTrace(); 468cdf0e10cSrcweir } catch (com.sun.star.lang.IllegalArgumentException e) { 46986e1cf34SPedro Giffuni System.out.println("Exception occurred while trying to change "+ 470cdf0e10cSrcweir "property '"+ PTT.constrained+"'"); 471cdf0e10cSrcweir e.printStackTrace(); 472cdf0e10cSrcweir } catch (com.sun.star.beans.UnknownPropertyException e) { 47386e1cf34SPedro Giffuni System.out.println("Exception occurred while trying to change "+ 474cdf0e10cSrcweir "property '"+ PTT.constrained+"'"); 475cdf0e10cSrcweir e.printStackTrace(); 476cdf0e10cSrcweir } catch (com.sun.star.lang.WrappedTargetException e) { 47786e1cf34SPedro Giffuni System.out.println("Exception occurred while trying to change "+ 478cdf0e10cSrcweir "property '"+ PTT.constrained+"'"); 479cdf0e10cSrcweir e.printStackTrace(); 480cdf0e10cSrcweir } // end of try-catch 481cdf0e10cSrcweir 482cdf0e10cSrcweir result = !vetoableChanged; 483cdf0e10cSrcweir if (vetoableChanged) { 484cdf0e10cSrcweir System.out.println("vetoableChangeListener was called after "+ 485cdf0e10cSrcweir "removing for '"+PTT.constrained+"'"); 486cdf0e10cSrcweir } 487cdf0e10cSrcweir } //endif 488cdf0e10cSrcweir 489cdf0e10cSrcweir return result; 490cdf0e10cSrcweir 491cdf0e10cSrcweir } // end of removeVetoableChangeListener() 492cdf0e10cSrcweir 493cdf0e10cSrcweir 494cdf0e10cSrcweir /** 495cdf0e10cSrcweir * Gets the properties being tested. Searches and stores by one 496cdf0e10cSrcweir * property of each kind (Bound, Vetoable, Normal). 497cdf0e10cSrcweir */ getPropsToTest(XPropertySetInfo xPSI)498cdf0e10cSrcweir public PropsToTest getPropsToTest(XPropertySetInfo xPSI) { 499cdf0e10cSrcweir 500cdf0e10cSrcweir Property[] properties = xPSI.getProperties(); 501cdf0e10cSrcweir String bound = ""; 502cdf0e10cSrcweir String constrained = ""; 503cdf0e10cSrcweir String normal = ""; 504cdf0e10cSrcweir 505cdf0e10cSrcweir for (int i = 0; i < properties.length; i++) { 506cdf0e10cSrcweir 507cdf0e10cSrcweir Property property = properties[i]; 508cdf0e10cSrcweir String name = property.Name; 509cdf0e10cSrcweir System.out.println("Checking '"+name+"'"); 510cdf0e10cSrcweir boolean isWritable = ((property.Attributes & 511cdf0e10cSrcweir PropertyAttribute.READONLY) == 0); 512cdf0e10cSrcweir boolean isNotNull = ((property.Attributes & 513cdf0e10cSrcweir PropertyAttribute.MAYBEVOID) == 0); 514cdf0e10cSrcweir boolean isBound = ((property.Attributes & 515cdf0e10cSrcweir PropertyAttribute.BOUND) != 0); 516cdf0e10cSrcweir boolean isConstr = ((property.Attributes & 517cdf0e10cSrcweir PropertyAttribute.CONSTRAINED) != 0); 518cdf0e10cSrcweir boolean canChange = false; 519cdf0e10cSrcweir 520cdf0e10cSrcweir if ( !isWritable ) System.out.println("Property '"+name+"' is READONLY"); 521cdf0e10cSrcweir 522cdf0e10cSrcweir if (name.endsWith("URL")) isWritable = false; 523cdf0e10cSrcweir if (name.startsWith("Fill")) isWritable = false; 524cdf0e10cSrcweir if (name.startsWith("Font")) isWritable = false; 525cdf0e10cSrcweir if (name.startsWith("IsNumbering")) isWritable = false; 526cdf0e10cSrcweir if (name.startsWith("LayerName")) isWritable = false; 527cdf0e10cSrcweir if (name.startsWith("Line")) isWritable = false; 528cdf0e10cSrcweir 529cdf0e10cSrcweir //if (name.equals("xinterfaceA") || name.equals("xtypeproviderA") 530cdf0e10cSrcweir //|| name.equals("arAnyA")) isWritable=false; 531cdf0e10cSrcweir 532cdf0e10cSrcweir if ( isWritable && isNotNull ) canChange = isChangeable(name); 533cdf0e10cSrcweir 534cdf0e10cSrcweir if ( isWritable && isNotNull && isBound && canChange) { 535cdf0e10cSrcweir bound+=name+";"; 536cdf0e10cSrcweir } 537cdf0e10cSrcweir 538cdf0e10cSrcweir if ( isWritable && isNotNull && isConstr && canChange) { 539cdf0e10cSrcweir constrained+=name+";"; 540cdf0e10cSrcweir } 541cdf0e10cSrcweir 542cdf0e10cSrcweir if ( isWritable && isNotNull && canChange) normal+=name+";"; 543cdf0e10cSrcweir 544cdf0e10cSrcweir 545cdf0e10cSrcweir } // endfor 546cdf0e10cSrcweir 547cdf0e10cSrcweir //get a random bound property 548cdf0e10cSrcweir PTT.bound=getRandomString(bound); 549cdf0e10cSrcweir System.out.println("Bound: "+PTT.bound); 550cdf0e10cSrcweir 551cdf0e10cSrcweir //get a random constrained property 552cdf0e10cSrcweir PTT.constrained=getRandomString(constrained); 553cdf0e10cSrcweir System.out.println("Constrained: "+PTT.constrained); 554cdf0e10cSrcweir 555cdf0e10cSrcweir //get a random normal property 556cdf0e10cSrcweir PTT.normal=getRandomString(normal); 557cdf0e10cSrcweir 558cdf0e10cSrcweir return PTT; 559cdf0e10cSrcweir 560cdf0e10cSrcweir } 561cdf0e10cSrcweir 562cdf0e10cSrcweir /** 563cdf0e10cSrcweir * Retrieves one random property name from list (property names separated 564cdf0e10cSrcweir * by ';') of property names. 565cdf0e10cSrcweir */ getRandomString(String str)566cdf0e10cSrcweir public String getRandomString(String str) { 567cdf0e10cSrcweir 568cdf0e10cSrcweir String gRS = "none"; 569cdf0e10cSrcweir Random rnd = new Random(); 570cdf0e10cSrcweir 571cdf0e10cSrcweir if (str.equals("")) str = "none"; 572cdf0e10cSrcweir StringTokenizer ST=new StringTokenizer(str,";"); 573cdf0e10cSrcweir int nr = rnd.nextInt(ST.countTokens()); 574cdf0e10cSrcweir if (nr < 1) nr+=1; 575cdf0e10cSrcweir for (int i=1; i<nr+1; i++) gRS = ST.nextToken(); 576cdf0e10cSrcweir 577cdf0e10cSrcweir return gRS; 578cdf0e10cSrcweir 579cdf0e10cSrcweir } 580cdf0e10cSrcweir isChangeable(String name)581cdf0e10cSrcweir public boolean isChangeable(String name) { 582cdf0e10cSrcweir boolean hasChanged = false; 583cdf0e10cSrcweir try { 584cdf0e10cSrcweir Object getProp = oObj.getPropertyValue(name); 585cdf0e10cSrcweir System.out.println("Getting: "+getProp); 586cdf0e10cSrcweir 587cdf0e10cSrcweir Object setValue = null; 588cdf0e10cSrcweir if (getProp != null) { 589cdf0e10cSrcweir if (!utils.isVoid(getProp)) 590cdf0e10cSrcweir setValue = ValueChanger.changePValue(getProp); 591cdf0e10cSrcweir else System.out.println("Property '"+name+ 592cdf0e10cSrcweir "' is void but MAYBEVOID isn't set"); 593cdf0e10cSrcweir } else System.out.println("Property '"+name+"'is null and can't be changed"); 594cdf0e10cSrcweir if (name.equals("LineStyle")) setValue = null; 595cdf0e10cSrcweir if (setValue != null) { 596cdf0e10cSrcweir oObj.setPropertyValue(name, setValue); 597cdf0e10cSrcweir System.out.println("Setting to :"+setValue); 598cdf0e10cSrcweir hasChanged = (! getProp.equals(oObj.getPropertyValue(name))); 599cdf0e10cSrcweir } else System.out.println("Couldn't change Property '"+name+"'"); 600cdf0e10cSrcweir } catch (com.sun.star.beans.PropertyVetoException e) { 601cdf0e10cSrcweir System.out.println("'" + name + "' throws exception '" + e + "'"); 602cdf0e10cSrcweir e.printStackTrace(); 603cdf0e10cSrcweir } catch (com.sun.star.lang.IllegalArgumentException e) { 604cdf0e10cSrcweir System.out.println("'" + name + "' throws exception '" + e + "'"); 605cdf0e10cSrcweir e.printStackTrace(); 606cdf0e10cSrcweir } catch (com.sun.star.beans.UnknownPropertyException e) { 607cdf0e10cSrcweir System.out.println("'" + name + "' throws exception '" + e + "'"); 608cdf0e10cSrcweir e.printStackTrace(); 609cdf0e10cSrcweir } catch (com.sun.star.lang.WrappedTargetException e) { 610cdf0e10cSrcweir System.out.println("'" + name + "' throws exception '" + e + "'"); 611cdf0e10cSrcweir e.printStackTrace(); 612cdf0e10cSrcweir } catch (com.sun.star.uno.RuntimeException e) { 613cdf0e10cSrcweir System.out.println("'" + name + "' throws exception '" + e + "'"); 614cdf0e10cSrcweir e.printStackTrace(); 615cdf0e10cSrcweir } catch (java.lang.ArrayIndexOutOfBoundsException e) { 616cdf0e10cSrcweir System.out.println("'" + name + "' throws exception '" + e + "'"); 617cdf0e10cSrcweir e.printStackTrace(); 618cdf0e10cSrcweir } 619cdf0e10cSrcweir 620cdf0e10cSrcweir return hasChanged; 621cdf0e10cSrcweir } 622cdf0e10cSrcweir 623cdf0e10cSrcweir 624cdf0e10cSrcweir } // finish class _XPropertySet 625