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 }