/*
 * @(#)RidRootAction.java
 *
 * Copyright 2001 Nomura Research Institute, LTD. All rights reserved.
 *
 * RID-X : ルート切替系 Action
 *
 * @author  Intelligent Technology Inc.
 * @version 1.01 2002/08/09
 */
package jp.co.nri.rid.doc;

import java.awt.event.ActionEvent;

import java.util.Enumeration;
import java.util.Vector;

import javax.swing.JTabbedPane;

import jp.co.iti.fagot.action.ZAction;

import jp.co.iti.fagot.doc.DocPane;
import jp.co.iti.fagot.doc.DocElement;

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

import jp.co.nri.Rid;

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

import jp.co.nri.rid.RUpdateManager;
/**
 * Rid パネル切替系 Action
 */
public class RidRootAction extends RidAction {
	/**
	 * アクション実行
	 */
	public void doAction(ActionEvent evt) {
	String szAction = getActionName();
	Vector targets  = getTargets();
	JTabbedPane     tab = (JTabbedPane)ZInstance.map().get(Rid.PANEL_TAB);
	RidDocumentSite doc = (RidDocumentSite)ZInstance.map().get(Rid.DOCUMENT_SITE);
	RidElementZone  top = doc.getTopZone();

	boolean isTran = doc.isTransaction();
	if ( !isTran ) {
		doc.beginTransaction();
	}

	if ( szAction.equals( ZONE ) ) {
		// タブシートの移動
		tab.setSelectedIndex(Rid.PANEL_ZONE_INDEX);

		// 全てのエレメントを未選択状態に
		setSelect( top, null );

		// Zoneパネルの取得
		DocPane  editor = (DocPane)ZInstance.map().get(Rid.PANEL_ZONE);
		DocElement root = (DocElement)doc.getRootElement(editor.getPanelId());

		// サイトドキュメントのルートを選択されたゾーンに設定
		RidElementZone zone = (RidElementZone)getTarget() ;
		
		if ( zone != root ) {
			// updateはchangeRoot内で行うので不要
			zone.changeRoot(editor);
		} else {
			// アクティブパネルの再描画
//			RUpdateManager.update(RUpdateManager.PANEL_ACTIVE, true);
			RUpdateManager.update(RUpdateManager.PANEL_ACTIVE);
		}

	} else if ( szAction.equals( SITE   ) ||
				szAction.equals( HIER   ) ||
				szAction.equals( CIRCLE ) ) {
		// タブシートの移動
		tab.setSelectedIndex(Rid.PANEL_MAP_INDEX);

		// アクティブマップの変更
		String[] szMap = ZString.tokenize( szAction, "_" );
		setActiveMap( top, szMap[1] );

		// 選択状態の変更
		setSelect( top, targets );

		// Mapパネルの取得
		DocPane editor = (DocPane)ZInstance.map().get(Rid.PANEL_MAP);
		RidElementPage newTop     = (RidElementPage)getTarget();
		RidElementPage currentTop = doc.getTopPage(editor.getPanelId());

		// トップページの変更
		if ( newTop != currentTop ) {
			// updateはchangeTop内で行うので不要
			newTop.changeTop( editor );
		} else {
			// アクティブパネルの再描画
			RUpdateManager.update(RUpdateManager.PANEL_ACTIVE, true);
		}
	}

	if ( !isTran ) {
		doc.commit();
	}
	}

	/**
	 * UI更新
	 */
	public void update() {
	String szAction = getActionName();
	boolean bState = true;
	if ( szAction.equals( ZONE ) ) {
		if ( getTargetsSize() != 1 ) {
			bState = false;
		}
	}

	firePropertyChange(ZAction.ENABLED,null,new Boolean(bState));
	}

	//## アトリビュート ###############################################
    /**
     * アクション名：zoneの表示
     */
	final static public String ZONE		= "view_zone" ;

    /**
     * アクション名：siteの表示
     */
	final static public String SITE		= "view_site" ;

    /**
     * アクション名：hierの表示
     */
	final static public String HIER		= "view_hier" ;

    /**
     * アクション名：circleの表示
     */
	final static public String CIRCLE	= "view_circle" ;
}
