/**
 * @(#)KeyMap.java
 * Copyright 2001 Nomura Research Institute, LTD. All rights reserved.
 * RID-3 : Key Map
 * @author  Intelligent Technology Inc.
 * @version 1.00 2002/01/09
 * @see 
 */
package	jp.co.nri.rid.table;

/* java */
import	java.util.*;

/**
 * ユニットを検索するためのキーを保持するハッシュ
 */

public class KeyMap extends HashMap{
//--------[[ open method ]]----------------------------------------------------
	/**
	 * key定義を追加する
	 * @param	myname		自身のユニット名
	 * @param	rname		参照名(任意のユニークな名前)
	 * @param	mykey		自身のキー
	 * @param	unitname	参照ユニット名
	 * @param	unitkey		参照ユニットのキー
	 * @since	1.00
	 */
	public void key(String myname ,String rname ,String mykey ,String unitname ,String unitkey){
		UnitKey key = (UnitKey)get(myname);
		if(null==key){
			key = new UnitKey();
			put(myname ,key);
		}
		key.key(rname ,unitname ,mykey ,unitkey);
	}
	
	/**
	 * ユニットを参照するための自身のキーを取得する
	 * @param	myname	自身のユニット名
	 * @param	rname	参照名(任意のユニークな名前)
	 * @return	自身のキー
	 * @since	1.00
	 */
	public String mykey(String myname ,String rname){
		try{ return ((UnitKey)get(myname)).mykey(rname); }
		catch(NullPointerException e){ return null; }
	}
	
	/**
	 * ユニットを参照するための参照ユニットのユニット名を取得する
	 * @param	myname	自身のユニット名
	 * @param	rname	参照名(任意のユニークな名前)
	 * @return	自身のキー
	 * @since	1.00
	 */
	public String unitname(String myname ,String rname){
		try{ return ((UnitKey)get(myname)).unitname(rname); }
		catch(NullPointerException e){ return null; }
	}
	
	/**
	 * ユニットを参照するための参照ユニットのキーを取得する
	 * @param	myname		自身のユニット名
	 * @param	rname		参照名(任意のユニークな名前)
	 * @return	参照ユニットのキー
	 * @since	1.00
	 */
	public String unitkey(String myname ,String rname){
		try{ return ((UnitKey)get(myname)).unitkey(rname); }
		catch(NullPointerException e){ return null; }
	}

//--------[[ close inner class ]]----------------------------------------------
	private class UnitKey extends HashMap{
	//--------[[ open method ]]------------------------------------------------
		/**
		 * key定義を追加する
		 * @param	name		参照名(任意のユニークな名前)
		 * @param	unitname	参照ユニット名
		 * @param	mykey		自身のキー
		 * @param	unitkey		参照ユニットのキー
		 * @since	1.00
		 */
		public void key(String name ,String unitname ,String mykey ,String unitkey){
			put(name ,new keys(mykey ,unitname ,unitkey));
		}
		
		/**
		 * ユニットを参照するための自身のキーを取得する
		 * @param	name	参照名(任意のユニークな名前)
		 * @return	自身のキー
		 * @since	1.00
		 */
		public String mykey(String name){
			try{ return ((keys)get(name)).mykey; }
			catch(NullPointerException e){ return null; }
		}
		
		/**
		 * ユニットを参照するための参照ユニット名を取得する
		 * @param	name	参照名(任意のユニークな名前)
		 * @return	参照ユニットのキー
		 * @since	1.00
		 */
		public String unitname(String name){
			try{ return ((keys)get(name)).unitname; }
			catch(NullPointerException e){ return null; }
		}
		
		/**
		 * ユニットを参照するための参照ユニットのキーを取得する
		 * @param	name	参照名(任意のユニークな名前)
		 * @return	参照ユニットのキー
		 * @since	1.00
		 */
		public String unitkey(String name){
			try{ return ((keys)get(name)).unitkey; }
			catch(NullPointerException e){ return null; }
		}
	}
	
	private class keys{
		public String mykey;
		public String unitname;
		public String unitkey;
		public keys(String me ,String unit ,String key){
			mykey	= me;
			unitname= unit;
			unitkey	= key;
		}
	}
}
