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.model.NativeType;
019    import org.opengion.fukurou.util.ErrorMessage;
020    import org.opengion.fukurou.util.StringUtil;
021    import org.opengion.hayabusa.db.AbstractDBType;
022    import org.opengion.hayabusa.db.DBTypeCheckUtil;
023    
024    /**
025     * åŠè§’æ•°å­—ã? NUMBER を扱ã?‚ºã®ã€ã‚«ãƒ©ãƒ?±žæ?を定義ã—ã¾ã™ã?
026     *
027     * '0' ??'9' ,'-' ã§ã®ã¿æ§‹æ?ã•れã¦ã?‚‹æ•°å­—型カラãƒ?±žæ?を定義ã—ã¾ã™ã?
028     * ã•らã«ã€ã‚«ãƒ³ãƒ?,'ãŒå«ã¾ã‚Œã¦ã?¦ã‚?OK ã¨ã—ã¾ã™ã?ãŸã ã—ã?ãƒ??ã‚¿ã‹ã‚‰ã¯å–り除ãã¾ã™ã?
029     *
030     * タイプãƒã‚§ãƒ?‚¯ã¨ã—ã¦ã€ä»¥ä¸‹ã?æ¡ä»¶ã‚’判定ã—ã¾ã™ã?
031     * ・?~9ãŠã‚ˆã?マイナス(-)を許å¯
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_S9 extends AbstractDBType {
043            //* ã“ã?プログラãƒ??VERSIONæ–?­—å?を設定ã—ã¾ã™ã?       {@value} */
044            private static final String VERSION = "5.6.0.3 (2012/01/24)" ;
045    
046            private static final String DEF_VALUE = "0" ;           // ãƒ??ã‚¿ã®ãƒ?ƒ•ォルトå?
047    
048            /**
049             * ãƒ?ƒ•ォルトコンストラクター
050             *
051             * @og.rev 4.0.0.0 (2005/01/31) type å»?­¢
052             */
053            public DBType_S9() {
054                    super( DEF_VALUE );
055            }
056    
057            /**
058             * NATIVEã®åž‹ã?識別コードを返ã—ã¾ã™ã?
059             *
060             * @og.rev 3.5.4.7 (2004/02/06) æ–°è¦ä½œæ?
061             * @og.rev 4.1.1.2 (2008/02/28) Enumåž?fukurou.model.NativeType)ã«å¤‰æ›´
062             *
063             * @return  NATIVEã®åž‹ã?識別コーãƒ?DBType ã§è¦å®?
064             * @see org.opengion.fukurou.model.NativeType
065             */
066            @Override
067            public NativeType getNativeType() {
068                    return NativeType.INT;
069            }
070    
071            /**
072             * åŠè§’ï¼æ–‡å­—ã?固定長ã§FILL埋ã‚ã•ã‚ŒãŸæ–‡å­—å?ã‚’è¿”ã—ã¾ã™ã?
073             * ãªãŠã?エラーãƒã‚§ãƒ?‚¯ã¯è¡Œã‚れã¾ã›ã‚“ã€?
074             * 実行å‰ã«ã€å¿?š valueCheck( String value ,int len ) ãŒè¡Œã‚れるå¿?¦ãŒã‚りã¾ã™ã?
075             *
076             * @og.rev 3.5.4.5 (2004/01/23) エンコード指定ã«å¤‰æ›´ã—ã¾ã™ã?
077             *
078             * @param       value    ?¦?©?¬?¬åŸ‹ã‚ã™ã‚‹æ–?­—å?
079             * @param       sizeX    整数部åˆ??æ–?­—å?ã®é•·ã?
080             * @param       sizeY    少数部åˆ??æ–?­—å?ã®é•·ã?
081             * @param   encode   固定長ã§å¤‰æ›ã™ã‚‹æ–?­—エンコーãƒ?
082             *
083             * @return      ?¦?©?¬?¬åŸ‹ã‚ã—ãŸæ–°ã—ã„æ–?­—å?
084             */
085            @Override
086            public String valueFill( final String value ,final int sizeX ,final int sizeY,final String encode ) {
087                    int len = (sizeY == 0) ? sizeX : sizeX + sizeY + 1;
088    
089                    // 注æ„?マイナス記å·ã®å‡¦ç?Œã¾ã?§ã™ã?
090                    return StringUtil.intFill( value,len );
091            }
092    
093            /**
094             * Stringå¼•æ•°ã®æ–?­—å?を+1ã—ãŸæ–‡å­—å?ã‚’è¿”ã—ã¾ã™ã?
095             * ã“れã¯ã€è‹±å­—ã?å ´å?A,B,C ãªã©)ã¯ã€B,C,D ã®ã‚ˆã†ã«,æœ?µ‚æ¡ã?æ–?­—コードを
096             * ?‹ï¼?ã—ã¾ã™ã?
097             * æ–?­—å?ãŒæ•°å­—タイプã?å ´åˆã?, æ•°å­—ã«å¤‰æ›ã—ã¦ã€?1 ã—ã¾ã™ã?(æ¡ä¸ŠãŒã‚Šã‚‚ã‚り)
098             * 混在タイプã?å ´åˆã?,æœ?¾Œã?æ¡ã ã‘を確èªã—㦠?‹ï¼‘ã—ã¾ã™ã?
099             * 引数ã?null ã®å ´åˆã¨ã€ã‚¼ãƒ­æ–?­—å?("")ã®å ´åˆã?,物ç?š„åˆæœŸè¨­å®šå?(String getDefault())
100             * ã®å€¤ã‚’è¿”ã—ã¾ã™ã?
101             *
102             * @og.rev 4.0.0.0 (2005/01/31) Integer â‡?Long ã«å¤‰æ›´
103             *
104             * @param       value   Stringå¼•æ•°ã®æ–?­—å?
105             *
106             * @return      Stringå¼•æ•°ã®æ–?­—å?を+1ã—ãŸæ–‡å­—å?
107             */
108            @Override
109            public String valueAdd( final String value ) {
110                    if( value == null || value.length() == 0 ) { return getDefault(); }
111                    long val = Long.parseLong( value ) ;
112    
113                    return ( String.valueOf( val + 1L ) );
114            }
115    
116            /**
117             * Stringå¼•æ•°ã®æ–?­—å?ã«ã€ç¬¬?’å¼•æ•°ã«æŒ?®šã?æ–?­—å?(æ•°å­—ã?日付ç­?を加算ã—ã¦è¿”ã—ã¾ã™ã?
118             *
119             * ã“ã“ã§ã¯ã€æ•°å­—文字å?ã«ã€åˆ¥ã®æ•°å­—文字å?を加算ã—ã¾ã™ã?
120             * å†?ƒ¨å‡¦ç?«ã€long を使用ã—ã¦ã?¾ã™ã?
121             *
122             * @og.rev 5.6.0.3 (2012/01/24) ADD ã«ã€å¼•æ•°ã®å€¤ã‚’加算ã™ã‚‹æ©Ÿè?を追åŠ?—ã¾ã™ã?
123             *
124             * @param   value  String引数
125             * @param   add    åŠ?®—ã™ã‚‹æ•°å­—文字å?
126             *
127             * @return  å¼•æ•°ã®æ–?­—å?ã«æ•°å­—ã‚’åŠ?®—ã—ã¾ã™ã?
128             */
129            @Override
130            public String valueAdd( final String value,final String add ) {
131                    if( value == null || value.length() == 0 ) { return getDefault(); }
132    
133                    long addSu = 1L;
134                    if( add != null && !add.isEmpty() ) {
135                            addSu = Long.parseLong( add );
136                    }
137    
138                    long val = Long.parseLong( value ) + addSu ;
139    
140                    return String.valueOf( val );
141            }
142    
143            /**
144             * エãƒ?‚£ã‚¿ãƒ¼ã§ç·¨é›?•れãŸãƒ??タを登録ã™ã‚‹å ´åˆã«ã€ãƒ‡ãƒ¼ã‚¿ãã?ã‚‚ã?ã‚?
145             * 変æ›ã—ã¦ã€å®Ÿç™»éŒ²ãƒ??タを作æ?ã—ã¾ã™ã?
146             * 例ãˆã°,大æ–?­—ã?ã¿ã®ãƒ•ィールドãªã‚‰ã?大æ–?­—化ã—ã¾ã™ã?
147             * 実登録ãƒ??ã‚¿ã®ä½œæ?ã¯ã€DBType オブジェクトを利用ã—ã¾ã™ã?ã§,
148             * ã“れ㨠Editor ã¨ãŒã‚¢ãƒ³ãƒžãƒƒãƒã?å ´åˆã?ã€ã†ã¾ãデータ変æ›
149             * ã•れãªã?¯èƒ½æ€§ãŒã‚りã¾ã™ã?ã§ã€æ³¨æ„願ã„ã¾ã™ã?
150             *
151             * @og.rev 3.3.3.0 (2003/07/09) å‰å¾Œã?スペã?スをå–り除ã?¦ãŠãã€?
152             * @og.rev 3.3.3.1 (2003/07/18) 後ã‚スペã?スをå–り除ãã?(StringUtil#rTrim)
153             * @og.rev 3.8.5.3 (2006/08/07) å…ˆé?ゼロサプレス処ç?‚’行ã„ã¾ã™ã?
154             *
155             * @param       value   (ä¸?ˆ¬ã«ç·¨é›?ƒ‡ãƒ¼ã‚¿ã¨ã—ã¦ç™»éŒ²ã•れãŸãƒ‡ãƒ¼ã‚¿)
156             *
157             * @return      修正後ã?æ–?­—å?(ä¸?ˆ¬ã«ãƒ??タベã?スã«ç™»éŒ²ã™ã‚‹ãƒ??ã‚¿)
158             */
159            @Override
160            public String valueSet( final String value ) {
161                    if( value == null || value.length() == 0 ) { return ""; }
162                    return StringUtil.lTrim0( StringUtil.deleteChar( value,',' ) );
163            }
164    
165            /**
166             * ãƒ??ã‚¿ãŒç™»éŒ²å¯èƒ½ã‹ã©ã?‹ã‚’ãƒã‚§ãƒ?‚¯ã—ã¾ã™ã?
167             * ãƒ??ã‚¿ãŒã‚¨ãƒ©ãƒ¼ã®å ´åˆã?ã€ãã®ã‚¨ãƒ©ãƒ¼å†?®¹ã‚’è¿”ã—ã¾ã™ã?
168             *
169             * @og.rev 2.3.1.4 (2003/02/18) 属æ?ãƒã‚§ãƒ?‚¯ã‚’強化ã—ãŸã?
170             * @og.rev 3.6.0.0 (2004/09/22) dbType パラメータを引数ã«è¿½åŠ?
171             * @og.rev 5.2.2.0 (2010/11/01) 厳å¯?«ãƒã‚§ãƒ?‚¯(isStrict=true)ã™ã‚‹ãƒ•ラグを追åŠ?
172             *
173             * @param   key         キー
174             * @param   value       値
175             * @param   sizeX       整数部åˆ??æ–?­—å?ã®é•·ã?
176             * @param   sizeY       少数部åˆ??æ–?­—å?ã®é•·ã?
177             * @param   typeParam   dbType パラメータ
178             * @param   isStrict    厳å¯?«ãƒã‚§ãƒ?‚¯ã™ã‚‹ã‹ã©ã?‹[true:ã™ã‚‹/false:標準的]
179             *
180             * @return  エラーå†?®¹
181             */
182    //      public ErrorMessage valueCheck( final String key ,final String value ,
183    //                                                                      final int sizeX ,final int sizeY ,final String param ) {
184            @Override
185            public ErrorMessage valueCheck( final String key ,final String value ,
186                                                                            final int sizeX ,final int sizeY ,final String typeParam ,final boolean isStrict) {
187    
188                    ErrorMessage msg = new ErrorMessage();
189                    if( value == null || value.length() == 0 ) { return msg; }
190    
191                    String check;
192    
193                    check = DBTypeCheckUtil.numberFormatCheck( value );
194                    if( check != null ) {
195                            // æŒ?®šã?æ–?­—以外ã?æ–?­—ãŒä½¿ã‚れã¦ã?¾ã™ã?
196                            msg.addMessage( 0,ErrorMessage.NG,"ERR0009", key,check );
197                    }
198    
199                    check = DBTypeCheckUtil.sizeXCheck( value ,sizeX ,sizeY );
200                    if( check != null ) {
201                            // æ–?­—å?ã®é•·ã•ãŒæŒ?®šã?é•·ã•よりも長ã?§ã™ã?
202                            msg.addMessage( 0, ErrorMessage.NG, "ERR0006", key, value, check, String.valueOf( sizeX ) );
203                    }
204    
205                    check = DBTypeCheckUtil.decimalCodeCheck( value );
206                    if( check != null ) {
207                            // 符å·ã®ä½ç½®ãŒä¸æ­£ã§ã™ã?
208                            msg.addMessage( 0, ErrorMessage.NG, "ERR0023", key, check );
209                    }
210    
211                    // 3.6.0.0 (2004/09/22) dbType パラメータを使用ã—ãŸãƒžãƒƒãƒãƒã‚§ãƒ?‚¯
212                    check = DBTypeCheckUtil.matcheCheck( value,typeParam );
213                    if( check != null ) {
214                            // æŒ?®šã?æ–?­—以外ã?æ–?­—ãŒä½¿ã‚れã¦ã?¾ã™ã?
215                            msg.addMessage( 0,ErrorMessage.NG,"ERR0009", key,check );
216                    }
217    
218                    return msg;
219            }
220    }