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.StringUtil;
019    import org.opengion.hayabusa.db.AbstractDBType;
020    
021    /**
022     * æƒ??機器事業部å‘ã‘ã€å“番æƒ??ã®æ–?­—å?を扱ã?‚ºã®ã€ã‚«ãƒ©ãƒ?±žæ?を定義ã—ã¾ã™ã?
023     *
024     * å“番æƒ??ã¯ã€?¼????“å“番æƒ??ã¨ã—ã¦æ‰±ã‚れã¾ã™ã?ã¾ãŸã?ãれãžã‚Œã®ãƒ•ィールドã«ãŠã„ã¦ã€?
025     * 使用å¯èƒ½æ–?­?例ãˆã°ã€Revæ–?­—å?ã®åˆ¶é™?ãªã©ã‚’è?æ…®ã—ã¦ã?¾ã™ã?
026     *
027     *   電気å“番(1æ¡ç›®ã?D' 5æ¡ç›®ã?8'OR'9')ã¯ã€ä¸?•ªæœ?¾Œã?æ¡ã‚’?˜ï¾‹ï¾žï½¼?žï½®?UP
028     *   (ABCEFGHJKLMNPRSTUVWY)
029     *       â–¡â–¡â–¡-â–¡â–¡â–¡â–¡â–¡-â–¡â–¡â–?
030     *   機械å“番(上記以外ã?å“番)ã¯ã€?0æ¡ç›®ã‚’リビシ?žï½®?UPã™ã‚‹ã€?
031     *       â–¡â–¡â–¡-â–¡â–¡â–¡â–¡â–¡-â–¡â–?
032     *   (0123456789ABCEFGHJKLMNPRSTUVWY)
033     *
034     * タイプãƒã‚§ãƒ?‚¯ã¨ã—ã¦ã€ä»¥ä¸‹ã?æ¡ä»¶ã‚’判定ã—ã¾ã™ã?
035     * ・æ–?­—å?é•·ã¯ã€Byteæ›ç®—ã§ã®æ–?­—æ•°ã¨ã®æ¯”è¼?
036     * ・åŠè§’文字å?ãƒã‚§ãƒ?‚¯ã€?c < 0x20 || c > 0x7e 以外ã?エラー
037     * ・æ–?­—パラメータ㮠正è¦è¡¨ç¾ãƒã‚§ãƒ?‚¯
038     * ・クロスサイトスクリプティングãƒã‚§ãƒ?‚¯
039     *
040     * @og.group ãƒ??タ属æ?
041     *
042     * @version  4.0
043     * @author   Kazuhiko Hasegawa
044     * @since    JDK5.0,
045     */
046    public class DBType_PN extends AbstractDBType {
047            //* ã“ã?プログラãƒ??VERSIONæ–?­—å?を設定ã—ã¾ã™ã?       {@value} */
048            private static final String VERSION = "4.0.0.0 (2005/08/31)" ;
049    
050            private static final String DENKI_REV = "ABCEFGHJKLMNPRSTUVWY";
051            private static final String KIKAI_REV = "0123456789ABCEFGHJKLMNPRSTUVWY";
052    
053            /**
054             * 製é€?“番ã®Rev ã‚?UPã—ãŸæ–?­—å?ã‚’è¿”ã—ã¾ã™ã?
055             * 引数ã?null ã€ã‚¼ãƒ­æ–?­—å?("")ã€ã?å ´åˆã?,物ç?š„åˆæœŸè¨­å®šå?
056             * (String getDefault())ã®å€¤ã‚’è¿”ã—ã¾ã™ã?
057             * 10æ¡æœªæº??購入å“?Zå“番)ã€RevUPã§ããªã??åˆã?,ãã?ã¾ã¾ã®å“番を返ã—ã¾ã™ã?
058             *
059             * ä½?—ã€?›»æ°—å“番(1æ¡ç›®ã?D' 5æ¡ç›®ã?8'OR'9')ã¯ã€ä¸?•ªæœ?¾Œã?æ¡ã‚’?˜ï¾‹ï¾žï½¼?žï½®?UP
060             *       â–¡â–¡â–¡-â–¡â–¡â–¡â–¡â–¡-â–¡â–¡â–?
061             *       機械å“番(上記以外ã?å“番)ã¯ã€?0æ¡ç›®ã‚’リビシ?žï½®?UPã™ã‚‹ã€?
062             *       â–¡â–¡â–¡-â–¡â–¡â–¡â–¡â–¡-â–¡â–?
063             *
064             * @og.rev 2.1.3.0 (2002/12/12) RevUP 対象ã§ãªã?‚³ãƒ¼ãƒ‰ã‚’RevUPã™ã‚‹å ´åˆã?ä¸å?åˆå¯¾å¿?
065             *
066             * @param       value   Stringå¼•æ•°ã®æ–?­—å?
067             *
068             * @return  Stringå¼•æ•°ã®æ–?­—å?を+1ã—ãŸæ–‡å­—å?
069             */
070            @Override
071            public String valueAdd( final String value ) {
072                    if( value == null || value.length() == 0 ) { return getDefault(); }
073                    if( value.length() < 10 || value.charAt(0) == 'Z' ) { return value; }
074    
075                    char[] ch = value.toCharArray();
076    
077                    // 電気å“番ã®å ´å?
078                    if( ch[0] == 'D' && ( ch[4] == '8' || ch[4] == '9' ) ) {
079                            if( value.length() < 11 ) { return value; }                          // 2002.07.12
080                            int pos = DENKI_REV.indexOf( (int)ch[10] );
081                            if( pos >= 0 ) { ch[10] = DENKI_REV.charAt( pos+1 ); }
082                            else {           ch[10] ++ ;                         }  // 2.1.3.0 追�
083                    }
084                    else {
085                            int pos = KIKAI_REV.indexOf( (int)ch[9] );
086                            if( pos >= 0 ) { ch[9] = KIKAI_REV.charAt( pos+1 ); }
087                            else {           ch[9] ++ ;                         }   // 2.1.3.0 追�
088                    }
089    
090                    return new String( ch );
091            }
092    
093            /**
094             * エãƒ?‚£ã‚¿ãƒ¼ã§ç·¨é›?•れãŸãƒ??タを登録ã™ã‚‹å ´åˆã«ã€ãƒ‡ãƒ¼ã‚¿ãã?ã‚‚ã?ã‚?
095             * 変æ›ã—ã¦ã€å®Ÿç™»éŒ²ãƒ??タを作æ?ã—ã¾ã™ã?
096             * ãƒ??ã‚¿ã®è¡¨ç¤ºç”¨æ–?­—å?ã‚’è¿”ã—ã¾ã™ã?
097             * XXX-XXXXX-XXX å½¢å¼ã§å…¥åŠ›ã•ã‚ŒãŸæƒ??ã‚’ã?XXXXXXXXXXX å½¢å¼ã§è¡¨ç¤ºã—ã¾ã™ã?
098             * ã‚«ãƒ?ƒˆ???ースト対策ã§ã™ã?
099             *
100             * @og.rev 3.8.6.1 (2006/10/24) æ–°è¦è¿½åŠ?
101             *
102             * @param       value   (ä¸?ˆ¬ã«ç·¨é›?ƒ‡ãƒ¼ã‚¿ã¨ã—ã¦ç™»éŒ²ã•れãŸãƒ‡ãƒ¼ã‚¿)
103             *
104             * @return  修正後ã?æ–?­—å?(ä¸?ˆ¬ã«ãƒ??タベã?スã«ç™»éŒ²ã™ã‚‹ãƒ??ã‚¿)
105             */
106            @Override
107            public String valueSet( final String value ) {
108                    String newVal = StringUtil.rTrim( value );
109    
110                    if( newVal != null && newVal.indexOf( '-' ) >= 0 ) {
111                            newVal = StringUtil.replace( newVal,"-","" );
112                    }
113    
114                    return newVal;
115            }
116    }