2 * ============LICENSE_START====================================================
4 * ===========================================================================
5 * Copyright (c) 2018 AT&T Intellectual Property. All rights reserved.
6 * ===========================================================================
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 * ============LICENSE_END====================================================
22 package org.onap.aaf.misc.env.impl;
24 import java.applet.Applet;
25 import java.io.BufferedReader;
27 import java.io.FileInputStream;
28 import java.io.IOException;
29 import java.io.InputStream;
30 import java.io.InputStreamReader;
31 import java.util.Properties;
33 import javax.xml.namespace.QName;
34 import javax.xml.validation.Schema;
36 import org.onap.aaf.misc.env.APIException;
37 import org.onap.aaf.misc.env.DataFactory;
38 import org.onap.aaf.misc.env.Decryptor;
39 import org.onap.aaf.misc.env.Encryptor;
40 import org.onap.aaf.misc.env.Env;
41 import org.onap.aaf.misc.env.EnvJAXB;
42 import org.onap.aaf.misc.env.LogTarget;
43 import org.onap.aaf.misc.env.StaticSlot;
44 import org.onap.aaf.misc.env.StoreImpl;
45 import org.onap.aaf.misc.env.TimeTaken;
46 import org.onap.aaf.misc.env.TransCreate;
47 import org.onap.aaf.misc.env.TransJAXB;
48 import org.onap.aaf.misc.env.jaxb.JAXBDF;
49 import org.onap.aaf.misc.env.util.Split;
52 * An essential Implementation of Env, which will fully function, without any sort
55 * Use as a basis for Group level Env, just overriding where needed.
59 public class BasicEnv extends StoreImpl implements EnvJAXB, TransCreate<TransJAXB>{
60 protected LogTarget fatal=LogTarget.SYSERR;
61 protected LogTarget error=LogTarget.SYSERR;
62 protected LogTarget audit=LogTarget.SYSOUT;
63 protected LogTarget init=LogTarget.SYSOUT;
64 protected LogTarget warn=LogTarget.SYSERR;
65 protected LogTarget info=LogTarget.SYSOUT;
66 protected LogTarget debug=LogTarget.NULL;
67 protected LogTarget trace=LogTarget.NULL;
68 // protected Map<String, String> props;
70 // private boolean sysprops;
72 public BasicEnv(String ... args) {
76 public BasicEnv(String tag, String[] args) {
82 * Suitable for use in Applets... obtain all the values
83 * listed for the variable String arg "tags"
85 public BasicEnv(Applet applet, String ... tags) {
87 // props = new HashMap<String, String>();
89 // for(int i=0;i<tags.length;++i) {
90 // value = applet.getParameter(tags[i]);
92 // props.put(tags[i], value);
97 public BasicEnv(Properties props) {
101 public BasicEnv(String tag, Properties props) {
108 public LogTarget fatal() {
113 public LogTarget error() {
119 public LogTarget audit() {
124 public LogTarget init() {
129 public LogTarget warn() {
134 public LogTarget info() {
139 public LogTarget debug() {
143 public void debug(LogTarget lt) {
148 public LogTarget trace() {
153 public TimeTaken start(String name, int flag) {
154 return new TimeTaken(name, flag) {
156 * Format to be printed when called upon
159 public void output(StringBuilder sb) {
162 case Env.XML: sb.append("XML "); break;
163 case Env.JSON: sb.append("JSON "); break;
164 case Env.REMOTE: sb.append("REMOTE "); break;
167 if(flag != Env.CHECKPOINT) {
169 sb.append((end-start)/1000000f);
172 sb.append(" size: ");
173 sb.append(Long.toString(size));
181 public String getProperty(String key) {
182 return get(staticSlot(key),null);
185 public Properties getProperties(String ... filter) {
186 Properties props = new Properties();
188 for(String key : existingStaticSlotNames()) {
189 if(filter.length>0) {
191 for(String f : filter) {
192 if(key.startsWith(f)) {
201 String value = getProperty(key);
203 props.put(key, value);
211 public String getProperty(String key, String defaultValue) {
212 return get(staticSlot(key),defaultValue);
216 public String setProperty(String key, String value) {
217 put(staticSlot(key),value==null?null:value.trim());
221 protected Decryptor decryptor = Decryptor.NULL;
222 protected Encryptor encryptor = Encryptor.NULL;
225 public Decryptor decryptor() {
229 public void set(Decryptor newDecryptor) {
230 decryptor = newDecryptor;
233 public Encryptor encryptor() {
237 public void set(Encryptor newEncryptor) {
238 encryptor = newEncryptor;
242 // @SuppressWarnings("unchecked")
244 public <T> DataFactory<T> newDataFactory(Class<?>... classes) throws APIException {
245 // if(String.class.isAssignableFrom(classes[0]))
246 // return (DataFactory<T>) new StringDF(this);
247 return new JAXBDF<T>(this,classes);
250 // @SuppressWarnings("unchecked")
252 public <T> DataFactory<T> newDataFactory(Schema schema, Class<?>... classes) throws APIException {
253 // if(String.class.isAssignableFrom(classes[0]))
254 // return (DataFactory<T>) new StringDF(this);
255 return new JAXBDF<T>(this, schema, classes);
258 // @SuppressWarnings("unchecked")
260 public<T> DataFactory<T> newDataFactory(QName qName, Class<?> ... classes) throws APIException {
261 // if(String.class.isAssignableFrom(classes[0]))
262 // return (DataFactory<T>) new StringDF(this);
263 return new JAXBDF<T>(this, qName, classes);
267 public<T> DataFactory<T> newDataFactory(Schema schema, QName qName, Class<?> ... classes) throws APIException {
268 return new JAXBDF<T>(this, schema, qName, classes);
272 public BasicTrans newTrans() {
273 return new BasicTrans(this);
276 public void loadFromSystemPropsStartsWith(String ... str) {
277 for(String name : System.getProperties().stringPropertyNames()) {
278 for(String s : str) {
279 if(name.startsWith(s)) {
280 setProperty(name, System.getProperty(name));
290 public void loadToSystemPropsStartsWith(String ... str) {
292 for(String name : existingStaticSlotNames()) {
293 for(String s : str) {
294 if(name.startsWith(s)) {
295 if((value = getProperty(name))!=null)
296 System.setProperty(name,value);
302 public void loadPropFiles(String tag, ClassLoader classloader) throws IOException {
303 String propfiles = getProperty(tag);
304 if(propfiles!=null) {
305 for(String pf : Split.splitTrim(File.pathSeparatorChar, propfiles)) {
306 InputStream is = classloader==null?null:classloader.getResourceAsStream(pf);
308 File f = new File(pf);
310 is = new FileInputStream(f);
314 BufferedReader br = new BufferedReader(new InputStreamReader(is));
317 while((line=br.readLine())!=null) {
319 if(!line.startsWith("#")) {
320 String[] tv = Split.splitTrim('=', line);
322 setProperty(tv[0],tv[1]);
329 } catch (IOException e) {
339 * Create a StaticSlot, and load it from existing Properties
345 public synchronized StaticSlot staticSlot(String name, final String propName) {
346 StaticSlot ss = staticSlot(name);
347 put(ss,getProperty(propName));