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 org.opengion.hayabusa.common.HybsSystem; 019import org.opengion.fukurou.util.StringFormat; 020import org.opengion.fukurou.util.StringUtil; // 5.9.0.1 (2015/09/11) 021 022/** 023 * 動的プルダウンなどで利用されるイベントカラムの各種情報を保持するための 024 * 管理クラスです。 025 * 026 * 内容を置き換えるカラム(子カラム)の名前をキーに、イベントカラム(親カラム)や、 027 * イベント発行時の処理URL等を管理します。 028 * 029 * これらの情報は、ColumnTagやSelectTag、ViewFormTagなどで登録され、その結果を 030 * JavaScriptのコードとして出力します。(common/eventColumn.jsp) 031 * 032 * ここで出力された情報をイベント発行時に、JavaScriptが参照し、処理URLに渡す 033 * ことで、動的な項目の入れ替えを実現しています。 034 * 035 * @og.rev 5.1.7.0 (2010/06/01) 新規追加 036 * @og.rev 5.9.0.1 (2015/09/11) アンダースコア対応 037 * 038 * @version 4.0 039 * @author Hiroki Nakamura 040 * @since JDK5.0, 041 */ 042public class DBEventColumn { 043 044 private static final String EVENT_COLUMN_URL = HybsSystem.sys( "JSP" ) + "/" + HybsSystem.sys( "EVENT_COLUMN_URL" ); 045 046 private final String name; // 内容を置き換えるカラム(子カラム) 047 private final String eventColumn; // イベントカラム(親カラム・CSV形式) 048 private final String eventValue; // 6.3.3.0 (2015/07/25) eventValue 追加 049 private final String eventUrl; // イベント発行時の処理URL 050 private final String renderer; // 子カラムのレンデラー 051 private final String editor; // 子カラムのエディター 052 private final String rendParam; // 子カラムの表示パラメーター 053 private final String editParam; // 子カラムの編集パラメーター 054 private final String valParam; // 6.3.3.0 (2015/07/25) rendParam,editParam で使用する変数化された親カラム 055 056 /** 057 * 初期情報を含んだ新規オブジェクトを作成します。 058 * 059 * @og.rev 6.3.3.0 (2015/07/25) eventValue 追加 060 * @og.rev 5.9.0.1 (2015/09/11) アンダースコア対応 061 * 062 * @param name 内容を置き換えるカラム(子カラム) 063 * @param eventColumn イベントカラム(親カラム・CSV形式) 064 * @param eventValue 子カラムの値SQL 065 * @param eventUrl イベント発行時の処理URL 066 * @param renderer 子カラムのレンデラー 067 * @param editor 子カラムのエディター 068 * @param rendParam 子カラムの表示パラメーター 069 * @param editParam 子カラムの編集パラメーター 070 */ 071 public DBEventColumn( final String name, final String eventColumn, final String eventValue, final String eventUrl, 072 final String renderer, final String editor, final String rendParam, final String editParam ) { 073 this.name = name; 074 this.eventColumn = eventColumn; 075 this.eventValue = eventValue; // 6.3.3.0 (2015/07/25) 076 // 6.4.2.1 (2016/02/05) PMD refactoring. Useless parentheses. 077 this.eventUrl = eventUrl != null && eventUrl.length() > 0 ? eventUrl : EVENT_COLUMN_URL; // 5.1.9.0 (2010/08/01) 動的プルダウン不具合対応 078 this.renderer = renderer; 079 this.editor = editor; 080 this.rendParam = rendParam; 081 this.editParam = editParam; 082 083 valParam = "{@" + evColReplace( eventColumn ).replace( ",", "}:{@" ) + "}" ; // 5.9.0.1 (2015/09/11) 084 } 085 086 /** 087 * 内容を置き換えるカラム(子カラム)を返します。 088 * 089 * @return 内容を置き換えるカラム(子カラム) 090 */ 091 public String getName() { return name; } 092 093 /** 094 * イベントカラム(親カラム・CSV形式)を返します。 095 * 096 * @return イベントカラム(親カラム・CSV形式) 097 */ 098 public String getEventColumn() { return eventColumn; } 099 100 /** 101 * イベント発行時の処理URLを返します。 102 * 103 * @og.rev 5.1.8.0 (2010/07/01) getEventUrl ⇒ getEventURL に変更 104 * 105 * @return イベント発行時の処理URL 106 */ 107 public String getEventURL() { return eventUrl; } 108 109 /** 110 * 子カラムのレンデラーを返します。 111 * 112 * @return 子カラムのレンデラー 113 */ 114 public String getRenderer() { return renderer; } 115 116 /** 117 * 子カラムのエディターを返します。 118 * 119 * @return 子カラムのエディター 120 */ 121 public String getEditor() { return editor; } 122 123 /** 124 * 子カラムの表示パラメーターを返します。 125 * 126 * @return 子カラムの表示パラメーター 127 * @og.rtnNotNull 128 */ 129 public String getRendParam() { 130 final StringFormat sf = new StringFormat( 131 rendParam 132 ,valParam // 6.3.3.0 (2015/07/25) 133 ,name ); 134 return sf.format(); 135 } 136 137 /** 138 * 子カラムの編集パラメーターを返します。 139 * 140 * @return 子カラムの編集パラメーター 141 * @og.rtnNotNull 142 */ 143 public String getEditParam() { 144 final StringFormat sf = new StringFormat( 145 editParam 146 ,valParam // 6.3.3.0 (2015/07/25) 147 ,name ); 148 return sf.format(); 149 } 150 151 /** 152 * 子カラムの値SQLを返します。 153 * 154 * @og.rev 6.3.3.0 (2015/07/25) eventValue 追加 155 * 156 * @return 子カラムの値SQL 157 * @og.rtnNotNull 158 */ 159 public String getEventValue() { 160 final StringFormat sf = new StringFormat( 161 eventValue 162 ,valParam // 6.3.3.0 (2015/07/25) 163 ,name ); 164 return sf.format(); 165 } 166 167 /** 168 * カンマ区切りのカラム名から先頭のアンダースコアを外します。 169 * 170 * @og.rev 5.9.0.1 (2015/09/11) 新規作成 171 * @og.rev 6.8.5.0 (2018/01/09) StringUtil.csv2Array のデフォルトメソッドを使用します。 172 * 173 * @param inStr カンマ区切りイベントカラム 174 * @return 先頭アンダースコアを外したカンマ区切り文字列 175 */ 176 private String evColReplace( final String inStr ){ 177 final String[] to; 178 if( inStr != null && inStr.indexOf( ',' ) >= 0 ) { 179 to = StringUtil.csv2Array( inStr ); // 6.8.5.0 (2018/01/09) 180 } 181 else { 182 to = new String[] { inStr }; 183 } 184 185 for( int i=0; i<to.length; i++ ) { 186 if( to[i].charAt( 0 ) == '_'){ 187 to[i] = to[i].substring( 1 ); 188 } 189 } 190 191 return StringUtil.array2csv( to ); 192 } 193}