e65f4e85d942e3711f10d7a4be1b58c9005981fc
[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 \r
106 \r
107     // @Override\r
108     public LogTarget fatal() {\r
109         return fatal;\r
110     }\r
111 \r
112     // @Override\r
113     public LogTarget error() {\r
114         return error;\r
115     }\r
116 \r
117     \r
118     // @Override\r
119     public LogTarget audit() {\r
120         return audit;\r
121     }\r
122 \r
123     // @Override\r
124     public LogTarget init() {\r
125         return init;\r
126     }\r
127 \r
128     // @Override\r
129     public LogTarget warn() {\r
130         return warn;\r
131     }\r
132 \r
133     // @Override\r
134     public LogTarget info() {\r
135         return info;\r
136     }\r
137 \r
138     // @Override\r
139     public LogTarget debug() {\r
140         return debug;\r
141     }\r
142 \r
143     public void debug(LogTarget lt) {\r
144         debug = lt;\r
145     }\r
146 \r
147     // @Override\r
148     public LogTarget trace() {\r
149         return trace;\r
150     }\r
151 \r
152     @Override\r
153     public TimeTaken start(String name, int flag, Object ... values) {\r
154         return new TimeTaken(name, flag, values) {\r
155             /**\r
156              * Format to be printed when called upon\r
157              */\r
158             // @Override\r
159             public void output(StringBuilder sb) {\r
160     \r
161                 switch(flag) {\r
162                     case Env.XML: sb.append("XML "); break;\r
163                     case Env.JSON: sb.append("JSON "); break;\r
164                     case Env.REMOTE: sb.append("REMOTE "); break;\r
165                 }\r
166                 sb.append(String.format(name, values));\r
167                 if ((flag & Env.CHECKPOINT) != Env.CHECKPOINT) {\r
168                     sb.append(' ');\r
169                     sb.append((end-start)/1000000f);\r
170                     sb.append("ms");\r
171                     if (size>=0) {\r
172                         sb.append(" size: ");\r
173                         sb.append(Long.toString(size));\r
174                     }\r
175                 }\r
176             }\r
177         };\r
178     }\r
179 \r
180     // @Override\r
181     public String getProperty(String key) {\r
182         return get(staticSlot(key),null);\r
183     }\r
184     \r
185     public Properties getProperties(String ... filter) {\r
186         Properties props = new Properties();\r
187         boolean yes;\r
188         for (String key : existingStaticSlotNames()) {\r
189             if (filter.length>0) {\r
190                 yes = false;\r
191                 for (String f : filter) {\r
192                     if (key.startsWith(f)) {\r
193                         yes = true;\r
194                         break;\r
195                     }\r
196                 }\r
197             } else {\r
198                 yes = true;\r
199             }\r
200             if (yes) {\r
201                 String value = getProperty(key);\r
202                 if (value!=null) {\r
203                     props.put(key, value);\r
204                 }\r
205             }\r
206         }\r
207         return props;\r
208     }\r
209     \r
210     // @Override\r
211     public String getProperty(String key, String defaultValue) {\r
212         return get(staticSlot(key),defaultValue);\r
213     }\r
214 \r
215     // @Override\r
216     public String setProperty(String key, String value) {\r
217         put(staticSlot(key),value==null?null:value.trim());\r
218         return value;\r
219     }\r
220     \r
221     protected Decryptor decryptor = Decryptor.NULL;\r
222     protected Encryptor encryptor = Encryptor.NULL;\r
223 \r
224     \r
225     public Decryptor decryptor() {\r
226         return decryptor; \r
227     }\r
228     \r
229     public void set(Decryptor newDecryptor) {\r
230         decryptor = newDecryptor;\r
231     }\r
232     \r
233     public Encryptor encryptor() {\r
234         return encryptor; \r
235     }\r
236     \r
237     public void set(Encryptor newEncryptor) {\r
238         encryptor = newEncryptor;\r
239     }\r
240 \r
241     \r
242 //    @SuppressWarnings("unchecked")\r
243     // @Override\r
244     public <T> DataFactory<T> newDataFactory(Class<?>... classes) throws APIException {\r
245 //        if (String.class.isAssignableFrom(classes[0])) \r
246 //            return (DataFactory<T>) new StringDF(this);\r
247         return new JAXBDF<T>(this,classes);\r
248     }\r
249 \r
250 //    @SuppressWarnings("unchecked")\r
251     // @Override\r
252     public <T> DataFactory<T> newDataFactory(Schema schema, Class<?>... classes) throws APIException {\r
253 //        if (String.class.isAssignableFrom(classes[0])) \r
254 //            return (DataFactory<T>) new StringDF(this);\r
255         return new JAXBDF<T>(this, schema, classes);\r
256     }\r
257 \r
258 //    @SuppressWarnings("unchecked")\r
259     // @Override\r
260     public<T> DataFactory<T> newDataFactory(QName qName, Class<?> ... classes) throws APIException {\r
261 //        if (String.class.isAssignableFrom(classes[0])) \r
262 //            return (DataFactory<T>) new StringDF(this);\r
263         return new JAXBDF<T>(this, qName, classes);\r
264     }\r
265 \r
266     // @Override\r
267     public<T> DataFactory<T> newDataFactory(Schema schema, QName qName, Class<?> ... classes) throws APIException {\r
268         return new JAXBDF<T>(this, schema, qName, classes);\r
269     }\r
270 \r
271     // @Override\r
272     public BasicTrans newTrans() {\r
273         return new BasicTrans(this);\r
274     }\r
275 \r
276     public void loadFromSystemPropsStartsWith(String ... str) {\r
277          for (String name : System.getProperties().stringPropertyNames()) {\r
278             for (String s : str) {\r
279                 if (name.startsWith(s)) {\r
280                     setProperty(name, System.getProperty(name));\r
281                 }\r
282             }\r
283         }\r
284     }\r
285 \r
286     /**\r
287      * \r
288      * \r
289      */\r
290     public void loadToSystemPropsStartsWith(String ... str) {\r
291         String value;\r
292         for (String name : existingStaticSlotNames()) {\r
293             for (String s : str) {\r
294                 if (name.startsWith(s)) {\r
295                     if ((value = getProperty(name))!=null)\r
296                         System.setProperty(name,value);\r
297                 }\r
298             }\r
299          }\r
300     }\r
301     \r
302     public void loadPropFiles(String tag, ClassLoader classloader) throws IOException {\r
303         String propfiles = getProperty(tag);\r
304         if (propfiles!=null) {\r
305             for (String pf : Split.splitTrim(File.pathSeparatorChar, propfiles)) {\r
306                 InputStream is = classloader==null?null:classloader.getResourceAsStream(pf);\r
307                 if (is==null) {\r
308                     File f = new File(pf);\r
309                     if (f.exists()) {\r
310                         is = new FileInputStream(f);\r
311                     }\r
312                 }\r
313                 if (is!=null) {\r
314                     BufferedReader br = new BufferedReader(new InputStreamReader(is));\r
315                     try {\r
316                         String line;\r
317                         while ((line=br.readLine())!=null) {\r
318                             line = line.trim();\r
319                             if (!line.startsWith("#")) {\r
320                                 String[] tv = Split.splitTrim('=', line);\r
321                                 if (tv.length==2) {\r
322                                     setProperty(tv[0],tv[1]);\r
323                                 }\r
324                             }\r
325                         }\r
326                     } finally {\r
327                         try {\r
328                             br.close();\r
329                         } catch (IOException e) {\r
330                             error().log(e);\r
331                         }\r
332                     }\r
333                 }\r
334             }\r
335         }\r
336     }\r
337     \r
338     /**\r
339      * Create a StaticSlot, and load it from existing Properties\r
340      * \r
341      * @param name\r
342      * @param propName\r
343      * @return\r
344      */\r
345     public synchronized StaticSlot staticSlot(String name, final String propName) {\r
346         StaticSlot ss = staticSlot(name);\r
347         put(ss,getProperty(propName));\r
348         return ss;\r
349     }\r
350 \r
351 \r
352 }\r