/*
 * @(#)RidGobManager.java
 *
 * Copyright 2001 Nomura Research Institute, LTD. All rights reserved.
 *
 * RID-3 : Rid用 Gobアクセスクラス
 *
 * @author  Intelligent Technology Inc.
 * @version 1.01 2001/10/23
 */

package jp.co.nri.rid.gob;

import java.util.Enumeration;

import jp.co.iti.fagot.geom.ZPoint;

import jp.co.iti.fagot.gob.IGobContainer;
import jp.co.iti.fagot.gob.GElement;
import jp.co.iti.fagot.gob.GobManager;

import jp.co.iti.fagot.util.ZDebug;

import jp.co.nri.rid.doc.RidElement;
import jp.co.nri.rid.doc.RidElementZone;

/**
 * Gobアクセス
 */
public class RidGobManager {

	//## ゾーン ######################################################
	/**
	 * 指定された座標に存在するZoneエレメントを取得する
	 * @param panelId パネル識別子
	 * @param pt      座標
//	 * @param element 移動対象
	 */
	static public GElement findParentZoneGob( String szPanelId, ZPoint pt/*,RidElement element*/ ) {

	Enumeration elm = GobManager.r_elements(szPanelId,GobManager.ALL);
	while ( elm.hasMoreElements() ) {
		// 描画されているGobの一つ一つを親となるか確認する
		GElement paGob = (GElement)elm.nextElement();

		// 確認対象がZoneUnit
		IGobContainer container = paGob.getContainer();
		if ( container instanceof RidElementZone ) {

			// 確認対象が移動座標を含んでいる
			if ( paGob.getTransformedBounds().contains(pt) ) {

				RidElementZone paZone = (RidElementZone)container;
//				ZDebug.trace("paZone:"+paZone.getAttribute("File"));

				// 確認対象が、カレントエレメント、または、カレントエレメントの子孫であれば
				// 移動対象のelementと同じように移動しているので、親ゾーンの対象としない
				boolean isCurrent = false;
				Enumeration elmCur = GobManager.getCurrent(szPanelId).elements();
				while ( elmCur.hasMoreElements() ) {
					GElement curGob = (GElement)elmCur.nextElement();
					// 確認対象がカレントか？
					if ( curGob == paGob ) {
						isCurrent = true;
						break;
					}

					// 確認対象がカレントの子孫か？
					IGobContainer curContainer = curGob.getContainer();
					if ( curContainer instanceof RidElementZone ) {
						RidElementZone curZone = (RidElementZone)curContainer;
						String curFile = curZone.getAttribute("File");
						// curFile.length()>0 ：新規作成でない
						// startsWith         ：カレントの子孫でない
						if ( curFile.length()>0 && paZone.getAttribute("File").startsWith(curFile) ) {
							isCurrent = true;
							break;
//						} else {
//							ZDebug.trace("curZone not find:"+curZone.getAttribute("File"));
						}
					}
				}
				if ( !isCurrent ) {
					return paGob;
				}
			}
		}
	}
	return null;
	}

	//## アトリビュート################################################
}
