001    /**
002     * Copyright 2010-2012 The Kuali Foundation
003     *
004     * Licensed under the Educational Community License, Version 2.0 (the "License");
005     * you may not use this file except in compliance with the License.
006     * You may obtain a copy of the License at
007     *
008     * http://www.opensource.org/licenses/ecl2.php
009     *
010     * Unless required by applicable law or agreed to in writing, software
011     * distributed under the License is distributed on an "AS IS" BASIS,
012     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013     * See the License for the specific language governing permissions and
014     * limitations under the License.
015     */
016    package org.kuali.common.util;
017    
018    import java.io.PrintStream;
019    import java.util.List;
020    
021    import org.codehaus.plexus.util.cli.StreamConsumer;
022    import org.kuali.common.util.ignore.Ignore;
023    import org.slf4j.Logger;
024    import org.slf4j.LoggerFactory;
025    
026    public class PrintlnStreamConsumer implements StreamConsumer {
027    
028            private static final Logger logger = LoggerFactory.getLogger(PrintlnStreamConsumer.class);
029    
030            PrintStream printStream;
031            long lineCount = 0;
032            long skipCount = 0;
033            List<Ignore> ignorers;
034            boolean enableIgnorers = true;
035    
036            public PrintlnStreamConsumer() {
037                    this(null);
038            }
039    
040            public PrintlnStreamConsumer(PrintStream printStream) {
041                    this(printStream, null);
042            }
043    
044            public PrintlnStreamConsumer(PrintStream printStream, List<Ignore> ignorers) {
045                    this.printStream = printStream;
046                    this.ignorers = ignorers;
047            }
048    
049            @Override
050            public void consumeLine(String line) {
051                    lineCount++;
052                    if (enableIgnorers && ignore(line, ignorers)) {
053                            skipCount++;
054                            Object[] args = { skipCount, lineCount, line };
055                            logger.debug("{} Skipping line {} [{}]", args);
056                    } else {
057                            printStream.println(line);
058                    }
059            }
060    
061            protected boolean ignore(String line, List<Ignore> ignorers) {
062                    if (ignorers == null) {
063                            return false;
064                    }
065                    for (Ignore ignorer : ignorers) {
066                            if (ignorer.ignore(line)) {
067                                    return true;
068                            }
069                    }
070                    return false;
071            }
072    
073            public PrintStream getPrintStream() {
074                    return printStream;
075            }
076    
077            public void setPrintStream(PrintStream printStream) {
078                    this.printStream = printStream;
079            }
080    
081            public long getLineCount() {
082                    return lineCount;
083            }
084    
085            public void setLineCount(long lineCount) {
086                    this.lineCount = lineCount;
087            }
088    
089            public long getSkipCount() {
090                    return skipCount;
091            }
092    
093            public void setSkipCount(long skipCount) {
094                    this.skipCount = skipCount;
095            }
096    
097            public List<Ignore> getIgnorers() {
098                    return ignorers;
099            }
100    
101            public void setIgnorers(List<Ignore> ignorers) {
102                    this.ignorers = ignorers;
103            }
104    
105    }