/*
 * Copyright (C) 2005 NTT DATA Corporation
 * 
 */
package org.postgresforest.tool.view;

import java.util.ArrayList;
import java.util.Iterator;

import org.postgresforest.tool.action.TableList;
import org.postgresforest.tool.bean.TableInfo;
import org.postgresforest.tool.db.GSCdata;
import org.postgresforest.tool.util.ErrorLog;
import org.postgresforest.tool.util.SessionProperty;
import org.postgresforest.tool.view.dbinstance.DbInstanceView;
import org.postgresforest.tool.view.ddl.DdlView;
import org.postgresforest.tool.view.menu.AdminMenuView;
import org.postgresforest.tool.view.partitionlist.PartitionListView;
import org.postgresforest.tool.view.tablecolumn.TableColumnView;
import org.postgresforest.tool.view.tablelist.TableListView;

/**
 *
 * ViewControl
 * @version $Revision: 1.1.1.1 $
 * @since 
 */
public class ViewControl {



	/**
	 * 
	 * @return
	 * @since
	 */
    static protected GSCdata getGsc() {
        return (GSCdata)SessionProperty.get("gsc");
    }

    
    static public void updateUserDataView(String viewID, String dbName) {
       
		//選択されたテーブルでユーザメニューの選択を変更する
        if ( !viewID.equals(AdminMenuView.ID)) {

            AdminMenuView viewPart = (AdminMenuView)ViewUtil.findView(AdminMenuView.ID);
    		if( viewPart != null ){
    		    viewPart.select(dbName, null);
    		    return;
    		}

        }

        
        //セッション･プロパティのテーブル情報をクリア
		SessionProperty.set("selectDb", dbName);
        
        SessionProperty.set("tableInfo", null);
        
        
		TableList tableListAction = new TableList(getGsc());
//TODOMASU 多分、テーブルリストビューは要らないので、削除できるはず
//		try {
//			ArrayList tableList =  tableListAction.getTableList(dbName);
//
//			//テーブルリストのViewを更新
//			TableListView tableListView = (TableListView)ViewUtil.findView(TableListView.ID);
//			//TODOMASU tableListViewがNULLの場合にえくせぷション発生
//			if(tableListView !=null){
//				tableListView.setTableList(tableList);
//			}
//		} catch (Exception e) {
//			ErrorLog.log("", e);
//		}

		//DBリストのViewを更新
		DbInstanceView dbInstanceView = (DbInstanceView)ViewUtil.findView(DbInstanceView.ID);
		if(dbInstanceView == null){
		    dbInstanceView = (DbInstanceView)ViewUtil.updateView(DbInstanceView.ID,true,false);
		}
		dbInstanceView.select(dbName);
		
	    //DDLビューを表示する
		ViewUtil.updateView(DdlView.ID);
		
		//TODOMASU TableListViewはなくなるのでいらない
		//テーブル一覧ビューを表示する
//		ViewUtil.updateView(TableListView.ID,true, true);

	    //テーブル項目ビューを表示する
		ViewUtil.updateView(TableColumnView.ID);
		
	    //パーティションビューを表示する
		ViewUtil.updateView(PartitionListView.ID);
		ViewUtil.updateView(DdlView.ID);


    
    }
    
    static public void updateUserDataView(String viewID, String dbName, String tableName) {


		//選択されたテーブルでユーザメニューの選択を変更する
        if ( !viewID.equals(AdminMenuView.ID)) {

            AdminMenuView viewPart = (AdminMenuView)ViewUtil.findView(AdminMenuView.ID);
    		if( viewPart != null ){
    		    viewPart.select(dbName, tableName);
    		    return;
    		}

        }
            
	        SessionProperty.set("selectDb", dbName);
	        
	        SessionProperty.set("tableInfo", null);
	        
			TableList tableListAction = new TableList(getGsc());
			try {
				ArrayList tableList =  tableListAction.getTableList(dbName);
	
				TableListView tableListView = (TableListView)ViewUtil.findView(TableListView.ID);
				if(tableListView != null){
					tableListView.setTableList(tableList);
				}
				for (Iterator iter = tableList.iterator(); iter
						.hasNext();) {
					TableInfo tableInfo = (TableInfo) iter.next();
					
					if( tableName.equals(tableInfo.getName()) ){
	    				TableInfo tableInfo2 =  tableListAction.getTableInfo(dbName, tableInfo);
	                    //セッション･プロパティのテーブル情報をクリア
	    				SessionProperty.set("tableInfo", tableInfo2);
	
					}
					
				}
	    		
			
			} catch (Exception e) {
				ErrorLog.log("", e);
			}

            
        //DDLビューを表示する
        ViewUtil.updateView(DdlView.ID);

        //データベースインスタンスビューを表示する
		DbInstanceView dbInstanceView = (DbInstanceView)ViewUtil.findView(DbInstanceView.ID);
		if(dbInstanceView == null){
		    dbInstanceView = (DbInstanceView)ViewUtil.updateView(DbInstanceView.ID,true,false);
		}
		dbInstanceView.select(dbName);
//TODOMASU テーブル一覧ビューは表示しない
//        //テーブル一覧ビューを表示する
//        TableListView tableListView = (TableListView)ViewUtil.updateView(TableListView.ID);
//        //TODOMASU 表示していないTableListViewは無視しても良いのでは？
////		if(tableListView == null){
////			tableListView = (TableListView)ViewUtil.updateView(TableListView.ID,true,false);
////		}
//		if(tableListView != null){
//			tableListView.select(tableName);
//		}
	    //テーブル項目ビューを表示する
        ViewUtil.updateView(TableColumnView.ID,true,true);
		
	    //パーティションビューを表示する
        ViewUtil.updateView(PartitionListView.ID,true,false);
    
    }

    static public void clearUserDataView() {
        
		//ユーザーデータベース名を設定する。
		SessionProperty.set("selectDb", null);
        //セッション･プロパティのテーブル情報をクリア
        SessionProperty.set("tableInfo", null);

        //DDLビューを表示する
        ViewUtil.updateView(DdlView.ID);
		
		//テーブル一覧ビューを表示する
        ViewUtil.updateView(TableListView.ID);

	    //テーブル項目ビューを表示する
        ViewUtil.updateView(TableColumnView.ID);
		
	    //パーティションビューを表示する
        ViewUtil.updateView(PartitionListView.ID);

        
    }
}
