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 body = 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 * @param body ã‚¿ã‚°ã®BODY部 078 */ 079 public void setBody( final String body ) { 080 if( cacheTag != null ) { 081 String errMsg = "makeTag() 実行後ã«ã€BODY部ã®å€¤ã‚’æ›¸ãæ›ãˆã‚‹ã“ã¨ã¯å‡ºæ¥ã¾ã›ã‚“ã€? ; 082 throw new RuntimeException( errMsg ); 083 } 084 085 this.body = body; 086 } 087 088 /** 089 * タグ㮠属æ?(key="value")を登録ã—ã¾ã™ã? 090 * 属æ?ã¯ã€key="value" ã®æ–?—å?を作æ?ã—ã¾ã™ã?key ã‹ã?value ã®ã©ã¡ã‚‰ã‹ã?null 091 * ã®å ´åˆã?ã€ç™»éŒ²ã—ã¾ã›ã‚“ã€? 092 * value ã«ã€ãƒ€ãƒ–ルコーãƒ??ション(")ãŒå«ã¾ã‚Œã¦ã?‚‹å ´åˆã?ã€å±žæ?値をシングルコーãƒ??ション 093 * ã§ããりã¾ã™ã? 094 * 両方å«ã¾ã‚Œã¦ã?‚‹å ´åˆã?ã€ã‚·ãƒ³ã‚°ãƒ«ã‚³ãƒ¼ãƒ??ションをエスケープ文å—ã«å¤‰æ›ã—ã¾ã™ã? 095 * ã“ã?メソãƒ?ƒ‰ã¯ã€makeTag() ãŒå‘¼ã°ã‚ŒãŸå¾Œã?ã€ç™»éŒ²ã§ããªããªã‚Šã¾ã™ã? 096 * 097 * @og.rev 3.8.6.1 (2006/10/20) シングルã¨ãƒ?ƒ–ãƒ«ãŒæ··åœ¨ã™ã‚‹å ´åˆã?ã€ã‚·ãƒ³ã‚°ãƒ«ã‚’エスケープã™ã‚? 098 * 099 * @param key 属æ?ã‚ー (null ã®å ´åˆã?ã€ãªã«ã‚‚ã—ãªã? 100 * @param val 属æ?値 (null ã®å ´åˆã?ã€ãªã«ã‚‚ã—ãªã? 101 */ 102 public void add( final String key,final String val ) { 103 if( cacheTag != null ) { 104 String errMsg = "makeTag() 実行後ã«ã€å±žæ?を追åŠ?™ã‚‹ã“ã¨ã¯å‡ºæ¥ã¾ã›ã‚“ã€? ; 105 throw new RuntimeException( errMsg ); 106 } 107 108 if( key != null && val != null ) { 109 if( val.indexOf( '\"' ) >= 0 ) { 110 String temp = val ; 111 if( val.indexOf( "'" ) >= 0 ) { temp = val.replaceAll( "'","'" ); } 112 buf.append( key ).append( "='" ).append( temp ).append( "' " ); 113 } 114 else { 115 buf.append( key ).append( "=\"" ).append( val ).append( "\" " ); 116 } 117 } 118 } 119 120 /** 121 * ã‚¿ã‚°ã®å±žæ?ã«ã€è¿½åŠ?™»éŒ²ã—ã¾ã™ã? 122 * æ–?—å?ã¨ã—ã¦ã€key="value" ã®å½¢å¼ãƒ‡ãƒ¼ã‚¿ã‚’与ãˆã¦ãã ã•ã„。é?çµæ™‚ã¯ã€å¾Œã‚ã« 123 * スペã?スをä¸?¤æŒŸã¿ã¾ã™ã?ã§ã€ä¸Žãˆã‚‹å¼•数自体ã«é€£çµç”¨ã‚¹ãƒšã?スを追åŠ?—ã¦ãŠã 124 * å¿?¦ã?ã‚りã¾ã›ã‚“ã€? 125 * 通常ã¯ã€tagName ãªã—ã§ä½œæ?ã—ãŸã€Tagbuffer オブジェクトã? makeTag() メソãƒ?ƒ‰ã® 126 * 返り値を渡ã—ã¾ã™ãŒã€Attributes.getAttribute() ã®è¿”り値ã§ã‚‚使用ã§ãã¾ã™ã? 127 * 引数ã?null ã®å ´åˆã?ã€ãªã«ã‚‚ã—ã¾ã›ã‚“ã€? 128 * ã“ã?メソãƒ?ƒ‰ã¯ã€makeTag() ãŒå‘¼ã°ã‚ŒãŸå¾Œã?ã€ç™»éŒ²ã§ããªããªã‚Šã¾ã™ã? 129 * 130 * @param str ã‚¿ã‚°ãƒãƒƒãƒ•ァーを追åŠ?—ã¾ã™ã? 131 * @see #makeTag() 132 * @see Attributes#getAttribute() 133 */ 134 public void add( final String str ) { 135 if( cacheTag != null ) { 136 String errMsg = "makeTag() 実行後ã«ã€å±žæ?を追åŠ?™ã‚‹ã“ã¨ã¯å‡ºæ¥ã¾ã›ã‚“ã€? ; 137 throw new RuntimeException( errMsg ); 138 } 139 140 if( str != null ) { 141 buf.append( str ).append( " " ); 142 } 143 } 144 145 /** 146 * ã‚¿ã‚°ã® æ•´å½¢ã•ã‚ŒãŸæ–‡å—å?ã‚?作æ?ã—ã¾ã™ã? 147 * ã“ã?メソãƒ?ƒ‰ã¯ã€tagName,body,属æ?より ã‚¿ã‚°ã®å®Œæ?å½¢ã®æ–?—å?を作æ?ã—ã¾ã™ã? 148 * 作æ?ã•ã‚ŒãŸæ–‡å—å?ã¯ã€å?部ã§ã‚ャãƒ?‚·ãƒ¥ã•れã¾ã™ã? 149 * BODY部を指定ã™ã‚‹ã¨ã€?lt;tagName key="val" ?¥?¥?¥ >body</tagName> å½¢å¼ã«ãªã‚Šã¾ã™ã? 150 * BODY部ãŒã?null ã®å ´åˆã?ã€?<tagName key="val" ?¥?¥?¥ /> å½¢å¼ã«ãªã‚Šã¾ã™ã? 151 * ã‚¿ã‚°åã‚’æŒ?®šã—ãªã?null)ã¨ã€å®Œæ?å½¢ã®ã‚¿ã‚°ã¯ã€ä½œæ?ã§ãã¾ã›ã‚“ã€? 152 * 属æ?リスãƒ?key="value")ã®é€£çµå½¢å¼ã‚’è¿”ã—ã¾ã™ã? 153 * 154 * ã“ã?メソãƒ?ƒ‰ã®å‘¼ã³å‡ºã—以é™ã§ã¯ã€setBody() ã‚?add() も実行ã§ãã¾ã›ã‚“ã€? 155 * 156 * @return æ•´å½¢ã•れã?ã‚¿ã‚°æ–?—å? 157 */ 158 public String makeTag() { 159 if( cacheTag == null ) { 160 if( tagName != null ) { 161 if( body == null ) { 162 buf.append( "/>" ); 163 } 164 else { 165 buf.append( ">" ).append( body ); 166 buf.append( "</" ).append( tagName ).append( ">" ); 167 } 168 } 169 cacheTag = buf.toString(); 170 } 171 172 return cacheTag; 173 } 174 175 /** 176 * 行番å·ä»˜ãã®ã‚¿ã‚°ã® æ•´å½¢ã•ã‚ŒãŸæ–‡å—å?ã‚?作æ?ã—ã¾ã™ã? 177 * ã“ã?メソãƒ?ƒ‰ã¯ã€makeTag() ã®çµæžœã‚ˆã‚Šã€[I] æ–?—å?を引数ã®è¡Œç•ªå·ã¨å¤‰æ›ã—ã¾ã™ã? 178 * ã“れã«ã‚ˆã‚Šã€å‹•çš?«è¡Œç•ªå·ã¤ãã?æƒ??を属æ?ã«ä»˜ä¸Žã™ã‚‹ã“ã¨ãŒå¯èƒ½ã«ãªã‚Šã¾ã™ã? 179 * å†?ƒ¨ã«ã‚ャãƒ?‚·ãƒ¥ã•れるå?ã¯ã€[I] 記å·ã‚’変æ›ã—ã¦ã?ªã?Š¶æ…‹ã?æ–?—å?ã§ã™ã? 180 * よã£ã¦ã€ã“ã®ãƒ¡ã‚½ãƒ?ƒ‰ã¯ã€rowNo を変ãˆã¦ã€ä½•度ã§ã‚‚呼ã³å‡ºã™ã“ã¨ã¯å¯èƒ½ã§ã™ãŒã€? 181 * setBody() ã‚?add() ã¯å®Ÿè¡Œã§ãã¾ã›ã‚“ã€? 182 * 183 * @param rowNo 行番å·([I] æ–?—å?を変æ›ã—ã¾ã™ã?) 184 * @param val è¨å®šå?([V] æ–?—å?を変æ›ã—ã¾ã™ã?) 185 * 186 * @return æ•´å½¢ã•れã?ã‚¿ã‚°æ–?—å? 187 */ 188 public String makeTag( final int rowNo,final String val ) { 189 String tag = makeTag(); 190 tag = StringUtil.replace( tag,"[I]",String.valueOf( rowNo ) ); 191 tag = StringUtil.replace( tag,"[V]",val ); 192 193 return tag ; 194 } 195 }