1*ef39d40dSAndrew Rist /**************************************************************
2*ef39d40dSAndrew Rist  *
3*ef39d40dSAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*ef39d40dSAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*ef39d40dSAndrew Rist  * distributed with this work for additional information
6*ef39d40dSAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*ef39d40dSAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*ef39d40dSAndrew Rist  * "License"); you may not use this file except in compliance
9*ef39d40dSAndrew Rist  * with the License.  You may obtain a copy of the License at
10*ef39d40dSAndrew Rist  *
11*ef39d40dSAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12*ef39d40dSAndrew Rist  *
13*ef39d40dSAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*ef39d40dSAndrew Rist  * software distributed under the License is distributed on an
15*ef39d40dSAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*ef39d40dSAndrew Rist  * KIND, either express or implied.  See the License for the
17*ef39d40dSAndrew Rist  * specific language governing permissions and limitations
18*ef39d40dSAndrew Rist  * under the License.
19*ef39d40dSAndrew Rist  *
20*ef39d40dSAndrew Rist  *************************************************************/
21*ef39d40dSAndrew Rist 
22cdf0e10cSrcweir package helper;
23cdf0e10cSrcweir 
24cdf0e10cSrcweir import com.sun.star.uno.*;
25cdf0e10cSrcweir import com.sun.star.lang.*;
26cdf0e10cSrcweir import com.sun.star.container.*;
27cdf0e10cSrcweir import com.sun.star.beans.*;
28cdf0e10cSrcweir import com.sun.star.util.*;
29cdf0e10cSrcweir 
30cdf0e10cSrcweir /**
31cdf0e10cSrcweir  * This <CODE>ConfigHelper</CODE> makes it possible to access the
32cdf0e10cSrcweir  * configuration and change their content.<P>
33cdf0e10cSrcweir  * <P>
34cdf0e10cSrcweir  * Example: <P>
35cdf0e10cSrcweir  * Listing of the <CODE>Configuration</CODE> Views.xcu:<P>
36cdf0e10cSrcweir  * &lt;oor:component-data xmlns:oor=&quot;http://openoffice.org/2001/registry&quot; xmlns:xs=&quot;http://www.w3.org/2001/XMLSchema&quot; oor:name=&quot;Views&quot; oor:package=&quot;org.openoffice.Office&quot;&gt;<p>
37cdf0e10cSrcweir  *   &lt;node oor:name=&quot;Windows&quot;&gt;<P>
38cdf0e10cSrcweir  *       <&lt;node oor:name=&quot;SplitWindow0&quot; oor:op=&quot;replace&quot;&gt;<P>
39cdf0e10cSrcweir  *           &lt;prop oor:name=&quot;Visible&quot; oor:type=&quot;xs:boolean&quot;&gt;<P>
40cdf0e10cSrcweir  *                &lt;value&gt;false&lt;/value&gt;<P>
41cdf0e10cSrcweir  *           &lt;/prop&gt;<P>
42cdf0e10cSrcweir  *           &lt;prop oor:name=&quot;WindowState&quot; oor:type=&quot;xs:string&quot;&gt;<P>
43cdf0e10cSrcweir  *               &lt;value/&gt;<P>
44cdf0e10cSrcweir  *           &lt;/prop&gt;<P>
45cdf0e10cSrcweir  *            &lt;node oor:name=&quot;UserData&quot;&gt;<P>
46cdf0e10cSrcweir  *               &lt;prop oor:name=&quot;UserItem&quot; oor:op=&quot;replace&quot;
47cdf0e10cSrcweir  *                oor:type=&quot;xs:string&quot;&gt;<P>
48cdf0e10cSrcweir  *                   &lt;value&gt;V1,2,0&lt;/value&gt;<P>
49cdf0e10cSrcweir  *               &lt;/prop&gt;<P>
50cdf0e10cSrcweir  *           &lt;/node&gt;<P>
51cdf0e10cSrcweir  *        &lt;/node&gt;<P>
52cdf0e10cSrcweir  *  &lt;/node&gt;<P>
53cdf0e10cSrcweir  * <P>
54cdf0e10cSrcweir  * <CODE>Definition</CODE><P>
55cdf0e10cSrcweir  * <ul>
56cdf0e10cSrcweir  *    <li><CODE>&lt;node oor:name=&quot;Windows&quot;&gt;</CODE>
57cdf0e10cSrcweir  *        represents a <CODE>Set</CODE> and is a <CODE>XNameContainer</CODE></LI>
58cdf0e10cSrcweir  *    <li><CODE>&lt;node oor:name=&quot;SplitWindow0&quot;&gt;</CODE>
59cdf0e10cSrcweir  *        represents a <CODE>Group</CODE> and is a <CODE>XNameReplace</CODE></LI>
60cdf0e10cSrcweir  *    <li><CODE>&lt;prop oor:name=&quot;Visible&quot;&gt;</CODE>
61cdf0e10cSrcweir  *        represents a pr<CODE></CODE>operty of the group</li>
62cdf0e10cSrcweir  *    <li><CODE>&lt;node oor:name=&quot;UserData&quot;&gt;</CODE>
63cdf0e10cSrcweir  *        represents a <CODE>extensible group</CODE> and is a <CODE>XNameContainer</CODE></LI>
64cdf0e10cSrcweir  *    <li><CODE>&lt;prop oor:name=&quot;UserItem&quot;&gt;</CODE>
65cdf0e10cSrcweir  *        represents a <CODE>property</CODE> of the extensible group</LI>
66cdf0e10cSrcweir  * </UL>
67cdf0e10cSrcweir  * We assume in the following examples the existance of:<P>
68cdf0e10cSrcweir  * <CODE>ConfigHelper aConfig = new ConfigHelper(xMSF, "org.openoffice.Office.Views", false);</CODE>
69cdf0e10cSrcweir  * <ul>
70cdf0e10cSrcweir  *    <li>If you like to insert a new <CODE>Group</CODE> into the <CODE>Set</CODE> "Windows":<p>
71cdf0e10cSrcweir  *        <CODE>XNameReplace xMyGroup = aConfig.getOrInsertGroup("Windows", "myGroup");</CODE><P>
72cdf0e10cSrcweir  *        The method <CODE>getOrInsertGroup()</CODE> uses the
73cdf0e10cSrcweir  *        <CODE>XSingleServiceFactory</CODE> to create the skeleton of a new group.
74cdf0e10cSrcweir  *
75cdf0e10cSrcweir  *    </li>
76cdf0e10cSrcweir  *    <li>If you like to change the property "WindowState" of "myGroup"
77cdf0e10cSrcweir  *        of the Set "Windows"<p>
78cdf0e10cSrcweir  *        <CODE>aConfig.updateGroupProperty(
79cdf0e10cSrcweir  *          "Windows","myGroup", "WindowState", "952,180,244,349;1;0,0,0,0;");</CODE>
80cdf0e10cSrcweir  *    </li>
81cdf0e10cSrcweir  *    <li>If you like to change the property "myProp" of the extensible group
82cdf0e10cSrcweir  *        "myExtGroup" which is an extensible group of "my2ndGroup" of the
83cdf0e10cSrcweir  *        Set "Windows":<p>
84cdf0e10cSrcweir  *        <CODE>aConfig.insertOrUpdateExtensibleGroupProperty(
85cdf0e10cSrcweir  *              "Windows", "my2ndGroup", "myExtGroup", "myProp","TheValue");</CODE>
86cdf0e10cSrcweir  *    </li>
87cdf0e10cSrcweir  * </ul>
88cdf0e10cSrcweir  */
89cdf0e10cSrcweir public class ConfigHelper
90cdf0e10cSrcweir {
91cdf0e10cSrcweir     private XMultiServiceFactory m_xSMGR = null;
92cdf0e10cSrcweir     private XHierarchicalNameAccess m_xConfig = null;
93cdf0e10cSrcweir 
94cdf0e10cSrcweir     //-----------------------------------------------
ConfigHelper(XMultiServiceFactory xSMGR , String sConfigPath , boolean bReadOnly )95cdf0e10cSrcweir     public ConfigHelper(XMultiServiceFactory xSMGR       ,
96cdf0e10cSrcweir                         String               sConfigPath ,
97cdf0e10cSrcweir                         boolean              bReadOnly   )
98cdf0e10cSrcweir         throws com.sun.star.uno.Exception
99cdf0e10cSrcweir     {
100cdf0e10cSrcweir         m_xSMGR = xSMGR;
101cdf0e10cSrcweir 
102cdf0e10cSrcweir         XMultiServiceFactory xConfigRoot = (XMultiServiceFactory)
103cdf0e10cSrcweir                         UnoRuntime.queryInterface(
104cdf0e10cSrcweir                         XMultiServiceFactory.class,
105cdf0e10cSrcweir                         m_xSMGR.createInstance(
106cdf0e10cSrcweir                         "com.sun.star.configuration.ConfigurationProvider"));
107cdf0e10cSrcweir 
108cdf0e10cSrcweir         PropertyValue[] lParams = new PropertyValue[1];
109cdf0e10cSrcweir         lParams[0] = new PropertyValue();
110cdf0e10cSrcweir         lParams[0].Name  = "nodepath";
111cdf0e10cSrcweir         lParams[0].Value = sConfigPath;
112cdf0e10cSrcweir 
113cdf0e10cSrcweir         Object aConfig;
114cdf0e10cSrcweir         if (bReadOnly)
115cdf0e10cSrcweir             aConfig = xConfigRoot.createInstanceWithArguments(
116cdf0e10cSrcweir                             "com.sun.star.configuration.ConfigurationAccess",
117cdf0e10cSrcweir                             lParams);
118cdf0e10cSrcweir         else
119cdf0e10cSrcweir             aConfig = xConfigRoot.createInstanceWithArguments(
120cdf0e10cSrcweir                             "com.sun.star.configuration.ConfigurationUpdateAccess",
121cdf0e10cSrcweir                             lParams);
122cdf0e10cSrcweir 
123cdf0e10cSrcweir         m_xConfig = (XHierarchicalNameAccess)UnoRuntime.queryInterface(
124cdf0e10cSrcweir                             XHierarchicalNameAccess.class,
125cdf0e10cSrcweir                             aConfig);
126cdf0e10cSrcweir 
127cdf0e10cSrcweir         if (m_xConfig == null)
128cdf0e10cSrcweir             throw new com.sun.star.uno.Exception("Could not open configuration \""+sConfigPath+"\"");
129cdf0e10cSrcweir     }
130cdf0e10cSrcweir 
131cdf0e10cSrcweir     //-----------------------------------------------
readRelativeKey(String sRelPath, String sKey )132cdf0e10cSrcweir     public Object readRelativeKey(String sRelPath,
133cdf0e10cSrcweir                                   String sKey    )
134cdf0e10cSrcweir         throws com.sun.star.container.NoSuchElementException
135cdf0e10cSrcweir     {
136cdf0e10cSrcweir         try
137cdf0e10cSrcweir         {
138cdf0e10cSrcweir             XPropertySet xPath = (XPropertySet)UnoRuntime.queryInterface(
139cdf0e10cSrcweir                                     XPropertySet.class,
140cdf0e10cSrcweir                                     m_xConfig.getByHierarchicalName(sRelPath));
141cdf0e10cSrcweir             return xPath.getPropertyValue(sKey);
142cdf0e10cSrcweir         }
143cdf0e10cSrcweir         catch(com.sun.star.uno.Exception ex)
144cdf0e10cSrcweir         {
145cdf0e10cSrcweir             throw new com.sun.star.container.NoSuchElementException(ex.getMessage());
146cdf0e10cSrcweir         }
147cdf0e10cSrcweir     }
148cdf0e10cSrcweir 
149cdf0e10cSrcweir     //-----------------------------------------------
writeRelativeKey(String sRelPath, String sKey , Object aValue )150cdf0e10cSrcweir     public void writeRelativeKey(String sRelPath,
151cdf0e10cSrcweir                                  String sKey    ,
152cdf0e10cSrcweir                                  Object aValue  )
153cdf0e10cSrcweir         throws com.sun.star.container.NoSuchElementException
154cdf0e10cSrcweir     {
155cdf0e10cSrcweir         try
156cdf0e10cSrcweir         {
157cdf0e10cSrcweir             XPropertySet xPath = (XPropertySet)UnoRuntime.queryInterface(
158cdf0e10cSrcweir                                     XPropertySet.class,
159cdf0e10cSrcweir                                     m_xConfig.getByHierarchicalName(sRelPath));
160cdf0e10cSrcweir             xPath.setPropertyValue(sKey, aValue);
161cdf0e10cSrcweir         }
162cdf0e10cSrcweir         catch(com.sun.star.uno.Exception ex)
163cdf0e10cSrcweir         {
164cdf0e10cSrcweir             throw new com.sun.star.container.NoSuchElementException(ex.getMessage());
165cdf0e10cSrcweir         }
166cdf0e10cSrcweir     }
167cdf0e10cSrcweir 
168cdf0e10cSrcweir     //-----------------------------------------------
169cdf0e10cSrcweir     /**
170cdf0e10cSrcweir      * Updates the configuration.<p>
171cdf0e10cSrcweir      * This must be called after you have changed the configuration
172cdf0e10cSrcweir      * else you changes will be lost.
173cdf0e10cSrcweir      */
flush()174cdf0e10cSrcweir     public void flush()
175cdf0e10cSrcweir     {
176cdf0e10cSrcweir         try
177cdf0e10cSrcweir         {
178cdf0e10cSrcweir             XChangesBatch xBatch = (XChangesBatch)UnoRuntime.queryInterface(
179cdf0e10cSrcweir                                         XChangesBatch.class,
180cdf0e10cSrcweir                                         m_xConfig);
181cdf0e10cSrcweir             xBatch.commitChanges();
182cdf0e10cSrcweir         }
183cdf0e10cSrcweir         catch(com.sun.star.uno.Exception ex)
184cdf0e10cSrcweir         {}
185cdf0e10cSrcweir     }
186cdf0e10cSrcweir 
187cdf0e10cSrcweir     //-----------------------------------------------
readDirectKey(XMultiServiceFactory xSMGR , String sConfigFile, String sRelPath , String sKey )188cdf0e10cSrcweir     public static Object readDirectKey(XMultiServiceFactory xSMGR      ,
189cdf0e10cSrcweir                                        String               sConfigFile,
190cdf0e10cSrcweir                                        String               sRelPath   ,
191cdf0e10cSrcweir                                        String               sKey       )
192cdf0e10cSrcweir         throws com.sun.star.uno.Exception
193cdf0e10cSrcweir     {
194cdf0e10cSrcweir         ConfigHelper aConfig = new ConfigHelper(xSMGR, sConfigFile, true);
195cdf0e10cSrcweir         return aConfig.readRelativeKey(sRelPath, sKey);
196cdf0e10cSrcweir     }
197cdf0e10cSrcweir 
198cdf0e10cSrcweir     //-----------------------------------------------
writeDirectKey(XMultiServiceFactory xSMGR , String sConfigFile, String sRelPath , String sKey , Object aValue )199cdf0e10cSrcweir     public static void writeDirectKey(XMultiServiceFactory xSMGR      ,
200cdf0e10cSrcweir                                       String               sConfigFile,
201cdf0e10cSrcweir                                       String               sRelPath   ,
202cdf0e10cSrcweir                                       String               sKey       ,
203cdf0e10cSrcweir                                       Object               aValue     )
204cdf0e10cSrcweir         throws com.sun.star.uno.Exception
205cdf0e10cSrcweir     {
206cdf0e10cSrcweir         ConfigHelper aConfig = new ConfigHelper(xSMGR, sConfigFile, false);
207cdf0e10cSrcweir         aConfig.writeRelativeKey(sRelPath, sKey, aValue);
208cdf0e10cSrcweir         aConfig.flush();
209cdf0e10cSrcweir     }
210cdf0e10cSrcweir 
211cdf0e10cSrcweir 
212cdf0e10cSrcweir     /**
213cdf0e10cSrcweir      * Insert a structured node (group) in a name container (set)
214cdf0e10cSrcweir      * or else update it and retrun the <CODE>XNameReplace</CODE> of it.<P>
215cdf0e10cSrcweir      * The <CODE>XSingleServiceFacttory</CODE> of the <CODE>set</CODE> will be used
216cdf0e10cSrcweir      * to create a new group. This group is specific to its set and
217cdf0e10cSrcweir      * creates defined entries.
218cdf0e10cSrcweir      * @return The [inserted] group of the set
219cdf0e10cSrcweir      * @param groupName The name of the goup which should be returned
220cdf0e10cSrcweir      * @param setName The name of the set
221cdf0e10cSrcweir      * @throws com.sun.star.uno.Exception throws
222cdf0e10cSrcweir      *         <CODE>com.sun.star.uno.Exeception</CODE> on any error.
223cdf0e10cSrcweir      */
getOrInsertGroup(String setName, String groupName)224cdf0e10cSrcweir     public XNameReplace getOrInsertGroup(String setName, String groupName)
225cdf0e10cSrcweir         throws  com.sun.star.uno.Exception
226cdf0e10cSrcweir 
227cdf0e10cSrcweir     {
228cdf0e10cSrcweir         XNameContainer xSetCont = this.getSet(setName);
229cdf0e10cSrcweir 
230cdf0e10cSrcweir         XNameReplace xChildAccess = null;
231cdf0e10cSrcweir 
232cdf0e10cSrcweir         try {
233cdf0e10cSrcweir             Object xChild=xSetCont.getByName(groupName);
234cdf0e10cSrcweir             xChildAccess = (XNameReplace) UnoRuntime.queryInterface(
235cdf0e10cSrcweir                             XNameReplace.class,xSetCont);
236cdf0e10cSrcweir         } catch(com.sun.star.container.NoSuchElementException e) {
237cdf0e10cSrcweir              // proceed with inserting
238cdf0e10cSrcweir         }
239cdf0e10cSrcweir 
240cdf0e10cSrcweir         if (xChildAccess == null)  {
241cdf0e10cSrcweir             XSingleServiceFactory xChildfactory = (XSingleServiceFactory)
242cdf0e10cSrcweir                 UnoRuntime.queryInterface(XSingleServiceFactory.class,xSetCont);
243cdf0e10cSrcweir 
244cdf0e10cSrcweir             Object xNewChild = xChildfactory.createInstance();
245cdf0e10cSrcweir 
246cdf0e10cSrcweir             xSetCont.insertByName(groupName, xNewChild);
247cdf0e10cSrcweir 
248cdf0e10cSrcweir             xChildAccess = (XNameReplace)
249cdf0e10cSrcweir                 UnoRuntime.queryInterface(XNameContainer.class,xNewChild);
250cdf0e10cSrcweir        }
251cdf0e10cSrcweir 
252cdf0e10cSrcweir         return xChildAccess;
253cdf0e10cSrcweir     }
254cdf0e10cSrcweir 
255cdf0e10cSrcweir      /**
256cdf0e10cSrcweir      * Update a property of a group container of a set container
257cdf0e10cSrcweir      * @param setName the name of the <CODE>set</CODE> which containes the <CODE>group</CODE>
258cdf0e10cSrcweir      * @param groupName the name of the <CODE>group</CODE> which property should be changed
259cdf0e10cSrcweir      * @param propName the name of the property which should be changed
260cdf0e10cSrcweir      * @param propValue the value the property should get
261cdf0e10cSrcweir      * @throws com.sun.star.uno.Exception throws <CODE>com.sun.star.uno.Exeception</CODE> on any error.
262cdf0e10cSrcweir      */
updateGroupProperty(String setName, String groupName, String propName, Object propValue)263cdf0e10cSrcweir     public void updateGroupProperty(String setName,
264cdf0e10cSrcweir                                     String groupName,
265cdf0e10cSrcweir                                     String propName,
266cdf0e10cSrcweir                                     Object propValue)
267cdf0e10cSrcweir         throws  com.sun.star.uno.Exception
268cdf0e10cSrcweir     {
269cdf0e10cSrcweir         XNameContainer xSetCont = this.getSet(setName);
270cdf0e10cSrcweir 
271cdf0e10cSrcweir         XPropertySet xProp = null;
272cdf0e10cSrcweir         try {
273cdf0e10cSrcweir         xProp = (XPropertySet)UnoRuntime.queryInterface(
274cdf0e10cSrcweir                                     XPropertySet.class,
275cdf0e10cSrcweir                                     xSetCont.getByName(groupName));
276cdf0e10cSrcweir         } catch (com.sun.star.container.NoSuchElementException e){
277cdf0e10cSrcweir             throw new com.sun.star.uno.Exception(
278cdf0e10cSrcweir                 "could not get group '" + groupName +
279cdf0e10cSrcweir                "' from set '"+ setName +"':\n" + e.toString());
280cdf0e10cSrcweir         }
281cdf0e10cSrcweir         try{
282cdf0e10cSrcweir             xProp.setPropertyValue(propName, propValue);
283cdf0e10cSrcweir         } catch (com.sun.star.uno.Exception e) {
284cdf0e10cSrcweir              throw new com.sun.star.uno.Exception(
285cdf0e10cSrcweir                 "could not set property '" + propName +
286cdf0e10cSrcweir                 "' from group '"+ groupName +
287cdf0e10cSrcweir                 "' from set '"+ setName +"':\n" + e.toString());
288cdf0e10cSrcweir         }
289cdf0e10cSrcweir     }
290cdf0e10cSrcweir 
291cdf0e10cSrcweir 
292cdf0e10cSrcweir     /**
293cdf0e10cSrcweir      * Insert a property in an extensible group container or else update it
294cdf0e10cSrcweir      * @param setName the name of the <CODE>set</CODE> which containes the <CODE>group</CODE>
295cdf0e10cSrcweir      * @param group The name of the <CODE>group</CODE> which conatins the <CODE>extensible group</CODE>.
296cdf0e10cSrcweir      * @param extGroup The name of the <CODE>extensible group</CODE> which
297cdf0e10cSrcweir      *                  [should] contain the property
298cdf0e10cSrcweir      * @param propName The name of the property.
299cdf0e10cSrcweir      * @param propValue The value of the property.
300cdf0e10cSrcweir      * @throws com.sun.star.uno.Exception throws <CODE>com.sun.star.uno.Exeception</CODE> on any error.
301cdf0e10cSrcweir      */
insertOrUpdateExtensibleGroupProperty( String setName, String group, String extGroup, String propName, Object propValue)302cdf0e10cSrcweir     public void insertOrUpdateExtensibleGroupProperty(
303cdf0e10cSrcweir                     String setName,
304cdf0e10cSrcweir                     String group,
305cdf0e10cSrcweir                     String extGroup,
306cdf0e10cSrcweir                     String propName,
307cdf0e10cSrcweir                     Object propValue)
308cdf0e10cSrcweir         throws  com.sun.star.uno.Exception
309cdf0e10cSrcweir     {
310cdf0e10cSrcweir         XNameContainer xSetCont = this.getSet(setName);
311cdf0e10cSrcweir 
312cdf0e10cSrcweir         XNameReplace xGroupAccess = null;
313cdf0e10cSrcweir         XNameContainer xExtGroupCont = null;
314cdf0e10cSrcweir 
315cdf0e10cSrcweir         try {
316cdf0e10cSrcweir             Object xGroup=xSetCont.getByName(group);
317cdf0e10cSrcweir             xGroupAccess = (XNameReplace) UnoRuntime.queryInterface(
318cdf0e10cSrcweir                             XNameReplace.class,xGroup);
319cdf0e10cSrcweir         } catch(com.sun.star.container.NoSuchElementException e) {
320cdf0e10cSrcweir              throw new com.sun.star.uno.Exception(
321cdf0e10cSrcweir                 "could not get group '" + group +
322cdf0e10cSrcweir                 "' from set '"+ setName +"':\n" + e.toString());
323cdf0e10cSrcweir         }
324cdf0e10cSrcweir 
325cdf0e10cSrcweir         try {
326cdf0e10cSrcweir             Object xGroup=xGroupAccess.getByName(extGroup);
327cdf0e10cSrcweir             xExtGroupCont = (XNameContainer) UnoRuntime.queryInterface(
328cdf0e10cSrcweir                             XNameContainer.class,xGroup);
329cdf0e10cSrcweir         } catch(com.sun.star.container.NoSuchElementException e) {
330cdf0e10cSrcweir              throw new com.sun.star.uno.Exception(
331cdf0e10cSrcweir                 "could not get extensilbe group '"+extGroup+
332cdf0e10cSrcweir                 "' from group '"+ group +
333cdf0e10cSrcweir                 "' from set '"+ setName +"':\n" + e.toString());
334cdf0e10cSrcweir         }
335cdf0e10cSrcweir 
336cdf0e10cSrcweir         try {
337cdf0e10cSrcweir             xExtGroupCont.insertByName(propName, propValue);
338cdf0e10cSrcweir         }
339cdf0e10cSrcweir         catch(com.sun.star.container.ElementExistException e) {
340cdf0e10cSrcweir             xExtGroupCont .replaceByName(propName, propValue);
341cdf0e10cSrcweir         }
342cdf0e10cSrcweir 
343cdf0e10cSrcweir     }
344cdf0e10cSrcweir 
345cdf0e10cSrcweir 
346cdf0e10cSrcweir     /**
347cdf0e10cSrcweir      * Returns a <CODE>XNameContainer</CODE> of the <CODE>Set</CODE>
348cdf0e10cSrcweir      * of the <CODE>Configuration</CODE>
349cdf0e10cSrcweir      * @param setName the name of the Set which sould be returned
350cdf0e10cSrcweir      * @throws com.sun.star.uno.Exception on any error
351cdf0e10cSrcweir      * @return A XNameContainer of the Set
352cdf0e10cSrcweir      */
getSet(String setName)353cdf0e10cSrcweir     public XNameContainer getSet(String setName)
354cdf0e10cSrcweir         throws com.sun.star.uno.Exception
355cdf0e10cSrcweir     {
356cdf0e10cSrcweir         XNameReplace xCont = (XNameReplace)
357cdf0e10cSrcweir                     UnoRuntime.queryInterface(XNameReplace.class, m_xConfig);
358cdf0e10cSrcweir 
359cdf0e10cSrcweir         Object oSet = xCont.getByName(setName);
360cdf0e10cSrcweir 
361cdf0e10cSrcweir         if (oSet == null)
362cdf0e10cSrcweir              throw new com.sun.star.uno.Exception(
363cdf0e10cSrcweir                 "could not get set '" + setName + ": null");
364cdf0e10cSrcweir 
365cdf0e10cSrcweir         return (XNameContainer) UnoRuntime.queryInterface(
366cdf0e10cSrcweir                                                 XNameContainer.class, oSet);
367cdf0e10cSrcweir 
368cdf0e10cSrcweir     }
369cdf0e10cSrcweir }
370