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 org.opengion.fukurou.util.ErrorMessage;
019 import org.opengion.fukurou.util.StringUtil;
020 import org.opengion.hayabusa.db.AbstractDBType;
021 import org.opengion.hayabusa.db.DBTypeCheckUtil;
022
023 /**
024 * åŠè§’æ•°å—ã? NUMBER を扱ã?‚ºã®ã€ã‚«ãƒ©ãƒ?±žæ?を定義ã—ã¾ã™ã?
025 *
026 * '0' ??'9' ,'-' ,'.',',' ã§ã®ã¿æ§‹æ?ã•れã¦ã?‚‹æ–?—型カラãƒ?±žæ?を定義ã—ã¾ã™ã?
027 * S9 ã¨ç•°ãªã‚Šã?カンãƒ?,'ãŒå«ã¾ã‚Œã¦ã?¦ã‚?OK ã¨ã—ã?ãƒ??ã‚¿ã‹ã‚‰ã‚‚å–り除ãã¾ã›ã‚“ã€?
028 *
029 * タイプãƒã‚§ãƒ?‚¯ã¨ã—ã¦ã€ä»¥ä¸‹ã?æ¡ä»¶ã‚’判定ã—ã¾ã™ã?
030 * ・?~9ã?マイナス(-)ã€å°æ•°ç‚¹(.)ãŠã‚ˆã³ã‚«ãƒ³ãƒ?,)を許å¯
031 * ・æ–?—å?ã®é•·ã•ãƒã‚§ãƒ?‚¯
032 * ãƒ»å°æ•°ç‚¹ã®ä½ç½®ãƒã‚§ãƒ?‚¯
033 * ・符å·ã®ä½ç½®ãƒã‚§ãƒ?‚¯
034 * ・æ–?—パラメータ㮠æ£è¦è¡¨ç¾ãƒã‚§ãƒ?‚¯
035 *
036 * @og.group ãƒ??タ属æ?
037 *
038 * @version 4.0
039 * @author Kazuhiko Hasegawa
040 * @since JDK5.0,
041 */
042 public class DBType_X9 extends AbstractDBType {
043 //* ã“ã?プãƒã‚°ãƒ©ãƒ??VERSIONæ–?—å?ã‚’è¨å®šã—ã¾ã™ã? {@value} */
044 private static final String VERSION = "5.2.2.0 (2010/11/01)" ;
045
046 /**
047 * åŠè§’ï¼æ–‡å—ã?固定長ã§FILL埋ã‚ã•ã‚ŒãŸæ–‡å—å?ã‚’è¿”ã—ã¾ã™ã?
048 * ãªãŠã?エラーãƒã‚§ãƒ?‚¯ã¯è¡Œã‚れã¾ã›ã‚“ã€?
049 * 実行å‰ã«ã€å¿?š valueCheck( String value ,int len ) ãŒè¡Œã‚れるå¿?¦ãŒã‚りã¾ã™ã?
050 *
051 * @og.rev 3.5.4.5 (2004/01/23) エンコード指定ã«å¤‰æ›´ã—ã¾ã™ã?
052 *
053 * @param value ?¦?©?¬?¬åŸ‹ã‚ã™ã‚‹æ–?—å?
054 * @param sizeX 整数部åˆ??æ–?—å?ã®é•·ã?
055 * @param sizeY 少数部åˆ??æ–?—å?ã®é•·ã?
056 * @param encode エンコード指�
057 *
058 * @return ?¦?©?¬?¬åŸ‹ã‚ã—ãŸæ–°ã—ã„æ–?—å?
059 */
060 @Override
061 public String valueFill( final String value ,final int sizeX ,final int sizeY,final String encode ) {
062 int len = (sizeY == 0) ? sizeX : sizeX + sizeY + 1;
063
064 // 注æ„?マイナス記å·ã®å‡¦ç?Œã¾ã?§ã™ã?
065 return StringUtil.intFill( value,len );
066 }
067
068 /**
069 * Stringå¼•æ•°ã®æ–?—å?を+1ã—ãŸæ–‡å—å?ã‚’è¿”ã—ã¾ã™ã?
070 * ã“れã¯ã€æ–‡å—型数å—タイプã?å ´åˆã?, マイナスã€ã‚«ãƒ³ãƒžã?ピリオドをé¿ã‘ã¦ã€?
071 * +1 ã—ã¾ã™ã?(æ¡ä¸ŠãŒã‚Šã‚‚ã‚り)
072 * ãƒ??ã‚¿ã®å€¤ãŒã?マイナスã®å ´åˆã?ã€çµæžœçš?«ãƒžã‚¤ãƒŠã‚¹ã—ã¦ã?ã¾ã™ã?
073 * カンマ編é›?12,345,678 ãªã©)ãŒã‚ã‚‹å?åˆã«ã€æ¡ä¸ŠãŒã‚Šã—ã¦ã‚‚ã?カンマã?追åŠ?•れã¾ã›ã‚“ã€?
074 * マイナス時ã?æ¡ä¸ŠãŒã‚Šã«ã¯ã€å¯¾å¿œã—ã¦ã?¾ã™ã?
075 * 引数ã?null ã®å ´åˆã¨ã€ã‚¼ãƒæ–?—å?("")ã®å ´åˆã?,物ç?š„åˆæœŸè¨å®šå?(String getDefault())
076 * ã®å€¤ã‚’è¿”ã—ã¾ã™ã?
077 *
078 * @param value Stringå¼•æ•°ã®æ–?—å?
079 *
080 * @return Stringå¼•æ•°ã®æ–?—å?を+1ã—ãŸæ–‡å—å?
081 */
082 @Override
083 public String valueAdd( final String value ) {
084 if( value == null || value.length() == 0 ) { return getDefault(); }
085 char[] chs = value.toCharArray() ;
086 boolean over = false;
087 for( int i=chs.length-1; i>=0; i-- ) {
088 if( chs[i] == '-' || chs[i] == '.' || chs[i] == ',' ) { continue; }
089 if( chs[i] == '9' ) { chs[i] = '0'; over = true; }
090 else { chs[i]++; over = false; break; }
091 }
092 if( over ) {
093 char[] chs2 = new char[ chs.length + 1 ];
094 System.arraycopy( chs,0,chs2,1,chs.length );
095 if( chs[0] == '-' ) {
096 chs2[0] = '-';
097 chs2[1] = '1';
098 }
099 else {
100 chs2[0] = '1';
101 }
102 chs = chs2;
103 }
104 return new String( chs );
105 }
106
107 /**
108 * エãƒ?‚£ã‚¿ãƒ¼ã§ç·¨é›?•れãŸãƒ??タを登録ã™ã‚‹å ´åˆã«ã€ãƒ‡ãƒ¼ã‚¿ãã?ã‚‚ã?ã‚?
109 * 変æ›ã—ã¦ã€å®Ÿç™»éŒ²ãƒ??タを作æ?ã—ã¾ã™ã?
110 * 例ãˆã°,大æ–?—ã?ã¿ã®ãƒ•ィールドãªã‚‰ã?大æ–?—化ã—ã¾ã™ã?
111 * 実登録ãƒ??ã‚¿ã®ä½œæ?ã¯ã€DBType オブジェクトを利用ã—ã¾ã™ã?ã§,
112 * ã“れ㨠Editor ã¨ãŒã‚¢ãƒ³ãƒžãƒƒãƒã?å ´åˆã?ã€ã†ã¾ãデータ変æ›
113 * ã•れãªã?¯èƒ½æ€§ãŒã‚りã¾ã™ã?ã§ã€æ³¨æ„願ã„ã¾ã™ã?
114 *
115 * @og.rev 3.3.3.0 (2003/07/09) å‰å¾Œã?スペã?スをå–り除ã?¦ãŠãã€?
116 * @og.rev 3.3.3.1 (2003/07/18) 後ã‚スペã?スをå–り除ãã?(StringUtil#rTrim)
117 *
118 * @param value (ä¸?ˆ¬ã«ç·¨é›?ƒ‡ãƒ¼ã‚¿ã¨ã—ã¦ç™»éŒ²ã•れãŸãƒ‡ãƒ¼ã‚¿)
119 *
120 * @return ä¿®æ£å¾Œã?æ–?—å?(ä¸?ˆ¬ã«ãƒ??タベã?スã«ç™»éŒ²ã™ã‚‹ãƒ??ã‚¿)
121 */
122 @Override
123 public String valueSet( final String value ) {
124 return StringUtil.rTrim( value ) ;
125 }
126
127 /**
128 * ãƒ??ã‚¿ãŒç™»éŒ²å¯èƒ½ã‹ã©ã?‹ã‚’ãƒã‚§ãƒ?‚¯ã—ã¾ã™ã?
129 * ãƒ??ã‚¿ãŒã‚¨ãƒ©ãƒ¼ã®å ´åˆã?ã€ãã®ã‚¨ãƒ©ãƒ¼å†?®¹ã‚’è¿”ã—ã¾ã™ã?
130 * 許å¯ã™ã‚‹æ–?—ã?ã€?-9 ã®æ•°å—ã?マイナス(-) ã€å°æ•°ç‚¹(.)ã§ã™ã?
131 * å°æ•°ç‚¹ã®ä½ç½®ãƒã‚§ãƒ?‚¯ã¯è¡Œã„ã¾ã›ã‚“ã€?
132 *
133 * @og.rev 2.3.1.4 (2003/02/18) 属æ?ãƒã‚§ãƒ?‚¯ã‚’強化ã—ãŸã?
134 * @og.rev 3.6.0.0 (2004/09/22) ãƒã‚§ãƒ?‚¯é ?›®ã¯ã€æ•°å—を許å¯ã™ã‚‹æ–?—å?ã¨ã™ã‚‹ã€?
135 * @og.rev 3.6.0.0 (2004/09/22) dbType パラメータを引数ã«è¿½åŠ?
136 * @og.rev 5.2.2.0 (2010/11/01) 厳å¯?«ãƒã‚§ãƒ?‚¯(isStrict=true)ã™ã‚‹ãƒ•ラグを追åŠ?
137 *
138 * @param key ã‚ー
139 * @param value 値
140 * @param sizeX 整数部åˆ??æ–?—å?ã®é•·ã?
141 * @param sizeY 少数部åˆ??æ–?—å?ã®é•·ã?
142 * @param typeParam dbType パラメータ
143 * @param isStrict 厳å¯?«ãƒã‚§ãƒ?‚¯ã™ã‚‹ã‹ã©ã?‹[true:ã™ã‚‹/false:標準的]
144 *
145 * @return エラーå†?®¹
146 */
147 // public ErrorMessage valueCheck( final String key ,final String value ,
148 // final int sizeX ,final int sizeY ,final String param ) {
149 @Override
150 public ErrorMessage valueCheck( final String key ,final String value ,
151 final int sizeX ,final int sizeY ,final String typeParam ,final boolean isStrict) {
152
153 ErrorMessage msg = new ErrorMessage();
154 if( value == null || value.length() == 0 ) { return msg; }
155
156 // ãƒã‚§ãƒ?‚¯ç”¨ã®value を用æ„ã—ã¾ã™ã?カンãƒ?,)ã‚’å–り除ã?¦ãŠã為ã§ã™ã?
157 String tmpValue = StringUtil.deleteChar(value,',' );
158 String check;
159
160 // 3.6.0.0 (2004/09/22) ãƒã‚§ãƒ?‚¯å†?®¹å¤‰æ›´
161 check = DBTypeCheckUtil.decimalFormatCheck( tmpValue );
162 if( check != null ) {
163 // æŒ?®šã?æ–?—以外ã?æ–?—ãŒä½¿ã‚れã¦ã?¾ã™ã?
164 msg.addMessage( 0,ErrorMessage.NG,"ERR0009", key,check );
165 }
166
167 check = DBTypeCheckUtil.decimalCodeCheck( tmpValue );
168 if( check != null ) {
169 // 符å·ã®ä½ç½®ãŒä¸æ£ã§ã™ã?
170 msg.addMessage( 0, ErrorMessage.NG, "ERR0023", key, check );
171 }
172
173 // 3.6.0.0 (2004/09/22) 追�
174 check = DBTypeCheckUtil.decimalPointCheck( tmpValue );
175 if( check != null ) {
176 // å°æ•°ç‚¹ã®ä½ç½®ãŒä¸æ£ã§ã™ã?
177 msg.addMessage( 0, ErrorMessage.NG, "ERR0024", key, check );
178 }
179
180 // 3.6.0.0 (2004/09/22) dbType パラメータを使用ã—ãŸãƒžãƒƒãƒãƒã‚§ãƒ?‚¯
181 check = DBTypeCheckUtil.matcheCheck( tmpValue,typeParam );
182 if( check != null ) {
183 // æŒ?®šã?æ–?—以外ã?æ–?—ãŒä½¿ã‚れã¦ã?¾ã™ã?
184 msg.addMessage( 0,ErrorMessage.NG,"ERR0009", key,check );
185 }
186
187 return msg;
188 }
189 }