Update all pom files in aaf inno
[aaf/inno.git] / env / src / main / java / com / att / inno / env / impl / BasicEnv.java
1 /*******************************************************************************\r
2  * ============LICENSE_START====================================================\r
3  * * org.onap.aaf\r
4  * * ===========================================================================\r
5  * * Copyright © 2017 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  * * ECOMP is a trademark and service mark of AT&T Intellectual Property.\r
21  * *\r
22  ******************************************************************************/\r
23 package com.att.inno.env.impl;\r
24 \r
25 import java.applet.Applet;\r
26 import java.io.BufferedReader;\r
27 import java.io.File;\r
28 import java.io.FileInputStream;\r
29 import java.io.IOException;\r
30 import java.io.InputStream;\r
31 import java.io.InputStreamReader;\r
32 import java.util.Properties;\r
33 \r
34 import javax.xml.namespace.QName;\r
35 import javax.xml.validation.Schema;\r
36 \r
37 import com.att.inno.env.APIException;\r
38 import com.att.inno.env.DataFactory;\r
39 import com.att.inno.env.Decryptor;\r
40 import com.att.inno.env.Encryptor;\r
41 import com.att.inno.env.Env;\r
42 import com.att.inno.env.EnvJAXB;\r
43 import com.att.inno.env.LogTarget;\r
44 import com.att.inno.env.StoreImpl;\r
45 import com.att.inno.env.TimeTaken;\r
46 import com.att.inno.env.TransCreate;\r
47 import com.att.inno.env.TransJAXB;\r
48 import com.att.inno.env.jaxb.JAXBDF;\r
49 import com.att.inno.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  *\r
57  */\r
58 public class BasicEnv extends StoreImpl implements EnvJAXB, TransCreate<TransJAXB>{\r
59         protected LogTarget fatal=LogTarget.SYSERR;\r
60         protected LogTarget error=LogTarget.SYSERR;\r
61         protected LogTarget audit=LogTarget.SYSOUT;\r
62         protected LogTarget init=LogTarget.SYSOUT;\r
63         protected LogTarget warn=LogTarget.SYSERR;\r
64         protected LogTarget info=LogTarget.SYSOUT;\r
65         protected LogTarget debug=LogTarget.NULL;\r
66         protected LogTarget trace=LogTarget.NULL;\r
67 //      protected Map<String, String> props;\r
68         \r
69 //      private boolean sysprops;\r
70 \r
71         public BasicEnv(String ... args) {\r
72                 super(null,args);\r
73         }\r
74 \r
75         public BasicEnv(String tag, String[] args) {\r
76                 super(tag, args);\r
77         }\r
78         \r
79 \r
80         /**\r
81          * Suitable for use in Applets... obtain all the values \r
82          * listed for the variable String arg "tags"\r
83          */\r
84         public BasicEnv(Applet applet, String ... tags) {\r
85                 super(null, tags);\r
86 //              props = new HashMap<String, String>();\r
87 //              String value;\r
88 //              for(int i=0;i<tags.length;++i) {\r
89 //                      value = applet.getParameter(tags[i]);\r
90 //                      if(value!=null) {\r
91 //                              props.put(tags[i], value);\r
92 //                      }\r
93 //              }\r
94         }\r
95 \r
96         public BasicEnv(Properties props) {\r
97                 super(null, props);\r
98         }\r
99 \r
100         public BasicEnv(String tag, Properties props) {\r
101                 super(tag, props);\r
102         }\r
103 \r
104 \r
105 \r
106         // @Override\r
107         public LogTarget fatal() {\r
108                 return fatal;\r
109         }\r
110 \r
111         // @Override\r
112         public LogTarget error() {\r
113                 return error;\r
114         }\r
115 \r
116         \r
117         // @Override\r
118         public LogTarget audit() {\r
119                 return audit;\r
120         }\r
121 \r
122         // @Override\r
123         public LogTarget init() {\r
124                 return init;\r
125         }\r
126 \r
127         // @Override\r
128         public LogTarget warn() {\r
129                 return warn;\r
130         }\r
131 \r
132         // @Override\r
133         public LogTarget info() {\r
134                 return info;\r
135         }\r
136 \r
137         // @Override\r
138         public LogTarget debug() {\r
139                 return debug;\r
140         }\r
141 \r
142         public void debug(LogTarget lt) {\r
143                 debug = lt;\r
144         }\r
145 \r
146         // @Override\r
147         public LogTarget trace() {\r
148                 return trace;\r
149         }\r
150 \r
151         // @Override\r
152         public TimeTaken start(String name, int flag) {\r
153                 return new TimeTaken(name, flag) {\r
154                         /**\r
155                          * Format to be printed when called upon\r
156                          */\r
157                         // @Override\r
158                         public void output(StringBuilder sb) {\r
159         \r
160                                 switch(flag) {\r
161                                         case Env.XML: sb.append("XML "); break;\r
162                                         case Env.JSON: sb.append("JSON "); break;\r
163                                         case Env.REMOTE: sb.append("REMOTE "); break;\r
164                                 }\r
165                                 sb.append(name);\r
166                                 if(flag != Env.CHECKPOINT) {\r
167                                         sb.append(' ');\r
168                                         sb.append((end-start)/1000000f);\r
169                                         sb.append("ms");\r
170                                         if(size>=0) {\r
171                                                 sb.append(" size: ");\r
172                                                 sb.append(Long.toString(size));\r
173                                         }\r
174                                 }\r
175                         }\r
176                 };\r
177         }\r
178 \r
179         // @Override\r
180         public String getProperty(String key) {\r
181                 return get(staticSlot(key),null);\r
182         }\r
183         \r
184         public Properties getProperties(String ... filter) {\r
185                 Properties props = new Properties();\r
186                 boolean yes;\r
187                 for(String key : existingStaticSlotNames()) {\r
188                         if(filter.length>0) {\r
189                                 yes = false;\r
190                                 for(String f : filter) {\r
191                                         if(key.startsWith(f)) {\r
192                                                 yes = true;\r
193                                                 break;\r
194                                         }\r
195                                 }\r
196                         } else {\r
197                                 yes = true;\r
198                         }\r
199                         if(yes) {\r
200                                 String value = getProperty(key);\r
201                                 if(value!=null) {\r
202                                         props.put(key, value);\r
203                                 }\r
204                         }\r
205                 }\r
206                 return props;\r
207         }\r
208         \r
209         // @Override\r
210         public String getProperty(String key, String defaultValue) {\r
211                 return get(staticSlot(key),defaultValue);\r
212         }\r
213 \r
214         // @Override\r
215         public String setProperty(String key, String value) {\r
216                 put(staticSlot(key),value==null?null:value.trim());\r
217                 return value;\r
218         }\r
219         \r
220         protected Decryptor decryptor = Decryptor.NULL;\r
221         protected Encryptor encryptor = Encryptor.NULL;\r
222 \r
223         \r
224         public Decryptor decryptor() {\r
225                 return decryptor; \r
226         }\r
227         \r
228         public void set(Decryptor newDecryptor) {\r
229                 decryptor = newDecryptor;\r
230         }\r
231         \r
232         public Encryptor encryptor() {\r
233                 return encryptor; \r
234         }\r
235         \r
236         public void set(Encryptor newEncryptor) {\r
237                 encryptor = newEncryptor;\r
238         }\r
239 \r
240         \r
241 //      @SuppressWarnings("unchecked")\r
242         // @Override\r
243         public <T> DataFactory<T> newDataFactory(Class<?>... classes) throws APIException {\r
244 //              if(String.class.isAssignableFrom(classes[0])) \r
245 //                      return (DataFactory<T>) new StringDF(this);\r
246                 return new JAXBDF<T>(this,classes);\r
247         }\r
248 \r
249 //      @SuppressWarnings("unchecked")\r
250         // @Override\r
251         public <T> DataFactory<T> newDataFactory(Schema schema, Class<?>... classes) throws APIException {\r
252 //              if(String.class.isAssignableFrom(classes[0])) \r
253 //                      return (DataFactory<T>) new StringDF(this);\r
254                 return new JAXBDF<T>(this, schema, classes);\r
255         }\r
256 \r
257 //      @SuppressWarnings("unchecked")\r
258         // @Override\r
259         public<T> DataFactory<T> newDataFactory(QName qName, Class<?> ... classes) throws APIException {\r
260 //              if(String.class.isAssignableFrom(classes[0])) \r
261 //                      return (DataFactory<T>) new StringDF(this);\r
262                 return new JAXBDF<T>(this, qName, classes);\r
263         }\r
264 \r
265         // @Override\r
266         public<T> DataFactory<T> newDataFactory(Schema schema, QName qName, Class<?> ... classes) throws APIException {\r
267                 return new JAXBDF<T>(this, schema, qName, classes);\r
268         }\r
269 \r
270         // @Override\r
271         public BasicTrans newTrans() {\r
272                 return new BasicTrans(this);\r
273         }\r
274 \r
275         public void loadFromSystemPropsStartsWith(String ... str) {\r
276                  for(String name : System.getProperties().stringPropertyNames()) {\r
277                         for(String s : str) {\r
278                                 if(name.startsWith(s)) {\r
279                                         setProperty(name, System.getProperty(name));\r
280                                 }\r
281                         }\r
282                 }\r
283         }\r
284 \r
285         /**\r
286          * \r
287          * \r
288          */\r
289         public void loadToSystemPropsStartsWith(String ... str) {\r
290                 String value;\r
291                 for(String name : existingStaticSlotNames()) {\r
292                         for(String s : str) {\r
293                                 if(name.startsWith(s)) {\r
294                                         if((value = getProperty(name))!=null)\r
295                                                 System.setProperty(name,value);\r
296                                 }\r
297                         }\r
298                  }\r
299         }\r
300         \r
301         public void loadPropFiles(String tag, ClassLoader classloader) throws IOException {\r
302                 String propfiles = getProperty(tag);\r
303                 if(propfiles!=null) {\r
304                         for(String pf : Split.splitTrim(File.pathSeparatorChar, propfiles)) {\r
305                                 InputStream is = classloader==null?null:classloader.getResourceAsStream(pf);\r
306                                 if(is==null) {\r
307                                         File f = new File(pf);\r
308                                         if(f.exists()) {\r
309                                                 is = new FileInputStream(f);\r
310                                         }\r
311                                 }\r
312                                 if(is!=null) {\r
313                                         BufferedReader br = new BufferedReader(new InputStreamReader(is));\r
314                                         try {\r
315                                                 String line;\r
316                                                 while((line=br.readLine())!=null) {\r
317                                                         line = line.trim();\r
318                                                         if(!line.startsWith("#")) {\r
319                                                                 String[] tv = Split.splitTrim('=', line);\r
320                                                                 if(tv.length==2) {\r
321                                                                         setProperty(tv[0],tv[1]);\r
322                                                                 }\r
323                                                         }\r
324                                                 }\r
325                                         } finally {\r
326                                                 try {\r
327                                                         br.close();\r
328                                                 } catch (IOException e) {\r
329                                                         error().log(e);\r
330                                                 }\r
331                                         }\r
332                                 }\r
333                         }\r
334                 }\r
335         }\r
336 }\r