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.xml; 017 018 import java.util.Map; 019 import java.util.LinkedHashMap; 020 import java.util.List; 021 022 /** 023 * ã“ã?クラスã¯ã€XMLファイルã®ã‚¿ã‚°ã‚¨ãƒ¬ãƒ¡ãƒ³ãƒˆã‚’表ã™ã‚ªãƒ–ジェクトã§ã™ã? 024 * ã‚¿ã‚°ã¨ã—ã¦ã¯ã€ã‚³ãƒ³ã‚¹ãƒˆãƒ©ã‚¯ã‚¿ã«Mapを指定ã™ã‚Œã?(defaultMap)ã‚¿ã‚°ã®ã‚«ãƒ©ãƒ?‚’ 025 * åˆæœŸè¨å®šã—ã¾ã™ã?ã“ã?å ´åˆã?Map ã« LinkedHashMap を指定ã™ã‚Œã?ã€ã‚«ãƒ©ãƒ?? 026 * é ?•ªã‚‚指定é?ã«ãªã‚Šã¾ã™ã? 027 * ã“ã“ã§æŒ?®šã—ãŸMapã®å€¤ã¯ã€put メソãƒ?ƒ‰ã«ã‚ˆã‚Šä¸Šæ›¸ãã•れã¾ã™ã? 028 * setAfterMap ã§æŒ?®šã—ãŸMapã¯ã€æ—¢å˜ã?å†?ƒ¨æƒ??を上書ãã—ã¾ã™ã?ã‚ーãŒã‚れã?ã€? 029 * afterMap ã®å€¤ãŒä¸Šæ›¸ãã•れã?ã‚ーãŒç„¡ã‘ã‚Œã°æ–°è¦ã«ã‚ーãŒè¿½åŠ?•れã¾ã™ã? 030 * ä¸?ˆ¬ã«ã¯ã€XMLファイルã‹ã‚‰æ§‹ç¯‰ã•れãŸå¾Œã§ã€XMLãƒ•ã‚¡ã‚¤ãƒ«ã®æƒ??ã‚’ä¸?‹¬ã—㦠031 * æ›¸ãæ›ãˆã‚‹å ´åˆãªã©ã«ä½¿ç”¨ã—ã¾ã™ã? 032 * 処ç??途ä¸ã«ã‚»ãƒ?ƒˆã—ãŸå ´åˆã?ã€ãれã¾ã§ã®å€¤ãŒä¸Šæ›¸ãã•れã?ãれ以é™ã?値ã¯ã€? 033 * put ã«ã‚ˆã‚Šè¨å®šã•れãŸå€¤ã?優先ã•れã¾ã™ã? 034 * toString() ã«ã‚ˆã‚Šã€ç°¡æ˜“的㫠オラクル?¸?¤?«å½¢å¼ã??¸??¬ãƒ•ァイル㮠035 * ?‘レコーãƒ?åˆ??æƒ??ã‚’è¿”ã—ã¾ã™ã? 036 * オラクル?¸?¤?«å½¢å¼ã??¸??¬ãƒ•ァイルã¨ã¯ã€ä¸‹è¨˜ã?よã†ãª ROWSET をトãƒ??ã¨ã™ã‚‹ ROW ã® 037 * é›?¾ã‚Šã§?‘レコードを表ã—ã?å„ROWã«ã¯ã€ã‚«ãƒ©ãƒ?ã‚’ã‚ーã¨ã™ã‚‹XMLã«ãªã£ã¦ã?¾ã™ã? 038 * 039 * <ROWSET> 040 * <ROW num="1"> â†?ã“ã?部åˆ??ã¿ 041 * <カラãƒ?>値1</カラãƒ?> â†?ã“ã?部åˆ??ã¿ 042 * ?¥?¥?¥ â†?ã“ã?部åˆ??ã¿ 043 * <カラãƒ?>値n</カラãƒ?> â†?ã“ã?部åˆ??ã¿ 044 * </ROW> â†?ã“ã?部åˆ??ã¿ 045 * ?¥?¥?¥ 046 * <ROW num="n"> 047 * ?¥?¥?¥ 048 * </ROW> 049 * <ROWSET> 050 * 051 * ã“ã?å½¢å¼ã§ã‚れã°ã€XDK(Oracle XML Developer's Kit)を利用ã™ã‚Œã°ã€?žå¸¸ã«ç°¡å˜ã« 052 * ãƒ??タベã?スã¨XMLファイルã¨ã®äº¤æ›ãŒå¯èƒ½ã§ã™ã? 053 * <a href="http://otn.oracle.co.jp/software/tech/xml/xdk/index.html" target="_blank" > 054 * XDK(Oracle XML Developer's Kit)</a> 055 * 056 * @version 4.0 057 * @author Kazuhiko Hasegawa 058 * @since JDK5.0, 059 */ 060 public class TagElement { 061 private static final String CR = System.getProperty("line.separator"); 062 private final String name ; 063 private final Map<String,String> map ; 064 private String num = null; 065 private String body = null; 066 067 /** 068 * Tagåã‚’æŒ?®šã—ã¦ã€ã‚ªãƒ–ジェクトを構築ã—ã¾ã™ã? 069 * 070 * @param name Tagå? 071 */ 072 public TagElement( final String name ) { 073 this( name,null ); 074 } 075 076 /** 077 * Tagåã¨åˆæœŸåŒ–ã?ãƒ??を指定ã—ã¦ã€ã‚ªãƒ–ジェクトを構築ã—ã¾ã™ã? 078 * 079 * @param name Tagå? 080 * @param defaultMap åˆæœŸåŒ–ã?ãƒ?? 081 */ 082 public TagElement( final String name, final Map<String,String> defaultMap ) { 083 this.name = name; 084 if( defaultMap != null ) { 085 map = new LinkedHashMap<String,String>( defaultMap ); 086 } 087 else { 088 map = new LinkedHashMap<String,String>(); 089 } 090 } 091 092 /** 093 * Tagåã‚’å–å¾—ã—ã¾ã™ã? 094 * 095 * @return Tagå? 096 */ 097 public String getName() { 098 return name; 099 } 100 101 /** 102 * カラãƒ?¨å€¤ã®ãƒšã‚¢ã‚’登録ã—ã¾ã™ã? 103 * ã™ã§ã« å†?ƒ¨ã«åŒä¸?‚«ãƒ©ãƒ?Œå˜åœ¨ã™ã‚‹å ´åˆã?ã€å?ã®æ›¸ãæ›ãˆã‚’ã€ã‚«ãƒ©ãƒ?Œ 104 * å˜åœ¨ã—ãªã??åˆã?ã€ã‚«ãƒ©ãƒ??追åŠ?‚’行ã„ã¾ã™ã? 105 * カラãƒ??ã€è¿½åŠ?•れãŸé ?•ªã‚’å?ç¾ã—ã¦XML化ã§ãã¾ã™ã? 106 * 107 * @og.rev 5.6.6.1 (2013/07/12) key ã?null ã‚?ã‚¼ãƒæ–?—å?ã®å ´åˆã?ã€Map ã«è¿½åŠ?—ã¾ã›ã‚“ã€? 108 * 109 * @param key カラãƒ? 110 * @param val 値 111 */ 112 public void put( final String key, final String val ) { 113 if( key != null && key.length() > 0 ) { // 5.6.6.1 (2013/07/12) 114 map.put( key,val ); 115 } 116 } 117 118 /** 119 * ã™ã§ã«æ§‹ç¯‰æ¸ˆã¿ã® カラãƒ?¨å€¤ã«ã€ä¸Šæ›¸ãã§ ãƒžãƒƒãƒ—æƒ…å ±ã‚’è¿½åŠ?—ã¾ã™ã? 120 * ã™ã§ã« å†?ƒ¨ã«åŒä¸?‚«ãƒ©ãƒ?Œå˜åœ¨ã™ã‚‹å ´åˆã?ã€å?ã®æ›¸ãæ›ãˆã‚’ã€ã‚«ãƒ©ãƒ?Œ 121 * å˜åœ¨ã—ãªã??åˆã?ã€ã‚«ãƒ©ãƒ??追åŠ?‚’行ã„ã¾ã™ã? 122 * カラãƒ??ã€è¿½åŠ?•れãŸé ?•ªã‚’å?ç¾ã—ã¦XML化ã§ãã¾ã™ã? 123 * 124 * @param afterMap 後è¨å®šã?ãƒ?? 125 */ 126 public void setAfterMap( final Map<String,String> afterMap ) { 127 if( afterMap != null ) { 128 map.putAll( afterMap ); 129 } 130 } 131 132 /** 133 * ã‚ーを指定ã—ã¦å€¤ã‚’å–å¾—ã—ã¾ã™ã? 134 * 135 * @param key カラãƒ? 136 * 137 * @return 値 138 */ 139 public String get( final String key ) { 140 return map.get( key ); 141 } 142 143 /** 144 * 行番å·ã‚’å–å¾—ã—ã¾ã™ã? 145 * 146 * @return 値 147 */ 148 public String getRowNo() { 149 return num; 150 } 151 152 /** 153 * 行番å·ã‚’è¨å®šã—ã¾ã™ã? 154 * 155 * @param num 値 156 */ 157 public void setRowNo( final String num ) { 158 this.num = num ; 159 } 160 161 /** 162 * BODYéƒ¨ã®æ–?—å?ã‚’å–å¾—ã—ã¾ã™ã? 163 * 164 * @return 値 165 */ 166 public String getBody() { 167 return body; 168 } 169 170 /** 171 * BODYéƒ¨ã®æ–?—å?ã‚’è¨å®šã—ã¾ã™ã? 172 * 173 * @param body 値 174 */ 175 public void setBody( final String body ) { 176 this.body = body ; 177 } 178 179 /** 180 * カラãƒ??é…å?ã‚’è¿”ã—ã¾ã™ã? 181 * 182 * @return カラãƒ??é…å?(é ?ºã?ã€ã‚«ãƒ©ãƒ??登録é ? 183 */ 184 public String[] getKeys() { 185 return map.keySet().toArray( new String[map.size()] ); 186 } 187 188 /** 189 * カラãƒ??列ã?é ?¨åŒã˜ã€å?ã®é…å?ã‚’è¿”ã—ã¾ã™ã? 190 * 191 * @return 値ã®é…å?(é ?ºã?ã€ã‚«ãƒ©ãƒ??登録é ?¨ä¸??ã—ã¦ã?¾ã™ã?) 192 */ 193 public String[] getValues() { 194 return map.values().toArray( new String[map.size()] ); 195 } 196 197 /** 198 * 引数ã®ã‚«ãƒ©ãƒ?ã®Listã®é ?•ªã§ã€ã‚«ãƒ©ãƒ??列ã?値ã®é…å?ã‚’è¿”ã—ã¾ã™ã? 199 * 200 * @param clms カラãƒ?ã®Listオブジェクãƒ? 201 * 202 * @return 値ã®é…å?(é ?ºã?ã€ã‚«ãƒ©ãƒ??登録é ?¨ä¸??ã—ã¦ã?¾ã™ã?) 203 */ 204 public String[] getValues( final List<String> clms ) { 205 int size = clms.size(); 206 String[] vals = new String[size]; 207 for( int i=0; i<size; i++ ) { 208 vals[i] = map.get( clms.get(i) ); 209 } 210 211 return vals; 212 } 213 214 /** 215 * 引数ã®ã‚«ãƒ©ãƒ?ã®é…å?ã®é ?•ªã§ã€ã‚«ãƒ©ãƒ??列ã?値ã®é…å?ã‚’è¿”ã—ã¾ã™ã? 216 * カラãƒ?ãŒã?å˜åœ¨ã—ãªã??åˆã?ã€å?ã¯ã€null ã‚’è¿”ã—ã¾ã™ã? 217 * 218 * @param clms カラãƒ?ã®é…å?æ–?—å? 219 * 220 * @return 値ã®é…å?(é ?ºã?ã€ã‚«ãƒ©ãƒ??é…å?é ?¨ä¸??ã—ã¦ã?¾ã™ã?) 221 */ 222 public String[] getValues( final String[] clms ) { 223 int size = clms.length; 224 String[] vals = new String[size]; 225 for( int i=0; i<size; i++ ) { 226 vals[i] = map.get( clms[i] ); 227 } 228 229 return vals; 230 } 231 232 /** 233 * å†?ƒ¨æƒ??ã®æ–?—å?表ç¾ã‚’è¿”ã—ã¾ã™ã? 234 * ?‘レコードå?を表ã?ROW ã®XML表ç¾ã‚’作æ?ã—ã¾ã™ã?å‰å¾Œã«ã€ROWSET ã‚? 235 * 追åŠ?™ã‚Œã?ã€ã‚ªãƒ©ã‚¯ãƒ«XDKå½¢å¼ã?XMLを作æ?ã§ãã¾ã™ã? 236 * 237 * @return å†?ƒ¨æƒ??ã®æ–?—å?è¡¨ç¾ 238 */ 239 @Override 240 public String toString() { 241 242 StringBuilder buf = new StringBuilder(); 243 buf.append( "<" ).append( name ); 244 if( num != null ) { 245 buf.append( " num=\"" ).append( num ).append( "\" " ); 246 } 247 buf.append( ">" ).append( CR ); 248 249 if( body != null ) { 250 buf.append( body ).append( CR ); 251 } 252 else { 253 String[] keys = getKeys(); 254 for( int i=0; i<keys.length; i++ ) { 255 String val = get( keys[i] ); 256 if( val == null ) { 257 buf.append( " <" ).append( keys[i] ).append( " />" ); 258 } 259 else { 260 buf.append( " <" ).append( keys[i] ).append( ">" ); 261 buf.append( val ); 262 buf.append( "</" ).append( keys[i] ).append( ">" ); 263 } 264 buf.append( CR ); 265 } 266 } 267 buf.append( "</" ).append( name ).append( ">" ).append( CR ); 268 269 return buf.toString(); 270 } 271 }