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 018// import org.opengion.fukurou.system.LogWriter; 019import org.opengion.hayabusa.resource.ResourceFactory; // 6.2.6.0 (2015/06/19) 020import org.opengion.hayabusa.resource.ResourceManager; // 6.2.6.0 (2015/06/19) 021import org.opengion.fukurou.util.StringUtil; 022import static org.opengion.fukurou.system.HybsConst.CR ; // 6.1.0.0 (2014/12/26) 023import static org.opengion.fukurou.system.HybsConst.BUFFER_MIDDLE; // 6.1.0.0 (2014/12/26) refactoring 024 025/** 026 * データのコード情報を取り扱うクラスです。 027 * 028 * 文字列の 「キー:ラベル キー:ラベル」の情報から、HTMLのメニューやリストを作成するための 029 * オプションタグを作成したり、与えられたキーをもとに、チェック済みのオプションタグを 030 * 作成したりします。 031 * ラベル にスペースを含ませる場合は、ダブルクォーテーションで囲ってください。 032 * 033 * @og.rev 5.6.6.0 (2013/07/05) 新規追加 034 * @og.rev 5.7.7.1 (2014/06/13) Selection_NULL を 基本実装とします。 035 * @og.rev 8.5.6.1 (2024/03/29) 継承で使えるように、一部修正します。 036 * @og.group 選択データ制御 037 * 038 * @version 4.0 039 * @author Kazuhiko Hasegawa 040 * @since JDK5.0, 041 */ 042public class Selection_KEYVAL extends Selection_NULL { 043// private final String ORG_KEYVAL ; // 8.5.6.1 (2024/03/29) 継承親で、引数付きコンストラクタで初期設定されます。 044// private final String CACHE ; // 8.5.6.1 (2024/03/29) 親クラスで定義 045 046 /** 047 * コンストラクター 048 * 049 * 既存の、CodeData には存在しない、新しいコードリソースを作成する為の、文字列を指定します。 050 * 文字列は、「キー:ラベル キー:ラベル」形式で、スペースで分解後、":" でキーとラベルに分離します。 051 * スペース分解後の文字列に、":" が含まれていない場合は、キーをラベルとして扱います。 052 * また、ラベル部分は、ラベルリソースを使用して、変換を行います。 053 * 内部的には、CodeData を作成しません。DBColumnオブジェクト内で、直接、Selection_KEYVAL を生成します。 054 * codeName、codeList、codeGroup などが指定された場合は、そちらが優先されます。 055 * 「キー:ラベル キー:ラベル」で、ラベル にスペースを含ませる場合は、ダブルクォーテーションで囲ってください。 056 * 「"キー:ラベル" "キー:ラベル"」という感じです。 057 * 058 * @og.rev 5.6.7.1 (2013/08/09) 「キー:ラベル キー:ラベル」分解に、クオート処理を加味 059 * @og.rev 6.2.6.0 (2015/06/19) type別Selectionの場合、ラベルリソースを使用する為、言語を引数で渡す。 060 * 061 * @param strCode コードデータパラメータ文字列 062 * @param lang 言語 063 */ 064 public Selection_KEYVAL( final String strCode,final String lang ) { 065// super(); // 6.4.1.1 (2016/01/16) PMD refactoring. It is a good practice to call super() in a constructor 066// ORG_KEYVAL = strCode ; 067 super( strCode ); // 8.5.6.1 (2024/03/29) 継承親で、引数付きコンストラクタで初期設定されます。 068 069 // 6.2.6.0 (2015/06/19) 070 final ResourceManager resource = ResourceFactory.newInstance( lang ); 071 072 // 6.2.6.0 (2015/06/19) 仕様変更。コロン が無ければ、キーからラベルを求める。 073 // 6.4.1.1 (2016/01/16) PMD refactoring. Avoid if (x != y) ..; else ..; 074// if( strCode == null || strCode.isEmpty() ) { 075// cache = ""; 076// } 077// else { 078 if( strCode != null && ! strCode.isEmpty() ) { // 8.5.6.1 (2024/03/29) cache は、superクラスで初期値済み 079 final String[] keyvals = StringUtil.csv2Array( strCode, ' ' ); // 5.6.7.1 (2013/08/09) クオート処理を加味 080 final int size = keyvals.length; 081 082 final StringBuilder buf = new StringBuilder( BUFFER_MIDDLE ); 083 for( int i=0; i<size; i++ ) { 084 final String keyval = keyvals[i] ; 085 if( keyval == null || keyval.length() <= 0 ) { continue; } 086 final int idx = keyval.indexOf( ':' ); 087 // 6.2.6.0 (2015/06/19) 仕様変更。コロン が無ければ、キーからラベルを求める。 088 089 final String key = idx < 0 ? keyval : keyval.substring( 0,idx ).trim(); 090 final String val = resource.getLabel( 091 idx < 0 ? keyval : keyval.substring( idx+1 ).trim() 092 ); 093 094 // 6.0.2.5 (2014/10/31) char を append する。 095 buf.append( "<option value=\"" ).append( key ) 096 .append( "\">" ).append( val ).append( "</option>" ); 097 } 098 099 cache = buf.toString(); // 8.5.6.1 (2024/03/29) super.cache 100 } 101 } 102 103// /** 104// * 初期値が選択済みの 選択肢(オプション)を返します。 105// * このオプションは、引数の値を初期値とするオプションタグを返します。 106// * このクラスでは、useShortLabel は、無視されます。(常に、false です) 107// * 108// * @og.rev 8.5.6.1 (2024/03/29) 継承元と同じなので削除 109// * 110// * @param selectValue 選択されている値 111// * @param seqFlag シーケンスアクセス機能 [true:ON/false:OFF] 112// * @param useShortLabel ラベル(短)をベースとしたオプション表示を行うかどうか(未使用)。 113// * 114// * @return オプションタグ 115// * @og.rtnNotNull 116// */ 117// @Override 118// public String getOption( final String selectValue,final boolean seqFlag, final boolean useShortLabel ) { 119// // マッチするアドレスを探す。キーの前後のダブルクオートを加味して検索 120// final String selVal = "\"" + selectValue + "\"" ; 121// 122// // 8.5.5.1 (2024/02/29) PMD 7.0.0 OnlyOneReturn メソッドには終了ポイントが 1 つだけ必要 123// final String rtn; 124// 125// final int indx = CACHE.indexOf( selVal ); 126// if( indx < 0 ) { 127// // 4.0.0 (2005/01/31) 128// if( selectValue != null && selectValue.length() > 0 ) { 129// final String errMsg = "コードに存在しない値が指定されました。" 130// + " value=[" + selectValue + "]" 131// + CR + ORG_KEYVAL ; 132// LogWriter.log( errMsg ); 133// } 134//// return CACHE; 135// rtn = CACHE; 136// } 137// else { 138// final int addIndx = indx + selVal.length() ; // selected の挿入位置 139// 140// final StringBuilder buf = new StringBuilder( BUFFER_MIDDLE ); 141// // 3.6.0.6 (2004/10/22) シーケンスアクセス機能を指定する seqFlag を導入 142// if( seqFlag ) { 143// buf.append( "<option value=\"" ).append( selectValue ).append( '"' ); // 6.0.2.5 (2014/10/31) char を append する。 144// } 145// else { 146// buf.append( CACHE.substring( 0,addIndx ) ); 147// } 148// buf.append( " selected=\"selected\"" ) 149// .append( CACHE.substring( addIndx ) ); 150//// return buf.toString() ; 151// rtn = buf.toString() ; 152// } 153// return rtn; 154// } 155 156// /** 157// * 選択肢(value)に対するラベルを返します。 158// * 選択肢(value)が、存在しなかった場合は、選択肢そのものを返します。 159// * getValueLabel( XX,false ) は、getValueLabel( XX ) と同じです。 160// * 161// * ※ このクラスでは、短縮ラベルは使用されません。 162// * 163// * @og.rev 8.5.6.1 (2024/03/29) 継承元と同じなので削除 164// * 165// * @param selectValue 選択肢の値 166// * @param isSLbl 短縮ラベルを [true:使用する/false:しない](未使用) 167// * 168// * @return 選択肢のラベル 169// * @see #getValueLabel( String ) 170// */ 171// @Override 172// public String getValueLabel( final String selectValue,final boolean isSLbl ) { 173// // マッチするアドレスを探す。キーの前後のダブルクオートを加味して検索 174// final String selVal = "\"" + selectValue + "\"" ; 175// 176// // 8.5.5.1 (2024/02/29) PMD 7.0.0 OnlyOneReturn メソッドには終了ポイントが 1 つだけ必要 177// final String rtn; 178// 179// final int indx = CACHE.indexOf( selVal ); 180// if( indx < 0 ) { 181// // マッチしなければ、選択肢そのものを返す。 182//// return selectValue; 183// rtn = selectValue; 184// } 185// else { 186// // マッチすれば、キー以下のBODY部の文字列を切り出して返す。 187// final int stIdx = indx + selVal.length() + 1 ; // +1 は、">" の位置 188// final int edIdx = CACHE.indexOf( '<',stIdx ); // 終了アドレス 189// 190//// return CACHE.substring( stIdx,edIdx ); 191// rtn = CACHE.substring( stIdx,edIdx ); 192// } 193// return rtn; 194// } 195 196}