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.db; 017 018import java.util.regex.Matcher; // 5.10.4.0 (2018/10/05) 暗号化処理追加 019import java.util.regex.Pattern; // 5.10.4.0 (2018/10/05) 暗号化処理追加 020 021import org.opengion.hayabusa.common.HybsSystem; 022import org.opengion.fukurou.util.StringFormat; 023import org.opengion.fukurou.util.StringUtil; // 5.9.0.1 (2015/09/11) 024import org.opengion.fukurou.security.HybsCryptography; // 5.10.4.0 (2018/10/05) 暗号化処理追加 025import static org.opengion.fukurou.system.HybsConst.BUFFER_MIDDLE; // 5.10.4.0 (2018/10/05) 026 027/** 028 * 動的プルダウンなどで利用されるイベントカラムの各種情報を保持するための 029 * 管理クラスです。 030 * 031 * 内容を置き換えるカラム(子カラム)の名前をキーに、イベントカラム(親カラム)や、 032 * イベント発行時の処理URL等を管理します。 033 * 034 * これらの情報は、ColumnTagやSelectTag、ViewFormTagなどで登録され、その結果を 035 * JavaScriptのコードとして出力します。(common/eventColumn.jsp) 036 * 037 * ここで出力された情報をイベント発行時に、JavaScriptが参照し、処理URLに渡す 038 * ことで、動的な項目の入れ替えを実現しています。 039 * 040 * @og.rev 5.1.7.0 (2010/06/01) 新規追加 041 * @og.rev 5.9.0.1 (2015/09/11) アンダースコア対応 042 * 043 * @version 4.0 044 * @author Hiroki Nakamura 045 * @since JDK5.0, 046 */ 047public class DBEventColumn { 048 049 private static final String EVENT_COLUMN_URL = HybsSystem.sys( "JSP" ) + "/" + HybsSystem.sys( "EVENT_COLUMN_URL" ); 050 051 private final String name ; // 内容を置き換えるカラム(子カラム) 052 private final String eventColumn ; // イベントカラム(親カラム・CSV形式) 053 private final String eventValue ; // 6.3.3.0 (2015/07/25) eventValue 追加 054 private final String eventUrl ; // イベント発行時の処理URL 055 private final String renderer ; // 子カラムのレンデラー 056 private final String editor ; // 子カラムのエディター 057 private final String rendParam ; // 子カラムの表示パラメーター 058 private final String editParam ; // 子カラムの編集パラメーター 059 private final String valParam ; // 6.3.3.0 (2015/07/25) rendParam,editParam で使用する変数化された親カラム 060 061 private final Pattern trgPattern = Pattern.compile( "(?<=\\{@)[^.]+?(?=\\})" ); // 5.10.4.0 (2018/10/05) 062 private final boolean flgEncrypt = HybsSystem.sysBool( "EVENT_SQL_ENCRYPT" ); // 5.10.4.0 (2018/10/05) 063 private final HybsCryptography hc = flgEncrypt ? new HybsCryptography() : null ; // 5.10.4.0 (2018/10/05) 064 065 /** 066 * 初期情報を含んだ新規オブジェクトを作成します。 067 * このコンストラクタではflgEncryptをfalseとして扱う。 068 * 069 * @og.rev 6.3.3.0 (2015/07/25) eventValue 追加 070 * @og.rev 5.9.0.1 (2015/09/11) アンダースコア対応 071 * @og.rev 5.10.4.0 (2018/10/05) 暗号化対応 072 * 073 * @param name 内容を置き換えるカラム(子カラム) 074 * @param eventColumn イベントカラム(親カラム・CSV形式) 075 * @param eventValue 子カラムの値SQL 076 * @param eventUrl イベント発行時の処理URL 077 * @param renderer 子カラムのレンデラー 078 * @param editor 子カラムのエディター 079 * @param rendParam 子カラムの表示パラメーター 080 * @param editParam 子カラムの編集パラメーター 081 */ 082 public DBEventColumn( final String name, final String eventColumn, final String eventValue, final String eventUrl, 083 final String renderer, final String editor, final String rendParam, final String editParam ) { 084 this.name = name; 085 this.eventColumn = eventColumn; 086 this.eventValue = eventValue; // 6.3.3.0 (2015/07/25) 087 // 6.4.2.1 (2016/02/05) PMD refactoring. Useless parentheses. 088 this.eventUrl = eventUrl != null && eventUrl.length() > 0 ? eventUrl : EVENT_COLUMN_URL; // 5.1.9.0 (2010/08/01) 動的プルダウン不具合対応 089 this.renderer = renderer; 090 this.editor = editor; 091 this.rendParam = rendParam; 092 this.editParam = editParam; 093 094 valParam = "{@" + evColReplace( eventColumn ).replace( ",", "}:{@" ) + "}" ; // 5.9.0.1 (2015/09/11) 095 096// // 5.10.4.0 (2018/10/05) 暗号化対応 097// this.flgEncrypt = HybsSystem.sysBool("EVENT_SQL_ENCRYPT"); 098// if(flgEncrypt) { 099// this.hc = new HybsCryptography(); 100// } 101 } 102 103 /** 104 * 内容を置き換えるカラム(子カラム)を返します。 105 * 106 * @return 内容を置き換えるカラム(子カラム) 107 */ 108 public String getName() { return name; } 109 110 /** 111 * イベントカラム(親カラム・CSV形式)を返します。 112 * 113 * @return イベントカラム(親カラム・CSV形式) 114 */ 115 public String getEventColumn() { return eventColumn; } 116 117 /** 118 * イベント発行時の処理URLを返します。 119 * 120 * @og.rev 5.1.8.0 (2010/07/01) getEventUrl ⇒ getEventURL に変更 121 * 122 * @return イベント発行時の処理URL 123 */ 124 public String getEventURL() { return eventUrl; } 125 126 /** 127 * 子カラムのレンデラーを返します。 128 * 129 * @return 子カラムのレンデラー 130 */ 131 public String getRenderer() { return renderer; } 132 133 /** 134 * 子カラムのエディターを返します。 135 * 136 * @return 子カラムのエディター 137 */ 138 public String getEditor() { return editor; } 139 140 /** 141 * 子カラムの表示パラメーターを返します。 142 * 143 * @og.rev 5.10.4.0 (2018/10/05) 暗号化処理追加 144 * 145 * @return 子カラムの表示パラメーター 146 * @og.rtnNotNull 147 */ 148 public String getRendParam() { 149 final StringFormat sf = new StringFormat( 150 rendParam 151 ,valParam // 6.3.3.0 (2015/07/25) 152 ,name ); 153 // 5.10.4.0 (2018/10/05) 154// return sf.format(); 155// if(flgEncrypt) { 156// return hc.encrypt(sf.format()); 157// }else { 158// return sf.format(); 159// } 160 return flgEncrypt ? hc.encrypt( sf.format() ) : sf.format(); 161 } 162 163 /** 164 * 子カラムの編集パラメーターを返します。 165 * 166 * @og.rev 5.10.4.0 (2018/10/05) 暗号化処理追加 167 * 168 * @return 子カラムの編集パラメーター 169 * @og.rtnNotNull 170 */ 171 public String getEditParam() { 172 final StringFormat sf = new StringFormat( 173 editParam 174 ,valParam // 6.3.3.0 (2015/07/25) 175 ,name ); 176 // 5.10.4.0 (2018/10/05) 177// return sf.format(); 178// if(flgEncrypt) { 179// return hc.encrypt(sf.format()); 180// }else { 181// return sf.format(); 182// } 183 return flgEncrypt ? hc.encrypt( sf.format() ) : sf.format(); 184 } 185 186 /** 187 * 子カラムの値SQLを返します。 188 * 189 * @og.rev 6.3.3.0 (2015/07/25) eventValue 追加 190 * 191 * @return 子カラムの値SQL 192 * @og.rtnNotNull 193 */ 194 public String getEventValue() { 195 final StringFormat sf = new StringFormat( 196 eventValue 197 ,valParam // 6.3.3.0 (2015/07/25) 198 ,name ); 199 return sf.format(); 200 } 201 202 /** 203 * CSV形式のカラム名から先頭のアンダースコアを外します。 204 * 205 * @og.rev 5.9.0.1 (2015/09/11) 新規作成 206 * @og.rev 6.8.5.0 (2018/01/09) StringUtil.csv2Array のデフォルトメソッドを使用します。 207 * 208 * @param inStr CSV形式イベントカラム 209 * @return 先頭アンダースコアを外したCSV形式文字列 210 */ 211 private String evColReplace( final String inStr ){ 212 final String[] to; 213 if( inStr != null && inStr.indexOf( ',' ) >= 0 ) { 214 to = StringUtil.csv2Array( inStr ); // 6.8.5.0 (2018/01/09) 215 } 216 else { 217 to = new String[] { inStr }; 218 } 219 220 for( int i=0; i<to.length; i++ ) { 221 if( to[i].charAt( 0 ) == '_'){ 222 to[i] = to[i].substring( 1 ); 223 } 224 } 225 226 return StringUtil.array2csv( to ); 227 } 228 229 /** 230 * 文字列から{@XXX}のXXXを抜き出して、CSVに変換する。 231 * 232 * @og.rev 5.10.4.0 (2018/10/05) 新規作成 233 * 234 * @param trg 変換対象文字列 235 * @return CSV文字列 236 */ 237 private String getTrgCsv( final String trg ) { 238 if( trg == null || trg.length() == 0 ) { return ""; } 239 240 final Matcher mtch = trgPattern.matcher( trg ); 241 final StringBuilder rtn = new StringBuilder( BUFFER_MIDDLE ); 242 while( mtch.find() ) { 243 if( rtn.length() != 0 ) { 244 rtn.append( ',' ); 245 } 246 rtn.append( mtch.group() ); 247 } 248 249 return rtn.toString(); 250 } 251 252 /** 253 * レンデラーパラメータのキーリストを渡します。 254 * 復号化後の値設定に利用します。 255 * 256 * @og.rev 5.10.4.0 (2018/10/05) 新規作成 257 * 258 * @return レンデラーパラメータのキーリスト 259 */ 260 public String getRendParamKeys() { 261 // 暗号化しない、またはrendParamが空の場合は、空文字を返す 262 if( !flgEncrypt || rendParam == null || rendParam.length() == 0 ) { return ""; } 263 264 final StringFormat sf = new StringFormat( 265 rendParam 266// ,"{@" + evColReplace(evCol).replace( ",", "}:{@" ) + "}" 267 ,valParam // 6.3.3.0 (2015/07/25) 268 ,name ); 269 270 return getTrgCsv( sf.format() ); 271 } 272 273 /** 274 * エディターパラメータのキーリストを渡します。 275 * 復号化後の値設定に利用します。 276 * 277 * @og.rev 5.10.4.0 (2018/10/05) 新規作成 278 * 279 * @return エディターパラメータのキーリスト 280 */ 281 public String getEditParamKeys() { 282 // 暗号化しない、またはrendParamが空の場合は、空文字を返す 283 if( !flgEncrypt || editParam == null || editParam.length() == 0 ) { return ""; } 284 285 final StringFormat sf = new StringFormat( 286 editParam 287// ,"{@" + evColReplace(evCol).replace( ",", "}:{@" ) + "}" 288 ,valParam // 6.3.3.0 (2015/07/25) 289 ,name ); 290 291 return getTrgCsv( sf.format() ); 292 } 293 294 /** 295 * 暗号化フラグを渡します。 296 * 297 * @og.rev 5.10.4.0 (2018/10/05) 新規作成 298 * 299 * @return 暗号化フラグ 300 */ 301// public Boolean isFlgEncrypt() { 302 public boolean isFlgEncrypt() { 303 return flgEncrypt; 304 } 305}