1*ef39d40dSAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
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 
22*ef39d40dSAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir package lib;
25cdf0e10cSrcweir 
26cdf0e10cSrcweir import java.util.Iterator;
27cdf0e10cSrcweir import java.util.Hashtable;
28cdf0e10cSrcweir import java.util.HashSet;
29cdf0e10cSrcweir import java.util.Map;
30cdf0e10cSrcweir import java.util.Set;
31cdf0e10cSrcweir 
32cdf0e10cSrcweir import com.sun.star.beans.Property;
33cdf0e10cSrcweir import com.sun.star.beans.XPropertySet;
34cdf0e10cSrcweir import com.sun.star.beans.XPropertySetInfo;
35cdf0e10cSrcweir import com.sun.star.beans.XPropertyChangeListener;
36cdf0e10cSrcweir import com.sun.star.beans.XVetoableChangeListener;
37cdf0e10cSrcweir import com.sun.star.beans.UnknownPropertyException;
38cdf0e10cSrcweir import com.sun.star.lang.WrappedTargetException;
39cdf0e10cSrcweir import com.sun.star.uno.Type;
40cdf0e10cSrcweir 
41cdf0e10cSrcweir /**
42cdf0e10cSrcweir  * Parameters is a container of String parameters.
43cdf0e10cSrcweir  * @deprecated
44cdf0e10cSrcweir  */
45cdf0e10cSrcweir 
46cdf0e10cSrcweir public class Parameters implements XPropertySet {
47cdf0e10cSrcweir /*    final protected Map parameters;
48cdf0e10cSrcweir     final Parameters defaults; */
49cdf0e10cSrcweir     final protected Map parameters;
50cdf0e10cSrcweir     final Parameters defaults;
51cdf0e10cSrcweir     Property[] props;
52cdf0e10cSrcweir 
Parameters(Map params)53cdf0e10cSrcweir     public Parameters(Map params) {
54cdf0e10cSrcweir         this (params, null);
55cdf0e10cSrcweir     }
56cdf0e10cSrcweir 
Parameters(Map params, Parameters defaultParams)57cdf0e10cSrcweir     public Parameters(Map params, Parameters defaultParams) {
58cdf0e10cSrcweir         parameters = params;
59cdf0e10cSrcweir         defaults = defaultParams;
60cdf0e10cSrcweir         checkParameters(parameters);
61cdf0e10cSrcweir 
62cdf0e10cSrcweir         Set paramSet = new HashSet(parameters.keySet());
63cdf0e10cSrcweir 
64cdf0e10cSrcweir         if (defaults != null) {
65cdf0e10cSrcweir             Set defSet = defaults.toMap().keySet();
66cdf0e10cSrcweir             paramSet.addAll(defSet);
67cdf0e10cSrcweir         }
68cdf0e10cSrcweir 
69cdf0e10cSrcweir         props = new Property[paramSet.size()];
70cdf0e10cSrcweir 
71cdf0e10cSrcweir         int num = 0;
72cdf0e10cSrcweir 
73cdf0e10cSrcweir         for (Iterator i = paramSet.iterator(); i.hasNext(); num++) {
74cdf0e10cSrcweir             String name = (String)i.next();
75cdf0e10cSrcweir 
76cdf0e10cSrcweir             props[num] = new Property(name, num, new Type(String.class), (short)0);
77cdf0e10cSrcweir         }
78cdf0e10cSrcweir     }
79cdf0e10cSrcweir 
80cdf0e10cSrcweir 
get(String paramName)81cdf0e10cSrcweir     public String get(String paramName) {
82cdf0e10cSrcweir         Object res = parameters.get(paramName);
83cdf0e10cSrcweir 
84cdf0e10cSrcweir         if (res != null && res instanceof String)
85cdf0e10cSrcweir             return (String)res;
86cdf0e10cSrcweir 
87cdf0e10cSrcweir         if (defaults != null)
88cdf0e10cSrcweir             return defaults.get(paramName);
89cdf0e10cSrcweir 
90cdf0e10cSrcweir         return null;
91cdf0e10cSrcweir     }
92cdf0e10cSrcweir 
getPropertyValue(String name)93cdf0e10cSrcweir     public Object getPropertyValue(String name) {
94cdf0e10cSrcweir         Object erg = parameters.get(name);
95cdf0e10cSrcweir         if (erg ==  null && defaults != null)
96cdf0e10cSrcweir             return defaults.getPropertyValue(name);
97cdf0e10cSrcweir         return erg;
98cdf0e10cSrcweir     }
99cdf0e10cSrcweir 
setPropertyValue(String name, Object value)100cdf0e10cSrcweir     public void setPropertyValue(String name, Object value) {
101cdf0e10cSrcweir         parameters.put(name, value);
102cdf0e10cSrcweir         int size = props.length;
103cdf0e10cSrcweir         Property[] addProps = new Property[size+1];
104cdf0e10cSrcweir         for (int i=0; i<size; i++)
105cdf0e10cSrcweir         {
106cdf0e10cSrcweir             addProps[i] = props[i];
107cdf0e10cSrcweir         }
108cdf0e10cSrcweir         addProps[size] = new Property(name, size, new Type(value.getClass()), (short)0);
109cdf0e10cSrcweir         props = addProps;
110cdf0e10cSrcweir     }
111cdf0e10cSrcweir 
addVetoableChangeListener(String name, XVetoableChangeListener l)112cdf0e10cSrcweir     public void addVetoableChangeListener(String name, XVetoableChangeListener l) {
113cdf0e10cSrcweir     }
114cdf0e10cSrcweir 
removeVetoableChangeListener(String name, XVetoableChangeListener l)115cdf0e10cSrcweir     public void removeVetoableChangeListener(String name, XVetoableChangeListener l) {
116cdf0e10cSrcweir     }
117cdf0e10cSrcweir 
addPropertyChangeListener(String name, XPropertyChangeListener l)118cdf0e10cSrcweir     public void addPropertyChangeListener(String name, XPropertyChangeListener l) {
119cdf0e10cSrcweir     }
120cdf0e10cSrcweir 
removePropertyChangeListener(String name, XPropertyChangeListener l)121cdf0e10cSrcweir     public void removePropertyChangeListener(String name, XPropertyChangeListener l) {
122cdf0e10cSrcweir     }
123cdf0e10cSrcweir 
getPropertySetInfo()124cdf0e10cSrcweir     public XPropertySetInfo getPropertySetInfo() {
125cdf0e10cSrcweir         return new XPropertySetInfo() {
126cdf0e10cSrcweir             public Property[] getProperties() {
127cdf0e10cSrcweir                 return props;
128cdf0e10cSrcweir             }
129cdf0e10cSrcweir 
130cdf0e10cSrcweir             public boolean hasPropertyByName(String name) {
131cdf0e10cSrcweir                 for (int i = 0; i < props.length; i++) {
132cdf0e10cSrcweir                     Property prop = props[i];
133cdf0e10cSrcweir 
134cdf0e10cSrcweir                     if (prop.Name.equals(name)) {
135cdf0e10cSrcweir                         return true;
136cdf0e10cSrcweir                     }
137cdf0e10cSrcweir                 }
138cdf0e10cSrcweir 
139cdf0e10cSrcweir                 return false;
140cdf0e10cSrcweir             }
141cdf0e10cSrcweir 
142cdf0e10cSrcweir             public Property getPropertyByName(String name) throws UnknownPropertyException {
143cdf0e10cSrcweir                 for (int i = 0; i < props.length; i++) {
144cdf0e10cSrcweir                     Property prop = props[i];
145cdf0e10cSrcweir 
146cdf0e10cSrcweir                     if (prop.Name.equals(name)) {
147cdf0e10cSrcweir                         return prop;
148cdf0e10cSrcweir                     }
149cdf0e10cSrcweir                 }
150cdf0e10cSrcweir 
151cdf0e10cSrcweir                 throw new UnknownPropertyException(name);
152cdf0e10cSrcweir             }
153cdf0e10cSrcweir         };
154cdf0e10cSrcweir     }
155cdf0e10cSrcweir 
156cdf0e10cSrcweir     public Map toMap() {
157cdf0e10cSrcweir         return new Hashtable(parameters) {
158cdf0e10cSrcweir             public Object get(Object obj) {
159cdf0e10cSrcweir                 if (obj instanceof String) {
160cdf0e10cSrcweir                     return Parameters.this.get((String) obj);
161cdf0e10cSrcweir                 } else {
162cdf0e10cSrcweir                     return null;
163cdf0e10cSrcweir                 }
164cdf0e10cSrcweir             }
165cdf0e10cSrcweir         };
166cdf0e10cSrcweir     }
167cdf0e10cSrcweir 
168cdf0e10cSrcweir     private static void checkParameters(Map params) {
169cdf0e10cSrcweir         for (Iterator i = params.keySet().iterator(); i.hasNext();) {
170cdf0e10cSrcweir             Object key = i.next();
171cdf0e10cSrcweir 
172cdf0e10cSrcweir             if (!(key instanceof String)) {
173cdf0e10cSrcweir                 throw new IllegalArgumentException(
174cdf0e10cSrcweir                         "Wrong key " + key + ", it should be of String type");
175cdf0e10cSrcweir             }
176cdf0e10cSrcweir 
177cdf0e10cSrcweir /*            Object value = params.get(key);
178cdf0e10cSrcweir 
179cdf0e10cSrcweir             if (!(value instanceof String)) {
180cdf0e10cSrcweir                 throw new IllegalArgumentException(
181cdf0e10cSrcweir                         "Wrong value " + value + ", it should be of String type");
182cdf0e10cSrcweir             } */
183cdf0e10cSrcweir         }
184cdf0e10cSrcweir     }
185cdf0e10cSrcweir 
186cdf0e10cSrcweir     public static String getString(XPropertySet props, String name) {
187cdf0e10cSrcweir         try {
188cdf0e10cSrcweir             return (String)props.getPropertyValue(name);
189cdf0e10cSrcweir         } catch (UnknownPropertyException e) {
190cdf0e10cSrcweir             return null;
191cdf0e10cSrcweir         } catch (WrappedTargetException e) {
192cdf0e10cSrcweir             return null;
193cdf0e10cSrcweir         }
194cdf0e10cSrcweir     }
195cdf0e10cSrcweir 
196cdf0e10cSrcweir     public static Object get(XPropertySet props, String name) {
197cdf0e10cSrcweir         try {
198cdf0e10cSrcweir             return props.getPropertyValue(name);
199cdf0e10cSrcweir         } catch (UnknownPropertyException e) {
200cdf0e10cSrcweir             return null;
201cdf0e10cSrcweir         } catch (WrappedTargetException e) {
202cdf0e10cSrcweir             return null;
203cdf0e10cSrcweir         }
204cdf0e10cSrcweir     }
205cdf0e10cSrcweir 
206cdf0e10cSrcweir     public static Map toMap(XPropertySet props) {
207cdf0e10cSrcweir         Hashtable result = new Hashtable(10);
208cdf0e10cSrcweir 
209cdf0e10cSrcweir         XPropertySetInfo setInfo = props.getPropertySetInfo();
210cdf0e10cSrcweir         Property[] properties = setInfo.getProperties();
211cdf0e10cSrcweir 
212cdf0e10cSrcweir         for (int i = 0; i < properties.length; i++) {
213cdf0e10cSrcweir             String name = properties[i].Name;
214cdf0e10cSrcweir             Object value;
215cdf0e10cSrcweir 
216cdf0e10cSrcweir             try {
217cdf0e10cSrcweir                 value = props.getPropertyValue(name);
218cdf0e10cSrcweir             } catch (WrappedTargetException e) {
219cdf0e10cSrcweir                 continue;
220cdf0e10cSrcweir             } catch (UnknownPropertyException e) {
221cdf0e10cSrcweir                 continue;
222cdf0e10cSrcweir             }
223cdf0e10cSrcweir 
224cdf0e10cSrcweir             result.put(name, value);
225cdf0e10cSrcweir         }
226cdf0e10cSrcweir 
227cdf0e10cSrcweir         return result;
228cdf0e10cSrcweir     }
229cdf0e10cSrcweir }
230