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