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.remote; 017 018 import java.util.ArrayList; 019 import java.util.List; 020 import java.util.Map; 021 022 import org.opengion.fukurou.db.Transaction; 023 import org.opengion.fukurou.db.TransactionReal; 024 import org.opengion.fukurou.transfer.TransferConfig; 025 import org.opengion.fukurou.transfer.TransferRead; 026 import org.opengion.fukurou.util.ApplicationInfo; 027 import org.opengion.fukurou.util.StringUtil; 028 import org.opengion.hayabusa.common.HybsSystem; 029 import org.opengion.hayabusa.common.HybsSystemException; 030 031 /** 032 * RemoteControllableインタフェイスを実?? 033 * サーブレ?経由で?伝?読取??行うためのクラスです? 034 * 035 * こ?クラスは、伝?読取???ラ?ークラスです? 036 * 引数のKBREADのパラメーターに基づき?伝?読取オブジェクトを生?し?伝?処?実行します? 037 * 詳細につ?は、{@link org.opengion.fukurou.transfer.TransferRead_HTTP}を参照して下さ?? 038 * 039 * @og.rev 5.4.2.0 (2011/12/01) 新規作? 040 * 041 * @version 4.1 042 * @author Hiroki Nakamura 043 * @since JDK6.0, 044 * 045 */ 046 public class TransferReadWrapper implements RemoteControllable { 047 048 // 伝?読取クラスのベ?スクラス? 049 private static final String READ_CLASS_BASE = "org.opengion.fukurou.transfer.TransferRead_" ; 050 051 // コネクションにアプリケーション??を追記するかど??? 052 private static final boolean USE_DB_APPLICATION_INFO = HybsSystem.sysBool( "USE_DB_APPLICATION_INFO" ) ; 053 054 private static final ApplicationInfo appInfo; 055 056 static { 057 if( USE_DB_APPLICATION_INFO ) { 058 appInfo = new ApplicationInfo(); 059 // ユーザーID,IPアドレス,ホスト名 060 appInfo.setClientInfo( "TransferReadWrapper",HybsSystem.HOST_ADRS,HybsSystem.HOST_NAME ); 061 // 画面ID,操?プログラ?D 062 appInfo.setModuleInfo( "TransferReadWrapper","TransferReadWrapper","TransferReadWrapper" ); 063 } 064 else { 065 appInfo = null; 066 } 067 } 068 /** 069 * RemoteControllableインタフェイスの実?ソ?です? 070 * 071 * @og.rev 5.7.1.2 (2013/12/20) msg ?errMsg 変更 072 * 073 * @param valMap サーブレ?が受け取ったキーと値のマッ? 074 * 075 * @return XML形式?実行結果 076 */ 077 @Override 078 public String remoteControl( final Map<String,String> valMap ) { 079 // パラメーターより伝?設定オブジェクトを生?します? 080 TransferConfig conf = new TransferConfig( 081 valMap.get( "KBREAD" ) 082 , valMap.get( "READOBJ" ) 083 , valMap.get( "READPRM" ) 084 , valMap.get( "KBEXEC" ) 085 , valMap.get( "EXECDBID" ) 086 , valMap.get( "EXECOBJ" ) 087 , valMap.get( "EXECPRM" ) 088 , valMap.get( "ERROR_SENDTO" ) 089 , valMap.get( "HFROM" ) 090 , null, -1 ); 091 Transaction tran = null; 092 String rtn = null; 093 try { 094 tran = new TransactionReal( appInfo ); 095 TransferRead read = (TransferRead)StringUtil.newInstance( READ_CLASS_BASE + valMap.get( "KBREAD" ) ); 096 097 // ??タ読? 098 String type = valMap.get( "type" ); 099 if( "read".equals( type ) ) { 100 String[] data = read.read( conf, tran ); 101 // 完?エラー処??ために更新キーを取得しXMLに埋め込? 102 String[] keys = read.getKeys(); 103 rtn = makeXml( data, keys ); 104 } 105 // 完??? 106 else if( "complete".equals( type ) ) { 107 // パラメーターから更新キーを読み取る 108 String[] keys = getKeys( valMap ); 109 read.setKeys( keys ); 110 read.complete( conf, tran ); 111 } 112 // エラー処? 113 else if( "error".equals( type ) ) { 114 // パラメーターから更新キーを読み取る 115 String[] keys = getKeys( valMap ); 116 read.setKeys( keys ); 117 read.error( conf, appInfo ); 118 } 119 else { 120 String errMsg = "処?イプが不正です?[?可能タイ?read,complete,error][?されたタイ?" + type + "]"; 121 throw new HybsSystemException( errMsg ); 122 } 123 } 124 catch ( Throwable ex ) { 125 // String msg = "伝?読取??HTTP経由)でエラーが発生しました?; 126 // throw new HybsSystemException( msg, ex ); 127 String errMsg = "伝?読取??HTTP経由)でエラーが発生しました?; 128 throw new HybsSystemException( errMsg, ex ); // 5.7.1.2 (2013/12/20) msg ?errMsg 変更 129 } 130 finally { 131 if( tran != null ) { tran.close(); } 132 } 133 134 return rtn; 135 } 136 137 /** 138 * 伝?読取???結果から??タ?及?キー?からXML??タを生成します? 139 * 140 * @og.rev 5.4.4.5 (2012/02/20) 特定文字をエスケープす? 141 * @param data ??タ?(配?) 142 * @param key 更新時に使用するキー?(配?) 143 * 144 * @return XML??タ 145 */ 146 private String makeXml( final String[] data, final String[] key ) { 147 StringBuilder buf = new StringBuilder(); 148 buf.append( "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>" ); 149 buf.append( "<root>" ); 150 buf.append( " <dataList>" ); 151 if( data != null ) { 152 for( String d : data ) { 153 // buf.append( " <data>" ).append( d ).append( "</data>" ); 154 buf.append( " <data>" ).append( StringUtil.htmlFilter(d) ).append( "</data>" ); 155 } 156 } 157 buf.append( " </dataList>" ); 158 buf.append( " <keyList>" ); 159 if( key != null ) { 160 for( String k : key ) { 161 // buf.append( " <key>" ).append( k ).append( "</key>" ); 162 buf.append( " <key>" ).append( StringUtil.htmlFilter(k) ).append( "</key>" ); 163 } 164 } 165 buf.append( " </keyList>" ); 166 buf.append( "</root>" ); 167 return buf.toString(); 168 } 169 170 /** 171 * パラメーターより伝?読取オブジェクトに渡すキー?(配?)を生成します? 172 * 対象パラメーターは?(??タ件数) と ②k1?kn(??タ) です? 173 * 174 * @param valMap パラメーターMap 175 * 176 * @return 値?(配?) 177 */ 178 private String[] getKeys( final Map<String,String> valMap ) { 179 int rows = 0; 180 String rno = valMap.get( "n" ); 181 if( rno != null && rno.length() > 0 ) { 182 rows = Integer.valueOf( rno ); 183 } 184 List<String> list = new ArrayList<String>(); 185 for( int i=0; i<rows; i++ ) { 186 // String key = valMap.get( "k" + String.valueOf( i ) ); 187 String key = valMap.get( "k" + i ); 188 list.add( key ); 189 } 190 // return list.toArray( new String[0] ); 191 return list.toArray( new String[list.size()] ); 192 } 193 }