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 package helper;
24*b1cdbd2cSJim Jagielski 
25*b1cdbd2cSJim Jagielski import com.sun.star.lang.XMultiServiceFactory;
26*b1cdbd2cSJim Jagielski import com.sun.star.container.XHierarchicalNameAccess;
27*b1cdbd2cSJim Jagielski import com.sun.star.container.XNameAccess;
28*b1cdbd2cSJim Jagielski import com.sun.star.container.NoSuchElementException;
29*b1cdbd2cSJim Jagielski import com.sun.star.beans.PropertyValue;
30*b1cdbd2cSJim Jagielski import com.sun.star.beans.PropertyState;
31*b1cdbd2cSJim Jagielski import com.sun.star.uno.UnoRuntime;
32*b1cdbd2cSJim Jagielski 
33*b1cdbd2cSJim Jagielski /**
34*b1cdbd2cSJim Jagielski  * Read configuration settings.
35*b1cdbd2cSJim Jagielski  */
36*b1cdbd2cSJim Jagielski public class ConfigurationRead {
37*b1cdbd2cSJim Jagielski 
38*b1cdbd2cSJim Jagielski     XHierarchicalNameAccess root = null;
39*b1cdbd2cSJim Jagielski 
40*b1cdbd2cSJim Jagielski     /**
41*b1cdbd2cSJim Jagielski      * Creates new ConfigurationRead
42*b1cdbd2cSJim Jagielski      * @param xMSF An instance of service
43*b1cdbd2cSJim Jagielski      *      "com.sun.star.configuration.ConfigurationProvider"
44*b1cdbd2cSJim Jagielski      * @param rootnode The root of the configuration nodes.
45*b1cdbd2cSJim Jagielski      */
ConfigurationRead(XMultiServiceFactory xMSF, String rootnode)46*b1cdbd2cSJim Jagielski     public ConfigurationRead(XMultiServiceFactory xMSF, String rootnode) {
47*b1cdbd2cSJim Jagielski 
48*b1cdbd2cSJim Jagielski         PropertyValue [] nodeArgs = new PropertyValue [1];
49*b1cdbd2cSJim Jagielski         PropertyValue nodepath = new PropertyValue();
50*b1cdbd2cSJim Jagielski         nodepath.Name = "nodepath";
51*b1cdbd2cSJim Jagielski         nodepath.Value = rootnode;
52*b1cdbd2cSJim Jagielski         nodepath.Handle = -1;
53*b1cdbd2cSJim Jagielski         nodepath.State = PropertyState.DEFAULT_VALUE;
54*b1cdbd2cSJim Jagielski         nodeArgs[0]=nodepath;
55*b1cdbd2cSJim Jagielski 
56*b1cdbd2cSJim Jagielski         try {
57*b1cdbd2cSJim Jagielski             Object rootObject = xMSF.createInstanceWithArguments(
58*b1cdbd2cSJim Jagielski                             "com.sun.star.configuration.ConfigurationAccess",
59*b1cdbd2cSJim Jagielski                             nodeArgs);
60*b1cdbd2cSJim Jagielski 
61*b1cdbd2cSJim Jagielski             root = (XHierarchicalNameAccess)
62*b1cdbd2cSJim Jagielski                             UnoRuntime.queryInterface(
63*b1cdbd2cSJim Jagielski                             XHierarchicalNameAccess.class, rootObject);
64*b1cdbd2cSJim Jagielski         }
65*b1cdbd2cSJim Jagielski         catch(com.sun.star.uno.Exception e) {
66*b1cdbd2cSJim Jagielski             e.printStackTrace();
67*b1cdbd2cSJim Jagielski         }
68*b1cdbd2cSJim Jagielski     }
69*b1cdbd2cSJim Jagielski 
70*b1cdbd2cSJim Jagielski     /**
71*b1cdbd2cSJim Jagielski      * Creates new ConfigurationRead. This uses "org.openoffice.Setup"
72*b1cdbd2cSJim Jagielski      * as default root name.
73*b1cdbd2cSJim Jagielski      * @param xMSF An instance of service
74*b1cdbd2cSJim Jagielski      *      "com.sun.star.configuration.ConfigurationProvider"
75*b1cdbd2cSJim Jagielski      */
ConfigurationRead(XMultiServiceFactory xMSF)76*b1cdbd2cSJim Jagielski     public ConfigurationRead(XMultiServiceFactory xMSF) {
77*b1cdbd2cSJim Jagielski         this(xMSF, "org.openoffice.Setup");
78*b1cdbd2cSJim Jagielski     }
79*b1cdbd2cSJim Jagielski 
80*b1cdbd2cSJim Jagielski     /**
81*b1cdbd2cSJim Jagielski      * Does the node with this hierarchical name exist?
82*b1cdbd2cSJim Jagielski      * @param name The hierarchical name of a subnode.
83*b1cdbd2cSJim Jagielski      * @return True, if the node exists.
84*b1cdbd2cSJim Jagielski      */
hasByHieracrhicalName(String name)85*b1cdbd2cSJim Jagielski     public boolean hasByHieracrhicalName(String name) throws NoSuchElementException,
86*b1cdbd2cSJim Jagielski                                     com.sun.star.lang.WrappedTargetException {
87*b1cdbd2cSJim Jagielski 
88*b1cdbd2cSJim Jagielski         return root.hasByHierarchicalName(name);
89*b1cdbd2cSJim Jagielski 
90*b1cdbd2cSJim Jagielski     }
91*b1cdbd2cSJim Jagielski 
92*b1cdbd2cSJim Jagielski 
93*b1cdbd2cSJim Jagielski     /**
94*b1cdbd2cSJim Jagielski      * Get the elements of the root node.
95*b1cdbd2cSJim Jagielski      * @return All elements of the root node.
96*b1cdbd2cSJim Jagielski      */
getRootNodeNames()97*b1cdbd2cSJim Jagielski     public String[] getRootNodeNames() {
98*b1cdbd2cSJim Jagielski 
99*b1cdbd2cSJim Jagielski         XNameAccess xName = (XNameAccess)
100*b1cdbd2cSJim Jagielski                     UnoRuntime.queryInterface(XNameAccess.class, root);
101*b1cdbd2cSJim Jagielski         String[]names = xName.getElementNames();
102*b1cdbd2cSJim Jagielski         return names;
103*b1cdbd2cSJim Jagielski     }
104*b1cdbd2cSJim Jagielski 
105*b1cdbd2cSJim Jagielski     /**
106*b1cdbd2cSJim Jagielski      * Get all elements of this node
107*b1cdbd2cSJim Jagielski      * @param name The name of the node
108*b1cdbd2cSJim Jagielski      * @return All elements of this node (as hierarchical names).
109*b1cdbd2cSJim Jagielski      */
getSubNodeNames(String name)110*b1cdbd2cSJim Jagielski     public String[] getSubNodeNames(String name) {
111*b1cdbd2cSJim Jagielski         String[]names = null;
112*b1cdbd2cSJim Jagielski         try {
113*b1cdbd2cSJim Jagielski 
114*b1cdbd2cSJim Jagielski             Object next = root.getByHierarchicalName(name);
115*b1cdbd2cSJim Jagielski             XNameAccess x = (XNameAccess)UnoRuntime.queryInterface(
116*b1cdbd2cSJim Jagielski                                                 XNameAccess.class, next);
117*b1cdbd2cSJim Jagielski             names = x.getElementNames();
118*b1cdbd2cSJim Jagielski             for (int i=0; i< names.length; i++) {
119*b1cdbd2cSJim Jagielski                 names[i] = name + "/" + names[i];
120*b1cdbd2cSJim Jagielski             }
121*b1cdbd2cSJim Jagielski         }
122*b1cdbd2cSJim Jagielski         catch(Exception e) {
123*b1cdbd2cSJim Jagielski             //just return null, if there are no further nodes
124*b1cdbd2cSJim Jagielski         }
125*b1cdbd2cSJim Jagielski         return names;
126*b1cdbd2cSJim Jagielski     }
127*b1cdbd2cSJim Jagielski 
128*b1cdbd2cSJim Jagielski     /**
129*b1cdbd2cSJim Jagielski      * Get contents of a node by its hierarchical name.
130*b1cdbd2cSJim Jagielski      * @param name The hierarchical name of the node.
131*b1cdbd2cSJim Jagielski      * @return The contents as an object
132*b1cdbd2cSJim Jagielski      */
getByHierarchicalName(String name)133*b1cdbd2cSJim Jagielski     public Object getByHierarchicalName(String name) throws NoSuchElementException {
134*b1cdbd2cSJim Jagielski         return root.getByHierarchicalName(name);
135*b1cdbd2cSJim Jagielski     }
136*b1cdbd2cSJim Jagielski 
137*b1cdbd2cSJim Jagielski }
138