xref: /trunk/main/sc/qa/complex/dataPilot/_XPropertySet.java (revision c64e43daf4d868cd69bdcfc2b096656257af5a06)
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