001    package org.codehaus.mojo.exec;
002    
003    /*
004     * Licensed to the Apache Software Foundation (ASF) under one
005     * or more contributor license agreements.  See the NOTICE file
006     * distributed with this work for additional information
007     * regarding copyright ownership.  The ASF licenses this file
008     * to you under the Apache License, Version 2.0 (the
009     * "License"); you may not use this file except in compliance
010     * with the License.  You may obtain a copy of the License at
011     *
012     *     http://www.apache.org/licenses/LICENSE-2.0
013     *
014     * Unless required by applicable law or agreed to in writing,
015     * software distributed under the License is distributed on an
016     * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
017     * KIND, either express or implied.  See the License for the
018     * specific language governing permissions and limitations
019     * under the License.
020     */
021    
022    import java.io.PrintStream;
023    import org.apache.maven.plugin.logging.Log;
024    
025    /**
026     * a Simple Maven Log that outputs to a Stream
027     */
028    class StreamLog implements Log {
029        static final int DEBUG = 0;
030        static final int INFO = 1;
031        static final int WARN = 2;
032        static final int ERROR = 3;
033    
034        private int level = INFO;
035    
036        public void setLevel(int level) {
037            if (level < DEBUG || level > ERROR) {
038                throw new IllegalStateException("invalid level: " + level);
039            }
040            this.level = level;
041        }
042    
043        private final PrintStream s;
044    
045        StreamLog(PrintStream s) {
046            this.s = s;
047        }
048    
049        public void debug(CharSequence content) {
050            if (isDebugEnabled()) {
051                s.println(content);
052            }
053        }
054    
055        public void debug(CharSequence content, Throwable error) {
056            if (isDebugEnabled()) {
057                s.println(content);
058            }
059        }
060    
061        public void debug(Throwable error) {
062            if (isDebugEnabled()) {
063                error.printStackTrace(s);
064            }
065        }
066    
067        public void error(CharSequence content) {
068            if (isErrorEnabled()) {
069                s.println(content);
070            }
071        }
072    
073        public void error(CharSequence content, Throwable error) {
074            error(content);
075            error(error);
076        }
077    
078        public void error(Throwable error) {
079            if (isErrorEnabled()) {
080                error.printStackTrace(s);
081            }
082        }
083    
084        public void info(CharSequence content) {
085            if (isInfoEnabled()) {
086                s.println(content);
087            }
088        }
089    
090        public void info(CharSequence content, Throwable error) {
091            info(content);
092            info(error);
093        }
094    
095        public void info(Throwable error) {
096            if (isInfoEnabled()) {
097                error.printStackTrace(s);
098            }
099        }
100    
101        public boolean isDebugEnabled() {
102            return level >= DEBUG;
103        }
104    
105        public boolean isErrorEnabled() {
106            return level >= ERROR;
107        }
108    
109        public boolean isInfoEnabled() {
110            return level >= INFO;
111        }
112    
113        public boolean isWarnEnabled() {
114            return level >= WARN;
115        }
116    
117        public void warn(CharSequence content) {
118            if (isWarnEnabled()) {
119                s.println(content);
120            }
121        }
122    
123        public void warn(CharSequence content, Throwable error) {
124            warn(content);
125            warn(error);
126        }
127    
128        public void warn(Throwable error) {
129            if (isWarnEnabled()) {
130                error.printStackTrace(s);
131            }
132        }
133    }