//
//  VeriTrans BuySmart Flex
//  adapter kit sample　CCCustom.java　Version 1.0.1
//  Copyright (c) 2001-2002 VeriTrans Inc.
//  Note: CCCutom for BuySmart Flex.
//

// CUSTOM:
//   URL を変えたいときはカスタマイズしてください
package CCAdapterSamples;

import java.io.*;
import java.util.*;
import java.text.*;
import javax.servlet.http.*;

//
// PURPOSE:
//   カスタマイズ変数およびカスタマイズ変数に関連したメソッドを
//   格納したクラス
//
// ATTENTION:
//   CUSTOM: の部分はかならずカスタマイズしてから利用してください.
//
public class CCCustom {

    // CUSTOM:
    //   マーチャント ID を設定してください.
    public final static String merchantID = "XPXXXXXXXXXXXXX";

    // CUSTOM:
    //   MDK のコンフィグファイルのパスを設定してください.
    public final static String config = "/export/home/bsfmdk/ccbsx.conf";

    // CUSTOM:
    //   イメージファイルのパスを設定してください.
    //   ブラウザで入力される URI のパスになりますので注意してください.
    public final static String imageDir = "/images";

    // CUSTOM:
    //   テンプレートファイルの格納されているディレクトリのパスを設定してください.
    //   ウェブサーバで公開されるディレクトリである必要はありません.
    public final static String templateDir = "/usr/local/jakarta-tomcat-3.2.2/webapps/ROOT/WEB-INF/classes/CCAdapterSamples/template";

    // CUSTOM:
    //   カード情報入力画面用テンプレートファイル名を設定してください.
    public final static String wallet = "wallet.htm";

    // CUSTOM:
    //   取引成功画面用テンプレートファイル名を設定してください.
    public final static String thanks = "thanks.htm";

    // CUSTOM:
    //   取引成功画面用テンプレートファイル名を設定してください.
    public final static String sorry = "sorry.htm";

    // CUSTOM:
    //   取り引きタイプ(authonly | authcapture)を設定してください.
    public final static String authType = "authonly";
    //public final static String authType = "authcapture";

    // CUSTOM:
    //   文字エンコーディング(euc | sjis)を設定してください.
    public final static String encoding = "euc";
    //public final static String encoding = "sjis";

    // CUSTOM:
    //   改ざん防止用署名鍵を設定してください.
    //   任意の値を設定してください
    public final static String key = "pleasesetyoursegkey";

    // CUSTOM:
    //  使用したい VeriTrans ロゴを設定してください.
    public final static String ccLogo = "cclogo_br"; // Brown
    //public final static String ccLogo = "cclogo_wh"; // White

    //
    // PURPOSE:
    //   カートからの情報を取り出す
    //
    // INPUT:
    //   request -  Servlet のリクエストのリファレンス
    //
    // RETURN:
    //   price および note をキーとしたデータを格納したハッシュ
    //
    // ATTENTION:
    //   必ずカスタマイズしてください
    //
    public static Hashtable getCart(HttpServletRequest request) {
	// CUSTOM: このロジックはテスト用のサンプルです.
	//         必ず D/B から値をえる等の処理に変更してください.

	Hashtable h = new Hashtable();

	// 金額の設定
	Integer price = new Integer(2);
	h.put("price", price.toString());
	//Hashtable query = CCUtil.getQuery(request); // QUERY_STRING から
	//h.put("price", (String)query.get("price"));

	// 記事の設定
	String note = new String("お買い上げありがとうございます.");
	h.put("note", note);

	return h;
    }

    //
    // PURPOSE:
    //   オーダー ID を生成する
    //
    // INPUT:
    //   request -  Servlet のリクエストのリファレンス
    //
    // RETURN:
    //   オーダー ID の文字列
    //
    // ATTENTION:
    //   必ずカスタマイズしてください
    //
    public static String genOrderID(HttpServletRequest request) {
	// CUSTOM: このロジックはテスト用のサンプルです.
	//         必ず D/B から値をえる等の処理に変更してください.

	Long l = new Long(System.currentTimeMillis());
	return l.toString();

	//Hashtable query = CCUtil.getQuery(request);
	//return (String)query.get("order-id");
    }

