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

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

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

/**
 * インスタンス登録クラス
 * 
 * インスタンス登録を行う。
 */
public class ConfigAction extends ActionBase{

	/**
	 * @param gsc
	 */
	public ConfigAction(GSCdata gsc) {
		super(gsc);
	}
	
	/**
	 * サーバステータス取得処理
	 * 
	 */
	public ArrayList getList() throws Exception{


		//データ作成
		ArrayList configList = null;
		try {
			//接続
			if (!connectSelect(m_gsc)) {
				throw new Exception();
			}
			
			//サーバ情報作成
			configList = m_gsc.getConfigList();

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

		} finally {
			m_gsc.close();
		}

		return configList;
	}
	
	/**
	 * 
	 */
	public ConfigInfo get(String id) throws Exception {


		//データ作成
		try {
			//接続
			if (!connectSelect(m_gsc)) {
				throw new Exception();
			}
			
			//サーバ情報作成
			return m_gsc.getConfigInfo(id);

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

		} finally {
			m_gsc.close();
		}


		
		
	}
	/**
	 * インスタンス登録処理
	 * 
	 */
	public boolean add(ConfigInfo configInfo )  {
		
		try {
			//GSCへ接続
			if (!connect(m_gsc)) {
				return false;
			}
			
			//データ更新
			if (m_gsc.addConfig(configInfo)) {
				m_gsc.commit();
			} else {
				m_gsc.rollback();
			}
			
		} finally {
			m_gsc.close();
			if( m_gsc.isErrInfo() ){
				setAccessErrs(m_gsc);
				return false;
			}
		}
		
		return true;
	}
	/**
	 * ハッシュ関数削除処理
	 * 
	 */
	public boolean del(String id)  {
		
		try {
			if (!connect(m_gsc)) {
				return false;
			}

			//データ更新
			if (m_gsc.delConfig(id)) {
				m_gsc.commit();
			} else {
				m_gsc.rollback();
			}

		} finally {
			m_gsc.close();
			if( m_gsc.isErrInfo() ){
				setAccessErrs(m_gsc);
				return false;
			}
		}
		return true;
	}
	//TODOMASU これは削除するべき？
	/**
	 * ハッシュ関数削除処理
	 * 
	 */
//	public boolean mod(ConfigInfo configInfo) {
//		
//		try {
//			if (!connect(m_gsc)) {
//				return false;
//			}
//
//			//データ更新
//			if (m_gsc.delConfig(configInfo.getConfigId())&& m_gsc.addConfig(configInfo)) {
//				m_gsc.commit();
//			} else {
//				m_gsc.rollback();
//			}
//
//		} finally {
//			m_gsc.close();
//			if( m_gsc.isErrInfo() ){
//				setAccessErrs(m_gsc);
//				return false;
//			}
//		}
//		return true;
//	}
	public boolean mod(String oldConfigID, ConfigInfo configInfo) {
		
		try {
			if (!connect(m_gsc)) {
				return false;
			}

			//データ更新
			if (m_gsc.delConfig(oldConfigID)&& m_gsc.addConfig(configInfo)) {
				m_gsc.commit();
			} else {
				m_gsc.rollback();
			}

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

	
}
