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 }