Improve Pool
[aaf/authz.git] / misc / env / src / main / java / org / onap / aaf / misc / env / impl / BasicEnv.java
1 /**\r
2  * ============LICENSE_START====================================================\r
3  * org.onap.aaf\r
4  * ===========================================================================\r
5  * Copyright (c) 2018 AT&T Intellectual Property. All rights reserved.\r
6  * ===========================================================================\r
7  * Licensed under the Apache License, Version 2.0 (the "License");\r
8  * you may not use this file except in compliance with the License.\r
9  * You may obtain a copy of the License at\r
10  * \r
11  *      http://www.apache.org/licenses/LICENSE-2.0\r
12  * \r
13  * Unless required by applicable law or agreed to in writing, software\r
14  * distributed under the License is distributed on an "AS IS" BASIS,\r
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
16  * See the License for the specific language governing permissions and\r
17  * limitations under the License.\r
18  * ============LICENSE_END====================================================\r
19  *\r
20  */\r
21 \r
22 package org.onap.aaf.misc.env.impl;\r
23 \r
24 import java.applet.Applet;\r
25 import java.io.BufferedReader;\r
26 import java.io.File;\r
27 import java.io.FileInputStream;\r
28 import java.io.IOException;\r
29 import java.io.InputStream;\r
30 import java.io.InputStreamReader;\r
31 import java.util.Properties;\r
32 \r
33 import javax.xml.namespace.QName;\r
34 import javax.xml.validation.Schema;\r
35 \r
36 import org.onap.aaf.misc.env.APIException;\r
37 import org.onap.aaf.misc.env.DataFactory;\r
38 import org.onap.aaf.misc.env.Decryptor;\r
39 import org.onap.aaf.misc.env.Encryptor;\r
40 import org.onap.aaf.misc.env.Env;\r
41 import org.onap.aaf.misc.env.EnvJAXB;\r
42 import org.onap.aaf.misc.env.LogTarget;\r
43 import org.onap.aaf.misc.env.StaticSlot;\r
44 import org.onap.aaf.misc.env.StoreImpl;\r
45 import org.onap.aaf.misc.env.TimeTaken;\r
46 import org.onap.aaf.misc.env.TransCreate;\r
47 import org.onap.aaf.misc.env.TransJAXB;\r
48 import org.onap.aaf.misc.env.jaxb.JAXBDF;\r
49 import org.onap.aaf.misc.env.util.Split;\r
50 \r
51 /**\r
52  * An essential Implementation of Env, which will fully function, without any sort\r
53  * of configuration.\r
54  * \r
55  * Use as a basis for Group level Env, just overriding where needed.\r
56  * @author Jonathan\r
57  *\r
58  */\r
59 public class BasicEnv extends StoreImpl implements EnvJAXB, TransCreate<TransJAXB>{\r
60     protected LogTarget fatal=LogTarget.SYSERR;\r
61     protected LogTarget error=LogTarget.SYSERR;\r
62     protected LogTarget audit=LogTarget.SYSOUT;\r
63     protected LogTarget init=LogTarget.SYSOUT;\r
64     protected LogTarget warn=LogTarget.SYSERR;\r
65     protected LogTarget info=LogTarget.SYSOUT;\r
66     protected LogTarget debug=LogTarget.NULL;\r
67     protected LogTarget trace=LogTarget.NULL;\r
68 //    protected Map<String, String> props;\r
69     \r
70 //    private boolean sysprops;\r
71 \r
72     public BasicEnv(String ... args) {\r
73         super(null,args);\r
74     }\r
75 \r
76     public BasicEnv(String tag, String[] args) {\r
77         super(tag, args);\r
78     }\r
79     \r
80 \r
81     /**\r
82      * Suitable for use in Applets... obtain all the values \r
83      * listed for the variable String arg "tags"\r
84      */\r
85     public BasicEnv(Applet applet, String ... tags) {\r
86         super(null, tags);\r
87 //        props = new HashMap<>();\r
88 //        String value;\r
89 //        for (int i=0;i<tags.length;++i) {\r
90 //            value = applet.getParameter(tags[i]);\r
91 //            if (value!=null) {\r
92 //                props.put(tags[i], value);\r
93 //            }\r
94 //        }\r
95     }\r
96 \r
97     public BasicEnv(Properties props) {\r
98         super(null, props);\r
99     }\r
100 \r
101     public BasicEnv(String tag, Properties props) {\r
102         super(tag, props);\r
103     }\r
104 \r
105     @Override\r
106     public LogTarget fatal() {\r
107         return fatal;\r
108     }\r
109 \r
110     public void fatal(LogTarget lt) {\r
111         fatal = lt;\r
112     }\r
113 \r
114     @Override\r
115     public LogTarget error() {\r
116         return error;\r
117     }\r
118 \r
119     public void error(LogTarget lt) {\r
120         error = lt;\r
121     }\r
122     \r
123     @Override\r
124     public LogTarget audit() {\r
125         return audit;\r
126     }\r
127 \r
128     public void audit(LogTarget lt) {\r
129         audit = lt;\r
130     }\r
131 \r
132     @Override\r
133     public LogTarget init() {\r
134         return init;\r
135     }\r
136 \r
137     public void init(LogTarget lt) {\r
138         init = lt;\r
139     }\r
140 \r
141     @Override\r
142     public LogTarget warn() {\r
143         return warn;\r
144     }\r
145 \r
146     public void warn(LogTarget lt) {\r
147         warn = lt;\r
148     }\r
149 \r
150     @Override\r
151     public LogTarget info() {\r
152         return info;\r
153     }\r
154 \r
155     public void info(LogTarget lt) {\r
156         info = lt;\r
157     }\r
158 \r
159     @Override\r
160     public LogTarget debug() {\r
161         return debug;\r
162     }\r
163 \r
164     public void debug(LogTarget lt) {\r
165         debug = lt;\r
166     }\r
167 \r
168     @Override\r
169     public LogTarget trace() {\r
170         return trace;\r
171     }\r
172 \r
173     public void trace(LogTarget lt) {\r
174         trace = lt;\r
175     }\r
176 \r
177     @Override\r
178     public TimeTaken start(String name, int flag, Object ... values) {\r
179         return new TimeTaken(name, flag, values) {\r
180             /**\r
181              * Format to be printed when called upon\r
182              */\r
183             // @Override\r
184             public void output(StringBuilder sb) {\r
185     \r
186                 switch(flag) {\r
187                     case Env.XML: sb.append("XML "); break;\r
188                     case Env.JSON: sb.append("JSON "); break;\r
189                     case Env.REMOTE: sb.append("REMOTE "); break;\r
190                 }\r
191                 sb.append(String.format(name, values));\r
192                 if ((flag & Env.CHECKPOINT) != Env.CHECKPOINT) {\r
193                     sb.append(' ');\r
194                     sb.append((end-start)/1000000f);\r
195                     sb.append("ms");\r
196                     if (size>=0) {\r
197                         sb.append(" size: ");\r
198                         sb.append(Long.toString(size));\r
199                     }\r
200                 }\r
201             }\r
202         };\r
203     }\r
204 \r
205     // @Override\r
206     public String getProperty(String key) {\r
207         return get(staticSlot(key),null);\r
208     }\r
209     \r
210     public Properties getProperties(String ... filter) {\r
211         Properties props = new Properties();\r
212         boolean yes;\r
213         for (String key : existingStaticSlotNames()) {\r
214             if (filter.length>0) {\r
215                 yes = false;\r
216                 for (String f : filter) {\r
217                     if (key.startsWith(f)) {\r
218                         yes = true;\r
219                         break;\r
220                     }\r
221                 }\r
222             } else {\r
223                 yes = true;\r
224             }\r
225             if (yes) {\r
226                 String value = getProperty(key);\r
227                 if (value!=null) {\r
228                     props.put(key, value);\r
229                 }\r
230             }\r
231         }\r
232         return props;\r
233     }\r
234     \r
235     // @Override\r
236     public String getProperty(String key, String defaultValue) {\r
237         return get(staticSlot(key),defaultValue);\r
238     }\r
239 \r
240     // @Override\r
241     public String setProperty(String key, String value) {\r
242         put(staticSlot(key),value==null?null:value.trim());\r
243         return value;\r
244     }\r
245     \r
246     protected Decryptor decryptor = Decryptor.NULL;\r
247     protected Encryptor encryptor = Encryptor.NULL;\r
248 \r
249     \r
250     public Decryptor decryptor() {\r
251         return decryptor; \r
252     }\r
253     \r
254     public void set(Decryptor newDecryptor) {\r
255         decryptor = newDecryptor;\r
256     }\r
257     \r
258     public Encryptor encryptor() {\r
259         return encryptor; \r
260     }\r
261     \r
262     public void set(Encryptor newEncryptor) {\r
263         encryptor = newEncryptor;\r
264     }\r
265 \r
266     \r
267 //    @SuppressWarnings("unchecked")\r
268     // @Override\r
269     public <T> DataFactory<T> newDataFactory(Class<?>... classes) throws APIException {\r
270 //        if (String.class.isAssignableFrom(classes[0])) \r
271 //            return (DataFactory<T>) new StringDF(this);\r
272         return new JAXBDF<T>(this,classes);\r
273     }\r
274 \r
275 //    @SuppressWarnings("unchecked")\r
276     // @Override\r
277     public <T> DataFactory<T> newDataFactory(Schema schema, Class<?>... classes) throws APIException {\r
278 //        if (String.class.isAssignableFrom(classes[0])) \r
279 //            return (DataFactory<T>) new StringDF(this);\r
280         return new JAXBDF<T>(this, schema, classes);\r
281     }\r
282 \r
283 //    @SuppressWarnings("unchecked")\r
284     // @Override\r
285     public<T> DataFactory<T> newDataFactory(QName qName, Class<?> ... classes) throws APIException {\r
286 //        if (String.class.isAssignableFrom(classes[0])) \r
287 //            return (DataFactory<T>) new StringDF(this);\r
288         return new JAXBDF<T>(this, qName, classes);\r
289     }\r
290 \r
291     // @Override\r
292     public<T> DataFactory<T> newDataFactory(Schema schema, QName qName, Class<?> ... classes) throws APIException {\r
293         return new JAXBDF<T>(this, schema, qName, classes);\r
294     }\r
295 \r
296     // @Override\r
297     public BasicTrans newTrans() {\r
298         return new BasicTrans(this);\r
299     }\r
300 \r
301     public void loadFromSystemPropsStartsWith(String ... str) {\r
302          for (String name : System.getProperties().stringPropertyNames()) {\r
303             for (String s : str) {\r
304                 if (name.startsWith(s)) {\r
305                     setProperty(name, System.getProperty(name));\r
306                 }\r
307             }\r
308         }\r
309     }\r
310 \r
311     /**\r
312      * \r
313      * \r
314      */\r
315     public void loadToSystemPropsStartsWith(String ... str) {\r
316         String value;\r
317         for (String name : existingStaticSlotNames()) {\r
318             for (String s : str) {\r
319                 if (name.startsWith(s)) {\r
320                     if ((value = getProperty(name))!=null)\r
321                         System.setProperty(name,value);\r
322                 }\r
323             }\r
324          }\r
325     }\r
326     \r
327     public void loadPropFiles(String tag, ClassLoader classloader) throws IOException {\r
328         String propfiles = getProperty(tag);\r
329         if (propfiles!=null) {\r
330             for (String pf : Split.splitTrim(File.pathSeparatorChar, propfiles)) {\r
331                 InputStream is = classloader==null?null:classloader.getResourceAsStream(pf);\r
332                 if (is==null) {\r
333                     File f = new File(pf);\r
334                     if (f.exists()) {\r
335                         is = new FileInputStream(f);\r
336                     }\r
337                 }\r
338                 if (is!=null) {\r
339                     BufferedReader br = new BufferedReader(new InputStreamReader(is));\r
340                     try {\r
341                         String line;\r
342                         while ((line=br.readLine())!=null) {\r
343                             line = line.trim();\r
344                             if (!line.startsWith("#")) {\r
345                                 String[] tv = Split.splitTrim('=', line);\r
346                                 if (tv.length==2) {\r
347                                     setProperty(tv[0],tv[1]);\r
348                                 }\r
349                             }\r
350                         }\r
351                     } finally {\r
352                         try {\r
353                             br.close();\r
354                         } catch (IOException e) {\r
355                             error().log(e);\r
356                         }\r
357                     }\r
358                 }\r
359             }\r
360         }\r
361     }\r
362     \r
363     /**\r
364      * Create a StaticSlot, and load it from existing Properties\r
365      * \r
366      * @param name\r
367      * @param propName\r
368      * @return\r
369      */\r
370     public synchronized StaticSlot staticSlot(String name, final String propName) {\r
371         StaticSlot ss = staticSlot(name);\r
372         put(ss,getProperty(propName));\r
373         return ss;\r
374     }\r
375 \r
376 \r
377 }\r