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 }