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.fukurou.util.LogWriter; 019import org.opengion.fukurou.util.StringUtil; 020 021import org.opengion.hayabusa.common.HybsSystem; 022 023/** 024 * データのコード情報を取り扱うクラスです。 025 * 026 * 文字列の 「キー:ラベル キー:ラベル」の情報から、HTMLのメニューやリストを作成するための 027 * オプションタグを作成したり、与えられたキーをもとに、チェック済みのオプションタグを 028 * 作成したりします。 029 * ラベル にスペースを含ませる場合は、ダブルクォーテーションで囲ってください。 030 * 031 * @og.rev 5.6.6.0 (2013/07/05) 新規追加 032 * @og.rev 5.7.7.1 (2014/06/13) Selection_NULL を 基本実装とします。 033 * @og.group 選択データ制御 034 * 035 * @version 4.0 036 * @author Kazuhiko Hasegawa 037 * @since JDK5.0, 038 */ 039// public class Selection_KEYVAL implements Selection { 040public class Selection_KEYVAL extends Selection_NULL { 041 private final String ORG_KEYVAL ; 042 043 private final String CACHE ; 044 045 /** 046 * コンストラクター 047 * 048 * @og.rev 5.6.7.1 (2013/08/09) 「キー:ラベル キー:ラベル」分解に、クオート処理を加味 049 * 050 * @param strCode コードデータパラメータ文字列 051 */ 052 public Selection_KEYVAL( final String strCode ) { 053 ORG_KEYVAL = strCode ; 054 055 if( strCode != null && strCode.indexOf( ':' ) > 0 ) { 056 String[] keyvals = StringUtil.csv2Array( strCode, ' ' ); // 5.6.7.1 (2013/08/09) クオート処理を加味 057 int size = keyvals.length; 058 059 StringBuilder buf = new StringBuilder( HybsSystem.BUFFER_MIDDLE ); 060 for( int i=0; i<size; i++ ) { 061 String keyval = keyvals[i] ; 062 int idx ; 063 if( keyval == null || keyval.length() <= 0 || (idx = keyval.indexOf( ':' )) < 0 ) { continue; } // スペースで分解した結果 064 065 String key = keyval.substring( 0,idx ).trim(); 066 String val = keyval.substring( idx+1 ).trim(); 067 068 // 5.6.7.1 (2013/08/09) クオート処理を加味。csv2Array では、クオートは残ったままである。 069 if( val.length() >= 2 && val.charAt(0) == '"' && val.charAt(val.length()-1) == '"' ) { 070 // 前後の クオート を取り除く。さらに、その結果を trim する。 071 val = val.substring( 1,val.length()-1 ).trim(); 072 } 073 074 buf.append( "<option value=\"" ).append( key ).append( "\"" ); 075 buf.append( ">" ).append( val ).append( "</option>" ); 076 } 077 078 CACHE = buf.toString(); 079 } 080 else { 081 CACHE = ""; 082 } 083 } 084 085 /** 086 * 初期値が選択済みの 選択肢(オプション)を返します。 087 * このオプションは、引数の値を初期値とするオプションタグを返します。 088 * このメソッドでは、ラベル(短)が設定されている場合でも、これを使用せずに必ずラベル(長)を使用します。 089 * 090 * @og.rev 5.7.7.1 (2014/06/13) Selection_NULL を 継承するため、削除 091 * 092 * @param selectValue 選択されている値 093 * @param seqFlag シーケンスアクセス機能 [true:ON/false:OFF] 094 * 095 * @return オプションタグ 096 * @see #getOption( String, boolean, boolean ) 097 */ 098// public String getOption( final String selectValue,final boolean seqFlag ) { 099// return getOption( selectValue, seqFlag, false ); 100// } 101 102 /** 103 * 初期値が選択済みの 選択肢(オプション)を返します。 104 * このオプションは、引数の値を初期値とするオプションタグを返します。 105 * このクラスでは、useShortLabel は、無視されます。(常に、false です) 106 * 107 * @param selectValue 選択されている値 108 * @param seqFlag シーケンスアクセス機能 [true:ON/false:OFF] 109 * @param useShortLabel ラベル(短)をベースとしたオプション表示を行うかどうか(常にfalse)。 110 * 111 * @return オプションタグ 112 * @see #getOption( String, boolean ) 113 */ 114 @Override 115 public String getOption( final String selectValue,final boolean seqFlag, final boolean useShortLabel ) { 116 // マッチするアドレスを探す。キーの前後のダブルクオートを加味して検索 117 String selVal = "\"" + selectValue + "\"" ; 118 119 int indx = CACHE.indexOf( selVal ); 120 121 if( indx < 0 ) { 122 // 4.0.0 (2005/01/31) 123 if( selectValue != null && selectValue.length() > 0 ) { 124 String errMsg = "コードに存在しない値が指定されました。" 125 + " value=[" + selectValue + "]" 126 + HybsSystem.CR + ORG_KEYVAL ; 127 LogWriter.log( errMsg ); 128 } 129 return CACHE; 130 } 131 else { 132 int addIndx = indx + selVal.length() ; // selected の挿入位置 133 134 StringBuilder buf = new StringBuilder( HybsSystem.BUFFER_MIDDLE ); 135 // 3.6.0.6 (2004/10/22) シーケンスアクセス機能を指定する seqFlag を導入 136 if( seqFlag ) { 137 buf.append( "<option value=\"" ).append( selectValue ).append( "\"" ); 138 } 139 else { 140 buf.append( CACHE.substring( 0,addIndx ) ); 141 } 142 buf.append( " selected=\"selected\"" ); 143 buf.append( CACHE.substring( addIndx ) ); 144 return buf.toString() ; 145 } 146 } 147 148 /** 149 * 初期値が選択済みの 選択肢(オプション)を返します。 150 * このオプションは、引数の値を初期値とするオプションタグを返します。 151 * ※ このクラスでは実装されていません。 152 * 153 * @og.rev 5.7.7.1 (2014/06/13) Selection_NULL を 継承するため、削除 154 * 155 * @param name ラジオの name 156 * @param selectValue 選択されている値 157 * @param useLabel ラベル表示の有無 [true:有/false:無] 158 * 159 * @return オプションタグ 160 */ 161// public String getRadio( final String name,final String selectValue,final boolean useLabel ) { 162// String errMsg = "このクラスでは実装されていません。"; 163// throw new UnsupportedOperationException( errMsg ); 164// } 165 166 /** 167 * 初期値が選択済みの 選択肢(オプション)を返します。 168 * このオプションは、引数の値を初期値とするオプションタグを返します。 169 * ※ このクラスでは実装されていません。 170 * 171 * @og.rev 5.7.7.1 (2014/06/13) Selection_NULL を 継承するため、削除 172 * 173 * @param selectValue 選択されている値 174 * 175 * @return オプションタグ 176 */ 177// public String getRadioLabel( final String selectValue ) { 178// String errMsg = "このクラスでは実装されていません。"; 179// throw new UnsupportedOperationException( errMsg ); 180// } 181 182 /** 183 * 選択肢(value)に対するラベルを返します。 184 * 選択肢(value)が、存在しなかった場合は、選択肢そのものを返します。 185 * getValueLabel( XX ) は、getValueLabel( XX,false ) と同じです。 186 * 187 * @og.rev 5.7.7.1 (2014/06/13) Selection_NULL を 継承するため、削除 188 * 189 * @param selectValue 選択肢の値 190 * 191 * @return 選択肢のラベル 192 * @see #getValueLabel( String,boolean ) 193 */ 194// public String getValueLabel( final String selectValue ) { 195// return getValueLabel( selectValue,false ); 196// } 197 198 /** 199 * 選択肢(value)に対するラベルを返します。 200 * 選択肢(value)が、存在しなかった場合は、選択肢そのものを返します。 201 * getValueLabel( XX,false ) は、getValueLabel( XX ) と同じです。 202 * 203 * ※ このクラスでは、短縮ラベルは使用されません。 204 * 205 * @param selectValue 選択肢の値 206 * @param flag 短縮ラベルを [true:使用する/false:しない](常に false) 207 * 208 * @return 選択肢のラベル 209 * @see #getValueLabel( String ) 210 */ 211 @Override 212 public String getValueLabel( final String selectValue,final boolean flag ) { 213 // マッチするアドレスを探す。キーの前後のダブルクオートを加味して検索 214 String selVal = "\"" + selectValue + "\"" ; 215 216 int indx = CACHE.indexOf( selVal ); 217 218 if( indx < 0 ) { 219 // マッチしなければ、選択肢そのものを返す。 220 return selectValue; 221 } 222 else { 223 // マッチすれば、キー以下のBODY部の文字列を切り出して返す。 224 int stIdx = indx + selVal.length() + 1 ; // +1 は、">" の位置 225 int edIdx = CACHE.indexOf( '<',stIdx ); // 終了アドレス 226 227 return CACHE.substring( stIdx,edIdx ); 228 } 229 } 230 231 /** 232 * マルチ・キーセレクトを使用するかどうかを返します。 233 * true:使用する。false:使用しない です。 234 * ただし、実際に使用するかどうかは、HTML出力時に決めることが出来ます。 235 * ここでは、USE_MULTI_KEY_SELECT が true で、USE_SIZE(=20)以上の場合に 236 * true を返します。 237 * 238 * @og.rev 5.7.7.1 (2014/06/13) Selection_NULL を 継承するため、削除 239 * 240 * ※ ここでは、常に false を返します。 241 * 242 * @return 選択リストで、マルチ・キーセレクトを使用するかどうか(true:使用する) 243 */ 244// public boolean useMultiSelect() { 245// return false; 246// } 247 248 /** 249 * オブジェクトのキャッシュが時間切れかどうかを返します。 250 * キャッシュが時間切れ(無効)であれば、true を、有効であれば、 251 * false を返します。 252 * 253 * @og.rev 5.7.7.1 (2014/06/13) Selection_NULL を 継承するため、削除 254 * 255 * ※ ここでは、常に false を返します。 256 * 257 * @return キャッシュが時間切れなら true 258 */ 259// public boolean isTimeOver() { 260// return false; 261// } 262}