Package net.sf.basedb.util.bfs
Class MetadataParser
java.lang.Object
net.sf.basedb.util.bfs.MetadataParser
- All Implemented Interfaces:
AutoCloseable
,BfsParser
Parser implementation that parses a BFS metadata file. 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:
- "Manual" parsing, using the
parseToBof()
,nextSection()
andnextEntry()
methods. - Event-based parsing using the
parse(EventHandler)
method. This parser issues the following events:BOF_EVENT
: When the beginning-of-file marker is found.SECTION_EVENT
: When the start of a new section is found.ENTRY_EVENT
: For each entry in a section.SECTION_END_EVENT
: After the last entry in a section.END_OF_FILE_EVENT
: When the end of the file has been reached.
MetadataModel
class implements a simple event handler that collects the information from the metadata file and provides methods for accessing it.
This class may be subclassed to provide customized behaviour.
- Version:
- 2.15
- Author:
- Nicklas
- Last modified
- $Date: 2010-04-20 10:02:16 +0200 (ti, 20 apr 2010) $
-
Field Summary
Modifier and TypeFieldDescriptionEvent type that is issued when the beginning-of-file marker is found.private final EncoderDecoder
Event type that is issued when the end-of-file had been reached.static final EventType<MetadataModel.SectionEntry>
Event type that is issued for each entry in a section in the order they are present in the file.private FlatFileParser
private String
private long
private InputStream
Event type that is issued at the end of each section in the file.Event type that is issued for each new section that is found in the file.private List<MetadataModel.SectionEntry>
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionvoid
close()
Close the parser and relase underlying system resources that are associated with it.static MetadataParser
Utility method for creating a metadata parser for a file in the local file system.static MetadataParser
create
(InputStream in, String filename, long fileSize) Utility method for creating a metadata parser when you have an input stream.static MetadataParser
Utility method for creating a metadata parser for a file in the BASE file system.protected FlatFileParser
Create a new flat file parser that can parse BFS metadata files.decodeValue
(String value) Decode an encoded value.int
Get the current line number.Get the file name that this writer is printing to.long
Get the size in bytes of the file that this parser is reading from.long
Get the number of parsed bytes so far.protected void
handleBof
(EventHandler handler, String subtype) Handle the beginning-of-file marker event.protected void
handleEndOfFile
(EventHandler handler) Handle the end-of-file event.protected void
handleEntry
(EventHandler handler, MetadataModel.SectionEntry entry) Handle the section entry event.protected void
handleSection
(EventHandler handler, String name) Handle the new section event.protected void
handleSectionEnd
(EventHandler handler, String name) Handle the end-of-section event.Get the next entry in the current section.Parse to the next section in the metadata file.void
parse
(EventHandler handler) Parse the input stream and notify the specified event handler with events.Parse the start of the file until the beginning-of-file marker (BFSfile) is found.void
setFilename
(String filename) Set the file name that this writer is printing to.void
setFileSize
(long fileSize) Set the size of the file or -1 if not known.void
Set the input stream that should be parsed.
-
Field Details
-
BOF_EVENT
Event type that is issued when the beginning-of-file marker is found. The event data is a string with the BFS subtype, or null if no subtype was defined. -
SECTION_EVENT
Event type that is issued for each new section that is found in the file. The event data is a string with the name (decoded) of the section. -
ENTRY_EVENT
Event type that is issued for each entry in a section in the order they are present in the file. The event data is aMetadataModel.SectionEntry
object with the decoded key and values. -
SECTION_END_EVENT
Event type that is issued at the end of each section in the file. No event data is submitted. -
END_OF_FILE_EVENT
Event type that is issued when the end-of-file had been reached. No event data is submitted. -
decoder
-
in
-
filename
-
fileSize
private long fileSize -
ffp
-
sectionEntries
-
-
Constructor Details
-
MetadataParser
public MetadataParser()Create a new metadata parser.
-
-
Method Details
-
create
Utility method for creating a metadata parser when you have an input stream.- Parameters:
in
- The input stream the parser should read fromfilename
- Optional, the name of the file the input stream is reading from
-
create
Utility method for creating a metadata parser for a file in the BASE file system.- Parameters:
file
- The file in the BASE file system
-
create
Utility method for creating a metadata parser for a file in the local file system.- Parameters:
file
- The file in the local file system- Throws:
IOException
-
decodeValue
Decode an encoded value. Metadata values are encoded/decoded with aTabCrLfEncoderDecoder
.- Parameters:
value
- The encoded value- Returns:
- The decoded value
-
getFilename
Get the file name that this writer is printing to.- Specified by:
getFilename
in interfaceBfsParser
- Returns:
- The file name or null if not known
-
setFilename
Set the file name that this writer is printing to. -
getFileSize
public long getFileSize()Get the size in bytes of the file that this parser is reading from.- Specified by:
getFileSize
in interfaceBfsParser
- 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 interfaceAutoCloseable
- Specified by:
close
in interfaceBfsParser
-
setInputStream
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
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 dataNullPointerException
- If the stream or event handler is null
-
parseToBof
Parse the start of the file until the beginning-of-file marker (BFSfile) is found. This method can only be called once on a given input stream. To parse a second file, callsetInputStream(InputStream)
again to reset the parser.- Returns:
- The subtype of the BFS or null if no subtype is found
- Throws:
IOException
- If the beginning-of-file marker is not found or if there is any other IO errorIllegalStateException
- If the parsing has already startedNullPointerException
- If no input stream has been specified
-
nextSection
Parse to the next section in the metadata file. This method can be called repeatedly until null is returned which indicates that the end of file has been reached.- Returns:
- The name of the section, or null if no more sections could be found
- Throws:
IOException
- If there is an IO error during the parsingIllegalStateException
- If the parsing has not been started.parseToBof()
must be called before this method is called.
-
nextEntry
Get the next entry in the current section. This method can be called repeatedly until null is returned which indicates that the end of the section has been reached.- Returns:
- The key and values or the entry, or null if no more entries could be found
- Throws:
IOException
- If there is an IO error during the parsingIllegalStateException
- If the parsing has not been started.parseToBof()
must be called before this method is called.
-
getCurrentLine
public int getCurrentLine()Description copied from interface:BfsParser
Get the current line number.- Specified by:
getCurrentLine
in interfaceBfsParser
- 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 interfaceBfsParser
- Returns:
- The number of bytes that has been parsed, or -1 if not known
-
createFlatFileParser
Create a new flat file parser that can parse BFS metadata files. This method should set all regular expressions that are needed to parse the stream (assumed to be UTF-8). -
handleBof
Handle the beginning-of-file marker event. The default implementation sends aBOF_EVENT
notification to the event handler.- Parameters:
handler
- The event handler from theparse(EventHandler)
methodsubtype
- The decoded subtype or null if no subtype was specified in the file
-
handleSection
Handle the new section event. The default implementation sends aSECTION_EVENT
notification to the event handler.- Parameters:
handler
- The event handler from theparse(EventHandler)
methodname
- The decoded name of the section
-
handleEntry
Handle the section entry event. The default implementation sends aENTRY_EVENT
notification to the event handler.- Parameters:
handler
- The event handler from theparse(EventHandler)
methodentry
- Key and values from the section entry
-
handleSectionEnd
Handle the end-of-section event. The default implementation sends aSECTION_END_EVENT
notification to the event handler.- Parameters:
handler
- The event handler from theparse(EventHandler)
methodname
- The decoded name of the section
-
handleEndOfFile
Handle the end-of-file event. The default implementation sends anEND_OF_FILE_EVENT
notification to the event handler.- Parameters:
handler
- The event handler from theparse(EventHandler)
method
-