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

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Iterator;

import org.postgresforest.tool.bean.ServerInfo;
import org.postgresforest.tool.db.GSCdata;

/**
 * サーバステータスクラス
 * 
 * サーバステータスの取得・更新を行う。
 */
public class ServerAction extends ActionBase {

	/**
	 * @param gsc
	 */
	public ServerAction(GSCdata gsc) {
		super(gsc);
		// TODO 自動生成されたコンストラクター・スタブ
	}
	/**
	 * サーバステータス取得処理
	 *  
	 */
	public ArrayList getServerList() throws Exception {

		//データ作成
		ArrayList serverList = null;
		try {
			//接続
			if (!connectSelect(m_gsc)) {
				throw new Exception();

			}

			//サーバ情報作成
			serverList = m_gsc.getServerList();

		} catch (SQLException e) {
			setAccessErrs(m_gsc);
			throw e;

		} finally {
			m_gsc.close();
		}

		return serverList;
	}

	/**
	 * サーバステータス更新処理
	 *  
	 */
	public boolean setStatus(ArrayList statusList) {

		//データ作成
		try {
			//接続
			if (!connect(m_gsc)) {
				return false;
			}
			//ステータス更新
			if (m_gsc.setDBstatus(statusList)) {
				m_gsc.commit();
			} else {
				m_gsc.rollback();
				setAccessErrs(m_gsc);
				return false;
			}

		} finally {
			m_gsc.close();
			if( m_gsc.isErrInfo() ){
				setAccessErrs(m_gsc);
				return false;
			}
		}

		return true;
	}
	/**
	 * 
	 */
	public ServerInfo get(String id) throws Exception {


		//データ作成
		ArrayList serverList = null;
		try {
			//接続
			if (!connectSelect(m_gsc)) {
				throw new Exception();
			}
			serverList = getServerList();
			//サーバ情報作成
			for(Iterator ite = serverList.iterator(); ite.hasNext();){
				
				ServerInfo serverInfo = (ServerInfo)ite.next();
				if(serverInfo.getId() == Integer.parseInt(id)){
					return serverInfo;
				}
			}
			return null;

		} catch (SQLException e) {
			setAccessErrs(m_gsc);
			throw e;

		} finally {
			m_gsc.close();
		}


		
		
	}
}