summaryrefslogtreecommitdiffstats
path: root/core/src/main/java/com/att/cadi/Access.java
blob: 34ae9d4beeb55a53772aee594271667ce0458890 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
/*******************************************************************************
 * ============LICENSE_START====================================================
 * * org.onap.aai
 * * ===========================================================================
 * * Copyright © 2017 AT&T Intellectual Property. All rights reserved.
 * * Copyright © 2017 Amdocs
 * * ===========================================================================
 * * Licensed under the Apache License, Version 2.0 (the "License");
 * * you may not use this file except in compliance with the License.
 * * You may obtain a copy of the License at
 * * 
 *  *      http://www.apache.org/licenses/LICENSE-2.0
 * * 
 *  * Unless required by applicable law or agreed to in writing, software
 * * distributed under the License is distributed on an "AS IS" BASIS,
 * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * * See the License for the specific language governing permissions and
 * * limitations under the License.
 * * ============LICENSE_END====================================================
 * *
 * * ECOMP is a trademark and service mark of AT&T Intellectual Property.
 * *
 ******************************************************************************/
package com.att.cadi;

import java.io.IOException;
import java.io.InputStream;

/**
 * Various Environments require different logging mechanisms, or at least allow
 * for different ones. We need the Framework to be able to hook into any particular instance of logging
 * mechanism, whether it be a Logging Object within a Servlet Context, or a direct library like log4j.
 * This interface, therefore, allows maximum pluggability in a variety of different app styles.  
 *  
 *
 */
public interface Access {
	// levels to use
	public enum Level {
		DEBUG(0x1), INFO(0x10), AUDIT(0x100), WARN(0x2000), ERROR(0x4000), INIT(0x8000),NONE(0XFFFF);
		private final int bit;
		
		Level(int ord) {
			bit = ord;
		}
		
		public boolean inMask(int mask) {
			return (mask & bit) == bit;
		}
		
		public int addToMask(int mask) {
			return mask | bit;
		}

		public int delFromMask(int mask) {
			return mask & ~bit;
		}

		public int toggle(int mask) {
			if(inMask(mask)) {
				return delFromMask(mask);
			} else {
				return addToMask(mask);
			}
		}


		public int maskOf() {
			int mask=0;
			for(Level l : values()) {
				if(ordinal()<l.ordinal()) {
					mask|=l.bit;
				}
			}
			return mask;
		}
	}

	/**
	 * Write a variable list of Object's text via the toString() method with appropriate space, etc.
	 * @param elements
	 */
	public void log(Level level, Object ... elements);

	/**
	 * Printf mechanism for Access
	 * @param level
	 * @param fmt
	 * @param elements
	 */
	public void printf(Level level, String fmt, Object ... elements);
	
	/** 
	 * Check if message will log before constructing
	 * @param level
	 * @return
	 */
	public boolean willLog(Level level);

	/**
	 * Write the contents of an exception, followed by a variable list of Object's text via the 
	 * toString() method with appropriate space, etc.
	 * 
	 * The Loglevel is always "ERROR"
	 * 
	 * @param elements
	 */
	public void log(Exception e, Object ... elements);
	
	/**
	 * Set the Level to compare logging too
	 */
	public void setLogLevel(Level level);
		
	/**
	 * It is important in some cases to create a class from within the same Classloader that created
	 * Security Objects.  Specifically, it's pretty typical for Web Containers to separate classloaders
	 * so as to allow Apps with different dependencies. 
	 * @return
	 */
	public ClassLoader classLoader();

	public String getProperty(String string, String def);
	
	public void load(InputStream is) throws IOException;

	/**
	 * if "anytext" is true, then decryption will always be attempted.  Otherwise, only if starts with 
	 * Symm.ENC
	 * @param encrypted
	 * @param anytext
	 * @return
	 * @throws IOException
	 */
	public String decrypt(String encrypted, boolean anytext) throws IOException;

	public static final Access NULL = new Access() {
		public void log(Level level, Object... elements) {
		}

		@Override
		public void printf(Level level, String fmt, Object... elements) {
		}

		public void log(Exception e, Object... elements) {
		}

		public ClassLoader classLoader() {
			return this.classLoader();
		}

		public String getProperty(String string, String def) {
			return null;
		}

		public void load(InputStream is) throws IOException {
		}

		public void setLogLevel(Level level) {
		}

		public String decrypt(String encrypted, boolean anytext) throws IOException {
			return encrypted;
		}

		@Override
		public boolean willLog(Level level) {
			return false;
		}
	};


}