/**
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.apache.oozie.util;

import java.io.BufferedReader;
import java.io.IOException;

/**
 * A simplified version of {@link TimestampedMessageParser} which doesn't do any filtering when reading the lines from the Reader.
 * This is useful when processing a Reader where the lines have already been filtered, so we can be more efficient by not
 * doing the same filtering again.
 */
public class SimpleTimestampedMessageParser extends TimestampedMessageParser {

    public SimpleTimestampedMessageParser(BufferedReader reader, XLogFilter filter) {
        super(reader, filter);
    }

    /**
     * This implementation simply returns the next line from the Reader.
     *
     * @return LogLine containing the next line from the Reader
     * @throws IOException if the next line can't be read
     */
    @Override
    protected LogLine parseNextLogLine() throws IOException {
        String line = null;
        if ((line = reader.readLine()) != null) {
            LogLine logLine = new LogLine();
            logLine.setLine(line);
            logLine.setLogParts(splitLogMessage(line));
            return logLine;
        }
        return null;
    }
}