001package org.kuali.common.util.log;
002
003import static com.google.common.base.Preconditions.checkNotNull;
004
005import org.kuali.common.util.execute.Executable;
006
007public class LoggerExecutable implements Executable {
008
009        private static final Object[] EMPTY_OBJECT_ARRAY = {};
010
011        private final LoggerContext context;
012        private final boolean skip;
013
014        @Override
015        public void execute() {
016                if (!skip) {
017                        LoggerUtils.logMsg(context.getMsg(), context.getArgs().toArray(EMPTY_OBJECT_ARRAY), context.getLogger(), context.getLevel());
018                }
019        }
020
021        private LoggerExecutable(Builder builder) {
022                this.context = builder.context;
023                this.skip = builder.skip;
024        }
025
026        public static LoggerExecutable create(LoggerContext context) {
027                return builder(context).build();
028        }
029
030        public static Builder builder(LoggerContext context) {
031                return new Builder(context);
032        }
033
034        public static class Builder {
035
036                // Required
037                private final LoggerContext context;
038
039                // Optional
040                private boolean skip = false;
041
042                public Builder(LoggerContext context) {
043                        this.context = context;
044                }
045
046                public Builder skip(boolean skip) {
047                        this.skip = skip;
048                        return this;
049                }
050
051                public LoggerExecutable build() {
052                        LoggerExecutable instance = new LoggerExecutable(this);
053                        validate(instance);
054                        return instance;
055                }
056
057                private static void validate(LoggerExecutable instance) {
058                        checkNotNull(instance.context, "context may not be null");
059                }
060        }
061
062        public LoggerContext getContext() {
063                return context;
064        }
065
066        public boolean isSkip() {
067                return skip;
068        }
069
070}