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

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

/* rid */
import	jp.co.nri.rid.xml.*;

/**
 * 他のユニットを参照するときに使う定義情報のハッシュ
 */
public class UnitMap extends HashMap{
//--------[[ open method ]]----------------------------------------------------
	/**
	 * 参照ユニット定義を追加する
	 * @param	myname	自身のユニット名
	 * @param	myattr	自身の属性名
	 * @param	rname	参照ユニット名
	 * @param	rattr	参照ユニットの属性名
	 * @since	1.00
	 */
	public elementBooster unit(String tagname ,String keyattr ,String key ,elementBooster root){
		Offsprings offsprings = (Offsprings)get(tagname);
		if(null==offsprings){
			offsprings = new Offsprings(root ,tagname ,keyattr);
			put(tagname ,offsprings);
		}
		
		return offsprings.unit(key);
	}
	
//--------[[ close inner class ]]----------------------------------------------
	private class Offsprings extends HashMap{
		public Offsprings(elementBooster root ,String tagname ,String keyattr){
			elementBooster[] children = root.offspring(tagname);
			
			if(null==children)	return;
			int mx = children.length;
			for(int i=0;i<mx;i++){
				elementBooster elem = children[i];
				if (elem.attribute(keyattr) != null) {
					put(elem.attribute(keyattr).toLowerCase() ,elem);
				}
			}
		}
	//--------[[ open method ]]------------------------------------------------
		/**
		 * 参照属性定義を追加する
		 * @param	name	自身の属性名
		 * @param	rname	参照ユニット名
		 * @param	rattr	参照ユニットの属性名
		 * @since	1.00
		 */
		public elementBooster unit(String key){	return (elementBooster)get(key.toLowerCase()); }
	}
}
