/*::.
==================================================================================================================================
=================================================¦ Copyright © 2005 Allen Baker ¦=================================================
                                                 +------------------------------+
File:       HashMapFile.java
Originator: Allen Baker (2005.05.06)
LayoutRev:  5
================================================================================================================================== */



/*.
==========================================================================================
Package
------------------------------------------------------------------------------------------ */
package cosmicabyss.com.lib;



/*.
==========================================================================================
Imports
------------------------------------------------------------------------------------------ */
import java.io.*;
import java.net.*;
import java.util.*;



/*::
======================================================================================================================== *//**
Instances of this class are.

<P>
   <DL>
      <DT>
         <B>
            Example usage:
         </B>
         <DD>
            <BLOCKQUOTE>
               <PRE id="unindent">
                  no example provided
               </PRE>
            </BLOCKQUOTE>
         </DD>
      </DT>
      <DT>
         <B>
            View Source:
         </B>
         <DD>
            <A href="HashMapFile.java.html">
               HashMapFile.java
            </A>
         </DD>
      </DT>
      <DT>
         <B>
            Author:
         </B>
         <DD>
            <A href="mailto:sourcecode.v01@cosmicabyss.com">
               Allen Baker
            </A>
         </DD>
      </DT>
   </DL>
*//*
======================================================================================================================== */
public class HashMapFile
   {



   /*:                                    
   ====================================================================================================
   [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]
   ==================================================================================================== *//**
   This method creates an instance of the TextFile class.

   <P><B>Implementation: </B><A HREF="HashMapFile.java.html#000">View source</A>

   *//*
   ---------------------------------------------------------------------------------------------------- */
   public <Type1,Type2> HashMapFile(File parent, Type1 child, Type2 pDelimChars) throws Exception
      {
      TextFile  textFile = new TextFile(parent,child);
      this.buildHashMap(textFile,pDelimChars);
      }



   /*:                                    
   ====================================================================================================
   [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]
   ==================================================================================================== *//**
   This method creates an instance of the TextFile class.

   <P><B>Implementation: </B><A HREF="HashMapFile.java.html#001">View source</A>

   *//*
   ---------------------------------------------------------------------------------------------------- */
   public <Type1,Type2> HashMapFile(Type1 pathname, Type2 pDelimChars) throws Exception
      {
      TextFile  textFile = new TextFile(pathname);
      this.buildHashMap(textFile,pDelimChars);
      }



   /*:                                    
   ====================================================================================================
   [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]
   ==================================================================================================== *//**
   This method creates an instance of the TextFile class.

   <P><B>Implementation: </B><A HREF="HashMapFile.java.html#002">View source</A>

   *//*
   ---------------------------------------------------------------------------------------------------- */
   public <Type1,Type2,Type3> HashMapFile(Type1 parent, Type2 child, Type3 pDelimChars) throws Exception
      {
      TextFile  textFile = new TextFile(parent,child);
      this.buildHashMap(textFile,pDelimChars);
      }



   /*:                                    
   ====================================================================================================
   [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]
   ==================================================================================================== *//**
   This method creates an instance of the TextFile class.

   <P><B>Implementation: </B><A HREF="HashMapFile.java.html#003">View source</A>

   *//*
   ---------------------------------------------------------------------------------------------------- */
   public <Type> HashMapFile(URI uri, Type pDelimChars) throws Exception
      {
      TextFile  textFile = new TextFile(uri);
      this.buildHashMap(textFile,pDelimChars);
      }



   /*:                                    
   ====================================================================================================
   [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]
   ==================================================================================================== *//**
   This method creates an instance of the TextFile class.

   <P><B>Implementation: </B><A HREF="HashMapFile.java.html#004">View source</A>

   *//*
   ---------------------------------------------------------------------------------------------------- */
   public <Type> HashMapFile(File file, Type pDelimChars) throws Exception
      {
      TextFile  textFile = new TextFile(file.getCanonicalPath());
      this.buildHashMap(textFile,pDelimChars);
      }



   /*:                                    
   ====================================================================================================
   [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]
   ==================================================================================================== *//**
   This method creates an instance of the TextFile class.

   <P><B>Implementation: </B><A HREF="HashMapFile.java.html#005">View source</A>

   *//*
   ---------------------------------------------------------------------------------------------------- */
   public <Type> HashMapFile(XFile xfile, Type pDelimChars) throws Exception
      {
      TextFile  textFile = new TextFile(xfile.getCanonicalPath());
      this.buildHashMap(textFile,pDelimChars);
      }



   /*:                                    
   ====================================================================================================
   [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]
   ==================================================================================================== *//**
   This method creates an instance of the TextFile class.

   <P><B>Implementation: </B><A HREF="HashMapFile.java.html#006">View source</A>

   *//*
   ---------------------------------------------------------------------------------------------------- */
   public <Type> HashMapFile(TextFile tfile, Type pDelimChars) throws Exception
      {
      TextFile  textFile = new TextFile(tfile.getCanonicalPath());
      this.buildHashMap(textFile,pDelimChars);
      }



   /*:                                    
   ====================================================================================================
   [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]
   ==================================================================================================== *//**
   This method ....

   <P><B>Implementation: </B><A HREF="HashMapFile.java.html#007">View source</A>

   @return
      Something
   *//*
   ---------------------------------------------------------------------------------------------------- */
   public <Type> XString get(Type pKey)
      {
      XString val = mHashMap.get(XString.toXString(pKey));
      if (val == null) val = new XString("");
      return val;
      }



   /*:.
   ==============================================================================================================
   @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@[  Protected  ]@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
   ============================================================================================================== */



   /*:.
   ==============================================================================================================
   @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@[  Private  ]@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
   ============================================================================================================== */



   /*.
   ==========================================================================================
   ------------------------------------------------------------------------------------------ */
   private HashMap<XString,XString>  mHashMap = new HashMap<XString,XString>();



   /*:                                    
   ====================================================================================================
   [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]
   ==================================================================================================== *//**
   This method ....

   <P><B>Implementation: </B><A HREF="HashMapFile.java.html#008">View source</A>

   @return
      Something
   *//*
   ---------------------------------------------------------------------------------------------------- */
   private <Type> void buildHashMap(TextFile pTextFile, Type pDelimChars) throws Exception
      {
      XString  delimChars = new XString(pDelimChars);
      XStringsIterator  iter = new XStringsIterator(pTextFile);
      while (iter.hasNext())
         {
         XString  s = iter.next();
         if ((s.length()==0) || (s.charAt(0)=='#')) continue;
         ListOfLists<XString>  wordsAndDelims = s.getWordsAndDelimiters(delimChars);
         ArrayList<XString>             words          = wordsAndDelims.get(0);
         if (words.isEmpty()) continue;
         XString  key = words.get(0);
         XString  val = (words.size()>1)? words.get(1) : new XString("");
         key = key.trim();
         val = val.trim();
         mHashMap.put(key,val);
         }
      }


   /*:.
   ==============================================================================================================
   @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@[  Inner Classes  ]@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
   ============================================================================================================== */



   /*:.
   ==============================================================================================================
   @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@[  Public Static Methods  ]@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
   ============================================================================================================== */



   /*:                                    
   ====================================================================================================
   [][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]
   ==================================================================================================== *//**
   This method allows the HashMapFile class file to be unit tested as a standalone application. It's
   the method that's called when the class is invoked from the command line by using the java
   application launcher - "java". Main() is not a required method, but the practice of putting one in
   each class and wrapping class test code within it allows easy unit testing of the class; and main
   does not need to be removed when testing is complete.

   <P>
      <DL>
         <DT>
            <B>
               Command line usage:
            </B>
            <DD>
               Java cosmicabyss.com.lib.HashMapFile
            </DD>
         </DT>
      </DL>

   <P><B>Implementation: </B><A HREF="HashMapFile.java.html#009">View source</A>

   @param
      pArgs contains the command line arguments with which the class was invoked as an application.
   *//*
   ---------------------------------------------------------------------------------------------------- */
   public static void main(String[] pArgs) throws Exception
      {
HashMapFile f = new HashMapFile("x.txt","=");
System.out.println(f.get("aaa"));
System.out.println(f.get("b"));
System.out.println(f.get("cccc"));
System.out.println(f.get("f"));
System.out.println(f.get("ggg"));
      }



   }  // class HashMapFile