001/*
002 * The contents of this file are subject to the terms of the Common Development and
003 * Distribution License (the License). You may not use this file except in compliance with the
004 * License.
005 *
006 * You can obtain a copy of the License at legal/CDDLv1.0.txt. See the License for the
007 * specific language governing permission and limitations under the License.
008 *
009 * When distributing Covered Software, include this CDDL Header Notice in each file and include
010 * the License file at legal/CDDLv1.0.txt. If applicable, add the following below the CDDL
011 * Header, with the fields enclosed by brackets [] replaced by your own identifying
012 * information: "Portions Copyright [year] [name of copyright owner]".
013 *
014 * Copyright 2008 Sun Microsystems, Inc.
015 * Portions Copyright 2014-2015 ForgeRock AS.
016 */
017
018package org.opends.quicksetup.util;
019
020import java.io.BufferedReader;
021
022import org.forgerock.i18n.LocalizableMessage;
023import org.forgerock.i18n.slf4j.LocalizedLogger;
024
025/**
026   * This class is used to read an input stream and process ouput.
027 */
028public abstract class OutputReader {
029
030  private static final LocalizedLogger logger = LocalizedLogger.getLoggerForThisClass();
031
032  /**
033   * Called whenever new input is read from the reader.
034   * @param line String representing new input
035   */
036  public abstract void processLine(String line);
037
038  /**
039   * The protected constructor.
040   *
041   * @param reader  the BufferedReader of the stop process.
042   */
043  public OutputReader(final BufferedReader reader) {
044    Thread t = new Thread(new Runnable() {
045      public void run() {
046        try {
047          String line;
048          while (null != (line = reader.readLine())) {
049            processLine(line);
050          }
051        } catch (Throwable t) {
052          logger.info(LocalizableMessage.raw("error reading output"), t);
053        }
054      }
055    });
056    t.start();
057  }
058}