org.crosswire.jsword.book.sword
Class ConfigEntryTable

java.lang.Object
  extended by org.crosswire.jsword.book.sword.ConfigEntryTable

public class ConfigEntryTable
extends Object

A utility class for loading the entries in a Sword module's conf file. Since the conf files are manually maintained, there can be all sorts of errors in them. This class does robust checking and reporting.

Config file format. See also: http://sword.sourceforge.net/cgi-bin/twiki/view/Swordapi/ConfFileLayout

The contents of the About field are in rtf.

\ is used as a continuation line.

Distribution Licence:
JSword is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License, version 2 as published by the Free Software Foundation.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
The License is available on the internet here, or by writing to: Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
The copyright to this program is held by it's authors.

Version:
$Id: ConfigEntryTable.java,v 1.4 2005/03/21 02:37:28 dmsmith Exp $
Author:
Mark Goodwin [mark at thorubio dot org], Joe Walker [joe at eireneh dot com], Jacky Cheung, DM Smith [dmsmith555 at yahoo dot com]
See Also:
Licence

Field Summary
static ConfigEntryType[] BASIC_INFO
           
static ConfigEntryType[] COPYRIGHT_INFO
           
static ConfigEntryType[] FEATURE_INFO
           
private  String internal
          The original name of this config file from mods.d.
static ConfigEntryType[] LANG_INFO
           
private static Logger log
          The log stream
private  ModuleType moduleType
          The ModuleType for this ConfigEntry
private  String readahead
          A helper for the reading of the conf file.
static ConfigEntryType[] REQUIRED
          These are the elements that JSword requires.
private  boolean supported
          True if this module's config type can be used by JSword.
static ConfigEntryType[] SYSTEM_INFO
           
private  Map table
          A map of lists of known config entries.
 
Constructor Summary
ConfigEntryTable(Reader in, String moduleName)
          Loads a sword config from a given Reader.
 
Method Summary
private  void add(ConfigEntryType type, String aValue)
          A helper to create/replace a value for a given type.
private  void adjustBookType()
           
private  void adjustLanguage()
           
private  void adjustName()
           
private  String advance(BufferedReader bin)
          Get the next line from the input
private  void backup(String oops)
          Read too far ahead and need to return a line.
private  void getContinuation(ConfigEntry configEntry, BufferedReader bin, StringBuffer buf)
          Get continuation lines, if any.
 Iterator getKeys()
          Returns an Enumeration of all the keys found in the config file.
 ModuleType getModuleType()
          Returns an Enumeration of all the keys found in the config file.
 Object getValue(ConfigEntryType type)
          Gets a particular ConfigEntry's value by its type
private  boolean isKeyLine(String line)
          Does this line of text represent a key/value pair?
 boolean isSupported()
          Determines whether the Sword Module's conf is supported by JSword.
private  void loadContents(BufferedReader in)
           
private  void loadFile(Reader in)
           
private  void loadInitials(BufferedReader in)
           
 boolean match(ConfigEntryType type, Object search)
          Determine whether this ConfigEntryTable has the ConfigEntry and it matches the value.
 org.jdom.Element toOSIS()
          Sort the keys for a more meaningful presentation order.
private  void toOSIS(OSISUtil.ObjectFactory factory, org.jdom.Element ele, String aTitle, ConfigEntryType[] category)
          Build an ordered map so that it displays in a consistent order.
private  void validate()
          Determine which books are not supported.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

REQUIRED

public static final ConfigEntryType[] REQUIRED
These are the elements that JSword requires. They are a superset of those that Sword requires.


BASIC_INFO

public static final ConfigEntryType[] BASIC_INFO

LANG_INFO

public static final ConfigEntryType[] LANG_INFO

COPYRIGHT_INFO

public static final ConfigEntryType[] COPYRIGHT_INFO

FEATURE_INFO

public static final ConfigEntryType[] FEATURE_INFO

SYSTEM_INFO

public static final ConfigEntryType[] SYSTEM_INFO

log

private static final Logger log
The log stream


supported

private boolean supported
True if this module's config type can be used by JSword.


moduleType

private ModuleType moduleType
The ModuleType for this ConfigEntry


table

private Map table
A map of lists of known config entries.


internal

private String internal
The original name of this config file from mods.d. This is only used for managing warnings and errors


readahead

private String readahead
A helper for the reading of the conf file.

Constructor Detail

ConfigEntryTable

public ConfigEntryTable(Reader in,
                        String moduleName)
                 throws IOException
Loads a sword config from a given Reader.

Throws:
IOException
Method Detail

isSupported

public boolean isSupported()
Determines whether the Sword Module's conf is supported by JSword.


getKeys

public Iterator getKeys()
Returns an Enumeration of all the keys found in the config file.


getModuleType

public ModuleType getModuleType()
Returns an Enumeration of all the keys found in the config file.


getValue

public Object getValue(ConfigEntryType type)
Gets a particular ConfigEntry's value by its type

Parameters:
type - of the ConfigEntry
Returns:
the requested value, the default (if there is no entry) or null (if there is no default)

match

public boolean match(ConfigEntryType type,
                     Object search)
Determine whether this ConfigEntryTable has the ConfigEntry and it matches the value.

Parameters:
type - The kind of ConfigEntry to look for
search - the value to match against
Returns:
true if there is a matching ConfigEntry matching the value

toOSIS

public org.jdom.Element toOSIS()
Sort the keys for a more meaningful presentation order. TODO(DM): Replace this with a conversion of the properties to XML and then by XSLT to HTML.


loadFile

private void loadFile(Reader in)
               throws IOException
Throws:
IOException

loadContents

private void loadContents(BufferedReader in)
                   throws IOException
Throws:
IOException

loadInitials

private void loadInitials(BufferedReader in)
                   throws IOException
Throws:
IOException

getContinuation

private void getContinuation(ConfigEntry configEntry,
                             BufferedReader bin,
                             StringBuffer buf)
                      throws IOException
Get continuation lines, if any.

Throws:
IOException

advance

private String advance(BufferedReader bin)
                throws IOException
Get the next line from the input

Parameters:
bin - The reader to get data from
Returns:
the next line
Throws:
IOException

backup

private void backup(String oops)
Read too far ahead and need to return a line.


isKeyLine

private boolean isKeyLine(String line)
Does this line of text represent a key/value pair?


add

private void add(ConfigEntryType type,
                 String aValue)
A helper to create/replace a value for a given type.

Parameters:
type -
aValue -

adjustLanguage

private void adjustLanguage()

adjustBookType

private void adjustBookType()

adjustName

private void adjustName()

validate

private void validate()
Determine which books are not supported. Also, report on problems.


toOSIS

private void toOSIS(OSISUtil.ObjectFactory factory,
                    org.jdom.Element ele,
                    String aTitle,
                    ConfigEntryType[] category)
Build an ordered map so that it displays in a consistent order.


Copyright ? 2003-2004