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 /** 019 * TagBuffer.java ã¯ã€å?通的ã«ä½¿ç”¨ã•れã‚?簡易タグ作æ?クラスã§ã™ã? 020 * タグヘッãƒ??ã¯ã€ã‚ªãƒ–ジェクト作æ?時ã«ç™»éŒ²ã™ã‚‹ç‚ºã€å¾Œã?変更ã¯å‡ºæ¥ã¾ã›ã‚“ã€? 021 * BODY部ã‚??属æ?ã¯ã€ä¸?º¦ç™»éŒ²ã™ã‚‹ã¨æ›¸ãæ›ãˆã§ãã¾ã›ã‚“ã€? 022 * ã¾ãŸã?åŒä¸?±žæ?ãƒã‚§ãƒ?‚¯ã¯è¡Œã„ã¾ã›ã‚“。登録ã—ãŸå±žæ?ã®ã‚ーã‚??値をå–りå?ã™ã“ã¨ã‚‚å?æ¥ã¾ã›ã‚“ã€? 023 * ã‚ãã¾ã§ã€ã‚¿ã‚°æ–?—å?をストレートã«ä½œæ?ã™ã‚‹ã“ã¨ã«ç‰¹åŒ–ã—ãŸã‚¯ãƒ©ã‚¹ã§ã™ã? 024 * ã“れらã?é«˜åº¦ãªæ©Ÿè?ãŒå¿?¦ã§ã‚れã°ã€{@link org.opengion.fukurou.util.Attributes } ã‚’ã”å‚ç?ãã ã•ã„ã€? 025 * 026 * makeTag() メソãƒ?ƒ‰ã‚’呼ã³å‡ºã—ãŸæ™‚点ã§ã€å?部ã«ã‚¿ã‚°æ–?—å?ã‚’ã‚ャãƒ?‚·ãƒ¥ã—ã¾ã™ã? 027 * ãれ以é™ã?変更ã¯ã€å?æ¥ã¾ã›ã‚“ã€? 028 * 029 * å†?ƒ¨çš?«ã¯ã€æ§‹é?化ã•れã¦ã?¾ã›ã‚“。ã‚ãã¾ã§ã€æ–‡å—å?連çµ?StringBuilder)ã® 030 * 簡易クラスã¨ã—ã¦ã€ä½¿ç”¨ã—ã¦ãã ã•ã„ã€? 031 * 032 * @og.group ユーãƒ?‚£ãƒªãƒ?‚£ 033 * 034 * @version 4.0 035 * @author Kazuhiko Hasegawa 036 * @since JDK5.0, 037 */ 038 public final class TagBuffer { 039 private final StringBuilder buf = new StringBuilder(100); 040 private final String tagName ; 041 private String tagBody = null; 042 private String cacheTag = null; 043 044 /** 045 * ãƒ?ƒ•ォルトコンストラクター 046 * ã“ã?コンストラクターを使用ã™ã‚‹ã¨ã€ã‚¿ã‚°åã‚’æŒ?®šã§ããªã?Ÿã‚ã? 047 * 完æ?å½¢ã®ã‚¿ã‚°ã¯ã€ä½œæ?ã§ãã¾ã›ã‚“。属æ?リスãƒ?key="value")ã® 048 * 連çµå½¢å¼ã‚’å¾—ã‚‹å ´åˆã«ã®ã¿ã€ä½¿ç”¨ã—ã¦ä¸‹ã•ã?? 049 * 050 */ 051 public TagBuffer() { 052 this.tagName = null; 053 } 054 055 /** 056 * コンストラクター 057 * ã‚¿ã‚°åã« null を指定ã™ã‚‹ã¨ã€ãƒ‡ãƒ•ォルトコンストラクターã¨åŒæ§˜ã«ã€? 058 * 完æ?å½¢ã®ã‚¿ã‚°ã¯ã€ä½œæ?ã§ãã¾ã›ã‚“。属æ?リスãƒ?key="value")ã® 059 * 連çµå½¢å¼ã‚’å¾—ã‚‹å ´åˆã«ã®ã¿ã€ã‚¿ã‚°å?ã«null を指定ã—ã¦ä¸‹ã•ã?? 060 * 061 * @param tagName ã‚¿ã‚°åç§° 062 */ 063 public TagBuffer( final String tagName ) { 064 this.tagName = tagName; 065 if( tagName != null ) { 066 buf.append( "<" ).append( tagName ).append( " " ); 067 } 068 } 069 070 /** 071 * ã‚¿ã‚°ã® BODY部を登録ã—ã¾ã™ã? 072 * 登録ã—ãªã??åˆã?ã€BODY部ã®ãªã?‚¿ã‚°(空è¦ç´?‚¿ã‚°)を生æˆã—ã¾ã™ã? 073 * BODY部を指定ã™ã‚‹ã¨ã€?lt;tagName key="val" ?¥?¥?¥ >body</tagName> å½¢å¼ã«ãªã‚Šã¾ã™ã? 074 * BODY部ãŒã?null ã®å ´åˆã?ã€?<tagName key="val" ?¥?¥?¥ /> å½¢å¼ã«ãªã‚Šã¾ã™ã? 075 * ã“ã?メソãƒ?ƒ‰ã¯ã€makeTag() ãŒå‘¼ã°ã‚ŒãŸå¾Œã?ã€ç™»éŒ²ã§ããªããªã‚Šã¾ã™ã? 076 * 077 * @deprecated {@link TagBuffer#addBody(String)} 078 * @param body ã‚¿ã‚°ã®BODY部 079 */ 080 public void setBody( final String body ) { 081 if( cacheTag != null ) { 082 String errMsg = "makeTag() 実行後ã«ã€BODY部ã®å€¤ã‚’æ›¸ãæ›ãˆã‚‹ã“ã¨ã¯å‡ºæ¥ã¾ã›ã‚“ã€? ; 083 throw new RuntimeException( errMsg ); 084 } 085 086 this.tagBody = body; 087 } 088 089 /** 090 * ã‚¿ã‚°ã® BODY部を追åŠ?™»éŒ²ã—ã¾ã™ã? 091 * 092 * ã™ã§ã«ã€ç™»éŒ²æ¸ˆã¿ã®å ´åˆã?ã€ãã®å€¤ã«ã€è¿½è¨˜ã—ã¾ã™ã? 093 * ãã†ã§ãªã??å?åˆã‚ã¦ã®å ´å?ã¯ã€ãã®å€¤ã‚’ã‚»ãƒ?ƒˆã—ã¾ã™ã? 094 * null を登録ã—ãŸå ´åˆã?ã€ä½•ã‚‚ã—ã¾ã›ã‚“ã€? 095 * ※ 従æ¥ã‚ã£ã?#setBody(String)ã®æ§˜ã«ã€null を登録ã—ãŸå ´åˆã?Body ã‚? 096 * リセãƒ?ƒˆã™ã‚‹æ©Ÿè?ã¯ã‚りã¾ã›ã‚“。新ã—ã„オブジェクトを作æ?ã—ã¦ãã ã•ã„ã€? 097 * 098 * ã“ã?メソãƒ?ƒ‰ã¯ã€makeTag() ãŒå‘¼ã°ã‚ŒãŸå¾Œã?ã€ç™»éŒ²ã§ããªããªã‚Šã¾ã™ã? 099 * 100 * @og.rev 5.8.4.1 (2015/02/20) 6.1.1.0é€?§»æ¤?#setBody(String) ã®ä»£æ›¿ãˆãƒ¡ã‚½ãƒ?ƒ‰ã¨ã—ã¦ã€æ–°è¦è¿½åŠ? 101 * 102 * @param body ã‚¿ã‚°ã®BODY部ã«è¿½åŠ?™ã‚‹æ–‡å—å? 103 * 104 * @return 自åˆ??身 105 * @og.rtnNotNull 106 */ 107 public TagBuffer addBody( final String body ) { 108 return addBody( body,true ); 109 } 110 111 /** 112 * ã‚¿ã‚°ã® BODY部を追åŠ?™»éŒ²ã—ã¾ã™ã? 113 * 114 * ã™ã§ã«ã€?setBody(String) ã§ã€ç™»éŒ²æ¸ˆã¿ã®å ´åˆã?ã€ãã®å€¤ã«ã€è¿½è¨˜ã—ã¾ã™ã? 115 * ãã†ã§ãªã??åˆã?ã€?setBody(String) ã¨åŒã˜å‹•作ã«ãªã‚Šã¾ã™ã? 116 * null を登録ã—ãŸå ´åˆã?ã€ä½•ã‚‚ã—ã¾ã›ã‚“ã€? 117 * 118 * flag ã«ã€false を指定ã™ã‚‹ã¨ã€è¿½åŠ?™»éŒ²ã—ã¾ã›ã‚“。ã“れã?ã€if( flag ) { tagBuffer.addBody( body ); } 119 * ã®æ§˜ãªåˆ¤å®šå?ç?‚’ã€tagBuffer.body( body,flag ); ã«ç°¡ç´?Œ–ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã§ãã¾ã™ã? 120 * TagBuffer ã¯ã€StringBuilderã®æ§˜ã«ã€ãƒ¡ã‚½ãƒ?ƒ‰ã®æˆ»ã‚Šå?ã¯ã€è?åˆ??身ã®ã‚ªãƒ–ジェクトãªã®ã§ã€? 121 * 上記ã? flag を使用ã—ã¦ã€å?れ目ãªãé?çµã•ã›ã‚‹ã“ã¨ãŒå¯èƒ½ã«ãªã‚Šã¾ã™ã? 122 * 123 * ã“ã?メソãƒ?ƒ‰ã¯ã€makeTag() ãŒå‘¼ã°ã‚ŒãŸå¾Œã?ã€ç™»éŒ²ã§ããªããªã‚Šã¾ã™ã? 124 * 125 * @og.rev 5.8.4.1 (2015/02/20) 6.1.1.0é€?§»æ¤?戻りå?ã«ã€è?åˆ??身を返ã™ã‚ˆã†ã«ã—ã¾ã™ã? 126 * 127 * @param body ã‚¿ã‚°ã®BODY部ã«è¿½åŠ?™ã‚‹æ–‡å—å? 128 * @param flag ã‚¿ã‚°ã®BODY部ã«è¿½åŠ?‹ã©ã?‹ã‚’決ã‚るフラグ(true:追åŠ?™ã‚?false:何もã—ãªã? 129 * 130 * @return 自åˆ??身 131 * @og.rtnNotNull 132 */ 133 public TagBuffer addBody( final String body,final boolean flag ) { 134 if( cacheTag != null ) { 135 final String errMsg = "makeTag() 実行後ã«ã€BODY部ã®å€¤ã‚’æ›¸ãæ›ãˆã‚‹ã“ã¨ã¯å‡ºæ¥ã¾ã›ã‚“ã€? ; 136 throw new RuntimeException( errMsg ); 137 } 138 139 if( flag && body != null ) { 140 if( tagBody !=null ) { tagBody += body; } 141 else { tagBody = body; } 142 } 143 144 return this ; 145 } 146 147 /** 148 * タグ㮠属æ?(key="value")を登録ã—ã¾ã™ã? 149 * 属æ?ã¯ã€key="value" ã®æ–?—å?を作æ?ã—ã¾ã™ã?key ã‹ã?value ã®ã©ã¡ã‚‰ã‹ã?null 150 * ã®å ´åˆã?ã€ç™»éŒ²ã—ã¾ã›ã‚“ã€? 151 * value ã«ã€ãƒ€ãƒ–ルコーãƒ??ション(")ãŒå«ã¾ã‚Œã¦ã?‚‹å ´åˆã?ã€å±žæ?値をシングルコーãƒ??ション 152 * ã§ããりã¾ã™ã? 153 * 両方å«ã¾ã‚Œã¦ã?‚‹å ´åˆã?ã€ã‚·ãƒ³ã‚°ãƒ«ã‚³ãƒ¼ãƒ??ションをエスケープ文å—ã«å¤‰æ›ã—ã¾ã™ã? 154 * ã“ã?メソãƒ?ƒ‰ã¯ã€makeTag() ãŒå‘¼ã°ã‚ŒãŸå¾Œã?ã€ç™»éŒ²ã§ããªããªã‚Šã¾ã™ã? 155 * 156 * @og.rev 3.8.6.1 (2006/10/20) シングルã¨ãƒ?ƒ–ãƒ«ãŒæ··åœ¨ã™ã‚‹å ´åˆã?ã€ã‚·ãƒ³ã‚°ãƒ«ã‚’エスケープã™ã‚? 157 * 158 * @param key 属æ?ã‚ー (null ã®å ´åˆã?ã€ãªã«ã‚‚ã—ãªã? 159 * @param val 属æ?値 (null ã®å ´åˆã?ã€ãªã«ã‚‚ã—ãªã? 160 */ 161 public void add( final String key,final String val ) { 162 if( cacheTag != null ) { 163 String errMsg = "makeTag() 実行後ã«ã€å±žæ?を追åŠ?™ã‚‹ã“ã¨ã¯å‡ºæ¥ã¾ã›ã‚“ã€? ; 164 throw new RuntimeException( errMsg ); 165 } 166 167 if( key != null && val != null ) { 168 if( val.indexOf( '\"' ) >= 0 ) { 169 String temp = val ; 170 if( val.indexOf( "'" ) >= 0 ) { temp = val.replaceAll( "'","'" ); } 171 buf.append( key ).append( "='" ).append( temp ).append( "' " ); 172 } 173 else { 174 buf.append( key ).append( "=\"" ).append( val ).append( "\" " ); 175 } 176 } 177 } 178 179 /** 180 * ã‚¿ã‚°ã®å±žæ?ã«ã€è¿½åŠ?™»éŒ²ã—ã¾ã™ã? 181 * æ–?—å?ã¨ã—ã¦ã€key="value" ã®å½¢å¼ãƒ‡ãƒ¼ã‚¿ã‚’与ãˆã¦ãã ã•ã„。é?çµæ™‚ã¯ã€å¾Œã‚ã« 182 * スペã?スをä¸?¤æŒŸã¿ã¾ã™ã?ã§ã€ä¸Žãˆã‚‹å¼•数自体ã«é€£çµç”¨ã‚¹ãƒšã?スを追åŠ?—ã¦ãŠã 183 * å¿?¦ã?ã‚りã¾ã›ã‚“ã€? 184 * 通常ã¯ã€tagName ãªã—ã§ä½œæ?ã—ãŸã€Tagbuffer オブジェクトã? makeTag() メソãƒ?ƒ‰ã® 185 * 返り値を渡ã—ã¾ã™ãŒã€Attributes.getAttribute() ã®è¿”り値ã§ã‚‚使用ã§ãã¾ã™ã? 186 * 引数ã?null ã®å ´åˆã?ã€ãªã«ã‚‚ã—ã¾ã›ã‚“ã€? 187 * ã“ã?メソãƒ?ƒ‰ã¯ã€makeTag() ãŒå‘¼ã°ã‚ŒãŸå¾Œã?ã€ç™»éŒ²ã§ããªããªã‚Šã¾ã™ã? 188 * 189 * @param str ã‚¿ã‚°ãƒãƒƒãƒ•ァーを追åŠ?—ã¾ã™ã? 190 * @see #makeTag() 191 * @see Attributes#getAttribute() 192 */ 193 public void add( final String str ) { 194 if( cacheTag != null ) { 195 String errMsg = "makeTag() 実行後ã«ã€å±žæ?を追åŠ?™ã‚‹ã“ã¨ã¯å‡ºæ¥ã¾ã›ã‚“ã€? ; 196 throw new RuntimeException( errMsg ); 197 } 198 199 if( str != null ) { 200 buf.append( str ).append( " " ); 201 } 202 } 203 204 /** 205 * ã‚¿ã‚°ã® æ•´å½¢ã•ã‚ŒãŸæ–‡å—å?ã‚?作æ?ã—ã¾ã™ã? 206 * ã“ã?メソãƒ?ƒ‰ã¯ã€tagName,body,属æ?より ã‚¿ã‚°ã®å®Œæ?å½¢ã®æ–?—å?を作æ?ã—ã¾ã™ã? 207 * 作æ?ã•ã‚ŒãŸæ–‡å—å?ã¯ã€å?部ã§ã‚ャãƒ?‚·ãƒ¥ã•れã¾ã™ã? 208 * BODY部を指定ã™ã‚‹ã¨ã€?lt;tagName key="val" ?¥?¥?¥ >body</tagName> å½¢å¼ã«ãªã‚Šã¾ã™ã? 209 * BODY部ãŒã?null ã®å ´åˆã?ã€?<tagName key="val" ?¥?¥?¥ /> å½¢å¼ã«ãªã‚Šã¾ã™ã? 210 * ã‚¿ã‚°åã‚’æŒ?®šã—ãªã?null)ã¨ã€å®Œæ?å½¢ã®ã‚¿ã‚°ã¯ã€ä½œæ?ã§ãã¾ã›ã‚“ã€? 211 * 属æ?リスãƒ?key="value")ã®é€£çµå½¢å¼ã‚’è¿”ã—ã¾ã™ã? 212 * 213 * ã“ã?メソãƒ?ƒ‰ã®å‘¼ã³å‡ºã—以é™ã§ã¯ã€setBody() ã‚?add() も実行ã§ãã¾ã›ã‚“ã€? 214 * 215 * @return æ•´å½¢ã•れã?ã‚¿ã‚°æ–?—å? 216 */ 217 public String makeTag() { 218 if( cacheTag == null ) { 219 if( tagName != null ) { 220 if( tagBody == null ) { 221 buf.append( "/>" ); 222 } 223 else { 224 buf.append( ">" ).append( tagBody ); 225 buf.append( "</" ).append( tagName ).append( ">" ); 226 } 227 } 228 cacheTag = buf.toString(); 229 } 230 231 return cacheTag; 232 } 233 234 /** 235 * 行番å·ä»˜ãã®ã‚¿ã‚°ã® æ•´å½¢ã•ã‚ŒãŸæ–‡å—å?ã‚?作æ?ã—ã¾ã™ã? 236 * ã“ã?メソãƒ?ƒ‰ã¯ã€makeTag() ã®çµæžœã‚ˆã‚Šã€[I] æ–?—å?を引数ã®è¡Œç•ªå·ã¨å¤‰æ›ã—ã¾ã™ã? 237 * ã“れã«ã‚ˆã‚Šã€å‹•çš?«è¡Œç•ªå·ã¤ãã?æƒ??を属æ?ã«ä»˜ä¸Žã™ã‚‹ã“ã¨ãŒå¯èƒ½ã«ãªã‚Šã¾ã™ã? 238 * å†?ƒ¨ã«ã‚ャãƒ?‚·ãƒ¥ã•れるå?ã¯ã€[I] 記å·ã‚’変æ›ã—ã¦ã?ªã?Š¶æ…‹ã?æ–?—å?ã§ã™ã? 239 * よã£ã¦ã€ã“ã®ãƒ¡ã‚½ãƒ?ƒ‰ã¯ã€rowNo を変ãˆã¦ã€ä½•度ã§ã‚‚呼ã³å‡ºã™ã“ã¨ã¯å¯èƒ½ã§ã™ãŒã€? 240 * setBody() ã‚?add() ã¯å®Ÿè¡Œã§ãã¾ã›ã‚“ã€? 241 * 242 * @param rowNo 行番å·([I] æ–?—å?を変æ›ã—ã¾ã™ã?) 243 * @param val è¨å®šå?([V] æ–?—å?を変æ›ã—ã¾ã™ã?) 244 * 245 * @return æ•´å½¢ã•れã?ã‚¿ã‚°æ–?—å? 246 */ 247 public String makeTag( final int rowNo,final String val ) { 248 String tag = makeTag(); 249 tag = StringUtil.replace( tag,"[I]",String.valueOf( rowNo ) ); 250 tag = StringUtil.replace( tag,"[V]",val ); 251 252 return tag ; 253 } 254 }