/**
 * @(#)CellItem.java
 * Copyright 2001 Nomura Research Institute, LTD. All rights reserved.
 * RID-3 : Cell Item
 * @author  Intelligent Technology Inc.
 * @version 1.00 2002/01/09
 * @see 
 */
package	jp.co.nri.rid.table;

/* rid */
import	jp.co.nri.rid.xml.*;
import	jp.co.iti.fagot.doc.*;

import	jp.co.iti.fagot.util.ZInstance;
import	jp.co.nri.rid.error.RidException;
import jp.co.nri.rid.environment.MessageDialog;

/**
 * RTableのセル単位の情報
 */

public class CellItem{
	private	elementBooster	myElement;
	private	String			myAttribute;
//--------[[ constructor ]]----------------------------------------------------
	/**
	 * @param	elem	エレメント
	 * @param	attr	アトリビュート名
	 */
	public CellItem(elementBooster elem ,String attr){
		myElement	= elem;
		myAttribute	= new String(attr);
	}
//--------[[ open method ]]----------------------------------------------------
	
	/**
	 * Cellに表示する文字列
	 * @return	文字列
	 * @since	1.00
	 */
	public String string(){
		/*** 20020805 NullPointerException 回避のため修正 fuku ***/
		if ( myElement == null ) {
			return null;
		}
		return myElement.attribute(myAttribute);
	}

	/**
	 * 値を更新する
	 * @param	string	文字列
	 * @since	1.00
	 */
	public void string(String string){
		// *** fuku(STA) *** 20020927
		// トランザクションチェック追加
		// setAttribute後、正しく設定されているか確認追加
		// ここのロジックは、PaneledElementFactory.AttributeListener.write()とほぼ同じ
		DocDocument doc = (DocDocument)myElement.document().document();
		boolean isTran = doc.isTransaction();
		if ( !isTran ) {
			doc.beginTransaction();
		}

		// 未入力の場合は "" (length=0) となるが、elementBoosterではlengthが
		// 0 の場合は、nullとして扱うためここで変更
		String value = string;
		if ( string != null && string.length() == 0 ) {
			value = null;
		}
		myElement.attribute(myAttribute ,value);

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

		// setAttribute後の値が正しいかチェック
		String newvalue = myElement.attribute(myAttribute);
		if(null==value){
			if(null==newvalue){
				return;
			}
		}
		else{
			if(value.equalsIgnoreCase(newvalue)){
				return;
			}
		}

		RidException re = (RidException)ZInstance.map().get("setAttribute");
		MessageDialog.showError(re.getMessage());
		// *** fuku(END) *** 20020927
	}
	
	public elementBooster element(){ return myElement; };
}
