/*
 * 作成日: 2007/12/19
 */
package asandatabasebrowser.action;

import java.awt.event.ActionEvent;

import javax.swing.AbstractAction;
import javax.swing.JOptionPane;

import net.sourceforge.swingx.jspread.JSpread;

import asandatabasebrowser.Global;
import asandatabasebrowser.AsanDatabaseBrowser;
import asandatabasebrowser.model.DbData;
import asandatabasebrowser.model.EditingRecord;
import asandatabasebrowser.view.DbTableFrame2;


public class RecordUpdateAction extends AbstractAction {
	DbTableFrame2 frame;
	public RecordUpdateAction(DbTableFrame2 frame) {
		super("RecordUpdate");
		assert frame != null;
		this.frame = frame;
		putValue(SHORT_DESCRIPTION, "選択されたレコードを編集します");
		putValue(LONG_DESCRIPTION, "選択されたレコードを編集します");
		putValue(SMALL_ICON, Global.getImageIcon("/resources/RecordUpdate.png"));
	}
	public void actionPerformed(ActionEvent ev) {
//		TableInfo info = (TableInfo) view.data.tableInfo;
		AsanDatabaseBrowser tools = AsanDatabaseBrowser.theApp;
		DbData data = frame.tableView.data;
		boolean[] sel = frame.tableView.getSheet().getSelectionArray(JSpread.ROW);
		// １つでも選択されているか？
		boolean sel1 = false;
		for (int i=0; i<sel.length; i++) {
			if (sel[i]) {
				sel1 = true;
				break;
			}
		}
		if (!sel1) {
			tools.showMessage(frame, "レコードが選択されていません。", null,
					JOptionPane.ERROR_MESSAGE);
			return;
		}
		// 選択されているレコードの中に編集中のレコードがあるか？
		for (int i=0; i<sel.length; i++) {
			if (sel[i] && data.getMode(i) != DbData.NONE) {
				tools.showMessage(frame, "すでに編集中のレコードがあります。", null,
						JOptionPane.ERROR_MESSAGE);
				return;
			}
		}
		// 編集状態にする
		for (int i=0; i<sel.length; i++) {
			if (sel[i]) {
				data.setRecord(i, new EditingRecord(DbData.UPDATE, data.getRecord(i)));
			}
		}
//		int[] rows = frame.tableView.getSelectedRecordIndex();
//		if (rows.length == 0) {
//			tools.showMessage(frame, 
//					"レコードが選択されていません。", 
//					null, JOptionPane.ERROR_MESSAGE);
//			return;
//		}
//		// チェック
//		for (int i=0; i<rows.length; i++) {
//			if (data.getMode(rows[i]) != DbData.NONE) {
//				tools.showMessage(frame, 
//						"すでに編集中のレコードがあります。", 
//						null, JOptionPane.ERROR_MESSAGE);
//				return;
//			}
//		}
//		System.out.println("A");
//		// 編集状態にする
//		for (int i=0; i<rows.length; i++) {
//			data.setRecord(rows[i], new EditingRecord(DbData.UPDATE, data.getRecord(rows[i])));
//		}
		System.out.println("B");
		frame.setData(data);
		System.out.println("C");
		frame.updateActionState();
		System.out.println("D");
	}
}
