001/* 002 * Copyright (c) 2009 The openGion Project. 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, 013 * either express or implied. See the License for the specific language 014 * governing permissions and limitations under the License. 015 */ 016package org.opengion.hayabusa.mail; 017 018import java.util.Map; 019import java.util.TreeMap; 020 021import org.opengion.hayabusa.db.DBColumn; 022import org.opengion.hayabusa.db.DBTableModelUtil; 023import org.opengion.hayabusa.resource.ResourceManager; 024import org.opengion.hayabusa.db.DBTableModel; 025 026/** 027 * タグ mailSender2 による送信を行う際に利用するメール送信マネージャの処理クラスです。 028 * タグ mailSender2 よりパラメータマップを受取って、メール文の合成、送信を行います。 029 * バッチ送信する場合と共通する部分はスーパークラス AbstractMailManager に実装していますが、 030 * タグ独自ロジックの部分は本クラスより実装を行っています。 031 * 独自ロジックはセッションから取得した宛先テーブルにより宛先マップを作成、セッションから取得したメール 032 * 文により送信を行うロジックとあります。 033 * 034 * @og.group メールモジュール 035 * 036 * @version 4.0 037 * @author Sen.Li 038 * @since JDK1.6 039 */ 040public class MailManager_DIRECT extends AbstractMailManager { 041 042 private static final String[] names = { "DST_ID", "GROUP_ID", "GROUP_NAME", "DST_NAME", "DST_ADDR", "DST_KBN", "FGJ_MAIL" }; 043 private static final int IDX_DST_ID = 0; 044 private static final int IDX_FGJ_MAIL = 6; 045 private ResourceManager resource = null; 046 047 /** 048 * action="SEND"の時にこのメソッドが呼ばれます。 049 * セッションから取得した宛先テーブルにより宛先マップを作成します。 050 * まだ、action="CHECK"の時に、確認画面から添付ファイルを追加するケースがあるため、 051 * パラメータを再読込を行います。そして、action="SEND"の時に添付ファイルを送信します。 052 * 053 * @param params パラメータのマップ 054 * @param table DBTableModelオブジェクト 055 * 056 */ 057 public void create( final Map<String, String> params, final DBTableModel table ){ 058 // 5.6.6.0 (2013/07/05) host指定対応 059 MailPattern mailObj = new MailPattern( params ); 060 setHost(mailObj.getHost()); 061 setPort(mailObj.getSmtpPort()); 062 setAuth(mailObj.getAuth()); 063 setAuthUser(mailObj.getAuthUser()); 064 setAuthPass(mailObj.getAuthPass()); 065 066 setInitParams( params ); 067 setAttachFiles( params.get( "ATTACH1" ) 068 , params.get( "ATTACH2" ) 069 , params.get( "ATTACH3" ) 070 , params.get( "ATTACH4" ) 071 , params.get( "ATTACH5" )); 072 Map <String, String[]> dstMap = makeMailDstMap( table ); 073 setMailDstMap( dstMap ); 074 } 075 076 /** 077 * 画面に各宛先の送信状況を表示するために、送信の宛先マップに基づいてテーブルモデルを作成します。 078 * 作成されたテーブルモデルを指定されるスコープに入れます。 079 * 080 * @og.rev 5.1.9.0 (2010/08/01) keySet() → entrySet() に変更 081 * 082 * @return 宛先マップに基づいたテーブルモデル 083 */ 084 public DBTableModel makeDstTable(){ 085 Map<String, String[]> mailDst = getMailDstMap(); 086 DBTableModel table; 087 int numberOfColumns = names.length; 088 089 table = DBTableModelUtil.newDBTable(); 090 table.init( numberOfColumns ); 091 setTableDBColumn( table, names ); 092 093 // 5.1.9.0 (2010/08/01) keySet() → entrySet() に変更 094 for( Map.Entry<String, String[]> en : mailDst.entrySet() ) { 095 table.addColumnValues( en.getValue() ); 096 } 097 098 return table; 099 } 100 101 /** 102 * リソースマネージャーをセットします。 103 * これは、言語(ロケール)に応じた DBColumn をあらかじめ設定しておく為に 104 * 必要です。 105 * リソースマネージャーが設定されていない、または、所定のキーの DBColumn が 106 * リソースに存在しない場合は、内部で DBColumn オブジェクトを作成します。 107 * 108 * @param res リソースマネージャー 109 */ 110 // 注意:この resource は、実質利用されていません。 111 public void setResourceManager( final ResourceManager res ) { 112 resource = res; 113 } 114 115 /** 116 * DBColumn オブジェクトをテーブルモデルに設定します。 117 * 118 * @param table DBTableModelオブジェクト 119 * @param names カラム名配列 120 */ 121 // 注意:この dbColumn は、実質利用されていません。 122 protected void setTableDBColumn( final DBTableModel table, final String[] names ) { 123 for( int i=0; i<names.length; i++ ) { 124 DBColumn clm = resource.makeDBColumn( names[i] ); 125 table.setDBColumn( i,clm ); 126 } 127 } 128 129 /** 130 * セッションから取得した宛先テーブルにより宛先マップを作成します。 131 * 宛先テーブルの各レコードに対して、"送信待ち"となっているレコードのみ宛先マップに入れるようにしています。 132 * 133 * @param table セッションから取得した宛先テーブル 134 * 135 * @return 宛先マップ 136 */ 137 private Map<String, String[]> makeMailDstMap( final DBTableModel table ){ 138 Map<String, String[]> dstMap = new TreeMap<String, String[]>(); 139 int rowCount = table.getRowCount(); 140 int colCount = names.length; 141 for( int i = 0; i < rowCount; i++ ) { 142 String[] tmpDst = new String[colCount]; 143 if( AbstractMailManager.FGJ_SEND_WAIT.equals( table.getValue( i, IDX_FGJ_MAIL ) ) ) { 144 for( int j = 0; j < colCount; j++ ) { 145 tmpDst[j] = table.getValue( i, j ); 146 } 147 dstMap.put( tmpDst[IDX_DST_ID], tmpDst ); 148 } 149 } 150 151 return dstMap; 152 } 153}