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.resource; 017 018 import java.text.MessageFormat; 019 020 import org.opengion.hayabusa.common.HybsSystem ; 021 import org.opengion.fukurou.util.StringUtil ; 022 023 /** 024 * systemId , lang に対応したラベル??タを作?します? 025 * 026 * ラベル??タは??目(CLM)に対して、各種ラベル??を持って?す? 027 * 従来のラベルは、表示名称として、?類しか持って?せんでしたが? 028 * ラベル??タは?種類?名称と?種類?概要を持って?す? 029 * 030 * label : 名称(長) 従来のラベルと同じで定義された文字そのも?です? 031 * shortLabel : 名称(HTML短) 概要説明をバルーン表示する短?称です? 032 * longLabel : 名称(HTML長) 概要説明をバルーン表示する長?称です? 033 * description : 概要説? カラ??説明やバルーンに使用します? 034 * 035 * 名称(HTML長)は、従来の表示名称にあたります?これは、??ラベルとして 036 * 使用されます?名称(HTML短)は、テーブル?のヘッ??の様に、特殊なケースで? 037 * 簡略化された名称を使用するときに利用されます?こ??替え?、?動で判断されます? 038 * 名称(HTML短)に、なにも設定されて???合?、名称(HTML長)が?動的に使用されます?で 039 * 初期??タ移行時には、そのまま??常時も??ブルヘッ??時も同じ??? 040 * 使用されます? 041 * ただし??表示の?、EXCEL出力などの??タには、名称(長)が使用されます? 042 * これは、名称(HTML短)?称(HTML長)は、Tips表示を行う為のHTML構文を採用して?為 043 * ?スト等に出力するには不適?からです?また?EXCEL等???ルでは、ラベル名が 044 * 長くてもセル?で調整できる為、簡略化された名称よりも正式名称で出力します? 045 * 046 * ラベル??タを作?する場合?、同?ベルで、作?区?KBSAKU)違いの場合?? 047 * ?大きな作?区?持つコードを使用します? 048 * 作?区?KBSAKU)は?:シス?予??1:アプリ設定?2:ユーザー設?と?具合に 049 * カスタマイズの度合いに応じて大きな数字を割り当てることで、キー??を上書き修正 050 * することが可能になります?(削除することは出来ません? 051 * 052 * @og.rev 4.0.0.0 (2004/12/31) 新規作? 053 * @og.group リソース管? 054 * 055 * @version 4.0 056 * @author Kazuhiko Hasegawa 057 * @since JDK5.0, 058 */ 059 public final class LabelData implements LabelInterface { 060 061 /** ???タのカラ?号 {@value} */ 062 public static final int CLM = 0 ; 063 /** ???タのカラ?号 {@value} */ 064 public static final int SNAME = 1 ; 065 /** ???タのカラ?号 {@value} */ 066 public static final int LNAME = 2 ; 067 /** ???タのカラ?号 {@value} */ 068 public static final int DESCRIPTION = 3 ; 069 /** ???タのカラ? {@value} */ 070 public static final int DATA_SIZE = 4 ; 071 /** リソース読み込みのために?利用 4.3.5.7 (2009/03/22) */ 072 public static final int FG_LOAD = 4 ; 073 074 private final String key ; // ? 075 private final String label ; // 名称(長) 076 private final String shortLabel ; // 名称(HTML短) 077 private final String longLabel ; // 名称(HTML長) 078 private final String description ; // 概要説? 079 private final boolean official ; // リソース??から作?されたかど? 080 private final boolean isFormat ; // メ?ージフォーマット対象かど? 4.0.0.0 (2007/10/17) 081 private final String rawShortLabel; // 名称(未変換短) 4.3.8.0 (2009/08/01) 082 private final boolean isFormatDesc; // 概要がフォーマット対象?4.3.7.6 (2009/07/15) 083 private final String rawLongLabel; // 名称(未変換長) 5.6.8.2 (2013/09/20) 084 085 /** 086 * null LabelData オブジェクトを作?します? 087 * こ?オブジェクト???リソース上に存在しな??合に使用され? 088 * null ??を表す?LabelData オブジェクトです? 089 * 090 * @og.rev 5.6.8.2 (2013/09/20) rawLongLabel対? 091 * 092 * @param inkey キー?? 093 */ 094 LabelData( final String inkey ) { 095 key = inkey.intern() ; 096 label = key ; // 名称(長) 097 shortLabel = key ; // 名称(HTML短) 098 longLabel = key ; // 名称(HTML長) 099 description = "" ; // 概要説? 100 official = false; // 非正? 101 isFormat = false; // 非フォーマッ?4.0.0.0 (2007/10/17) 102 rawShortLabel = key; // 名称(未変換短) 4.3.8.0 (2009/08/01) 103 isFormatDesc = false; // 概要フォーマッ?4.3.7.6 (2009/07/15) 104 rawLongLabel = key; // 名称(未変換長)5.6.8.2 (2013/09/20) 105 } 106 107 /** 108 * 配???の??タを?に、LabelDataオブジェクトを構築します? 109 * こ?コンストラクタは、他?パッケージから呼び出せな??? 110 * パッケージプライベ?トにしておきます? 111 * こ?コンストラクタは??リソースファイルを想定して?す? 112 * 113 * @og.rev 5.4.0.1 (2011/11/01) SNAME、概要説明?rawShortLabel 関係?処?修正 114 * @og.rev 5.6.8.2 (2013/09/20) rawLongLabel対? 115 * 116 * @param data CLM,SNAME,LNAME,DESCRIPTION 117 */ 118 LabelData( final String[] data ) { 119 key = data[CLM].intern() ; // ? 120 label = StringUtil.nval2( data[LNAME],"" ) ; // 名称(HTML長) 121 description = data[DESCRIPTION] ; // 概要説? 122 official = true; // 正? 123 isFormat = ( label.indexOf( '{' ) >= 0 ) ; // 4.0.0.0 (2007/10/17) 124 // isFormatDesc = ( description.indexOf( '{' ) >= 0 ); // 4.3.7.6 (2009/07/15) 125 String title = null; 126 127 rawLongLabel = label; // 名称(未変換長)5.6.8.2 (2013/09/20) 128 if( description == null || description.length() == 0 ) { 129 isFormatDesc = false; 130 // 5.4.0.1 (2011/11/01) title と label が間違って??SNAME が存在する場? 131 // title = StringUtil.htmlFilter( title ) ; 132 title = StringUtil.htmlFilter( label ) ; 133 134 // 概要説明がな??合?、そのままラベルを使用する? 135 longLabel = label; 136 } 137 else { 138 isFormatDesc = ( description.indexOf( '{' ) >= 0 ); // 5.1.8.0 (2010/07/01) nullポインタの参?外し対? 139 title = StringUtil.htmlFilter( description ) ; 140 141 // 概要説明がある場合?、ツールチップにDESCRIPTIONを表示する? 142 longLabel = "<span title=\"" 143 // + StringUtil.htmlFilter( description ) 144 + title 145 + "\">" 146 + label 147 + "</span>" ; 148 } 149 150 String sname = data[SNAME]; // 名称(HTML短) 151 if( sname == null || sname.length() == 0 ) { 152 // SNAME がな??合?、longLabel を使用する? 153 shortLabel = longLabel; 154 // rawShortLabel = longLabel; // 4.3.8.0 (2009/08/01) 155 rawShortLabel = label; // 5.4.0.1 (2011/11/01) longLabel を使?、ツールチップが?されるため? 156 } 157 else { 158 // SNAME が存在する場合???ルチップにdescriptionかlabelを使用する? 159 // String title = ( description == null || description.length() == 0 ) ? label : description ; 160 shortLabel = "<span title=\"" 161 // + StringUtil.htmlFilter( title ) 162 + title 163 + "\">" 164 + sname 165 + "</span>" ; 166 rawShortLabel = sname; // 4.3.8.0 (2009/08/01) 167 } 168 } 169 170 /** 171 * ラベルオブジェクト?キーを返します? 172 * 173 * @return ラベルオブジェクト?キー 174 */ 175 public String getKey() { return key; } 176 177 /** 178 * ラベルオブジェクト?名称を返します? 179 * これは??上? LNAME(名称(長))に該当します? 180 * 181 * @return ラベルオブジェクト?名称(短) 182 */ 183 public String getLabel() { return label; } 184 185 /** 186 * ラベルオブジェクト?名称(短)を返します? 187 * 概要説明がな??合でかつ??上?SNAMEが未設定?場合?? 188 * LNAME が返されます?SNAMEが設定されて?場合?? 189 * ??ルチップにLNAME が表示されます? 190 * 概要説明が存在する場合?、ツールチップに概要説明が 191 * 表示されます? 192 * 193 * @return ラベルオブジェクト?名称(短) 194 */ 195 public String getShortLabel() { return shortLabel; } 196 197 /** 198 * ラベルオブジェクト?名称(長)を返します? 199 * 概要説明が存在する場合?、ツールチップに概要説明が 200 * 表示されます? 201 * 202 * @return ラベルオブジェクト?名称(長) 203 * @see #getLongLabel( String ) 204 */ 205 public String getLongLabel() { return longLabel; } 206 207 /** 208 * ラベルインターフェースの名称(長)を返します? 209 * ??ルチップに表示するタイトル属?(概要説?を置き換えます? 210 * null の場合?、既存?getLongLabel()を返します? 211 * 212 * @param title ??ルチップに表示するタイトル属? 213 * 214 * @return ラベルインターフェースの名称(長) 215 * @see #getLongLabel() 216 */ 217 public String getLongLabel( final String title ) { 218 final String tipsLabel ; 219 if( title == null ) { 220 tipsLabel = longLabel; 221 } 222 else { 223 tipsLabel = "<span title=\"" 224 + StringUtil.htmlFilter( title ) 225 + "\">" 226 + label 227 + "</span>" ; 228 } 229 return tipsLabel ; 230 } 231 232 /** 233 * ラベルインターフェースの引数付きメ?ージを返します? 234 * メ?ージの引数部?、文字?配?を適用して、MessageFormat 235 * で変換した結果を返します?(MessageData でのみ有効です?) 236 * 237 * @og.rev 4.0.0.0 (2007/10/17) メ?ージリソース統合に伴??MessageDataより移? 238 * @og.rev 4.3.8.0 (2009/08/01) 引数にHTMLサニタイジング処? 239 * @og.rev 5.0.0.2 (2009/09/15) サニタイジング処??? 240 * 241 * @param vals メ?ージの引数(??配?) 242 * 243 * @return ラベルインターフェースの引数付きメ?ージ 244 */ 245 public String getMessage( final String[] vals ) { 246 // return label ; 247 final String rtn ; 248 // 5.0.0.2 (2009/09/15) 249 // // 4.3.8.0 valsに対してサニタイジングフィルタをかける 250 // if( vals != null && vals.length > 0){ 251 // for( int i=0; i<vals.length; i++ ){ 252 // vals[i] = StringUtil.htmlFilter( vals[i] ); 253 // } 254 // } 255 256 String[] args = ( vals == null ) ? new String[0] : vals ; 257 if( isFormat ) { 258 rtn = MessageFormat.format( label,(Object[])args ); 259 } 260 else { 261 StringBuilder buf = new StringBuilder(); 262 buf.append( label ); 263 for( int i=0; i<args.length; i++ ) { 264 if( args[i] != null && ! args[i].equals( label ) ) { 265 buf.append( " " ).append( args[i] ); 266 } 267 } 268 rtn = buf.toString(); 269 } 270 return rtn ; 271 } 272 273 /** 274 * ラベルオブジェクト?概要説明を返します? 275 * 概要説明が存在する場合?、ラベルの??ルチップに 276 * 概要説明が表示されます? 277 * 278 * @return ラベルオブジェクト?概要説? 279 */ 280 public String getDescription() { return description; } 281 282 /** 283 * ラベルオブジェクト?概要説明を返します? 284 * こ?メソ?では{0},{1}...をパラメータで置換します? 285 * 286 * @og.rev 4.3.7.6 (2009/07/15) 新規作? 287 * @og.rev 4.3.8.0 (2009/08/01) 引数にHTMLサニタイジング処? 288 * @og.rev 5.0.0.2 (2009/09/15) サニタイジング処??? 289 * @og.rev 5.4.0.1 (2011/11/01) {}が存在しな??合?単に概要を出? 290 * 291 * @param vals メ?ージの引数(??配?) 292 * 293 * @return ラベルオブジェクト?概要説? 294 */ 295 public String getDescription( final String[] vals ) { 296 final String rtn ; 297 298 // 5.0.0.2 (2009/09/15) 299 // // 4.3.8.0 valsに対してサニタイジングフィルタをかける 300 // if( vals != null && vals.length > 0){ 301 // for( int i=0; i<vals.length; i++ ){ 302 // vals[i] = StringUtil.htmlFilter( vals[i] ); 303 // } 304 // } 305 306 String[] args = ( vals == null ) ? new String[0] : vals ; 307 if( isFormatDesc ) { 308 rtn = MessageFormat.format( description,(Object[])args ); 309 } 310 else { 311 // StringBuilder buf = new StringBuilder(); 312 // buf.append( description ); 313 // // Descriptionでは{}が存在しな??合?単に概要を出? 314 // // for( int i=0; i<args.length; i++ ) { 315 // // if( args[i] != null && ! args[i].equals( description ) ) { 316 // // buf.append( " " ).append( args[i] ); 317 // // } 318 // // } 319 // rtn = buf.toString(); 320 321 // 5.4.0.1 (2011/11/01) {}が存在しな??合?単に概要を出?・・・ なら?直接セ?に変更 322 rtn = description; 323 } 324 return rtn ; 325 } 326 327 /** 328 * リソース??から作?されたかど?を返します? 329 * 正式な場合?、true / リソースになく?独自に作?された?合?、false になります? 330 * 331 * @return リソース??から作?されたかど? 332 */ 333 public boolean isOfficial() { return official; } 334 335 /** 336 * ラベルオブジェクト?名称(長)をそのままの形で返します? 337 * ??iscription等を付けな? 338 * 339 * @og.rev 5.6.8.2 (2009/08/01) 追? 340 * 341 * @return ラベルオブジェクト?名称(長)そ?ままの状? 342 */ 343 public String getRawLongLabel() { return rawLongLabel; } 344 345 /** 346 * ラベルオブジェクト?名称(短)をspanタグを付けな?態で返します? 347 * SNAMEが未設定?場合?、LNAME が返されます? 348 * 349 * @og.rev 4.3.8.0 (2009/08/01) 追? 350 * 351 * @return ラベルオブジェクト?名称(短)にspanタグを付けな?? 352 */ 353 public String getRawShortLabel() { return rawShortLabel; } 354 355 /** 356 * オブジェクト?識別子として?詳細なユーザー??を返します? 357 * 358 * @return 詳細なユーザー?? 359 */ 360 @Override 361 public String toString() { 362 StringBuilder rtn = new StringBuilder( HybsSystem.BUFFER_MIDDLE ); 363 rtn.append( "CLM :" ).append( key ); 364 rtn.append( " SNAME :" ).append( shortLabel ); 365 rtn.append( " LNAME :" ).append( longLabel ); 366 rtn.append( " DESCRIPTION :" ).append( description ).append( HybsSystem.CR ); 367 return rtn.toString(); 368 } 369 }