All Downloads are FREE. Search and download functionalities are using the official Maven repository.

nablarch.common.mail.MailRecipientTable Maven / Gradle / Ivy

The newest version!
package nablarch.common.mail;

import java.util.ArrayList;
import java.util.List;

import nablarch.core.db.connection.AppDbConnection;
import nablarch.core.db.connection.DbConnectionContext;
import nablarch.core.db.statement.ResultSetIterator;
import nablarch.core.db.statement.SqlPStatement;
import nablarch.core.db.statement.SqlRow;
import nablarch.core.repository.initialization.Initializable;
import nablarch.core.util.annotation.Published;

/**
 * メール送信先管理テーブルのスキーマ情報を保持するデータオブジェクト。
 *
 * @author Shinsuke Yoshio
 */
@Published(tag = "architect")
public class MailRecipientTable implements Initializable {

    /** テーブル名 */
    private String tableName;

    /** メールリクエストIDカラム名 */
    private String mailRequestIdColumnName;

    /** シリアル番号カラム名 */
    private String serialNumberColumnName;

    /** 送信先区分カラム名 */
    private String recipientTypeColumnName;

    /** 送信先メールアドレスのカラム名 */
    private String mailAddressColumnName;

    /** メール送信先を登録するSQL */
    private String insertSql;

    /** 送信先を取得するSQL */
    private String findSql;

    /**
     * メール送信先テーブルの名前を設定する。
     *
     * @param tableName メール送信先テーブルの名前
     */
    public void setTableName(String tableName) {
        this.tableName = tableName;
    }

    /**
     * メール送信先テーブルの名前を取得する。
     *
     * @return メール送信先テーブルの名前
     */
    public String getTableName() {
        return tableName;
    }

    /**
     * メール送信先テーブルの要求IDカラムの名前を設定する。
     *
     * @param mailRequestIdColumnName メール送信先テーブルの要求IDカラムの名前
     */
    public void setMailRequestIdColumnName(String mailRequestIdColumnName) {
        this.mailRequestIdColumnName = mailRequestIdColumnName;
    }

    /**
     * メール送信先テーブルの連番カラムの名前を設定する。
     *
     * @param serialNumberColumnName メール送信先テーブルの連番カラムの名前
     */
    public void setSerialNumberColumnName(String serialNumberColumnName) {
        this.serialNumberColumnName = serialNumberColumnName;
    }

    /**
     * メール送信先テーブルの送信先区分カラムの名前を設定する。
     *
     * @param recipientTypeColumnName メール送信先テーブルの送信先区分カラムの名前
     */
    public void setRecipientTypeColumnName(String recipientTypeColumnName) {
        this.recipientTypeColumnName = recipientTypeColumnName;
    }

    /**
     * メール送信先テーブルの送信先メールアドレスカラムの名前を設定する。
     *
     * @param mailAddressColumnName メール送信先テーブルの送信先メールアドレスカラムの名前
     */
    public void setMailAddressColumnName(String mailAddressColumnName) {
        this.mailAddressColumnName = mailAddressColumnName;
    }

    /**
     * 送信先テーブルに送信先情報のデータを追加する。
     *
     * @param mailRequestId メールリクエストID
     * @param context メール送信先情報を持つオブジェクト
     * @param mailConfig メールの設定情報を持つオブジェクト
     */
    public void insert(String mailRequestId, MailContext context, MailConfig mailConfig) {
        AppDbConnection connection = DbConnectionContext.getConnection();
        executeInsertSQL(mailRequestId, context, mailConfig, connection);
    }

    /**
     * 指定されたトランザクション名を用いて送信先テーブルに送信先情報のデータを追加する
     *
     * @param mailRequestId メールリクエストID
     * @param context メール送信先情報を持つオブジェクト
     * @param mailConfig メールの設定情報を持つオブジェクト
     * @param transactionName トランザクション名
     */
    public void insert(String mailRequestId, MailContext context, MailConfig mailConfig, String transactionName) {
        AppDbConnection connection = DbConnectionContext.getConnection(transactionName);
        executeInsertSQL(mailRequestId, context, mailConfig, connection);
    }

