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.fukurou.util;
017
018 import org.opengion.fukurou.security.HybsCryptography;
019
020 /**
021 * XHTMLTag.java は、å?通的に使用されるHTMLタグの生æ?メソãƒ?ƒ‰を集ç´?�—たクラスですã?
022 *
023 * 全変数?�メソãƒ?ƒ‰は、public static final 宣è¨?�•れてã�?�¾すã?
024 *
025 * @version 4.0
026 * @author Kazuhiko Hasegawa
027 * @since JDK5.0,
028 */
029 public final class XHTMLTag {
030
031 /** シスãƒ?ƒ 依存ã?改行記号をセãƒ?ƒˆしますã? */
032 public static final String CR = System.getProperty("line.separator");
033
034 /** バッファの初期容量を通常より若干多い目に設定しますã?(50) */
035 public static final int BUFFER_SMALL = 50;
036
037 /** バッファの初期容量を通常より多い目に設定しますã?(200) */
038 public static final int BUFFER_MIDDLE = 200;
039
040 /** バッファの初期容量を通常より大å¹?�«多い目に設定しますã?(500) */
041 public static final int BUFFER_LARGE = 500;
042
043 /** URLチェãƒ?‚¯キー発行用 4.3.7.1 (2009/06/08) */
044 private static final HybsCryptography HYBS_CRYPTOGRAPHY = new HybsCryptography(); // 4.3.7.0 (2009/06/01)
045
046 /**
047 * BUTTON タグの属æ?リストですã?
048 *
049 */
050 private static final String[]
051 BUTTON_KEY = { "type","name","value","onClick",
052 "id","class","lang","dir","title","style","xml:lang",
053 "disabled","tabindex","accesskey",
054 "onBlur","onFocus","ondblClick","onMouseDown","onMouseUp",
055 "onMouseMove","onMouseOut","onMouseOver"
056 };
057
058 /**
059 * INPUT タグの属æ?リストですã?
060 *
061 */
062 private static final String[]
063 INPUT_KEY = { "type","size","maxlength","checked","src",
064 "alt","accept","usemap","ismap",
065 "id","class","lang","dir","title","style","xml:lang",
066 "readonly","disabled","tabindex","accesskey","onClick","onChange",
067 "onBlur","onFocus","ondblClick","onMouseDown","onMouseUp",
068 "onMouseMove","onMouseOut","onMouseOver",
069 "onSelect","onKeydown","onKeypress","onKeyup"
070 };
071
072 /**
073 * TEXTAREA タグの属æ?リストですã?
074 *
075 */
076 private static final String[]
077 TEXTAREA_KEY = { "name","rows","cols",
078 "id","class","lang","dir","title","style","xml:lang",
079 "readonly","disabled","tabindex","accesskey","onClick",
080 "onBlur","onFocus","ondblClick","onMouseDown","onMouseUp",
081 "onMouseMove","onMouseOut","onMouseOver",
082 "onSelect","onKeydown","onKeypress","onKeyup"
083 };
084
085 /**
086 * LINK タグの属æ?リストですã?
087 *
088 */
089 private static final String[]
090 LINK_KEY = { "type","name","hreflang","rel","rev","charset",
091 "target","shape","coords","onClick",
092 "id","class","lang","dir","title","style","xml:lang",
093 "tabindex","accesskey",
094 "onBlur","onFocus","ondblClick","onMouseDown","onMouseUp",
095 "onMouseMove","onMouseOut","onMouseOver"
096 };
097
098 /**
099 * SELECT タグの属æ?リストですã?
100 *
101 */
102 private static final String[]
103 SELECT_KEY = { "size","multiple",
104 "id","class","lang","dir","title","style","xml:lang",
105 "disabled","tabindex","onClick","onChange",
106 "onBlur","onFocus","ondblClick","onMouseDown","onMouseUp",
107 "onMouseMove","onMouseOut","onMouseOver",
108 "onSelect","onKeydown","onKeypress","onKeyup"
109 };
110
111 /**
112 * OPTION タグの属æ?リストですã?
113 *
114 */
115 private static final String[]
116 OPTION_KEY = { "value","label","selected",
117 "id","class","lang","dir","title","style","xml:lang",
118 "disabled"
119 };
120
121 /**
122 * FRAME タグの属æ?リストですã?
123 *
124 */
125 private static final String[]
126 FRAME_KEY = { "name","longdesc","marginwidth","marginheight","noresize",
127 "scrolling","frameborder",
128 "id","class","title","style"
129 };
130
131 /**
132 * IMAGE タグの属æ?リストですã?
133 *
134 */
135 private static final String[]
136 IMAGE_KEY = { "src","alt","longdesc","width","height","usemap","ismap","name","onClick",
137 "align","border","hspace","vspace", // こã?行ã?非推奨属æ?ですã?
138 "id","class","title","style","lang","dir","xml:lang",
139 "onBlur","onFocus","ondblClick","onMouseDown","onMouseUp",
140 "onMouseMove","onMouseOut","onMouseOver"
141 };
142
143 /**
144 * FORM タグの属æ?リストですã?
145 *
146 */
147 private static final String[]
148 FORM_KEY = { "action","method","enctype","accept-charset","accept","name","target",
149 "id","class","title","style","lang","dir","xml:lang"
150 };
151
152 /**
153 * SPAN タグの属æ?リストですã?
154 *
155 */
156 private static final String[]
157 SPAN_KEY = { "id","class","title","style","lang","dir","xml:lang" };
158
159 /**
160 * PRE タグの属æ?リストですã?
161 *
162 */
163 private static final String[]
164 PRE_KEY = { "id","class","title","style","lang","dir","xml:lang" };
165
166 /**
167 * ãƒ?ƒ•ォルトコンストラクターをprivateにしてã€?
168 * オブジェクトã?生æ?をさせなã�?‚ˆã�?�«するã€?
169 *
170 */
171 private XHTMLTag() { }
172
173 /**
174 * ボタンを作æ?しますã?
175 *
176 * <button type="形å¼? name="名前" value="送信æ–?? オプション?¥?¥?¥ >ラベル</button>
177 *
178 * Attributes に設定できる属æ?</ br>
179 * <table border="1" frame="box" rules="all" >
180 * <tr><td>name="名前"</td><td>オプション</td><td>LabelResource.properties のキー</td></tr>
181 * <tr><td>type="形å¼?</td><td>å¿??</td><td>submit/reset/button</td></tr>
182 * <tr><td>value="値"</td><td>オプション</td><td>name属æ?と共に送信されるå?</td></tr>
183 * <tr><td>disabled="disabled"</td><td>オプション</td><td>ボタンを利用できなã�?ж態にする場合にæŒ?®?/td></tr>
184 * <tr><td>tabindex="Tab移動é?"</td><td>オプション</td><td>0??2767のç¯?›²で数字でæŒ?®?小さã�??に移å‹?</td></tr>
185 * <tr><td>accesskey="ショートカãƒ?ƒˆキー"</td><td>オプション</td><td>æ–?—セãƒ?ƒˆ中の?‘文字:WindowsであればAltキーと同時使用</td></tr>
186 * <tr><td>汎用属æ?</td><td>オプション</td><td>class,id,title,style,lang,dir,xml:lang</td></tr>
187 * <tr><td>body="表示するタグæ–?—å?"</td><td>オリジナル</td><td>画像やæ–?—などボタン上に表示させたいタグのæ–?—å?</td></tr>
188 * </table>
189 *
190 * 設定できる属æ?
191 * 形式ã???
192 * submit 送信(サブミãƒ?ƒˆ)
193 * reset リセãƒ?ƒˆ
194 * button 汎用ボタン
195 * を指定しますã?
196 *
197 * ラベルに?ŒHTMLãƒ?‚スãƒ?強調æ–?—など)をã?め込ã‚?�“とがå?来ますã?
198 * また,イメージ <img ?¥?¥?¥?¥> を指定することã‚?可能ですã?
199 * disabled="disabled" のとき,このボタンのãƒ??タはサーバã?に送信されませんã€?
200 * 属æ?群は,タグの中に,CSS等で使用できる class="XXX" などの
201 * 汎用属æ?をè?由に登録する事が出来ますã?
202 *
203 * @param attri 属æ?群
204 *
205 * @return ボタンタグæ–?—å?
206 */
207 public static String button( final Attributes attri ) {
208 String checkedType = "|submit|reset|button|";
209
210 String type = attri.get( "type" );
211 if( checkedType.indexOf( "|" + type + "|" ) < 0 ) {
212 String errMsg = "button タイプ設定エラー [" + type + "]";
213 throw new RuntimeException( errMsg );
214 }
215
216 String values = attri.getAttribute( BUTTON_KEY );
217 String body = attri.get( "body" );
218 if( body == null ) { body = "" ; }
219
220 StringBuilder rtn = new StringBuilder( BUFFER_MIDDLE );
221 rtn.append("<button ");
222 rtn.append( values );
223 rtn.append( ">" );
224 rtn.append( body );
225 rtn.append("</button>");
226
227 return rtn.toString();
228 }
229
230 /**
231 * 入力フォーãƒ?‚’作æ?しますã?
232 *
233 * @param attri 属æ?群
234 *
235 * @return 入力フォーãƒ?‚¿グæ–?—å?
236 * @see #input( Attributes attri,String name,String value,String optAtt )
237 */
238 public static String input( final Attributes attri ) {
239 String name = attri.get( "name" );
240 String value = attri.get( "value" );
241 String optAttri = attri.get( "optionAttributes" );
242
243 return input( attri,name,value,optAttri );
244 }
245
246 /**
247 * 入力フォーãƒ?‚’作æ?しますã?
248 *
249 * <input type="text" name="名前" value="送信æ–?? ....>
250 *
251 * Attributes に設定できる属æ?</ br>
252 * <table border="1" frame="box" rules="all" >
253 * <tr><td>name="名前"</td><td>オプション</td><td>LabelResource.properties のキー</td></tr>
254 * <tr><td>type="形å¼?</td><td>å¿??</td><td>text/password/checkbox/radio/submit/reset/button/image/file/hidden</td></tr>
255 * <tr><td>value="値"</td><td>オプション</td><td>name属æ?と共に送信されるå?</td></tr>
256 * <tr><td>size="30"</td><td>オプション</td><td>inputタグの大きさ</td></tr>
257 * <tr><td>maxlength="50"</td><td>オプション</td><td>type属æ?が「text?£,?¢password?£ のときã?æœ?¤§æ–?—数</td></tr>
258 * <tr><td>checked="checked"</td><td>オプション</td><td>type属æ?が「checkbox?£,?¢radio?£ の場合に選択されてã�?‚‹状態にするã€?/td></tr>
259 * <tr><td>disabled="disabled"</td><td>オプション</td><td>選択や変更の操作をできなã�?ж態にする場合にæŒ?®?/td></tr>
260 * <tr><td>accept="MIMEタイãƒ?</td><td>オプション</td><td>type属æ?が「file?£の場合に処ç�?�¯能なMIMEタイプをæŒ?®?/td></tr>
261 * <tr><td>tabindex="Tab移動é?"</td><td>オプション</td><td>0??2767のç¯?›²で数字でæŒ?®?小さã�??に移å‹?</td></tr>
262 * <tr><td>accesskey="ショートカãƒ?ƒˆキー"</td><td>オプション</td><td>æ–?—セãƒ?ƒˆ中の?‘文字:WindowsであればAltキーと同時使用</td></tr>
263 * <tr><td>src="URL"</td><td>オプション</td><td>type属æ?が「image?£の場合é?信ボタンの画像URLを指å®?/td></tr>
264 * <tr><td>alt="代替æ–?—å?"</td><td>オプション</td><td>type属æ?が「image?£の場合ã?画像が表示できなã�?�¨きã?代替æ–?—å?を指å®?/td></tr>
265 * <tr><td>汎用属æ?</td><td>オプション</td><td>class,id,title,style,lang,dir,xml:lang</td></tr>
266 * <tr><td>body="表示するタグæ–?—å?"</td><td>オリジナル</td><td>画像やæ–?—などボタン上に表示させたいタグのæ–?—å?</td></tr>
267 * <tr><td>サポã?トå¤?/td><td>未実è£?/td><td>readonly属æ?、usemap属æ?、ismap属æ?、align属æ?</td></tr>
268 * </table>
269 *
270 * 設定できる属æ?
271 * 形式ã???
272 * text ?‘行ã?ãƒ?‚ストフィールãƒ?
273 * password パスワード用ãƒ?‚ストフィールãƒ?
274 * checkbox チェãƒ?‚¯ボックス(è¤?•°選択可)
275 * radio ラジオボタン(è¤?•°選択不可)
276 * submit 送信(サブミãƒ?ƒˆ)
277 * reset リセãƒ?ƒˆ
278 * button 汎用ボタン
279 * image イメージによる画像ã?タン
280 * file 送信ファイルの選æŠ?
281 * hidden 表示せずにサーバã?に送信するã€?
282 * を指定しますã?
283 *
284 * ラジオボタン?�チェãƒ?‚¯ボックスであらかじã‚?チェãƒ?‚¯をして
285 * おきたい場合ã?,checked 属æ?に "checked" を登録しますã?
286 * ファイルãƒ?‚¤アログの場合ã?,attributesの accept 属æ?に "MIMEタイãƒ?
287 * を登録しますã?
288 * 属æ?群は,タグの中に,CSS等で使用できる class="XXX" などの
289 * æ–?—を自由に登録する事が出来ますã?
290 * CSSでクラスを対å¿?class="XXXX"
291 * タブで移動é?を指定すã‚?tabindex="タブé?"
292 * ショートカãƒ?ƒˆキーを割り当てã‚?accesskey="ショートカãƒ?ƒˆキー"
293 *
294 * @param attri 属æ?群
295 * @param name 名前
296 * @param value 値
297 * @param optAttri オプションæ–?—å?(タグ属æ?定義されてã�?�ªã�?±žæ?の登録用æ–?—å?)
298 *
299 * @return 入力フォーãƒ?‚¿グæ–?—å?
300 */
301 public static String input( final Attributes attri,final String name,final String value,final String optAttri ) {
302 String values = attri.getAttribute( INPUT_KEY );
303
304 StringBuilder rtn = new StringBuilder( BUFFER_MIDDLE );
305 rtn.append("<input ");
306 if( name != null ) { rtn.append("name=\"").append( name ).append( "\" " ); }
307 if( value != null ) { rtn.append("value=\"").append( value ).append( "\" " ); }
308 rtn.append( values );
309 if( optAttri != null ) {
310 rtn.append( " " );
311 rtn.append( optAttri );
312 }
313 rtn.append( " />" );
314
315 return rtn.toString();
316 }
317
318 /**
319 * 入力フォーãƒ??属æ?æƒ??のみのæ–?—å?を作æ?しますã?
320 * これは、name 属æ?ã‚?value 属æ?など、ä¸?ˆ¬に都度変更されるフィールãƒ?
321 * 以外ã?固定的な属æ?æƒ??をã?先に作æ?しておく場合に、使用しますã?
322 *
323 * @param attri 属æ?リスãƒ?
324 *
325 * @return 入力フォーãƒ?‚¿グの属æ?æƒ??æ–?—å?
326 */
327 public static String inputAttri( final Attributes attri ) {
328 return attri.getAttribute( INPUT_KEY );
329 }
330
331 /**
332 * ãƒ?‚ストエリアの属æ?æƒ??のみのæ–?—å?を作æ?しますã?
333 * これは、name 属æ?ã‚?value 属æ?など、ä¸?ˆ¬に都度変更されるフィールãƒ?
334 * 以外ã?固定的な属æ?æƒ??をã?先に作æ?しておく場合に、使用しますã?
335 *
336 * @param attri 属æ?リスãƒ?
337 *
338 * @return ãƒ?‚ストエリアの属æ?æƒ??æ–?—å?
339 */
340 public static String textareaAttri( final Attributes attri ) {
341 return attri.getAttribute( TEXTAREA_KEY );
342 }
343
344 /**
345 * プルãƒ?‚¦ン等ã?メニューの属æ?æƒ??のみのæ–?—å?を作æ?しますã?
346 * これは、name 属æ?ã‚?value 属æ?など、ä¸?ˆ¬に都度変更されるフィールãƒ?
347 * 以外ã?固定的な属æ?æƒ??をã?先に作æ?しておく場合に、使用しますã?
348 *
349 * @param attri 属æ?リスãƒ?
350 *
351 * @return プルãƒ?‚¦ン等ã?メニューの属æ?æƒ??æ–?—å?
352 */
353 public static String selectAttri( final Attributes attri ) {
354 return attri.getAttribute( SELECT_KEY );
355 }
356
357 /**
358 * HIDDEN フォーãƒ?‚’作æ?しますã?
359 *
360 * id属æ?に、name と同じ値が設定されますã?
361 *
362 * @og.rev 5.5.4.0 (2012/07/02) ID属æ?追åŠ?
363 *
364 * @param name フォーãƒ??名前
365 * @param value 値
366 *
367 * @return HIDDENフォーãƒ?‚¿グæ–?—å?
368 */
369 public static String hidden( final String name,final String value ) {
370 // StringBuilder rtn = new StringBuilder( BUFFER_SMALL );
371
372 // rtn.append("<input type=\"hidden\" ");
373 // rtn.append("name=\"" ).append( name );
374 // rtn.append("\" value=\"").append( value );
375 // rtn.append( "\" />" );
376
377 // return rtn.toString();
378 return hidden(name,value,name);
379 }
380
381 /**
382 * HIDDEN フォーãƒ?‚’作æ?しますã?
383 *
384 * @og.rev 5.5.4.0 (2012/07/02) ID属æ?追åŠ?
385 *
386 * @param name フォーãƒ??名前
387 * @param value 値
388 * @param id フォーãƒ??ID
389 *
390 * @return HIDDENフォーãƒ?‚¿グæ–?—å?
391 */
392 public static String hidden( final String name, final String value, final String id ) {
393 StringBuilder rtn = new StringBuilder( BUFFER_SMALL );
394
395 rtn.append( "<input type=\"hidden\" " );
396 rtn.append( "name=\"" ).append( name );
397 rtn.append( "\" value=\"" ).append( value );
398 rtn.append( "\" id=\"" ).append( id );
399 rtn.append( "\" />" );
400
401 return rtn.toString();
402 }
403
404 /**
405 * ãƒ?‚ストエリアを作æ?しますã?
406 *
407 * <textarea name="名前" rows="4" cols="40" ....>送信æ–?—å? </textarea>
408 *
409 * Attributes に設定できる属æ?</ br>
410 * <table border="1" frame="box" rules="all" >
411 * <tr><td>name="名前"</td><td>オプション</td><td>LabelResource.properties のキー</td></tr>
412 * <tr><td>rows="行数"</td><td>オプション</td><td>入力フィールドã?表示行数</td></tr>
413 * <tr><td>cols="å¹?</td><td>オプション</td><td>入力フィールドã?表示å¹?æ–?—数)</td></tr>
414 * <tr><td>disabled="disabled"</td><td>オプション</td><td>選択や変更の操作をできなã�?ж態にする場合にæŒ?®?/td></tr>
415 * <tr><td>tabindex="Tab移動é?"</td><td>オプション</td><td>0??2767のç¯?›²で数字でæŒ?®?小さã�??に移å‹?</td></tr>
416 * <tr><td>accesskey="ショートカãƒ?ƒˆキー"</td><td>オプション</td><td>æ–?—セãƒ?ƒˆ中の?‘文字:WindowsであればAltキーと同時使用</td></tr>
417 * <tr><td>汎用属æ?</td><td>オプション</td><td>class,id,title,style,lang,dir,xml:lang</td></tr>
418 * <tr><td>value="値"</td><td>オリジナル</td><td>name属æ?と共に送信されるå?</td></tr>
419 * <tr><td>body="表示するタグæ–?—å?"</td><td>オリジナル</td><td>画像やæ–?—などボタン上に表示させたいタグのæ–?—å?</td></tr>
420 * <tr><td>サポã?トå¤?/td><td>未実è£?/td><td>readonly属æ?</td></tr>
421 * </table>
422 *
423 * 設定できる属æ?
424 *
425 * 属æ?群は,タグの中に,CSS等で使用できる class="XXX" などの
426 * æ–?—を自由に登録する事が出来ますã?
427 * CSSでクラスを対å¿?class="XXXX"
428 * タブで移動é?を指定すã‚?tabindex="タブé?"
429 * ショートカãƒ?ƒˆキーを割り当てã‚?accesskey="ショートカãƒ?ƒˆキー"
430 *
431 * @param attri 属æ?群
432 *
433 * @return 入力フォーãƒ?‚¿グæ–?—å?
434 */
435 public static String textarea( final Attributes attri ) {
436 String values = attri.getAttribute( TEXTAREA_KEY );
437 String body = attri.get( "body" );
438 if( body == null ) { body = "" ; }
439
440 StringBuilder rtn = new StringBuilder( BUFFER_MIDDLE );
441 rtn.append("<textarea ");
442 rtn.append( values );
443 rtn.append( ">" );
444 rtn.append( body );
445 rtn.append( "</textarea>" );
446
447 return rtn.toString();
448 }
449
450 /**
451 * ペã?ジリンクを作æ?しますã?
452 *
453 * <A href="?µ?²?¬" target="ターゲãƒ?ƒˆå�?>ラベル</A>
454 *
455 * Attributes に設定できる属æ?</ br>
456 * <table border="1" frame="box" rules="all" >
457 * <tr><td>href="URL"</td><td>å¿??</td><td>リンク先ã?URLを指定しますã?</td></tr>
458 * <tr><td>charset="æ–?—セãƒ?ƒˆ"</td><td>オプション</td><td>リンク先ã?æ–?—コードセãƒ?ƒˆを指定しますã?</td></tr>
459 * <tr><td>hreflang="è¨?ªžセãƒ?ƒˆ"</td><td>オプション</td><td>リンク先ã?基本となるè¨?ªžコードをæŒ?®šしますã?</td></tr>
460 * <tr><td>type="MIMEタイãƒ?</td><td>オプション</td><td>リンク先ã?MIMEタイプをæŒ?®šしますã?</td></tr>
461 * <tr><td>name="名前"</td><td>オプション</td><td>こã?要ç´?‚’リンクの到達点とするための名前を指定しますã?</td></tr>
462 * <tr><td>rel="リンクタイãƒ?</td><td>オプション</td><td>こã?æ–?›¸からみã�?href 属æ?でæŒ?®šされるリンク先との関ä¿?/td></tr>
463 * <tr><td>rev="リンクタイãƒ?</td><td>オプション</td><td>href 属æ?でæŒ?®šされるリンク先からみたã?こã?æ–?›¸との関ä¿?/td></tr>
464 * <tr><td>tabindex="Tab移動é?"</td><td>オプション</td><td>0??2767のç¯?›²で数字でæŒ?®?小さã�??に移å‹?</td></tr>
465 * <tr><td>accesskey="ショートカãƒ?ƒˆキー"</td><td>オプション</td><td>æ–?—セãƒ?ƒˆ中の?‘文字:WindowsであればAltキーと同時使用</td></tr>
466 * <tr><td>target="フレーãƒ?��"</td><td>オプション</td><td>リンク先ã?フレーãƒ?��</td></tr>
467 * <tr><td>body="表示するタグæ–?—å?"</td><td>オリジナル</td><td>画像やæ–?—などをリンクにできますã?</td></tr>
468 * <tr><td>汎用属æ?</td><td>オプション</td><td>class,id,title,style,lang,dir,xml:lang</td></tr>
469 * <tr><td>サポã?トå¤?/td><td>未実è£?/td><td>shape属æ?、coords属æ?</td></tr>
470 * </table>
471 *
472 * 設定できる属æ?
473 *
474 * ラベルなしã?場å�? href属æ?の "URL" そã?もã?を付けますã?
475 *
476 * target属æ?のフレーãƒ?��は
477 *
478 * _top フレーãƒ?‚’解除して,リンク先をフレーãƒ??体に表示するã€?
479 * _parent リンク先を親フレーãƒ?�«表示するã€?
480 * _self リンク先を自åˆ??身に表示するã€?
481 * _blank 新しいウインドウを開ã�?�¦?Œ表示するã€?
482 * そã?ä»? フレーãƒ?½œæ?時ã?名前でæŒ?®š可能ã€?
483 *
484 * を指定しますã?
485 * なしã?場å�?_self (自åˆ??身)を指定しますã?
486 *
487 * リンクメール機è?
488 * URLを,mailto:メールアドレス で設定すれã?,メール送信ãƒ?‚¤アログã‚?
489 * 開く事が出来ますã?
490 * 画像リンク機è?
491 * 画像をクリãƒ?‚¯するリンクは?Œラベルの個所に <img>タグを設定しますã?
492 *
493 * <a href="books.html"><img src="banner.gif" width="468px" height="60px" alt="関連書籍紹ä»? border="0"></a>
494 *
495 * 属æ?群は,タグの中に,CSS等で使用できる class="XXX" などの
496 * æ–?—を自由に登録する事が出来ますã?
497 * CSSでクラスを対å¿?class="XXXX"
498 * タブで移動é?を指定すã‚?tabindex="タブé?"
499 * ショートカãƒ?ƒˆキーを割り当てã‚?accesskey="ショートカãƒ?ƒˆキー"
500 *
501 * @param attri 属æ?群
502 *
503 * @return ペã?ジリンクタグæ–?—å?
504 */
505 public static String link( final Attributes attri ) {
506 return link( attri,"" );
507 }
508
509 /**
510 * ペã?ジリンクを作æ?しますã?
511 *
512 * @param attri 属æ?群
513 * @param urlEncode æ–?—å? ( ?key1=val1&?¥?¥?¥?¥ とã�?�†æ–?—å? 無ã�?�¨きã? "" )
514 *
515 * @return ペã?ジリンクタグæ–?—å?
516 */
517 public static String link( final Attributes attri, final String urlEncode ) {
518
519 String href = addUrlEncode( attri.get( "href" ),urlEncode );
520
521 String values = attri.getAttribute( LINK_KEY );
522 String body = attri.get( "body" );
523 if( body == null ) { body = attri.get( "href" ) ; }
524
525 StringBuilder rtn = new StringBuilder( BUFFER_MIDDLE );
526 rtn.append("<a href=\"");
527 rtn.append( href );
528 rtn.append( "\" " );
529 rtn.append( values );
530 rtn.append( ">" );
531 rtn.append( body );
532 rtn.append( "</a>" );
533
534 return rtn.toString();
535 }
536
537 /**
538 * xlink 形式ã?ペã?ジリンクを作æ?しますã?
539 *
540 * 基本çš?�«は、link と同じですã?アドレスのæŒ?®šも、href でæŒ?®šしてくださいã€?
541 * å†?ƒ¨çš?�«、xlink:href に変換しますã?
542 * またã?URL引数をã?"&" で結合するのではなくã?"&amp;" で結合させますã?
543 * これは、xlink そã?もã?がã?XML上に記述されたå?合に、XMLのルールで再度パã?ス
544 * される為ですã?
545 *
546 * @param attri 属æ?群
547 * @param urlEncode æ–?—å? ( ?key1=val1&?¥?¥?¥?¥ とã�?�†æ–?—å? 無ã�?�¨きã? "" )
548 *
549 * @return ペã?ジリンクタグæ–?—å?
550 */
551 public static String xlink( final Attributes attri, final String urlEncode ) {
552
553 String href = addUrlEncode( attri.get( "href" ),urlEncode,"&" );
554
555 String values = attri.getAttribute( LINK_KEY );
556 String body = attri.get( "body" );
557 if( body == null ) { body = attri.get( "href" ) ; }
558
559 StringBuilder rtn = new StringBuilder( BUFFER_MIDDLE );
560 rtn.append("<a xlink:href=\"");
561 rtn.append( href );
562 rtn.append( "\" " );
563 rtn.append( values );
564 rtn.append( ">" );
565 rtn.append( body );
566 rtn.append( "</a>" );
567
568 return rtn.toString();
569 }
570
571 /**
572 * メニューを作æ?しますã?
573 *
574 * @param attri 属æ?群
575 * @param opt 選択肢(オプション)
576 *
577 * @return メニュータグæ–?—å?
578 */
579 public static String select( final Attributes attri,final Options opt ) {
580 String name = attri.get( "name" );
581 String optAttri = attri.get( "optionAttributes" );
582
583 return select( attri,opt,name,optAttri );
584 }
585
586 /**
587 * メニューを作æ?しますã?
588 *
589 * <select size="行数" name="名前" multiple>
590 * <option value="送信æ–?—ï¼?>コメンãƒ?lt;/option>
591 * <option value="送信æ–?—ï¼?>コメンãƒ?lt;/option>
592 * <option value="送信æ–?—ï¼? selected="selected">コメンãƒ?lt;/option>
593 * </select>
594 *
595 * Attributes に設定できる属æ?</ br>
596 * <table border="1" frame="box" rules="all" >
597 * <tr><td>name="名前"</td><td>オプション</td><td>LabelResource.properties のキー</td></tr>
598 * <tr><td>size="行数"</td><td>オプション</td><td>select要ç´?‚’リストã?ãƒ?‚¯スとして表示する場合ã?行数</td></tr>
599 * <tr><td>multiple="multiple"</td><td>オプション</td><td>選択肢の中からè¤?•°選択å?来るよã�?�«するã€?/td></tr>
600 * <tr><td>disabled="disabled"</td><td>オプション</td><td>選択や変更の操作をできなã�?ж態にする場合にæŒ?®?/td></tr>
601 * <tr><td>tabindex="Tab移動é?"</td><td>オプション</td><td>0??2767のç¯?›²で数字でæŒ?®?小さã�??に移å‹?</td></tr>
602 * <tr><td>汎用属æ?</td><td>オプション</td><td>class,id,title,style,lang,dir,xml:lang</td></tr>
603 * </table>
604 *
605 * 属æ?群は,タグの中に,CSS等で使用できる class="XXX" などの
606 * æ–?—を自由に登録する事が出来ますã?
607 * CSSでクラスを対å¿?class="XXXX"
608 *
609 * @param attri 属æ?群
610 * @param opt 選択肢(オプション)
611 * @param name 名前
612 * @param optAttri オプション属æ?
613 *
614 * @return メニュータグæ–?—å?
615 */
616 public static String select( final Attributes attri,final Options opt,final String name,final String optAttri ) {
617 String values = attri.getAttribute( SELECT_KEY );
618 String options = opt.getOption();
619
620 StringBuilder rtn = new StringBuilder( BUFFER_MIDDLE );
621 rtn.append("<select ");
622 if( name != null ) { rtn.append("name=\"").append( name ).append( "\" " ); }
623 rtn.append( values );
624 if( optAttri != null ) {
625 rtn.append( " " );
626 rtn.append( optAttri );
627 }
628 rtn.append( ">" );
629 rtn.append( options );
630 rtn.append( "</select>" );
631
632 return rtn.toString();
633 }
634
635 /**
636 * オプションを作æ?しますã?
637 *
638 * <select size="行数" name="名前" multiple>
639 * <option value="送信æ–?—ï¼?>コメンãƒ?lt;/option>
640 * <option value="送信æ–?—ï¼?>コメンãƒ?lt;/option>
641 * <option value="送信æ–?—ï¼? selected="selected">コメンãƒ?lt;/option>
642 * </select>
643 *
644 * Attributes に設定できる属æ?</ br>
645 * <table border="1" frame="box" rules="all" >
646 * <tr><td>value="値"</td><td>オプション</td><td>送信する値</td></tr>
647 * <tr><td>selected="selected"</td><td>オプション</td><td>選択肢をあらかじめ選択された状態にしておく</td></tr>
648 * <tr><td>disabled="disabled"</td><td>オプション</td><td>選択や変更の操作をできなã�?ж態にする場合にæŒ?®?/td></tr>
649 * <tr><td>body="表示するタグæ–?—å?"</td><td>オリジナル</td><td>選択肢に表示させたいタグのæ–?—å?</td></tr>
650 * <tr><td>汎用属æ?</td><td>オプション</td><td>class,id,title,style,lang,dir,xml:lang</td></tr>
651 * </table>
652 *
653 * セレクタとは?Œリストã?ãƒ?‚¯スã‚?ƒ¡ニューなどの option引数にセãƒ?ƒˆする
654 * è¤?•°のãƒ??タをoptionタグでくるんだもã?ですã?
655 *
656 * @param attri 属æ?群
657 *
658 * @return オプションタグæ–?—å?
659 */
660 public static String option( final Attributes attri ) {
661 String values = attri.getAttribute( OPTION_KEY );
662 String body = attri.get( "body" );
663 if( body == null ) { body = "No Label" ; }
664
665 StringBuilder rtn = new StringBuilder( BUFFER_MIDDLE );
666 rtn.append("<option ");
667 rtn.append( values );
668 rtn.append( " >" );
669 rtn.append( body );
670 rtn.append( "</option>" );
671
672 return rtn.toString();
673 }
674
675 /**
676 * フレーãƒ?‚¿グを作æ?しますã?
677 *
678 * <frame marginheight="2px" marginwidth="2px" src="query.jsp" name="QUERY" />
679 *
680 * Attributes に設定できる属æ?</ br>
681 * <table border="1" frame="box" rules="all" >
682 * <tr><td>src="URL"</td><td>オプション</td><td>フレーãƒ??表示å…?RLを指定しますã?</td></tr>
683 * <tr><td>name="フレーãƒ?��"</td><td>オプション</td><td>フレーãƒ?�«付ける名前をæŒ?®šしますã?</td></tr>
684 * <tr><td>longdesc="URI"</td><td>オプション</td><td>フレーãƒ??詳しい説明ã?URI</td></tr>
685 * <tr><td>marginwidth="左右のマã?ジン"</td><td>オプション</td><td>フレーãƒ??の左右のマã?ジンを指定しますã?</td></tr>
686 * <tr><td>marginheight="上下ã?マã?ジン"</td><td>オプション</td><td>フレーãƒ??の上下ã?マã?ジンを指定しますã?</td></tr>
687 * <tr><td>noresize="noresize"</td><td>オプション</td><td>フレーãƒ?‚µイズを変更できなã�?‚ˆã�?�«しますã?</td></tr>
688 * <tr><td>scrolling="スクロールの制御"</td><td>オプション</td><td>yes:スクロールバã?を表示 no:表示しなã�?auto:å¿?¦�に応じて表示(ãƒ?ƒ•ォルãƒ?</td></tr>
689 * <tr><td>frameborder="æž??表示"</td><td>オプション</td><td>0:æž?‚’表示しなã�? 1:æž?‚’表示するã€?ãƒ?ƒ•ォルãƒ?</td></tr>
690 * <tr><td>keys="引数にセãƒ?ƒˆするキー"</td><td>オプション</td><td>URI の引数にセãƒ?ƒˆするキーã‚?CSV 形式でセãƒ?ƒˆしますã?</td></tr>
691 * <tr><td>value="引数にセãƒ?ƒˆする値"</td><td>オプション</td><td>URI の引数にセãƒ?ƒˆする値ã‚?CSV 形式でセãƒ?ƒˆしますã?</td></tr>
692 * <tr><td>汎用属æ?</td><td>オプション</td><td>class,id,title,style</td></tr>
693 * </table>
694 *
695 * 設定できる属æ?
696 *
697 * scrolling属æ?
698 *
699 * yes:常にスクロールバã?を表示
700 * no:常にスクロールバã?を表示しなã�?
701 * auto:å¿?¦�に応じてスクロールバã?を表示(ãƒ?ƒ•ォルãƒ?
702 *
703 * を指定しますã?
704 *
705 * frameborder属æ?
706 *
707 * 0:æž?‚’表示しなã�?
708 * 1:æž?‚’表示するã€?ãƒ?ƒ•ォルãƒ?
709 *
710 * を指定しますã?
711 *
712 * 属æ?群は,タグの中に,CSS等で使用できる class="XXX" などの
713 * æ–?—を自由に登録する事が出来ますã?
714 * CSSでクラスを対å¿?class="XXXX"
715 *
716 * @param attri 属æ?群
717 *
718 * @return フレーãƒ?‚¿グæ–?—å?
719 */
720 public static String frame( final Attributes attri ) {
721 return frame( attri,"" );
722 }
723
724 /**
725 * フレーãƒ?‚¿グを作æ?しますã?
726 *
727 * @param attri 属æ?群
728 * @param urlEncode æ–?—å? ( ?key1=val1&?¥?¥?¥?¥ とã�?�†æ–?—å? 無ã�?�¨きã? "" )
729 *
730 * @return フレーãƒ?‚¿グæ–?—å?
731 */
732 public static String frame( final Attributes attri,final String urlEncode ) {
733
734 String src = addUrlEncode( attri.get( "src" ),urlEncode );
735 String values = attri.getAttribute( FRAME_KEY );
736
737 StringBuilder rtn = new StringBuilder( BUFFER_MIDDLE );
738 rtn.append("<frame src=\"");
739 rtn.append( src );
740 rtn.append( "\" " );
741 rtn.append( values );
742 rtn.append( " />" );
743
744 return rtn.toString();
745 }
746
747 /**
748 * URLエンコード文字å?を作æ?しますã?
749 * エンコードすべき文字å?が無ã�??合ã?, ?�ストリング("") を返しますã?
750 * エンコード文字å?があるå?合ã?, "?KEY1=VAL1&KEY2=VAL2&?¥?¥?¥" とã�?�†æ–?—å?ã‚?
751 * 返しますã?
752 * つまりã?どちらã?ケースでもã?URI に 連結させればよいことになりますã?
753 *
754 * @param keys URLの引数となるキー群
755 * @param values URLの引数となるå?群
756 *
757 * @return URLエンコード文字å?
758 */
759 public static String urlEncode( final String keys,final String values ) {
760 return urlEncode( keys,values,"&" );
761 }
762
763 /**
764 * URLエンコード文字å?を作æ?しますã?
765 * エンコードすべき文字å?が無ã�??合ã?, ?�ストリング("") を返しますã?
766 * エンコード文字å?があるå?合ã?, "?KEY1=VAL1&KEY2=VAL2&?¥?¥?¥" とã�?�†æ–?—å?ã‚?
767 * 返しますã?
768 * つまりã?どちらã?ケースでもã?URI に 連結させればよいことになりますã?
769 *
770 * @param keys URLの引数となるキー群
771 * @param values URLの引数となるå?群
772 * @param join URLの引数群をé?結させるæ–?—å?
773 *
774 * @return URLエンコード文字å?
775 */
776 public static String urlEncode( final String keys,final String values,final String join ) {
777 if( keys == null || values == null ) { return ""; }
778
779 String[] key = StringUtil.csv2Array( keys );
780 String[] val = StringUtil.csv2Array( values );
781
782 return ( urlEncode( key,val,join ) );
783 }
784
785 /**
786 * URLエンコード文字å?を作æ?しますã?
787 * エンコードすべき文字å?が無ã�??合ã?, ?�ストリング("") を返しますã?
788 * エンコード文字å?があるå?合ã?, "?KEY1=VAL1&KEY2=VAL2&?¥?¥?¥" とã�?�†æ–?—å?ã‚?
789 * 返しますã?
790 * つまりã?どちらã?ケースでもã?URI に 連結させればよいことになりますã?
791 *
792 * @param key URLの引数となるキーの配å?
793 * @param val URLの引数となるå?の配å?
794 *
795 * @return URLエンコード文字å?
796 */
797 public static String urlEncode( final String[] key,final String[] val ) {
798 return urlEncode( key,val,"&" );
799 }
800
801 /**
802 * URLエンコード文字å?を作æ?しますã?
803 * エンコードすべき文字å?が無ã�??合ã?, ?�ストリング("") を返しますã?
804 * エンコード文字å?があるå?合ã?, "?KEY1=VAL1&KEY2=VAL2&?¥?¥?¥" とã�?�†æ–?—å?ã‚?
805 * 返しますã?
806 * つまりã?どちらã?ケースでもã?URI に 連結させればよいことになりますã?
807 *
808 * @og.rev 4.3.3.3 (2008/10/22) valに対して副作用を及ぼさなã�?‚ˆã�?�«修正
809 *
810 * @param key URLの引数となるキーの配å?
811 * @param val URLの引数となるå?の配å?
812 * @param join URLの引数群をé?結させるæ–?—å?
813 *
814 * @return URLエンコード文字å?
815 */
816 public static String urlEncode( final String[] key,final String[] val,final String join ) {
817 if( key == null || key.length == 0 || val == null || val.length == 0 ) {
818 return "";
819 }
820 else if( key.length != val.length ) {
821 String errMsg = "urlEncode のキーとバリューの個数が異なりますã?" + CR
822 + "key.length=[" + key.length + "] val.length=[" + val.length + "]";
823 throw new RuntimeException( errMsg );
824 }
825
826 // 4.3.3.3 (2008/10/22)
827 String[] tval = new String[val.length];
828
829 for( int i=0; i<val.length; i++ ) {
830 if( key[i] == null || key[i].length() == 0 ) { return ""; }
831 if( val[i] == null || val[i].length() == 0 ) { tval[i] = ""; }
832 else if( val[i].charAt(0) == '[' ) { // 暫定対å¿?
833 tval[i] = val[i];
834 }
835 else {
836 tval[i] = StringUtil.urlEncode( val[i] );
837 }
838 // else if( val[i].charAt(0) != '[' ) { // 暫定対å¿?
839 // tval[i] = StringUtil.urlEncode( val[i] );
840 // }
841 // else {
842 // tval[i] = val[i];
843 // }
844 }
845
846 StringBuilder rtn = new StringBuilder( BUFFER_MIDDLE );
847
848 rtn.append( key[0] ).append( "=" ).append( tval[0] );
849 for( int i=1; i<key.length; i++) {
850 rtn.append( join );
851 rtn.append( key[i] ).append( "=" ).append( tval[i] );
852 }
853 return rtn.toString();
854 }
855
856 /**
857 * URLæ–?—å?に、URLエンコード文字å?をé?結しますã?
858 *
859 * URLæ–?—å?中にすでに "?" æ–?—が存在する場合ã?、URLエンコードå?の
860 * æ–?—å?とはã€?"&" で連結しますã?
861 * é€?�«ã€??" が存在しなければã€??" で連結しますã?
862 * URLエンコード文字å?ã�?null の場合ã?ã€??結しませんã€?
863 *
864 * @param url URLæ–?—å?
865 * @param encode URLエンコード文字å?
866 *
867 * @return 連結文字å?
868 */
869 public static String addUrlEncode( final String url,final String encode ) {
870 return addUrlEncode( url,encode,"&" );
871 }
872
873 /**
874 * URLæ–?—å?に、URLエンコード文字å?をé?結しますã?
875 *
876 * URLæ–?—å?中にすでに "?" æ–?—が存在する場合ã?、URLエンコードå?の
877 * æ–?—å?とはã€?join (ä¾?"&" ) で連結しますã?
878 * é€?�«ã€??" が存在しなければã€??" で連結しますã?
879 * URLエンコード文字å?ã�?null の場合ã?ã€??結しませんã€?
880 * 連結するã?encode æ–?—å?の先é?がã?join æ–?—å?の場合ã?そã?まま連結しますã?
881 * 先é?がã?そうでなã�??合ã?、join æ–?—å?で連結しますã?
882 * "?" が存在せず、encode æ–?—å?の先é?がã?join æ–?—å?の場合ã?、ã?
883 * encode æ–?—å?の先é?を取り除ã�?�¦ã€??" で連結しますã?
884 *
885 * 例ï¼?
886 * � abc.html key1=val1&key2=val2 �abc.html?key1=val1&key2=val2
887 * ②?Žabc.html &key1=val1&key2=val2 â‡?abc.html?key1=val1&key2=val2
888 * ③?Žabc.html?key1=val1 key2=val2 â‡?abc.html?key1=val1&key2=val2
889 * ④?Žabc.html?key1=val1 &key2=val2 â‡?abc.html?key1=val1&key2=val2
890 *
891 * @og.rev 5.2.1.0 (2010/10/01) urlがnullの場合に、NullPointerExceptionが発生するバグを修正
892 *
893 * @param url URLæ–?—å?
894 * @param encode URLエンコード文字å?
895 * @param join URLの引数群をé?結させるæ–?—å?
896 *
897 * @return 連結文字å?
898 */
899 public static String addUrlEncode( final String url,final String encode,final String join ) {
900 // 5.2.1.0 (2010/10/01) urlがnullの場合に、NullPointerExceptionが発生するバグを修正
901 String tmpUrl = ( url == null ? "" : url );
902
903 if( encode == null || encode.length() == 0 ) { return tmpUrl; }
904
905 final String rtn ;
906 if( tmpUrl.indexOf( '?' ) < 0 ) {
907 if( encode.startsWith( join ) ) {
908 rtn = tmpUrl + "?" + encode.substring(join.length()); // ②
909 }
910 else {
911 rtn = tmpUrl + "?" + encode; // â‘?
912 }
913 }
914 else {
915 if( encode.startsWith( join ) ) {
916 rtn = tmpUrl + encode; // ④
917 }
918 else {
919 rtn = tmpUrl + join + encode; // ③
920 }
921 }
922 return rtn ;
923 }
924
925 /**
926 * æŒ?®š位置に画像を配置しますã?
927 *
928 * @param attri 属æ?群
929 *
930 * @return イメージタグæ–?—å?
931 */
932 public static String img( final Attributes attri ) {
933 String values = attri.getAttribute( IMAGE_KEY );
934 StringBuilder rtn = new StringBuilder( BUFFER_MIDDLE );
935 rtn.append( "<img " );
936 rtn.append( values );
937 rtn.append( " />" );
938
939 return rtn.toString();
940 }
941
942 /**
943 * フォーãƒ?‚’作æ?しますã?
944 *
945 * <form action="URI" method="HTTPメソãƒ?ƒ‰" enctype="MIMEタイãƒ? target="フレーãƒ?��" ?¥?¥?¥ >フォーãƒ??lt;/form>
946 *
947 * Attributes に設定できる属æ?</ br>
948 * <table border="1" frame="box" rules="all" >
949 * <tr><td>action="URI"</td><td>å¿??</td><td>送信されたフォーãƒ?ƒ‡ータをå?ç�?�™るã?ログラãƒ?¼µ?²?©</td></tr>
950 * <tr><td>method="HTTPメソãƒ?ƒ‰"</td><td>オプション</td><td>get/post</td></tr>
951 * <tr><td>enctype="MIMEタイãƒ?</td><td>オプション</td><td>フォーãƒ?ƒ‡ータ送信時ã?MIMEタイãƒ?/td></tr>
952 * <tr><td>accept-charset="æ–?—セãƒ?ƒˆ"</td><td>オプション</td><td>ãƒ??タとして受付可能なæ–?—セãƒ?ƒˆのæŒ?®?/td></tr>
953 * <tr><td>accept="MIMEタイãƒ?</td><td>オプション</td><td>ãƒ??タとして処ç�?�¯能なMIMEタイプをæŒ?®?/td></tr>
954 * <tr><td>name="名前"</td><td>オプション</td><td>スクリプト等から参照する場合ã?名前</td></tr>
955 * <tr><td>target="フレーãƒ?��"</td><td>オプション</td><td>フォーãƒ?‚’送信した結果を表示させるフレーãƒ?/td></tr>
956 * <tr><td>汎用属æ?</td><td>オプション</td><td>class,id,title,style,lang,dir,xml:lang</td></tr>
957 * <tr><td>body="フォーãƒ?‰ã?æ–?—å?"</td><td>å¿??</td><td>input 等ã?フォーãƒ?¦�ç´?/td></tr>
958 * </table>
959 *
960 * @param attri 属æ?群
961 *
962 * @return フォーãƒ?‚¿グæ–?—å?
963 */
964 public static String form( final Attributes attri ) {
965 String values = attri.getAttribute( FORM_KEY );
966 String body = attri.get( "body" );
967 if( body == null ) { body = "" ; }
968
969 StringBuilder rtn = new StringBuilder( BUFFER_MIDDLE );
970 rtn.append("<form ");
971 rtn.append( values );
972 rtn.append( ">" );
973 rtn.append( CR );
974 rtn.append( body );
975 rtn.append( CR );
976 rtn.append("</form>");
977
978 return rtn.toString();
979 }
980
981 /**
982 * 汎用インライン要ç´?SPAN)を作æ?しますã?
983 *
984 * <span class="XXXX" ?¥?¥?¥ >ãƒ?‚ストç?lt;/span>
985 *
986 * Attributes に設定できる属æ?</ br>
987 * <table border="1" frame="box" rules="all" >
988 * <tr><td>汎用属æ?</td><td>オプション</td><td>class,id,title,style,lang,dir,xml:lang</td></tr>
989 * <tr><td>body="ãƒ?‚スト等ã?æ–?—å?"</td><td>オプション</td><td>こã?ãƒ?‚ストを修飾しますã?</td></tr>
990 * </table>
991 *
992 * @param attri 属æ?群
993 *
994 * @return SPANタグæ–?—å?
995 */
996 public static String span( final Attributes attri ) {
997 String values = attri.getAttribute( SPAN_KEY );
998
999 String optAttri = attri.get( "optionAttributes" );
1000 String body = attri.get( "body" );
1001 if( body == null ) { body = "" ; }
1002
1003 StringBuilder rtn = new StringBuilder( BUFFER_MIDDLE );
1004 rtn.append("<span ");
1005 rtn.append( values );
1006 if( optAttri != null ) {
1007 rtn.append( " " );
1008 rtn.append( optAttri );
1009 }
1010 rtn.append( ">" );
1011 rtn.append( body );
1012 rtn.append( "</span>" );
1013
1014 return rtn.toString();
1015 }
1016
1017 /**
1018 * 整形済みãƒ?‚スãƒ?PRE)を作æ?しますã?
1019 *
1020 * <pre class="XXXX" ?¥?¥?¥ >ãƒ?‚ストç?lt;/pre>
1021 *
1022 * Attributes に設定できる属æ?</ br>
1023 * <table border="1" frame="box" rules="all" >
1024 * <tr><td>汎用属æ?</td><td>オプション</td><td>class,id,title,style,lang,dir,xml:lang</td></tr>
1025 * <tr><td>body="ãƒ?‚スト等ã?æ–?—å?"</td><td>オプション</td><td>こã?ãƒ?‚ストを修飾しますã?</td></tr>
1026 * </table>
1027 *
1028 * @param attri 属æ?群
1029 *
1030 * @return PREタグæ–?—å?
1031 */
1032 public static String pre( final Attributes attri ) {
1033 String values = attri.getAttribute( PRE_KEY );
1034
1035 String optAttri = attri.get( "optionAttributes" );
1036 String body = attri.get( "body" );
1037 if( body == null ) { body = "" ; }
1038
1039 StringBuilder rtn = new StringBuilder( BUFFER_MIDDLE );
1040 rtn.append("<pre ");
1041 rtn.append( values );
1042 if( optAttri != null ) {
1043 rtn.append( " " );
1044 rtn.append( optAttri );
1045 }
1046 rtn.append( ">" );
1047 rtn.append( body );
1048 rtn.append( "</pre>" );
1049
1050 return rtn.toString();
1051 }
1052
1053 /**
1054 * URLチェãƒ?‚¯用のキーを返しますã?
1055 *
1056 * 引数にæŒ?®šされたhrefに対して、時間とユーザーIDを付加した暗号化文字å?ã‚?
1057 * 引数に追åŠ?�—ますã?
1058 *
1059 * 暗号化ã?、org.opengion.fukurou.util.HybsCryptographyを使用しますã?
1060 * 暗号化を行うæ–?—å?のフォーマットã?、[href],time=[checkTime],userid=[loginUser]ですã?
1061 *
1062 * @og.rev 4.3.7.1 (2009/06/08) 新規追åŠ?
1063 * @og.rev 4.3.7.4 (2009/07/01) 循環参ç?を解æ¶?
1064 *
1065 * @param href チェãƒ?‚¯対象のURL
1066 * @param key チェãƒ?‚¯キーのパラメーターキー
1067 * @param userid ユーザーID
1068 * @param time 有効時間
1069 *
1070 * @return チェãƒ?‚¯キー
1071 * @see org.opengion.fukurou.security.HybsCryptography
1072 */
1073 public static String addURLCheckKey( final String href, final String key, final String userid, final long time ) {
1074 String checkKey = href;
1075
1076 checkKey = checkKey.replace( "../", "" );
1077 // int idx = 0;
1078 // if ( ( idx = checkKey.indexOf( '#' ) ) >= 0 ) {
1079 // checkKey = checkKey.substring( 0, idx );
1080 // }
1081 // if ( ( idx = checkKey.indexOf( '?' ) ) >= 0 ) {
1082 // checkKey = checkKey.substring( 0, idx );
1083 // }
1084 checkKey = checkKey + ",time=" + time + ",userid=" + userid;
1085 checkKey = HYBS_CRYPTOGRAPHY.encrypt( checkKey );
1086
1087 return addUrlEncode( href, key + "=" + checkKey );
1088 }
1089
1090 /**
1091 * Aタグのæ–?—å?を解析して、href属æ?にURLチェãƒ?‚¯用の暗号化文字å?を付加した形でã€?
1092 * Aタグをå?構築し、返しますã?
1093 *
1094 * @og.rev 4.3.7.1 (2009/06/08) 新規追åŠ?
1095 * @og.rev 4.3.7.4 (2009/07/01) 循環参ç?を解æ¶?
1096 *
1097 * @param tag Aタグæ–?—å?
1098 * @param key チェãƒ?‚¯キーのパラメーターキー
1099 * @param userid ユーザーID
1100 * @param time 有効時間
1101 *
1102 * @return URLチェãƒ?‚¯キーが付加されたAタグæ–?—å?
1103 */
1104 public static String embedURLCheckKey( final String tag, final String key, final String userid, final long time ) {
1105 String rtn = tag;
1106 int hrefStr = rtn.indexOf( "href=\"" );
1107 if( hrefStr >= 0 ) {
1108 int hrefEnd = rtn.indexOf( "\"",hrefStr + 6 );
1109 if( hrefEnd >= 0 ) {
1110 String href = rtn.substring( hrefStr + 6, hrefEnd );
1111 href = XHTMLTag.addURLCheckKey( href, key, userid, time );
1112 rtn = rtn.substring( 0, hrefStr ) + "href=\"" + href + rtn.substring( hrefEnd );
1113 }
1114 }
1115 return rtn;
1116 }
1117 }