jmud-0.11/
jmud-0.11/bin/
jmud-0.11/doc/
jmud-0.11/rec/
jmud-0.11/rec/mun/
jmud-0.11/rec/mun/grecia/
jmud-0.11/rec/mun/gunnar/
jmud-0.11/rec/qua/
jmud-0.11/src/bool/
jmud-0.11/src/clone/
jmud-0.11/src/integer/
jmud-0.11/src/misc/
jmud-0.11/src/string/
jmud-0.11/src/util/bit/
jmud-0.11/src/util/color/
jmud-0.11/src/util/file/
jmud-0.11/src/util/jgp/adaptor/
jmud-0.11/src/util/jgp/algorithm/
jmud-0.11/src/util/jgp/container/
jmud-0.11/src/util/jgp/functor/
jmud-0.11/src/util/jgp/interfaces/
jmud-0.11/src/util/jgp/predicate/
jmud-0.11/src/util/log/
jmud-0.11/src/util/state/
jmud-0.11/trash/
import java.util.StringTokenizer;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.FileReader;
import java.io.BufferedReader;

import util.file.InvalidFileFormatException;
import misc.Separators;

class Config {

    static private String meta_startZone      = "ZonaInicial";
    static private String meta_startRoom      = "SalaInicial";
    static private String meta_worldDir       = "DiretorioDeMundo";
    static private String meta_worldFileName  = "ArquivoDeMundo";
    //static private String meta_serialFileName = "ArquivoDeSerie";
    static private String meta_helpFileName   = "ArquivoDeAjuda";
    static private String meta_stateFileName  = "ArquivoDeEstado";
    static private String meta_userFilesDir   = "DiretorioDeUsuarios";
    static private String meta_itemFilesDir   = "DiretorioDePosses";
    static private String meta_boardFilesDir  = "DiretorioDeQuadros";
    static private String meta_maxSpam        = "MaximoDeAbuso";
    static private String meta_motdFileName   = "ArquivoDeMensagemDoDia";
    
    private String startZone      = null;
    private String startRoom      = null;
    private String worldDir       = null;
    private String worldFileName  = null;
    //private String serialFileName = null;
    private String helpFileName   = null;
    private String stateFileName  = null;
    private String userFilesDir   = null;
    private String itemFilesDir   = null;
    private String boardFilesDir  = null;
    private String maxSpam        = null;
    private String motdFileName   = null;

  private String checkNewMeta(String oldInfo, String newInfo) 
    throws InvalidFileFormatException {
    if (oldInfo != null)
      throw new InvalidFileFormatException();
    return newInfo;
  }

  private void checkNullInfo(String info)
    throws InvalidFileFormatException {
      if (info == null)
	throw new InvalidFileFormatException();
  }

  Config(String configFileName) 
    throws FileNotFoundException, IOException, InvalidFileFormatException {
      
      BufferedReader configFile = new BufferedReader(new FileReader(configFileName));
      
      for (; ; ) {

	if (!configFile.ready())
	  throw new InvalidFileFormatException();
	
	String buf = configFile.readLine().trim();
	if (buf.length() == 0)
	  continue;
	StringTokenizer toker = new StringTokenizer(buf);
	if (!toker.hasMoreTokens())
	  continue;
	String meta = toker.nextToken();
	if (meta.startsWith(Separators.REM))
	  continue;
	if (meta.startsWith(Separators.EOF))
	  break;
	if (!toker.hasMoreTokens())
	  throw new InvalidFileFormatException();
	String info = toker.nextToken();
	
	if (meta.equals(meta_startZone))
	    startZone = checkNewMeta(startZone, info);
	else if (meta.equals(meta_startRoom))
	  startRoom = checkNewMeta(startRoom, info);
	else if (meta.equals(meta_worldDir))
	  worldDir = checkNewMeta(worldDir, info);
	/*	else if (meta.equals(meta_serialFileName))
		serialFileName = checkNewMeta(serialFileName, info); */
	else if (meta.equals(meta_worldFileName))
	  worldFileName = checkNewMeta(worldFileName, info);
	/*else if (meta.equals(meta_serialFileName))
	  serialFileName = checkNewMeta(serialFileName, info); */
	else if (meta.equals(meta_helpFileName))
	  helpFileName = checkNewMeta(helpFileName, info);
	else if (meta.equals(meta_stateFileName))
	  stateFileName = checkNewMeta(stateFileName, info);
	else if (meta.equals(meta_userFilesDir))
	  userFilesDir = checkNewMeta(userFilesDir, info);
	else if (meta.equals(meta_itemFilesDir))
	    itemFilesDir = checkNewMeta(itemFilesDir, info);
	else if (meta.equals(meta_boardFilesDir))
	    boardFilesDir = checkNewMeta(boardFilesDir, info);
	else if (meta.equals(meta_maxSpam))
	  maxSpam = checkNewMeta(maxSpam, info);
	else if (meta.equals(meta_motdFileName))
	  motdFileName = checkNewMeta(motdFileName, info);
	else
	  throw new InvalidFileFormatException();
      }

      configFile.close();

      checkNullInfo(startZone);
      checkNullInfo(startRoom);
      checkNullInfo(worldDir);
      checkNullInfo(worldFileName);
      //checkNullInfo(serialFileName);
      checkNullInfo(helpFileName);
      checkNullInfo(stateFileName);
      checkNullInfo(userFilesDir);
      checkNullInfo(itemFilesDir);
      checkNullInfo(boardFilesDir);
      checkNullInfo(maxSpam);
      checkNullInfo(motdFileName);
  }

    int getStartZone() { return Integer.parseInt(startZone); }
    int getStartRoom() { return Integer.parseInt(startRoom); }
    String getWorldDir() { return worldDir; }
    String getWorldFileName() { return worldFileName; }
    //String getSerialFileName() { return serialFileName; } 
    String getHelpFileName() { return helpFileName; }
    String getStateFileName() { return stateFileName; }
    String getUserFilesDir() { return userFilesDir; }
    String getItemFilesDir() { return itemFilesDir; }
    String getBoardFilesDir() { return boardFilesDir; }
    int getMaxSpam() { return Integer.parseInt(maxSpam); }
    String getMotdFileName() { return motdFileName; }
}