    /**
     * 送信先テーブルに送信先情報のデータを追加する
     * @param mailRequestId メールリクエストID
     * @param context メール送信先情報を持つオブジェクト
     * @param mailConfig メールの設定情報を持つオブジェクト
     * @param connection コネクション
     */
    private void executeInsertSQL(String mailRequestId, MailContext context, MailConfig mailConfig, AppDbConnection connection) {
        SqlPStatement statement = connection.prepareStatement(insertSql);
        statement.setString(1, mailRequestId);

        int serialNo = 1;
        // to
        statement.setString(3, mailConfig.getRecipientTypeTO());
        for (String to : context.getToList()) {
            statement.setInt(2, serialNo);
            statement.setString(4, to);
            serialNo++;
            statement.addBatch();
        }
        statement.executeBatch();

        // cc
        statement.setString(3, mailConfig.getRecipientTypeCC());
        for (String cc : context.getCcList()) {
            statement.setInt(2, serialNo);
            statement.setString(4, cc);
            serialNo++;
            statement.addBatch();
        }
        statement.executeBatch();
        // bcc
        statement.setString(3, mailConfig.getRecipientTypeBCC());
        for (String bcc : context.getBccList()) {
            statement.setInt(2, serialNo);
            statement.setString(4, bcc);
            serialNo++;
            statement.addBatch();
        }
        statement.executeBatch();
    }

    /**
     * 送信先情報を取得する。
     * 

* 指定されたメールリクエストIDと宛先区分に紐付く送信先の情報を取得する。 * * * @param mailRequestId メールリクエストID * @param recipientType 宛先区分 * @return 取得した送信先情報 */ public List find(String mailRequestId, String recipientType) { AppDbConnection connection = DbConnectionContext.getConnection(); SqlPStatement statement = connection.prepareStatement(findSql); statement.setString(1, mailRequestId); statement.setString(2, recipientType); ResultSetIterator sqlRows = statement.executeQuery(); List result = new ArrayList(); for (SqlRow record : sqlRows) { result.add(new MailRecipientTable.MailRecipient(record)); } return result; } /** * {@inheritDoc} *

* 本クラスで使用するSQL文を各セッターで設定されたテーブル名及びカラム名から構築する。 *

* 構築するSQL文は、以下の2種類 *

    *
  • メール送信先へレコードを追加するINSERT文
  • *
  • メール送信先からメールリクエストIDを元にレコードを取得するSELECT文(連番の昇順でソート)
  • *
*/ public void initialize() { insertSql = "INSERT INTO " + tableName + " (" + mailRequestIdColumnName + ", " + serialNumberColumnName + ", " + recipientTypeColumnName + ", " + mailAddressColumnName + ") VALUES (?,?,?,?)"; findSql = "SELECT " + serialNumberColumnName + " SERIAL_NUMBER, " + mailAddressColumnName + " MAIL_ADDRESS " + "FROM " + tableName + ' ' + "WHERE " + mailRequestIdColumnName + " = ? " + "AND " + recipientTypeColumnName + " = ? " + "ORDER BY " + serialNumberColumnName; } /** * メール送信先の1レコード分の情報を保持するクラス。 * * @author hisaaki shioiri */ public static class MailRecipient { /** メール送信先1の1レコードを表すオブジェクト */ private final SqlRow record; /** * メール送信先の1レコード文の情報を保持するインスタンスを生成する。 * * @param record 1レコードを表すレコード */ public MailRecipient(SqlRow record) { this.record = record; } /** * 連番を取得する。 * * @return 連番 */ public int getSerialNumber() { return record.getInteger("SERIAL_NUMBER"); } /** * 送信先アドレスを取得する。 * * @return 送信先メールアドレス */ public String getMailAddress() { return record.getString("MAIL_ADDRESS"); } } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy