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     * Unicodeæ–?­—å?の値ã‚?HTML のエスケープ記号(&#xZZZZ;)に変換する、カラãƒ?±žæ?を定義しますã?
023     *
024     * SJIS(JA16SJIS) で作æ?されたデータベã?スにã€?NVARCHAR2)を使用して中国語等を登録するのは
025     * 非常にè¤?›‘でかつ、リスクが大きい処ç�?�«なりますã?
026     * ORACLE殿でもã?自信を持っては勧められなã�?©Ÿè?とのコメントを頂いてã�?�¾すã?
027     * そこで、HTMLでのエスケープ文字を使用して、Unicodeを文字å?化して登録する為の
028     * DBType として、新規に作æ?しますã?
029     * ここでは、å?力文字を、キャラクタ(char)型にåˆ?§£しã?(&#xZZZZ;)に変換してã�?��ますã?
030     * よってã€??常に?‘文å­?Shift-JISで?’Byte,UTF-8で?“Byte)がã??˜Byteになりますã?
031     * こã?変換された文字å?をã?HTML上でそã?まま取り出すと、å?のUnicodeæ–?­—に戻る為ã€?
032     * 通常のShift-JISでは、扱えなã�?–‡å­?中国語など)でも表示可能になりますã?
033     *
034     * (NVARCHAR2)を使用して中国語等を登録する場合ã?æ–?­—コード変換
035     *
036     * APレイヤ     ネットレイヤ                        DBレイヤ
037     * æ–?­—å?åŠ? â†?全てDBのCHARセãƒ?ƒˆに変換  â†? NCHARのåˆ?� けUTFに変換
038     * (UTF)      (S-jis)                         (UTF)
039     *
040     * タイプチェãƒ?‚¯は、HTMLのエスケープ記号(&#xZZZZ;)に変換後に実施されますã?
041     * ãƒ??タベã?スへの登録には、半角英数字になりますã?
042     * ・æ–?­—å?長は、Byte換算でのæ–?­—数との比è¼?
043     * ・半角文字å?チェãƒ?‚¯ã€?c < 0x20 || c > 0x7e 以外ã?エラー
044     * ・æ–?­—パラメータの 正規表現チェãƒ?‚¯
045     * ・クロスサイトスクリプティングチェãƒ?‚¯
046     *
047     * @og.rev 3.8.0.0 (2005/06/07) 新規作æ?
048     * @og.group ãƒ??タ属æ?
049     *
050     * @version  4.0
051     * @author       Kazuhiko Hasegawa
052     * @since    JDK5.0,
053     */
054    public class DBType_NVAR extends AbstractDBType {
055            //* こã?プログラãƒ??VERSIONæ–?­—å?を設定しますã?       {@value} */
056            private static final String VERSION = "4.0.0.0 (2005/08/31)" ;
057    
058            /**
059             * 半角0文字ã?固定長でFILL埋めされた文字å?を返しますã?
060             * なおã?エラーチェãƒ?‚¯は行われませんã€?
061             * 実行前に、å¿?�š valueCheck( String value ,int len ) が行われるå¿?¦�がありますã?
062             *
063             * @param       value    ?¦?©?¬?¬埋めするæ–?­—å?
064             * @param       sizeX    整数部åˆ??æ–?­—å?の長ã�?
065             * @param       sizeY    少数部åˆ??æ–?­—å?の長ã�?
066             * @param       encode   エンコード指å®?
067             *
068             * @return      ?¦?©?¬?¬埋めした新しいæ–?­—å?
069             */
070            @Override
071            public String valueFill( final String value ,final int sizeX ,final int sizeY,final String encode ) {
072                    return valueSet( super.valueFill( value,sizeX,sizeY,encode ) );
073            }
074    
075            /**
076             * String引数のæ–?­—å?を+1した文字å?を返しますã?
077             * これは、英字ã?場å�?A,B,C など)は、B,C,D のように,æœ?µ‚桁ã?æ–?­—コードを
078             * ?‹ï¼?しますã?
079             * æ–?­—å?が数字タイプã?場合ã?, 数字に変換してã€?1 しますã?(桁上がりもあり)
080             * 混在タイプã?場合ã?,æœ?¾Œã?桁だけを確認して ?‹1しますã?
081             * 引数ã�?null の場合と、ゼロæ–?­—å?("")の場合ã?,物ç�?š„初期設定å?(String getDefault())
082             * の値を返しますã?
083             *
084             * @param       value   String引数のæ–?­—å?
085             *
086             * @return      String引数のæ–?­—å?を+1した文字å?
087             */
088            @Override
089            public String valueAdd( final String value ) {
090                    return valueSet( super.valueAdd( value ) );
091            }
092    
093            /**
094             * エãƒ?‚£ターで編é›?�•れたãƒ??タを登録する場合に、データそã?もã?ã‚?
095             * 変換して、実登録ãƒ??タを作æ?しますã?
096             * 例えば,大æ–?­—ã?みのフィールドならã?大æ–?­—化しますã?
097             * 実登録ãƒ??タの作æ?は、DBType オブジェクトを利用しますã?で,
098             * これと Editor とがアンマッチã?場合ã?、うまくデータ変換
099             * されなã�?�¯能性がありますã?で、注意願いますã?
100             *
101             * @param       value   (ä¸?ˆ¬に編é›?ƒ‡ータとして登録されたデータ)
102             *
103             * @return      修正後ã?æ–?­—å?(ä¸?ˆ¬にãƒ??タベã?スに登録するãƒ??タ)
104             */
105            @Override
106            public String valueSet( final String value ) {
107                    return StringUtil.getUnicodeEscape( value );
108            }
109    }