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

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

/**
 * 他のユニットを参照するときに使う属性定義のハッシュ
 * 
 */
public class AttributeMap extends HashMap{
//--------[[ open method ]]----------------------------------------------------
	/**
	 * 参照ユニット定義を追加する
	 * @param	myname	自身のユニット名
	 * @param	myattr	自身の属性名
	 * @param	rname	参照ユニット名
	 * @param	rattr	参照ユニットの属性名
	 * @since	1.00
	 */
	public void add(String myname ,String myattr ,String rname ,String rattr){
		Attributes attributes = (Attributes)get(myname);
		if(null==attributes){
			attributes = new Attributes();
			put(myname ,attributes);
		}
		attributes.add(myattr ,rname ,rattr);
	}
	
	/**
	 * 参照するユニット名を取得する
	 * @param	unit	自身のユニット名
	 * @param	attr	自身の属性名
	 * @return	ユニット名
	 * @since	1.00
	 */
	public String unit(String unit ,String attr){
		try{ return ((Attributes)get(unit)).unit(attr); }
		catch(NullPointerException e){ return null; }
	}
	
	/**
	 * 参照する属性名を取得する
	 * @param	unit	自身のユニット名
	 * @param	attr	自身の属性名
	 * @return	属性名
	 * @since	1.00
	 */
	public String attr(String unit ,String attr){
		try{ return ((Attributes)get(unit)).attr(attr); }
		catch(NullPointerException e){ return null; }
	}

//--------[[ close inner class ]]----------------------------------------------
	private class Attributes extends HashMap{
	//--------[[ open method ]]------------------------------------------------
		/**
		 * 参照属性定義を追加する
		 * @param	name	自身の属性名
		 * @param	rname	参照ユニット名
		 * @param	rattr	参照ユニットの属性名
		 * @since	1.00
		 */
		public void add(String name ,String rname ,String rattr){
			put(name ,new Unit(rname ,rattr));
		}
		
		/**
		 * 参照するユニット名を取得する
		 * @param	name	自身の属性名
		 * @return	ユニット名
		 * @since	1.00
		 */
		public String unit(String name){
			try{ return ((Unit)get(name)).unit; }
			catch(NullPointerException e){ return null; }
		}
		
		/**
		 * 参照する属性名を取得する
		 * @param	name	自身の属性名
		 * @return	属性名
		 * @since	1.00
		 */
		public String attr(String name){
			try{ return ((Unit)get(name)).attr; }
			catch(NullPointerException e){ return null; }
		}
	}
	
	private class Unit{
		public String unit;
		public String attr;
		public Unit(String u ,String a){
			unit	= u;
			attr	= a;
		}
	}
}
