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