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