001: package org.jzonic.jlo;
002:
003: import java.util.StringTokenizer;
004:
005: /**
006: */
007: public class Target {
008:
009: public static final Target off = new Target("off", 0);
010: public static final Target trace = new Target("trace", 1);
011: public static final Target info = new Target("info", 2);
012: public static final Target debug = new Target("debug", 4);
013: public static final Target warn = new Target("warn", 8);
014: public static final Target error = new Target("error", 16);
015: public static final Target fatal = new Target("fatal", 32);
016: public static final Target all = new Target("all", 255);
017:
018: private Target target;
019: private int value;
020: private String targetName;
021:
022: /**
023: * Constructor for the Target object
024: */
025: protected Target() {
026: value = all.intValue();
027: targetName = "all";
028: }
029:
030: /**
031: */
032: protected Target(String name, int targets) {
033: value = targets;
034: targetName = name;
035: }
036:
037: /**
038: * Generate the hashcode
039: *
040: */
041: public int hashCode() {
042: return value;
043: }
044:
045: /**
046: * Compare two objects for value equality.
047: *
048: */
049: public boolean equals(Object ox) {
050: if (!(ox instanceof Target)) {
051: return false;
052: }
053:
054: Target mytarget = (Target) ox;
055:
056: if (mytarget.intValue() == value
057: && (mytarget.getName().equals(targetName))) {
058: return true;
059: } else {
060: return false;
061: }
062: }
063:
064: /**
065: */
066: public int intValue() {
067: return value;
068: }
069:
070: /**
071: */
072: public String getName() {
073: return targetName;
074: }
075:
076: public static int parse(String line) {
077: // if nothing found then set ALL
078: if (line == null) {
079: return Target.all.intValue();
080: }
081: line = line.toLowerCase();
082: int value = 0;
083: StringTokenizer tokenizer = new StringTokenizer(line, ",");
084: while (tokenizer.hasMoreElements()) {
085: String current = (String) tokenizer.nextElement();
086: if (current.equals("all")) {
087: value = Target.all.intValue();
088: } else if (current.equals("off")) {
089: return 0;
090: } else if (current.startsWith("!")) {
091: int targetValue = getTargetByName(current);
092: if (targetValue != -1) {
093: if ((value & targetValue) == targetValue) {
094: value -= targetValue;
095: }
096: }
097: } else {
098: int targetValue = getTargetByName(current);
099: if (targetValue != -1) {
100: if ((value & targetValue) == 0) {
101: value += targetValue;
102: }
103: }
104: }
105: }
106: return value;
107: }
108:
109: private static int getTargetByName(String name) {
110: if (name.startsWith("!")) {
111: name = name.substring(1);
112: }
113:
114: if (name.equals("trace")) {
115: return Target.trace.intValue();
116: }
117:
118: if (name.equals("info")) {
119: return Target.info.intValue();
120: }
121:
122: if (name.equals("debug")) {
123: return Target.debug.intValue();
124: }
125:
126: if (name.equals("warn")) {
127: return Target.warn.intValue();
128: }
129:
130: if (name.equals("error")) {
131: return Target.error.intValue();
132: }
133:
134: if (name.equals("fatal")) {
135: return Target.fatal.intValue();
136: }
137:
138: return -1;
139: }
140:
141: /**
142: */
143: public String toString() {
144: String retValue = "Target: name=" + targetName + " value="
145: + value;
146: return retValue;
147: }
148: }
|