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.business;
017
018 import org.opengion.fukurou.model.DataModel;
019 import org.opengion.fukurou.model.NativeType;
020
021 import java.util.Map;
022 import java.util.HashMap;
023 import java.util.Arrays;
024
025 /**
026 * æ¥å‹™ãƒã‚¸ãƒ?‚¯ã‚’å?ç?™ã‚‹ãŸã‚ã?ãƒ??ブルモãƒ?ƒ«ã§ã™ã?
027 *
028 * ã“ã?ãƒ??ブルモãƒ?ƒ«ã§ã¯ã€ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆç”Ÿæˆæ™‚ã«ã€ã‚«ãƒ©ãƒ??列ã?値é…å?ã‚’å?ã«ã€å?部ãƒ??タを生æˆã—ã€?
029 * ãã?後ã?ã€è¡Œã?追åŠ?‚„値ã®å¤‰æ›´ã¯ã§ãã¾ã›ã‚“ã€?
030 *
031 * @og.rev 5.1.1.0 (2009/12/01) æ–°è¦ä½œæ?
032 * @og.group æ¥å‹™ãƒã‚¸ãƒ?‚¯
033 *
034 * @version 5.0
035 * @author Hiroki Nakamura
036 * @since JDK1.6,
037 */
038 public class ArrayTableModel implements DataModel<String> {
039 private static final String CR = System.getProperty("line.separator"); // 5.6.7.0 (2013/07/27) 追�
040
041 private final String[] names;
042 private final String[][] vals;
043 private final String[] modTypes;
044
045 private Map<Integer,String[]> rtnMap = null; // 5.6.0.3 (2012/01/24) 変更ã•れãŸå?ã‚’ã?æ›¸ãæˆ»ã™ãŸã‚ã?Map<インãƒ?ƒƒã‚¯ã‚¹,値é…å?>
046
047 /**
048 * 引数ã«åå‰é…å?ã€å?é…å?を指定ã—ãŸã‚³ãƒ³ã‚¹ãƒˆãƒ©ã‚¯ã‚¿ãƒ¼
049 *
050 * @param nms åå‰é…å?
051 * @param vs 値?’é‡é…å?
052 * @throws IllegalArgumentException 引数ã®é…å?ãŒä¸æ£ãªå ´å?
053 */
054 public ArrayTableModel( final String[] nms, final String[][] vs ) {
055 this( nms, vs, null );
056 }
057
058 /**
059 * 引数ã«åå‰é…å?ã€å?é…å?ã€å¤‰æ›´åŒºåˆ??列をæŒ?®šã—ãŸã‚³ãƒ³ã‚¹ãƒˆãƒ©ã‚¯ã‚¿ãƒ¼
060 *
061 * @og.rev 5.6.7.0 (2013/07/27) エラーメãƒ?‚»ãƒ¼ã‚¸ã‚’判りやã™ãã™ã‚‹ã€?
062 *
063 * @param nms åå‰é…å?
064 * @param vs 値?’é‡é…å?
065 * @param ms 変更区åˆ??é…å?
066 * @throws IllegalArgumentException 引数ã®é…å?ãŒä¸æ£ãªå ´å?
067 */
068 public ArrayTableModel( final String[] nms, final String[][] vs, final String[] ms ) {
069 if( nms == null || nms.length == 0 ) {
070 String errMsg = "引数ã®åå‰é…å?ã«ã€null ã¯è¨å®šã§ãã¾ã›ã‚“ã€?;
071 throw new IllegalArgumentException( errMsg );
072 }
073 // 5.6.7.0 (2013/07/27) エラーメãƒ?‚»ãƒ¼ã‚¸ã‚’判りやã™ãã™ã‚‹ã€?
074 // if( vs == null ) {
075 if( vs == null || vs.length == 0 || vs[0] == null || vs[0].length == 0 ) {
076 String errMsg = "引数ã®å€¤é…å?ã«ã€null ã¯è¨å®šã§ãã¾ã›ã‚“ã€?;
077 throw new IllegalArgumentException( errMsg );
078 }
079 // if( vs.length > 0 ) {
080 // if( vs[0] == null || vs[0].length == 0 || nms.length != vs[0].length ) {
081 if( nms.length != vs[0].length ) {
082 // String errMsg = "åå‰é…å?ã¨å€¤é…å?ã®ã‚«ãƒ©ãƒ?•°ãŒç•°ãªã‚Šã¾ã™ã?" ;
083 String errMsg = "åå‰é…å?ã¨å€¤é…å?ã®ã‚«ãƒ©ãƒ?•°ãŒç•°ãªã‚Šã¾ã™ã?" + CR
084 + " nms =" + Arrays.toString( nms ) + CR
085 + " vs[0] =" + Arrays.toString( vs[0] ) ;
086 throw new IllegalArgumentException( errMsg );
087 }
088 // }
089
090 int cols = nms.length;
091 names = new String[cols];
092 System.arraycopy( nms, 0, names, 0, cols );
093
094 int rows = vs.length;
095 vals = new String[rows][cols];
096 for( int i = 0; i < rows; i++ ) {
097 System.arraycopy( vs[i], 0, vals[i], 0, cols );
098 }
099
100 if( ms != null && ms.length > 0 ) {
101 if( vs.length == ms.length ) {
102 modTypes = new String[rows];
103 System.arraycopy( ms, 0, modTypes, 0, rows );
104 }
105 else {
106 // 5.6.7.0 (2013/07/27) エラーメãƒ?‚»ãƒ¼ã‚¸ã‚’判りやã™ãã™ã‚‹ã€?
107 // String errMsg = "変更区åˆ?‚’æŒ?®šã™ã‚‹å?åˆã?値é…å?ã®è¡Œæ•°ã¨ä¸??ã™ã‚‹å¿?¦ãŒã‚りã¾ã™ã?";
108 String errMsg = "変更区åˆ?‚’æŒ?®šã™ã‚‹å?åˆã?値é…å?ã®è¡Œæ•°ã¨ä¸??ã™ã‚‹å¿?¦ãŒã‚りã¾ã™ã?" + CR
109 + " 変更区�行数 =" + ms.length + CR
110 + " 値é…å? 行数 =" + vs.length ;
111 throw new IllegalArgumentException( errMsg );
112 }
113 // if( vs.length != ms.length ) {
114 // String errMsg = "変更区åˆ?‚’æŒ?®šã™ã‚‹å?åˆã?値é…å?ã®è¡Œæ•°ã¨ä¸??ã™ã‚‹å¿?¦ãŒã‚りã¾ã™ã?";
115 // throw new IllegalArgumentException( errMsg );
116 // }
117 // else {
118 // modTypes = new String[rows];
119 // System.arraycopy( ms, 0, modTypes, 0, rows );
120 // }
121 }
122 else {
123 modTypes = null;
124 }
125 }
126
127 /**
128 * rowã§æŒ?®šã•れãŸè¡Œç•ªå·(インãƒ?ƒƒã‚¯ã‚¹ç•ªå·)ã«è¡Œã‚’追åŠ?—ã¾ã™ã?
129 * <del>(ã“ã?クラスã§ã¯ã€ã“ã®ãƒ¡ã‚½ãƒ?ƒ‰ã¯ã‚µãƒã?トã•れã¦ã?¾ã›ã‚“ã€?</del>
130 * 値é…å?ã‚’ã‚»ãƒ?ƒˆã™ã‚‹å ´åˆã?ã€ä»¥ä¸‹ã?æ¡ä»¶ã‚’æº?Ÿã™å¿?¦ãŒã‚りã¾ã™ã?
131 * ?‘.行番å·ã¯ã€???rowCount-1) ã®ç¯?›²
132 * ?’.å?é…å?ã¯ã€not nullã€?ã‹ã¤ ?‘件以ä¸?
133 * ?“.å?é…å?ã®å€‹æ•°ã¯ã€å?部カラãƒ?•°ã¨åŒã˜
134 *
135 * ã“ã“ã§ç™»éŒ²ã—ãŸå€¤ã¯ã€å?部ã®å€¤é…å?ã¨åˆ¥ç®¡ç?•れã¾ã™ã?ã§ã€ã‚»ãƒ?ƒˆå¾Œã«ã€å?ã³ã‚²ãƒ?ƒˆã—ã¦ã‚?
136 * ã“ã“ã§ã‚»ãƒ?ƒˆã—ãŸå€¤ã‚’å–りå?ã™ã“ã¨ã¯ã§ãã¾ã›ã‚“ã€?
137 * ã¾ãŸã?åŒã˜è¡Œç•ªå·ã§ã‚»ãƒ?ƒˆã—ãŸå ´åˆã?ã€å¾Œã§ã‚»ãƒ?ƒˆã—ãŸå€¤ãŒæœ‰åйã§ã™ã?
138 *
139 * ※ インãƒ?ƒƒã‚¯ã‚¹(row)ã¨ã¯ã€ã“ã®ArrayTableModel ã«æŒã¤ vals é…å?ã®è¡Œã?インãƒ?ƒƒã‚¯ã‚¹ã§ã™ã?
140 * よã£ã¦ã€ã‚ªãƒªã‚¸ãƒŠãƒ«ã®DBTableModelã®è¡Œç•ªå·ã§ã¯ã‚りã¾ã›ã‚“ã€?
141 *
142 * @og.rev 5.6.0.3 (2012/01/24) 変更ã•れãŸå?ã‚’ã?æ›¸ãæˆ»ã™æ©Ÿè?を追åŠ?—ã¾ã™ã?
143 *
144 * @param vals é…å?値
145 * @param row 追åŠ?™ã‚‹ã‚¤ãƒ³ãƒ?ƒƒã‚¯ã‚¹
146 * @throws IllegalArgumentException 引数ãŒï¼‘,2,3ã?æ¡ä»¶ã‚’æº?Ÿã•ãªã??åˆã?
147 */
148 public void setValues( final String[] vals, final int row ) {
149 // throw new RuntimeException( "ã“ã?クラスã§ã¯ã€setValuesメソãƒ?ƒ‰ã¯ã‚µãƒã?トã•れã¦ã?¾ã›ã‚“" );
150 if( row < 0 || row > getRowCount() ) {
151 String errMsg = "引数ã®ã‚¤ãƒ³ãƒ?ƒƒã‚¯ã‚¹ã¯ã€??? + (getRowCount()-1) + " ã®é–“ã§æŒ?®šã—ã¦ãã ã•ã„。index=[" + row + "]";
152 throw new IllegalArgumentException( errMsg );
153 }
154 else if( vals == null || vals.length == 0 ) {
155 String errMsg = "引数ã®å€¤é…å?ã«ã€nullã€ã¾ãŸã? 0ä»¶é…å?ã¯æŒ?®šã§ãã¾ã›ã‚“。index=[" + row + "]";
156 throw new IllegalArgumentException( errMsg );
157 }
158 else if( vals.length != names.length ) {
159 String errMsg = "引数ã®å€¤é…å?ã®å€‹æ•°ã¨ã€å?部カラãƒ?•°ãŒä¸??ã—ã¾ã›ã‚“ã€?
160 + " index=[" + row + "] : 引数個数=[" + vals.length + "] != å†?ƒ¨ã‚«ãƒ©ãƒ?•°=[" + names.length + "]";
161 throw new IllegalArgumentException( errMsg );
162 }
163
164 if( rtnMap == null ) { rtnMap = new HashMap<Integer,String[]>(); }
165
166 int cols = vals.length;
167 String[] newVals = new String[cols];
168 System.arraycopy( vals, 0, newVals, 0, cols );
169
170 rtnMap.put( Integer.valueOf( row ) , newVals );
171 }
172
173 /**
174 * BizLogicã§ã€ãƒ‡ãƒ¼ã‚¿ãŒå¤‰æ›´ã•れãŸå?åˆã?ã€ã“ã®Mapã§å€¤ã®é…å?ã‚’è¿”ã—ã¾ã™ã?
175 * Mapã®ã‚ーã¯ã€ã‚¤ãƒ³ãƒ?ƒƒã‚¯ã‚¹(row)ã®Integerオブジェクトã§ã™ã?値ã¯ã€è¨å®šã•れ㟠Stringé…å?ã§ã™ã?
176 * ãªã«ã‚‚変更ãŒã•れã¦ã?ªã‘れã°ã€null ã‚’è¿”ã—ã¾ã™ã?
177 *
178 * ※ インãƒ?ƒƒã‚¯ã‚¹(row)ã¨ã¯ã€ã“ã®ArrayTableModel ã«æŒã¤ vals é…å?ã®è¡Œã?インãƒ?ƒƒã‚¯ã‚¹ã§ã™ã?
179 * よã£ã¦ã€ã‚ªãƒªã‚¸ãƒŠãƒ«ã®DBTableModelã®è¡Œç•ªå·ã§ã¯ã‚りã¾ã›ã‚“ã€?
180 *
181 * @og.rev 5.6.0.3 (2012/01/24) 変更ã•れãŸå?ã‚’ã?æ›¸ãæˆ»ã™ãŸã‚ã?Map<インãƒ?ƒƒã‚¯ã‚¹,値é…å?> ã‚’è¿”ã—ã¾ã™ã?
182 *
183 * @return æ›¸ãæˆ»ã™ãŸã‚ã?Map?œã‚¤ãƒ³ãƒ?ƒƒã‚¯ã‚¹,値é…å???
184 * @see AbstractBizLogic#isRequireTable()
185 */
186 public Map<Integer,String[]> getModifyVals() {
187 return rtnMap;
188 }
189
190 /**
191 * カラãƒ?ã«å¯¾å¿œã™ã‚?カラãƒ?•ªå·ã‚’è¿”ã—ã¾ã™ã?
192 *
193 * 特殊ãªã‚«ãƒ©ãƒ?ŒæŒ?®šã•れãŸå ´åˆã?ã€è²??値を返ã—ã¾ã™ã?
194 * 例ãˆã°ã€[KEY.カラãƒ?]ã€[I]ã€[ROW.ID] ãªã©ã€ç‰¹å®šã?è²??値を返ã—ã¾ã™ã?
195 * ã¾ãŸã?カラãƒ?ãŒå?ã®ãƒ??タモãƒ?ƒ«ã«å˜åœ¨ã—ãªã??åˆã‚‚ã€è²??値ã‹ã?
196 * Exception ã‚’è¿”ã—ã¾ã™ã?è²??値ãªã®ã‹ã?Exception ãªã®ã‹ã?ã€?
197 * 実è£?«ä¾å˜ã—ã¾ã™ã?
198 *
199 * @param columnName 値ãŒå‚ç…§ã•れるカラãƒ?
200 *
201 * @return æŒ?®šã•れãŸã‚»ãƒ«ã®ã‚«ãƒ©ãƒ?•ªå·ã€‚å˜åœ¨ã—ãªã‘れã°ã€?1
202 * @throws IllegalArgumentException 引数ã®ã‚«ãƒ©ãƒ?ã?null ã®å ´å?
203 */
204 public int getColumnNo( final String columnName ) {
205 if( columnName == null ) {
206 String errMsg = "引数ã®ã‚«ãƒ©ãƒ?ã«ã€null ã¯è¨å®šã§ãã¾ã›ã‚“ã€?;
207 throw new IllegalArgumentException( errMsg );
208 }
209
210 int address = -1;
211 for( int i = 0; i < names.length; i++ ) {
212 if( columnName.equalsIgnoreCase( names[i] ) ) {
213 address = i;
214 break;
215 }
216 }
217
218 return address;
219 }
220
221 /**
222 * カラãƒ?é…å?ã«å¯¾å¿œã™ã‚?カラãƒ?•ªå·é…å?ã‚’è¿”ã—ã¾ã™ã?
223 *
224 * ã“れã¯ã€?getColumnNo( String ) ã«å¯¾ã™ã‚‹ è¤?•°ã®ã‚«ãƒ©ãƒ?を検索ã—ãŸ
225 * å ´åˆã¨åŒã˜ã§ã™ã?
226 *
227 * @param clmNms 値ãŒå‚ç…§ã•れるカラãƒ?é…å?
228 *
229 * @return æŒ?®šã•れãŸã‚»ãƒ«ã®ã‚«ãƒ©ãƒ?•ªå·é…å?ã€?
230 */
231 public int[] getColumnNos( final String[] clmNms ) {
232 if( clmNms == null ) { return new int[0]; }
233
234 int[] clmNos = new int[clmNms.length];
235 for( int j = 0; j < clmNms.length; j++ ) {
236 int address = -1;
237 for( int i = 0; i < names.length; i++ ) {
238 if( clmNms[j].equalsIgnoreCase( names[i] ) ) {
239 address = i;
240 break;
241 }
242 }
243 clmNos[j] = address;
244 }
245
246 return clmNos;
247 }
248
249 /**
250 * カラãƒ?é…å?ã‚’è¿”ã—ã¾ã™ã?
251 *
252 * @return カラãƒ?é…å?
253 */
254 public String[] getNames() {
255 return names.clone();
256 }
257
258 /**
259 * row ã«ã‚るセルã®å±žæ?値をé?列ã§è¿”ã—ã¾ã™ã?
260 *
261 * @param row 値ãŒå‚ç…§ã•れるè¡?
262 *
263 * @return æŒ?®šã•れãŸã‚»ãƒ«ã®å±žæ?値é…å?
264 */
265 public String[] getValues( final int row ) {
266 return vals[row].clone();
267 }
268
269 /**
270 * row ãŠã‚ˆã³ clm ã«ã‚るセルã®å±žæ?値をStringã«å¤‰æ›ã—ã¦è¿”ã—ã¾ã™ã?
271 *
272 * @param row 値ãŒå‚ç…§ã•れるè¡?
273 * @param clm 値ãŒå‚ç…§ã•れるå?
274 *
275 * @return æŒ?®šã•れãŸã‚»ãƒ«ã®å€¤
276 *
277 */
278 public String getValue( final int row, final int clm ) {
279 return vals[row][clm];
280 }
281
282 /**
283 * row ãŠã‚ˆã³ clm ã«ã‚るセルã®å±žæ?値をStringã«å¤‰æ›ã—ã¦è¿”ã—ã¾ã™ã?
284 *
285 * @param row 値ãŒå‚ç…§ã•れるè¡?
286 * @param clm 値ãŒå‚ç…§ã•れるå?(ã‚ー)
287 *
288 * @return æŒ?®šã•れãŸã‚»ãƒ«ã®å€¤
289 *
290 */
291 public String getValue( final int row, final String clm ) {
292 return vals[row][getColumnNo( clm )];
293 }
294
295 /**
296 * ãƒ??ã‚¿ãƒ??ブルå†??行ã?æ•°ã‚’è¿”ã—ã¾ã™ã?
297 *
298 * @return モãƒ?ƒ«ã®è¡Œæ•°
299 *
300 */
301 public int getRowCount() {
302 return vals.length;
303 }
304
305 /**
306 * row å˜ä½ã«å¤‰æ›´ã•れãŸã‚¿ã‚¤ãƒ?追åŠ?変更/削除)ã‚’è¿”ã—ã¾ã™ã?
307 * タイプã?å§‹ã‚ã«ä¸?º¦ç™»éŒ²ã™ã‚‹ã¨ãれ以é™ã«å¤‰æ›´ã¯ã‹ã‹ã‚Šã¾ã›ã‚“ã€?
308 * ã¤ã¾ã‚Šã?å§‹ã‚㫠追åŠ?§ä½œæ?ã—ãŸãƒ??ã‚¿ã¯ã€ãã®å¾Œå¤‰æ›´ãŒã‚ã£ã¦ã‚‚追åŠ??ã¾ã¾ã§ã™ã?
309 * ãªã«ã‚‚変更ã•れã¦ã?ªã??åˆã?, ""(ゼãƒã‚¹ãƒˆãƒªãƒ³ã‚°)ã‚’è¿”ã—ã¾ã™ã?
310 *
311 * @param row 値ãŒå‚ç…§ã•れるè¡?
312 *
313 * @return 変更ã•れãŸã‚¿ã‚¤ãƒ—ã?値
314 */
315 public String getModifyType( final int row ) {
316 return modTypes == null ? "" : modTypes[row];
317 }
318
319 /**
320 * clm ã®Nativeタイプを返ã—ã¾ã™ã?
321 * Nativeタイプã?org.opengion.fukurou.model.NativeTypeã§å®šç¾©ã•れã¦ã?¾ã™ã?
322 *
323 * @og.rev 5.1.8.0 (2010/07/01) NativeType#getType(String) ã®ãƒ¡ã‚½ãƒ?ƒ‰ã‚’使用ã™ã‚‹ã‚ˆã†ã«å¤‰æ›´ã€?
324 *
325 * @param clm 値ãŒå‚ç…§ã•れるå?
326 *
327 * @return Nativeタイ�
328 * @see org.opengion.fukurou.model.NativeType
329 */
330 public NativeType getNativeType( final int clm ) {
331 // return StringUtil.getNativeType( vals[0][clm] );
332 return NativeType.getType( vals[0][clm] );
333 }
334
335 /**
336 * ã“ã?オブジェクトã?æ–?—å?表記を返ã—ã¾ã™ã?
337 * ãƒ?ƒãƒ?‚°ç”¨ã§ã™ã?
338 *
339 * @og.rev 5.6.7.0 (2013/07/27) æ–°è¦è¿½åŠ?
340 *
341 * @return æ–?—å?表ç¾
342 * @see java.lang.Object#toString()
343 */
344 @Override
345 public String toString() {
346 StringBuilder buf = new StringBuilder();
347
348 buf.append( "NAMES=" ).append( Arrays.toString( names ) ).append( CR )
349 .append( " COL_LEN=" ).append( (names != null) ? names.length : -1 ).append( CR )
350 .append( " ROW_LEN=" ).append( (vals != null) ? vals.length : -1 ).append( CR ) ;
351
352 return buf.toString();
353 }
354 }