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 }