001/**
002 * Copyright 2010-2014 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 */
016package org.kuali.common.util.stream;
017
018import static com.google.common.base.Optional.absent;
019import static java.util.Collections.synchronizedList;
020
021import java.util.ArrayList;
022import java.util.List;
023
024import org.codehaus.plexus.util.cli.StreamConsumer;
025
026import com.google.common.base.Joiner;
027import com.google.common.base.Optional;
028import com.google.common.collect.ImmutableList;
029
030public final class StringStreamConsumer implements StreamConsumer {
031
032        private static final String LS = System.getProperty("line.separator");
033        private final List<String> lines = synchronizedList(new ArrayList<String>());
034
035        @Override
036        public void consumeLine(String line) {
037                lines.add(line);
038        }
039
040        public synchronized Optional<String> getOutput() {
041                if (lines.size() > 0) {
042                        return Optional.of(Joiner.on(LS).join(lines));
043                } else {
044                        return absent();
045                }
046        }
047
048        public synchronized List<String> getLines() {
049                return ImmutableList.copyOf(lines);
050        }
051
052}