2.17.2: 2011-06-17

net.sf.basedb.util.bfs
Class AnnotationParser

java.lang.Object
  extended by net.sf.basedb.util.bfs.AnnotationParser
All Implemented Interfaces:
BfsParser

public class AnnotationParser
extends Object
implements BfsParser

Parser implementation that parses a BFS annotation files. Before parsing is started the stream to parse must be specified by calling setInputStream(InputStream). The actual parsing can be done in two different ways:

This class may be subclassed to provide customized behaviour.

Version:
2.15
Author:
Nicklas
Last modified
$Date: 2010-04-20 10:02:16 +0200 (Tue, 20 Apr 2010) $

Field Summary
static EventType<String[]> DATA_EVENT
          Event thep that is issued for each data line.
private  EncoderDecoder decoder
           
static EventType<Object> END_OF_FILE_EVENT
          Event type that is issued when the end-of-file had been reached.
private  FlatFileParser ffp
           
private  String filename
           
private  long fileSize
           
static EventType<String[]> HEADER_EVENT
          Event type that is issued when the header line is found.
private  InputStream in
           
private  int numColumns
           
private  Set<Integer> usedIds
           
 
Constructor Summary
AnnotationParser()
          Create a new annotation parser.
 
Method Summary
 void close()
          Close the parser and relase underlying system resources that are associated with it.
static AnnotationParser create(File file)
          Utility method for creating an annotation parser for a file in the BASE file system.
static AnnotationParser create(File file)
          Utility method for creating an annotation parser for a file in the local file system.
static AnnotationParser create(InputStream in, String filename, long size)
          Utility method for creating an annotation parser when you have an input stream.
protected  FlatFileParser createFlatFileParser(InputStream in)
          Create a new flat file parser that can parse BFS annotation files.
 String decodeValue(String value)
          Decode an encoded value.
 int getCurrentLine()
          Get the current line number.
 String getFilename()
          Get the file name that this parser is reading from.
 long getFileSize()
          Get the size in bytes of the file that this parser is reading from.
 long getParsedBytes()
          Get the number of parsed bytes so far.
protected  void handleData(EventHandler handler, String[] data)
          Handle the data event.
protected  void handleEndOfFile(EventHandler handler)
          Handle the end-of-file event.
protected  void handleHeader(EventHandler handler, String[] headers)
          Handle the header-found event.
 String[] nextData()
          Get the next data line in the annotations file.
 void parse(EventHandler handler)
          Parse the input stream and notify the specified event handler with events.
 String[] parseToBof()
          Parse the header line of the annotations file.
 void setFilename(String filename)
          Set the file name that this parser is reading from.
 void setFileSize(long fileSize)
          Set the size of the file or -1 if not known.
 void setInputStream(InputStream in)
          Set the input stream that should be parsed.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

HEADER_EVENT

public static final EventType<String[]> HEADER_EVENT
Event type that is issued when the header line is found. The event data is a string array with the headers, including the ID header.


DATA_EVENT

public static final EventType<String[]> DATA_EVENT
Event thep that is issued for each data line. The event data is a string array with that data, including the ID column.


END_OF_FILE_EVENT

public static final EventType<Object> END_OF_FILE_EVENT
Event type that is issued when the end-of-file had been reached. No event data is submitted.


decoder

private final EncoderDecoder decoder

in

private InputStream in

filename

private String filename

fileSize

private long fileSize

ffp

private FlatFileParser ffp

numColumns

private int numColumns

usedIds

private Set<Integer> usedIds
Constructor Detail

AnnotationParser

public AnnotationParser()
Create a new annotation parser.

Method Detail

create

public static AnnotationParser create(InputStream in,
                                      String filename,
                                      long size)
Utility method for creating an annotation parser when you have an input stream.

Parameters:
in - The input stream the parser should read from
filename - Optional, the name of the file the input stream is reading from
size - The size of the file in bytes, or -1 if not known

create

public static AnnotationParser create(File file)
Utility method for creating an annotation parser for a file in the BASE file system.

Parameters:
file - The file in the BASE file system

create

public static AnnotationParser create(File file)
                               throws IOException
Utility method for creating an annotation parser for a file in the local file system.

Parameters:
file - The file in the local file system
Throws:
IOException

decodeValue

public String decodeValue(String value)
Decode an encoded value. Values are encoded/decoded with a TabCrLfEncoderDecoder.

Parameters:
value - The encoded value
Returns:
The decoded value

getFilename

public String getFilename()
Get the file name that this parser is reading from.

Specified by:
getFilename in interface BfsParser
Returns:
The file name or null if not known

setFilename

public void setFilename(String filename)
Set the file name that this parser is reading from.


getFileSize

public long getFileSize()
Get the size in bytes of the file that this parser is reading from.

Specified by:
getFileSize in interface BfsParser
Returns:
The size or -1 if not known

setFileSize

public void setFileSize(long fileSize)
Set the size of the file or -1 if not known.


close

public void close()
Description copied from interface: BfsParser
Close the parser and relase underlying system resources that are associated with it.

Specified by:
close in interface BfsParser

setInputStream

public void setInputStream(InputStream in)
Set the input stream that should be parsed. This will also reset the parser. All information from a previously parsed file is lost.

Parameters:
in - The stream to parse (in UTF-8 format)

parse

public void parse(EventHandler handler)
           throws IOException
Parse the input stream and notify the specified event handler with events. The event handler is responsible for keeping track of and storing the data of interest.

Parameters:
handler - An event handler
Throws:
IOException - If there is an error reading the stream data
NullPointerException - If the stream or event handler is null

parseToBof

public String[] parseToBof()
                    throws IOException
Parse the header line of the annotations file. This method can only be called once on a given input stream. To parse a second file, call setInputStream(InputStream) again to reset the parser.

Returns:
An array with the column headers
Throws:
IOException - If the header line is not found or if there is any other IO error
IllegalStateException - If the parsing has already started
NullPointerException - If no input stream has been specified

nextData

public String[] nextData()
                  throws IOException
Get the next data line in the annotations file.

Returns:
An array with the data, or null if no more data is found
Throws:
IOException - If there is an IO error or if the data is invalid
IllegalStateException - If not parseToBof() has been called

getCurrentLine

public int getCurrentLine()
Description copied from interface: BfsParser
Get the current line number.

Specified by:
getCurrentLine in interface BfsParser
Returns:
The line number, starting at 1 for the first line in the file, or -1 if not known

getParsedBytes

public long getParsedBytes()
Description copied from interface: BfsParser
Get the number of parsed bytes so far.

Specified by:
getParsedBytes in interface BfsParser
Returns:
The number of bytes that has been parsed, or -1 if not known

createFlatFileParser

protected FlatFileParser createFlatFileParser(InputStream in)
Create a new flat file parser that can parse BFS annotation files. This method should set all regular expressions that are needed to parse the stream (assumed to be UTF-8).


handleHeader

protected void handleHeader(EventHandler handler,
                            String[] headers)
Handle the header-found event. The default implemention sends a HEADER_EVENT to the event handler

Parameters:
handler - The event handler from the parse(EventHandler) method
headers - An array with the column headers

handleData

protected void handleData(EventHandler handler,
                          String[] data)
Handle the data event. The default implemention sends a DATA_EVENT to the event handler

Parameters:
handler - The event handler from the parse(EventHandler) method
data - An array with the data

handleEndOfFile

protected void handleEndOfFile(EventHandler handler)
Handle the end-of-file event. The default implementation sends an END_OF_FILE_EVENT notification to the event handler.

Parameters:
handler - The event handler from the parse(EventHandler) method

2.17.2: 2011-06-17