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    }