/*
 * Copyright (c) 2009 The openGion Project.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
 * either express or implied. See the License for the specific language
 * governing permissions and limitations under the License.
 */
package org.opengion.hayabusa.report;

import java.util.Map;

import org.opengion.hayabusa.db.DBTableModel;

/**
 * RFIDPrintPoint インターフェース のデフォルト実装クラスです。
 * execute() をオーバーライドして、各種RFIDシステムに対応して下さい。
 *
 * @og.group 帳票システム
 *
 * @version  4.0
 * @author	 Masakazu Takahashi
 * @since    JDK6.0,
 */
public abstract class AbstractRFIDPrintPointService implements RFIDPrintPointService {
	
	protected String		ykno		= null;
	protected String 		systemId	= null;
	protected String		fgrun		= null;
	protected String		hostName	= null;
	protected String		prtName		= null;
	protected DBTableModel	table		= null;
	protected String		prgdir		= null;
	protected String		prgfile		= null;
	protected String		outdir		= null;
	protected Map<String, String[]>	rfidLayout = null;
	
	protected final StringBuilder	errMsg	= new StringBuilder();	// エラーメッセージ
	protected 		String			fgkan	= GE50Access.FG_ERR2;	// デフォルトはアプリエラー

	/**
	 * RFID発行処理
	 * RFIDのシステムに応じてこのメソッドをオーバーライドします
	 * 実行後はfgkanの値を正しい値でセットしなおして下さい。
	 * 
	 * @return 結果 (正常：true / 異常：false)
	 */
	public abstract boolean execute();
	
	/**
	 * 帳票起動された要求番号をセットします。
	 *
	 * @param   no 要求NO
	 */
	public void setYkno( final String no ) {
		ykno = no;
	}

	/**
	 * システムIDをセットします。
	 *
	 * @param   id システムID
	 */
	public void setSystemId( final String id ) {
		systemId = id;
	}
	
	/**
	 * 実行方法をセットします。
	 *
	 * @param   flag 実行方法
	 */
	public void setFgrun( final String flag ) {
		fgrun = flag;
	}

	/**
	 * 帳票デーモンが実行されているホスト名をセットします。
	 *
	 * @param   host ホスト名
	 */
	public void setHostName( final String host ) {
		hostName = host;
	}

	/**
	 * プリンター名をセットします。
	 *
	 * @param   printerName プリンタ名
	 */
	public void setPrinterName( final String printerName ) {
		prtName = printerName;
	}
	
	/**
	 * DBTableModel をセットします。
	 *
	 * @param   tbl DBTableModel
	 */
	public void setTable( final DBTableModel tbl ) {
		table = tbl;
	}
	
	/**
	 * REPORT_RFID_SERVICE_CLASSから起動するバッチ等のプログラムをセットします。
	 *
	 * @param dir バッチプログラムディレクトリ
	 */
	public void setPrgDir( final String dir ){
		prgdir = dir;
	}

	/**
	 * REPORT_RFID_SERVICE_CLASSから起動するバッチ等のプログラムをセットします。
	 * 
	 * @param file バッチプログラム名
	 */
	public void setPrgFile( final String file ){
		prgfile = file;
	}

	/**
	 * ファイル出力時のディレクトリを指定します
	 * 
	 * @og.rev 4.3.2.2 (2008/09/22) 板金 RFID対応
	 * @param dir ファイル出力ディレクトリ
	 */
	public void setOutDir( final String dir ){
		outdir = dir;
	}

	/**
	 * RFIDのレイアウトデータをセットします。
	 * キーはカラム名です。
	 * 値はGE58で定義された出力区分及びパラメーターの配列です。
	 * 配列の各インデックス番号の意味は、RFIDPrintRequestを参照して下さい。
	 *
	 * @param   layout RFIDレイアウト
	 */
	public void setLayout( final Map<String, String[]> layout ) {
		rfidLayout = layout;
	}
	
	/**
	 * 完成フラグを返します。
	 * 
	 * @return 完成フラグ String
	 */
	public String getFgkan(){
		return fgkan;
	}
	
	/**
	 * エラーメッセージを返します。
	 * 
	 * @return エラーメッセージ String
	 */
	public String getErrMsg(){
		return errMsg.toString();
	}

}
