001 package net.sf.logdistiller.logtypes;
002
003 /*
004 * Licensed under the Apache 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.apache.org/licenses/LICENSE-2.0
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
017 import java.io.*;
018 import java.text.ParseException;
019
020 import net.sf.logdistiller.LogEvent;
021 import net.sf.logdistiller.LogType;
022
023 /**
024 * Generic log event for simple files where one line is one logevent, with an unique attribute named <code>text</code>.
025 * By default, the classification rules generated by the GUI for this type of logs won't be able to sort events, as the
026 * log event structure is too generic.
027 */
028 public class SimpleLineLogEvent
029 extends LogEvent
030 {
031 public final static String ID = "simple";
032
033 public final String text;
034
035 public final static LogType LOGTYPE = new LogType.Basic( ID );
036
037 private final static String[] ATTRIBUTE_NAMES = { "logSource", "text" };
038
039 public final static LogType.Description DESCRIPTION = new Description( (LogType.Basic) LOGTYPE, ATTRIBUTE_NAMES );
040
041 public SimpleLineLogEvent( Factory factory, String rawLog )
042 throws ParseException
043 {
044 super( factory, rawLog );
045 this.text = rawLog;
046 setAttributes( new String[] { factory.getLogSource(), text } );
047 }
048
049 private static class Description
050 extends LogType.Description
051 {
052 public Description( LogType.Basic logtype, String[] attributeNames )
053 {
054 super( logtype, attributeNames );
055 logtype.setDescription( this );
056 }
057
058 public LogEvent.Factory newFactory( Reader reader, String logSource )
059 throws IOException
060 {
061 return new Factory( this, reader, logSource );
062 }
063
064 public int getTimestampAttribute()
065 {
066 return -1;
067 }
068 }
069
070 private static class Factory
071 extends LogEvent.Factory
072 {
073 private final LineNumberReader reader;
074
075 public Factory( Description description, Reader reader, String logSource )
076 throws FileNotFoundException
077 {
078 super( description, logSource );
079 this.reader = new LineNumberReader( reader );
080 }
081
082 protected LogEvent readNextEvent()
083 throws IOException, ParseException
084 {
085 String curLine = reader.readLine();
086 if ( curLine == null )
087 {
088 // EOF
089 return null;
090 }
091 return new SimpleLineLogEvent( this, curLine );
092 }
093 }
094 }