    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 */
    016package org.opengion.plugin.column;
    017
    018import org.opengion.fukurou.util.StringUtil;
    019import 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 *   機械品番(上記以外の品番)は、10桁目をﾘﾋﾞｼﾞｮﾝUPする。
    031 *       □□□-□□□□□-□■
    032 *   (0123456789ABCEFGHJKLMNPRSTUVWY)
    033 *
    034 * タイプチェックとして、以下の条件を判定します。
    035 * ・文字列長は、Byte換算での文字数との比較
    036 * ・半角文字列チェック「 c &lt; 0x20 || c &gt; 0x7e 以外」エラー
    037 * ・文字パラメータの 正規表現チェック
    038 * ・クロスサイトスクリプティングチェック
    039 *
    040 * @og.group データ属性
    041 *
    042 * @version  4.0
    043 * @author   Kazuhiko Hasegawa
    044 * @since    JDK5.0,
    045 */
    046public 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         *       機械品番(上記以外の品番)は、10桁目をﾘﾋﾞｼﾞｮﾝUPする。
    062         *       □□□-□□□□□-□■
    063         *
    064         * @og.rev 2.1.3.0 (2002/12/12) RevUP 対象でないコードをRevUPする場合の不具合対応
    065         *
    066         * @param       value   String引数の文字列
    067         *
    068         * @return  String引数の文字列を＋１した文字列
    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}