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.plugin.column; 017 018 import java.math.BigDecimal; 019 import java.text.NumberFormat; 020 021 import org.opengion.fukurou.model.NativeType; 022 import org.opengion.fukurou.util.ErrorMessage; 023 import org.opengion.fukurou.util.StringUtil; 024 import org.opengion.hayabusa.db.AbstractDBType; 025 import org.opengion.hayabusa.db.DBTypeCheckUtil; 026 027 /** 028 * 半角少数付き数字? NUMBER を扱?の、カラ??を定義します? 029 * 030 * '0' ??'9' ,'-' ,'.'でのみ構?されて?数字型カラ??を定義します? 031 * さらに、カン?,'が含まれて??OK とします?ただし???タからは取り除きます? 032 * 033 * タイプチェ?として、以下?条件を判定します? 034 * ・?~9?マイナス(-)および小数点(.)を許可 035 * ・整数部の長さチェ? 036 * ・少数部の長さチェ? 037 * ・小数点の位置チェ? 038 * ・符号の位置チェ? 039 * ・?パラメータの 正規表現チェ? 040 * 041 * @og.group ??タ属? 042 * 043 * @version 4.0 044 * @author Kazuhiko Hasegawa 045 * @since JDK5.0, 046 */ 047 public class DBType_R extends AbstractDBType { 048 //* こ?プログラ??VERSION??を設定します? {@value} */ 049 private static final String VERSION = "5.6.0.3 (2012/01/24)" ; 050 051 private static final String DEF_VALUE = "0.00" ; // ??タの?ォルト? 052 053 /** 054 * ?ォルトコンストラクター 055 * 056 * @og.rev 4.0.0.0 (2005/01/31) type ? 057 */ 058 public DBType_R() { 059 super( DEF_VALUE ); 060 } 061 062 /** 063 * NATIVEの型?識別コードを返します? 064 * 065 * @og.rev 3.5.4.7 (2004/02/06) 新規作? 066 * @og.rev 4.1.1.2 (2008/02/28) Enum?fukurou.model.NativeType)に変更 067 * 068 * @return NATIVEの型?識別コー?DBType で規? 069 * @see org.opengion.fukurou.model.NativeType 070 */ 071 @Override 072 public NativeType getNativeType() { 073 return NativeType.DOUBLE; 074 } 075 076 /** 077 * 半角0文字?固定長でFILL埋めされた文字?を返します? 078 * なお?エラーチェ?は行われません? 079 * 実行前に、? valueCheck( String value ,int len ) が行われる?があります? 080 * 081 * @og.rev 3.5.4.5 (2004/01/23) エンコード指定に変更します? 082 * 083 * @param value ????埋めする?? 084 * @param sizeX 整数部????の長? 085 * @param sizeY 少数部????の長? 086 * @param encode 固定長で変換する?エンコー? 087 * 088 * @return ????埋めした新しい?? 089 */ 090 @Override 091 public String valueFill( final String value ,final int sizeX ,final int sizeY,final String encode ) { 092 093 NumberFormat format = NumberFormat.getInstance(); 094 format.setMinimumIntegerDigits( sizeX ); 095 format.setMinimumFractionDigits( sizeY ); 096 097 double dd = StringUtil.parseDouble( value ); 098 String rtn = format.format( dd ); 099 100 return rtn; 101 } 102 103 /** 104 * String引数の??を+1した文字?を返します? 105 * これは、英字?場?A,B,C など)は、B,C,D のように,?桁??コードを 106 * ??します? 107 * ??が数字タイプ?場合?, 数字に変換して?1 します?(桁上がりもあり) 108 * 混在タイプ?場合?,??桁だけを確認して ?1します? 109 * 引数?null の場合と、ゼロ??("")の場合?,物?初期設定?(String getDefault()) 110 * の値を返します? 111 * 112 * @og.rev 3.3.0.0 (2003/06/23) 値を+1して??を?Double から、BigDecimal に変更? 113 * 114 * @param value String引数の?? 115 * 116 * @return String引数の??を+1した文字? 117 */ 118 @Override 119 public String valueAdd( final String value ) { 120 if( value == null || value.length() == 0 ) { return getDefault(); } 121 BigDecimal val = new BigDecimal( value ).add( BigDecimal.ONE ); 122 return val.toString(); 123 } 124 125 /** 126 * String引数の??に、第?引数に????(数字?日付?を加算して返します? 127 * 128 * ここでは、少数??に、別の数字(少数も可?文字?を加算します? 129 * ?処?、BigDecimal を使用して?す? 130 * 131 * @og.rev 5.6.0.3 (2012/01/24) ADD に、引数の値を加算する機?を追?ます? 132 * 133 * @param value String引数 134 * @param add ?する数字文字? 135 * 136 * @return 引数の??に数字を?します? 137 */ 138 @Override 139 public String valueAdd( final String value,final String add ) { 140 if( value == null || value.length() == 0 ) { return getDefault(); } 141 142 BigDecimal addSu = BigDecimal.ONE; 143 if( add != null && !add.isEmpty() ) { 144 addSu = new BigDecimal( add ); 145 } 146 147 BigDecimal val = new BigDecimal( value ).add( addSu ); 148 return val.toString(); 149 } 150 151 /** 152 * エ?ターで編?れた??タを登録する場合に、データそ?も?? 153 * 変換して、実登録??タを作?します? 154 * 例えば,大??みのフィールドなら?大?化します? 155 * 実登録??タの作?は、DBType オブジェクトを利用します?で, 156 * これと Editor とがアンマッチ?場合?、うまくデータ変換 157 * されな?能性があります?で、注意願います? 158 * 159 * @og.rev 3.3.3.0 (2003/07/09) 前後?スペ?スを取り除?おく? 160 * @og.rev 3.3.3.1 (2003/07/18) 後ろスペ?スを取り除く?(StringUtil#rTrim) 161 * 162 * @param value (?に編?ータとして登録されたデータ) 163 * 164 * @return 修正後???(?に??タベ?スに登録する??タ) 165 */ 166 @Override 167 public String valueSet( final String value ) { 168 return StringUtil.deleteChar( StringUtil.rTrim( value ),',' ); 169 } 170 171 /** 172 * ??タが登録可能かど?をチェ?します? 173 * ??タがエラーの場合?、そのエラー?を返します? 174 * 175 * @og.rev 2.1.1.2 (2002/11/21) マイナス記号を含??合??桁数の設定を??する? 176 * @og.rev 2.3.1.4 (2003/02/18) 属?チェ?を強化した? 177 * @og.rev 3.6.0.0 (2004/09/22) dbType パラメータを引数に追? 178 * @og.rev 5.2.2.0 (2010/11/01) 厳?チェ?(isStrict=true)するフラグを追? 179 * 180 * @param key キー 181 * @param value 値 182 * @param sizeX 整数部????の長? 183 * @param sizeY 少数部????の長? 184 * @param typeParam dbType パラメータ 185 * @param isStrict 厳?チェ?するかど?[true:する/false:標準的] 186 * 187 * @return エラー? 188 */ 189 // public ErrorMessage valueCheck( final String key ,final String value , 190 // final int sizeX ,final int sizeY ,final String param ) { 191 @Override 192 public ErrorMessage valueCheck( final String key ,final String value , 193 final int sizeX ,final int sizeY ,final String typeParam ,final boolean isStrict) { 194 195 ErrorMessage msg = new ErrorMessage(); 196 if( value == null || value.length() == 0 ) { return msg; } 197 198 String check; 199 200 check = DBTypeCheckUtil.decimalFormatCheck( value ); 201 if( check != null ) { 202 // ???以外??が使われて?す? 203 msg.addMessage( 0,ErrorMessage.NG,"ERR0009", key,check ); 204 } 205 206 check = DBTypeCheckUtil.sizeXCheck( value ,sizeX ,sizeY ); 207 if( check != null ) { 208 // 整数部の長さが??長さよりも長?す? 209 msg.addMessage( 0, ErrorMessage.NG, "ERR0021", key, value, check, String.valueOf( sizeX ) ); 210 } 211 212 check = DBTypeCheckUtil.sizeYCheck( value ,sizeX ,sizeY ); 213 if( check != null ) { 214 // 少数部の長さが??長さよりも長?す? 215 msg.addMessage( 0,ErrorMessage.NG,"ERR0022", key, value, check, String.valueOf( sizeY ) ); 216 } 217 218 check = DBTypeCheckUtil.decimalPointCheck( value ); 219 if( check != null ) { 220 // 小数点の位置が不正です? 221 msg.addMessage( 0, ErrorMessage.NG, "ERR0024", key, check ); 222 } 223 224 check = DBTypeCheckUtil.decimalCodeCheck( value ); 225 if( check != null ) { 226 // 符号の位置が不正です? 227 msg.addMessage( 0, ErrorMessage.NG, "ERR0023", key, check ); 228 } 229 230 // 3.6.0.0 (2004/09/22) dbType パラメータを使用したマッチチェ? 231 check = DBTypeCheckUtil.matcheCheck( value,typeParam ); 232 if( check != null ) { 233 // ???以外??が使われて?す? 234 msg.addMessage( 0,ErrorMessage.NG,"ERR0009", key,check ); 235 } 236 237 return msg; 238 } 239 }