001package org.kuali.common.util.log.log4j.model;
002
003import java.util.ArrayList;
004import java.util.Collections;
005import java.util.List;
006
007import javax.xml.bind.annotation.XmlAttribute;
008import javax.xml.bind.annotation.XmlElement;
009import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
010
011import org.kuali.common.util.Assert;
012import org.kuali.common.util.CollectionUtils;
013import org.kuali.common.util.nullify.NullUtils;
014import org.kuali.common.util.xml.jaxb.adapter.OmitNoneStringAdapter;
015import org.kuali.common.util.xml.jaxb.adapter.OmitTrueAdapter;
016
017public class Logger {
018
019        public static final List<Logger> EMPTY = Collections.<Logger> emptyList();
020        public static final boolean DEFAULT_ADDITIVITY = true;
021        public static final Logger DEFAULT = new Logger();
022
023        @XmlAttribute
024        @XmlJavaTypeAdapter(OmitNoneStringAdapter.class)
025        private final String name;
026
027        @XmlElement(name = "appender-ref")
028        private final List<AppenderRef> references;
029
030        @XmlElement
031        private final Level level;
032
033        @XmlAttribute
034        @XmlJavaTypeAdapter(OmitTrueAdapter.class)
035        private final Boolean additivity;
036
037        private Logger() {
038                this(NullUtils.NONE, AppenderRef.EMPTY, Level.DEFAULT);
039        }
040
041        public Logger(String name, Level level) {
042                this(name, AppenderRef.EMPTY, level, DEFAULT_ADDITIVITY);
043        }
044
045        public Logger(String name, List<AppenderRef> references) {
046                this(name, references, Level.DEFAULT, DEFAULT_ADDITIVITY);
047        }
048
049        public Logger(String name, List<AppenderRef> references, Level level) {
050                this(name, references, level, DEFAULT_ADDITIVITY);
051        }
052
053        public Logger(String name, List<AppenderRef> references, Level level, boolean additivity) {
054                Assert.noBlanks(name);
055                Assert.noNulls(references, level);
056                this.name = name;
057                this.references = new ArrayList<AppenderRef>(references);
058                this.level = level;
059                this.additivity = additivity;
060        }
061
062        public List<AppenderRef> getReferences() {
063                return Collections.unmodifiableList(references);
064        }
065
066        public boolean getAdditivity() {
067                return additivity;
068        }
069
070        public String getName() {
071                return name;
072        }
073
074        public Level getLevel() {
075                return level;
076        }
077
078        public static boolean isThresholdNull(Logger logger) {
079                return Threshold.NULL.equals(logger.getLevel().getValue());
080        }
081
082        public static Logger getRootLogger(AppenderRef reference, Level level) {
083                return getRootLogger(CollectionUtils.singletonList(reference), level);
084        }
085
086        public static Logger getRootLogger(List<AppenderRef> references, Level level) {
087                return new Logger(NullUtils.NONE, references, level);
088        }
089}