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 }