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     */
016    package org.opengion.hayabusa.mail;
017    
018    import java.util.Map;
019    import java.util.TreeMap;
020    
021    import org.opengion.hayabusa.db.DBColumn;
022    import org.opengion.hayabusa.db.DBTableModelUtil;
023    import org.opengion.hayabusa.resource.ResourceManager;
024    import 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     */
040    public 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 DBColumn[]      dbColumn        = null;
046            private ResourceManager resource = null;
047    
048            /**
049             * action="SEND"の時にこ?メソ?が呼ばれます?
050             * セ?ョンから取得した宛???ブルにより宛?マップを作?します?
051             * ま??action="CHECK"の時に、確認画面から添付ファイルを追?るケースがあるため?
052             * パラメータを?読込を行います?そして、action="SEND"の時に添付ファイルを?信します?
053             *
054             * @param       params  パラメータのマッ?
055             * @param       table   DBTableModelオブジェク?
056             *
057             */
058            public void create( final Map<String, String> params, final DBTableModel table ){
059                    // 5.6.6.0 (2013/07/05) host?対?
060                    MailPattern mailObj = new MailPattern( params );
061                    setHost(mailObj.getHost());
062                    setPort(mailObj.getSmtpPort());
063                    setAuth(mailObj.getAuth());
064                    setAuthUser(mailObj.getAuthUser());
065                    setAuthPass(mailObj.getAuthPass());
066                    
067                    setInitParams( params );
068                    setAttachFiles(   params.get( "ATTACH1" )
069                                            , params.get( "ATTACH2" )
070                                    , params.get( "ATTACH3" )
071                                    , params.get( "ATTACH4" )
072                                    , params.get( "ATTACH5" ));
073                    Map <String, String[]> dstMap = makeMailDstMap( table );
074                    setMailDstMap( dstMap );
075            }
076    
077            /**
078             * 画面に??の送信状況を表示するために??信の宛?マップに基づ???ブルモ?を作?します?
079             * 作?されたテーブルモ?を指定されるスコープに入れます?
080             *
081             * @og.rev 5.1.9.0 (2010/08/01) keySet() ?entrySet() に変更
082             *
083             * @return      宛?マップに基づ???ブルモ?
084             */
085            public DBTableModel makeDstTable(){
086                    Map<String, String[]> mailDst = getMailDstMap();
087                    DBTableModel table;
088                    int numberOfColumns = names.length;
089    
090                    table = DBTableModelUtil.newDBTable();
091                    table.init( numberOfColumns );
092                    setTableDBColumn( table, names );
093    
094    //              for( String dstId : mailDst.keySet() ) {
095    //                      String[] dstInfo = mailDst.get( dstId );
096    //                      table.addColumnValues( dstInfo );
097    //              }
098    
099                    // 5.1.9.0 (2010/08/01) keySet() ?entrySet() に変更
100                    for( Map.Entry<String, String[]> en : mailDst.entrySet() ) {
101                            table.addColumnValues( en.getValue() );
102                    }
103    
104                    return table;
105            }
106    
107            /**
108             * リソースマネージャーをセ?します?
109             * これは、??ロケール)に応じ?DBColumn をあらかじめ設定しておく為に
110             * ?です?
111             * リソースマネージャーが設定されて???また?、所定?キーの DBColumn ?
112             * リソースに存在しな??合?、?部で DBColumn オブジェクトを作?します?
113             *
114             * @param  res リソースマネージャー
115             */
116            // 注意:この resource は、実質利用されて?せん?
117            public void setResourceManager( final ResourceManager res ) {
118                    resource = res;
119            }
120    
121            /**
122             * DBColumn オブジェクトを??ブルモ?に設定します?
123             *
124             * @param       table   DBTableModelオブジェク?
125             * @param       names   カラ?配?
126             */
127            // 注意:この dbColumn は、実質利用されて?せん?
128            protected void setTableDBColumn( final DBTableModel table, final String[] names ) {
129    //              dbColumn = new DBColumn[names.length] ;
130                    for( int i=0; i<names.length; i++ ) {
131                            DBColumn clm = resource.makeDBColumn( names[i] );
132                            table.setDBColumn( i,clm );
133    //                      dbColumn[i] = clm;
134                    }
135            }
136    
137            /**
138             * セ?ョンから取得した宛???ブルにより宛?マップを作?します?
139             * 宛???ブルの?コードに対して?送信?"となって?レコード?み宛?マップに入れるようにして?す?
140             *
141             * @param       table   セ?ョンから取得した宛???ブル
142             *
143             * @return      宛?マッ?
144             */
145            private Map<String, String[]> makeMailDstMap( final DBTableModel table ){
146                    Map<String, String[]> dstMap = new TreeMap<String, String[]>();
147                    int rowCount = table.getRowCount();
148                    int colCount = names.length;
149                    for( int i = 0; i < rowCount; i++ ) {
150                            String[] tmpDst = new String[colCount];
151                            if( AbstractMailManager.FGJ_SEND_WAIT.equals( table.getValue( i, IDX_FGJ_MAIL ) ) ) {
152                                    for( int j = 0; j < colCount; j++ ) {
153                                            tmpDst[j] = table.getValue( i, j );
154                                    }
155                                    dstMap.put( tmpDst[IDX_DST_ID], tmpDst );
156                            }
157                    }
158    
159                    return dstMap;
160            }
161    }