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    }