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 * @og.rev 5.7.3.0 (2014/02/07) public に格上げしますã?
092 *
093 * @param inkey キーæƒ??
094 */
095 // LabelData( final String inkey ) {
096 public LabelData( final String inkey ) {
097 key = inkey.intern() ;
098 label = key ; // 名称(長)
099 shortLabel = key ; // 名称(HTML短)
100 longLabel = key ; // 名称(HTML長)
101 description = "" ; // 概要説æ˜?
102 official = false; // 非正å¼?
103 isFormat = false; // 非フォーマッãƒ?4.0.0.0 (2007/10/17)
104 rawShortLabel = key; // 名称(未変換短) 4.3.8.0 (2009/08/01)
105 isFormatDesc = false; // 概要フォーマッãƒ?4.3.7.6 (2009/07/15)
106 rawLongLabel = key; // 名称(未変換長)5.6.8.2 (2013/09/20)
107 }
108
109 /**
110 * 配å?æ–?—å?のãƒ??タをå?に、LabelDataオブジェクトを構築しますã?
111 * こã?コンストラクタは、他ã?パッケージから呼び出せなã�?‚ˆã�?�«ã€?
112 * パッケージプライベã?トにしておきますã?
113 * こã?コンストラクタはã€?¼¤?¢リソースファイルを想定してã�?�¾すã?
114 *
115 * @og.rev 5.4.0.1 (2011/11/01) SNAME、概要説明ã?rawShortLabel 関係ã?処ç�?‚’修正
116 * @og.rev 5.6.8.2 (2013/09/20) rawLongLabel対å¿?
117 *
118 * @param data CLM,SNAME,LNAME,DESCRIPTION
119 */
120 LabelData( final String[] data ) {
121 key = data[CLM].intern() ; // é ?›®
122 label = StringUtil.nval2( data[LNAME],"" ) ; // 名称(HTML長)
123 description = data[DESCRIPTION] ; // 概要説æ˜?
124 official = true; // 正å¼?
125 isFormat = ( label.indexOf( '{' ) >= 0 ) ; // 4.0.0.0 (2007/10/17)
126 // isFormatDesc = ( description.indexOf( '{' ) >= 0 ); // 4.3.7.6 (2009/07/15)
127 String title = null;
128
129 rawLongLabel = label; // 名称(未変換長)5.6.8.2 (2013/09/20)
130 if( description == null || description.length() == 0 ) {
131 isFormatDesc = false;
132 // 5.4.0.1 (2011/11/01) title と label が間違ってã�?‚‹ã€?SNAME が存在する場å�?
133 // title = StringUtil.htmlFilter( title ) ;
134 title = StringUtil.htmlFilter( label ) ;
135
136 // 概要説明がなã�??合ã?、そのままラベルを使用するã€?
137 longLabel = label;
138 }
139 else {
140 isFormatDesc = ( description.indexOf( '{' ) >= 0 ); // 5.1.8.0 (2010/07/01) nullポインタの参ç?外し対ç?
141 title = StringUtil.htmlFilter( description ) ;
142
143 // 概要説明がある場合ã?、ツールチップにDESCRIPTIONを表示するã€?
144 longLabel = "<span title=\""
145 // + StringUtil.htmlFilter( description )
146 + title
147 + "\">"
148 + label
149 + "</span>" ;
150 }
151
152 String sname = data[SNAME]; // 名称(HTML短)
153 if( sname == null || sname.length() == 0 ) {
154 // SNAME がなã�??合ã?、longLabel を使用するã€?
155 shortLabel = longLabel;
156 // rawShortLabel = longLabel; // 4.3.8.0 (2009/08/01)
157 rawShortLabel = label; // 5.4.0.1 (2011/11/01) longLabel を使ã�?�¨、ツールチップがåŠ?‘³されるためã?
158 }
159 else {
160 // SNAME が存在する場合ã?ãƒ??ルチップにdescriptionかlabelを使用するã€?
161 // String title = ( description == null || description.length() == 0 ) ? label : description ;
162 shortLabel = "<span title=\""
163 // + StringUtil.htmlFilter( title )
164 + title
165 + "\">"
166 + sname
167 + "</span>" ;
168 rawShortLabel = sname; // 4.3.8.0 (2009/08/01)
169 }
170 }
171
172 /**
173 * ラベルオブジェクトã?キーを返しますã?
174 *
175 * @return ラベルオブジェクトã?キー
176 */
177 public String getKey() { return key; }
178
179 /**
180 * ラベルオブジェクトã?名称を返しますã?
181 * これはã€?¼¤?¢上ã? LNAME(名称(長))に該当しますã?
182 *
183 * @return ラベルオブジェクトã?名称(短)
184 */
185 public String getLabel() { return label; }
186
187 /**
188 * ラベルオブジェクトã?名称(短)を返しますã?
189 * 概要説明がなã�??合でかつ?¤?¢上ã?SNAMEが未設定ã?場合ã?ã€?
190 * LNAME が返されますã?SNAMEが設定されてã�?‚‹場合ã?ã€?
191 * ãƒ??ルチップにLNAME が表示されますã?
192 * 概要説明が存在する場合ã?、ツールチップに概要説明が
193 * 表示されますã?
194 *
195 * @return ラベルオブジェクトã?名称(短)
196 */
197 public String getShortLabel() { return shortLabel; }
198
199 /**
200 * ラベルオブジェクトã?名称(長)を返しますã?
201 * 概要説明が存在する場合ã?、ツールチップに概要説明が
202 * 表示されますã?
203 *
204 * @return ラベルオブジェクトã?名称(長)
205 * @see #getLongLabel( String )
206 */
207 public String getLongLabel() { return longLabel; }
208
209 /**
210 * ラベルインターフェースの名称(長)を返しますã?
211 * ãƒ??ルチップに表示するタイトル属æ?(概要説æ˜?を置き換えますã?
212 * null の場合ã?、既存ã?getLongLabel()を返しますã?
213 *
214 * @param title ãƒ??ルチップに表示するタイトル属æ?
215 *
216 * @return ラベルインターフェースの名称(長)
217 * @see #getLongLabel()
218 */
219 public String getLongLabel( final String title ) {
220 final String tipsLabel ;
221 if( title == null ) {
222 tipsLabel = longLabel;
223 }
224 else {
225 tipsLabel = "<span title=\""
226 + StringUtil.htmlFilter( title )
227 + "\">"
228 + label
229 + "</span>" ;
230 }
231 return tipsLabel ;
232 }
233
234 /**
235 * ラベルインターフェースの引数付きメãƒ?‚»ージを返しますã?
236 * メãƒ?‚»ージの引数部åˆ?�«、文字å?配å?を適用して、MessageFormat
237 * で変換した結果を返しますã?(MessageData でのみ有効ですã?)
238 *
239 * @og.rev 4.0.0.0 (2007/10/17) メãƒ?‚»ージリソース統合に伴ã�??MessageDataより移è¡?
240 * @og.rev 4.3.8.0 (2009/08/01) 引数にHTMLサニタイジング処ç�?
241 * @og.rev 5.0.0.2 (2009/09/15) サニタイジング処ç�?‚’ã‚?‚�ã‚?
242 *
243 * @param vals メãƒ?‚»ージの引数(æ–?—å?配å?)
244 *
245 * @return ラベルインターフェースの引数付きメãƒ?‚»ージ
246 */
247 public String getMessage( final String[] vals ) {
248 // return label ;
249 final String rtn ;
250 // 5.0.0.2 (2009/09/15)
251 // // 4.3.8.0 valsに対してサニタイジングフィルタをかける
252 // if( vals != null && vals.length > 0){
253 // for( int i=0; i<vals.length; i++ ){
254 // vals[i] = StringUtil.htmlFilter( vals[i] );
255 // }
256 // }
257
258 String[] args = ( vals == null ) ? new String[0] : vals ;
259 if( isFormat ) {
260 rtn = MessageFormat.format( label,(Object[])args );
261 }
262 else {
263 StringBuilder buf = new StringBuilder();
264 buf.append( label );
265 for( int i=0; i<args.length; i++ ) {
266 if( args[i] != null && ! args[i].equals( label ) ) {
267 buf.append( " " ).append( args[i] );
268 }
269 }
270 rtn = buf.toString();
271 }
272 return rtn ;
273 }
274
275 /**
276 * ラベルオブジェクトã?概要説明を返しますã?
277 * 概要説明が存在する場合ã?、ラベルのãƒ??ルチップに
278 * 概要説明が表示されますã?
279 *
280 * @return ラベルオブジェクトã?概要説æ˜?
281 */
282 public String getDescription() { return description; }
283
284 /**
285 * ラベルオブジェクトã?概要説明を返しますã?
286 * こã?メソãƒ?ƒ‰では{0},{1}...をパラメータで置換しますã?
287 *
288 * @og.rev 4.3.7.6 (2009/07/15) 新規作æ?
289 * @og.rev 4.3.8.0 (2009/08/01) 引数にHTMLサニタイジング処ç�?
290 * @og.rev 5.0.0.2 (2009/09/15) サニタイジング処ç�?‚’ã‚?‚�ã‚?
291 * @og.rev 5.4.0.1 (2011/11/01) {}が存在しなã�??合ã?単に概要を出åŠ?
292 *
293 * @param vals メãƒ?‚»ージの引数(æ–?—å?配å?)
294 *
295 * @return ラベルオブジェクトã?概要説æ˜?
296 */
297 public String getDescription( final String[] vals ) {
298 final String rtn ;
299
300 // 5.0.0.2 (2009/09/15)
301 // // 4.3.8.0 valsに対してサニタイジングフィルタをかける
302 // if( vals != null && vals.length > 0){
303 // for( int i=0; i<vals.length; i++ ){
304 // vals[i] = StringUtil.htmlFilter( vals[i] );
305 // }
306 // }
307
308 String[] args = ( vals == null ) ? new String[0] : vals ;
309 if( isFormatDesc ) {
310 rtn = MessageFormat.format( description,(Object[])args );
311 }
312 else {
313 // StringBuilder buf = new StringBuilder();
314 // buf.append( description );
315 // // Descriptionでは{}が存在しなã�??合ã?単に概要を出åŠ?
316 // // for( int i=0; i<args.length; i++ ) {
317 // // if( args[i] != null && ! args[i].equals( description ) ) {
318 // // buf.append( " " ).append( args[i] );
319 // // }
320 // // }
321 // rtn = buf.toString();
322
323 // 5.4.0.1 (2011/11/01) {}が存在しなã�??合ã?単に概要を出åŠ?・・・ ならã?直接セãƒ?ƒˆに変更
324 rtn = description;
325 }
326 return rtn ;
327 }
328
329 /**
330 * リソース?¤?¢から作æ?されたかどã�?�‹を返しますã?
331 * 正式な場合ã?、true / リソースになくã?独自に作æ?されたå?合ã?、false になりますã?
332 *
333 * @return リソース?¤?¢から作æ?されたかどã�?�‹
334 */
335 public boolean isOfficial() { return official; }
336
337 /**
338 * ラベルオブジェクトã?名称(長)をそのままの形で返しますã?
339 * ??iscription等を付けなã�?
340 *
341 * @og.rev 5.6.8.2 (2009/08/01) 追åŠ?
342 *
343 * @return ラベルオブジェクトã?名称(長)そã?ままの状æ…?
344 */
345 public String getRawLongLabel() { return rawLongLabel; }
346
347 /**
348 * ラベルオブジェクトã?名称(短)をspanタグを付けなã�?ж態で返しますã?
349 * SNAMEが未設定ã?場合ã?、LNAME が返されますã?
350 *
351 * @og.rev 4.3.8.0 (2009/08/01) 追åŠ?
352 *
353 * @return ラベルオブジェクトã?名称(短)にspanタグを付けなã�?жæ…?
354 */
355 public String getRawShortLabel() { return rawShortLabel; }
356
357 /**
358 * オブジェクトã?識別子として?Œ詳細なユーザーæƒ??を返しますã?
359 *
360 * @return 詳細なユーザーæƒ??
361 */
362 @Override
363 public String toString() {
364 StringBuilder rtn = new StringBuilder( HybsSystem.BUFFER_MIDDLE );
365 rtn.append( "CLM :" ).append( key );
366 rtn.append( " SNAME :" ).append( shortLabel );
367 rtn.append( " LNAME :" ).append( longLabel );
368 rtn.append( " DESCRIPTION :" ).append( description ).append( HybsSystem.CR );
369 return rtn.toString();
370 }
371 }