    //
    // PURPOSE:
    //   カード会社ロゴを表示するイメージタグを生成する
    //
    // INPUT:
    //   accepts -  payrequest コマンドでえた accepts の文字列
    //
    // RETURN:
    //   HTML の IMG タグ 文字列
    //
    // ATTENTION:
    //   表示するカード会社のを増やしたい場合は ccbsx.conf の ACCEPTS の
    //   設定も確認してください
    //
    public static String getCardLogo(String accepts) {
	String logo = new String();
	StringTokenizer st = new StringTokenizer(accepts, ",");
        while (st.hasMoreTokens()) {
            String token = (st.nextToken()).trim();

	    if (token.length() > 0) {
		logo += "&nbsp;<img src=";
		logo += imageDir;
		logo += "/";
	    }

	    // CUSTOM:
	    //   カード会社のロゴを増やしたいときはこの部分を修正してください.
	    if (token.equals("vs")) { // VISA
		logo += "visa";
	    }
	    else if (token.equals("mc")) { // MASTER
		logo += "mastercard";
	    }
	    else if (token.equals("jcb")) { // JCB
		logo += "jcb";
	    }
	    else if (token.equals("ax")) { // AMEX
		logo += "amex";
	    }
	    else if (token.equals("ni")) { // NICOS
		logo += "nicos";
	    }
	    else if (token.equals("dc")) { // DINERS
		logo += "dinersclub";
	    }

	    if (token.length() > 0) {
		logo += ".gif>";
	    }
	}
	return logo;
    }

    //
    // PURPOSE:
    //   決済処理実行前に D/B にアクセスする等の処理を記述する
    //
    // INPUT:
    //
    // RETURN:
    //
    // ATTENTION:
    //   必ずカスタマイズしてください
    //
    public static void preStoreFulfillmentInfo() {
	// CUSTOM:
	//   取引処理実行前に実行したい処理を記述してください.
    }

    //
    // PURPOSE:
    //   決済処理が成功したときに D/B にアクセスする等の処理を記述する
    //
    // INPUT:
    //
    // RETURN:
    //
    // ATTENTION:
    //   必ずカスタマイズしてください
    //
    public static void storeFulfillmentInfo() {
	// CUSTOM:
	//   取引処理が成功した場合に実行したい処理を記述してください.
    }

    //
    // PURPOSE:
    //   決済処理が失敗したときに D/B にアクセスする等の処理を記述する
    //
    // INPUT:
    //
    // RETURN:
    //
    // ATTENTION:
    //   必ずカスタマイズしてください
    //
    public static void cleanUpFulfillmentInfo() {
	// CUSTOM:
	//   取引処理が失敗した場合に実行したい処理を記述してください.
    }

    //
    // PURPOSE:
    //   一般的なエラーページを出力する
    //
    // INPUT:
    //   msg -  ページ中に差し込むメッセージ文字列
    //
    // RETURN:
    //
    // ATTENTION:
    //   固定部分を変更したい場合はカスタマイズしていただいてもかまいません
    //
    public static void temporaryDifficulties(PrintWriter pw, String msg) {
	CCUtil.printHeader(pw, "一時的エラー");
	pw.println("<h1>" + msg + "</h1>");
	pw.println("<p>");
	pw.print("御迷惑をおかけしておりますが");
	pw.print("しばらくお待ちいただいてから再度やり直していただくか");
	pw.println("当店のカスタマーサポートにお問い合わせください。<br>");
	pw.println("フリーダイヤル 0120-xxxxxx");
	pw.println("</p>");
	CCUtil.printFooter(pw);
    }

    //
    // PURPOSE:
    //   電子署名エラーページを出力する
    //
    // INPUT:
    //
    // RETURN:
    //
    // ATTENTION:
    //   固定部分を変更したい場合はカスタマイズしていただいてもかまいません
    //
    public static void signatureError(PrintWriter pw) {
	CCUtil.printHeader(pw, "電子署名エラー");
	pw.println("<h1>電子署名エラー</h1>");
	pw.println("<p>支払情報は壊れているか改ざんされています。</p>");
	pw.println("<p>再度やり直してみてください。</p>");
	CCUtil.printFooter(pw);
    }

    //
    // PURPOSE:
    //   カード情報入力エラーページを出力する
    //
    // INPUT:
    //   errs -  ページ中に差し込むメッセージ文字列の配列
    //
    // RETURN:
    //
    // ATTENTION:
    //   固定部分を変更したい場合はカスタマイズしていただいてもかまいません
    //
    public static void piError(PrintWriter pw, ArrayList errs) {
	CCUtil.printHeader(pw, "カード情報入力エラー");
	pw.println("<h1>カード情報入力に誤りがあります。</h1>");
	for (int i = 0 ; i < errs.size() ; i++) {
	    pw.print("<h3>");
	    pw.print((String)errs.get(i));
	    pw.println("</h3>");
	}
	pw.println("<p>ブラウザの戻るをクリックして再入力してください。</p>");
	CCUtil.printFooter(pw);
    }
}



