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 */ 016package org.opengion.fukurou.model; 017 018 019/** 020 * [PN],[OYA] などの [] で指定されたカラムで表されたフォーマットデータに対して、 021 * DBTableModelオブジェクトを適用して 各カラムに実データを割り当てるオブジェクトです。 022 * 023 * @og.group 画面表示 024 * 025 * @version 4.0 026 * @author Kazuhiko Hasegawa 027 * @since JDK5.0, 028 */ 029public class ArrayDataModel implements DataModel<String> { 030 private final String[] names ; 031 private String[] values = null; 032 033 /** 034 * 引数に名前配列を指定したコンストラクター 035 * 036 * @param nms 名前配列 037 * @throws IllegalArgumentException 引数の名前配列が null の場合 038 */ 039 public ArrayDataModel( final String[] nms ) { 040 if( nms == null ) { 041 String errMsg = "引数の名前配列に、null は設定できません。"; 042 throw new IllegalArgumentException( errMsg ); 043 } 044 045 int size = nms.length ; 046 names = new String[size] ; 047 System.arraycopy( nms,0,names,0,size ); 048 } 049 050 /** 051 * row にあるセルの設定値を置き換えます。 052 * 053 * @param vals 新しい配列値。 054 * @param row 値が変更される行(無視されます) 055 */ 056 @Override 057 public void setValues( final String[] vals, final int row ) { 058 int size = vals.length; 059 values = new String[size]; 060 System.arraycopy( vals,0,values,0,size ); 061 } 062 063 /** 064 * カラム名に対応する カラム番号を返します。 065 * 066 * 特殊なカラムが指定された場合は、負の値を返します。 067 * 例えば、[KEY.カラム名]、[I]、[ROW.ID] など、特定の負の値を返します。 068 * また、カラム名が元のデータモデルに存在しない場合も、負の値か、 069 * Exception を返します。負の値なのか、Exception なのかは、 070 * 実装に依存します。 071 * 072 * @param columnName 値が参照されるカラム名 073 * 074 * @return 指定されたセルのカラム番号。存在しなければ、-1 075 * @throws IllegalArgumentException 引数のカラム名が null の場合 076 */ 077 @Override 078 public int getColumnNo( final String columnName ) { 079 if( columnName == null ) { 080 String errMsg = "引数のカラム名に、null は設定できません。"; 081 throw new IllegalArgumentException( errMsg ); 082 } 083 084 int address = -1; 085 for( int i=0; i<names.length; i++ ) { 086 if( columnName.equalsIgnoreCase( names[i] ) ) { 087 address = i; 088 break; 089 } 090 } 091 092 return address; 093 } 094 095 /** 096 * カラム名配列に対応する カラム番号配列を返します。 097 * 098 * これは、#getColumnNo( String ) に対する 複数のカラム名を検索した 099 * 場合と同じです。 100 * 101 * @param clmNms 値が参照されるカラム名配列 102 * 103 * @return 指定されたセルのカラム番号配列。 104 */ 105 public int[] getColumnNos( final String[] clmNms ) { 106 if( clmNms == null ) { 107 return new int[0]; 108 } 109 110 int[] clmNos = new int[clmNms.length]; 111 for( int j=0; j<clmNms.length; j++ ) { 112 int address = -1; 113 for( int i=0; i<names.length; i++ ) { 114 if( clmNms[j].equalsIgnoreCase( names[i] ) ) { 115 address = i; 116 break; 117 } 118 } 119 clmNos[j] = address; 120 } 121 122 return clmNos; 123 } 124 125 /** 126 * カラム名配列を返します。 127 * 128 * @return カラム名配列 129 */ 130 @Override 131 public String[] getNames() { 132 return names.clone(); 133 } 134 135 /** 136 * row にあるセルの属性値を配列で返します。 137 * 138 * @param row 値が参照される行(無視されます) 139 * 140 * @return 指定されたセルの属性値 141 */ 142 @Override 143 public String[] getValues( final int row ) { 144 return values.clone(); 145 } 146 147 /** 148 * row および clm にあるセルの属性値をStringに変換して返します。 149 * 150 * @param row 値が参照される行(無視されます) 151 * @param clm 値が参照される列 152 * 153 * @return 指定されたセルの値 154 * 155 */ 156 @Override 157 public String getValue( final int row, final int clm) { 158 return values[clm]; 159 } 160 161 /** 162 * clm のNativeタイプを返します。 163 * Nativeタイプはorg.opengion.fukurou.model.NativeTypeで定義されています。 164 * 165 * @og.rev 4.1.1.2 (2008/02/28) 新規追加 166 * @og.rev 5.1.8.0 (2010/07/01) NativeType#getType(String) のメソッドを使用するように変更。 167 * 168 * @param clm 値が参照される列 169 * 170 * @return Nativeタイプ 171 * @see org.opengion.fukurou.model.NativeType 172 */ 173 @Override 174 public NativeType getNativeType( final int clm ) { 175 return NativeType.getType( values[clm] ); 176 } 177}