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.fukurou.util; 017 018 019/** 020 * 個々のエラーメッセージを持っておくためのオブジェクトです。 021 * このオブジェクトは、不変オブジェクトです。 022 * 内部には、行番号とIDと結果と、メッセージリソースで使用される引数を持っています。 023 * 結果は 0:正常 1:警告 2:異常 8:EXCEPTION 9:ORACLEエラーで、 024 * ErrorMessageクラスの public static 変数で定義されている値を使用します。 025 * 026 * @og.group エラー処理 027 * 028 * @version 4.0 029 * @author Kazuhiko Hasegawa 030 * @since JDK5.0, 031 */ 032public final class ErrMsg { 033 /** バッファの初期容量を通常より多い目に設定します。 {@value} */ 034 public static final int BUFFER_MIDDLE = 200; // 5.1.9.0 (2010/08/01) 追加 035 036 private final int no; // 行番号 037 private final int kekka; // 結果 0:正常 1:警告 2:異常 8:EXCEPTION 9:ORACLEエラー 038 private final String id; // メッセージID 039 private final String[] args ; // メッセージの引数配列 040 private final String pg; // PG名 3.8.9.5 (2007/09/12) 041 private final String step; // ステップ名 3.8.9.5 (2007/09/12) 042 043 /** 044 * 必要な引数をすべて設定して、ErrMsg オブジェクトを構築します。 045 * 046 * @param no 行番号 047 * @param kekka 結果 0:正常 1:警告 2:異常 8:EXCEPTION 9:ORACLEエラー 048 * @param pg PG名 049 * @param step STEP名 050 * @param id メッセージID 051 * @param inArgs String... メッセージIDの引数 052 */ 053 public ErrMsg( final int no,final int kekka, 054 final String pg,final String step, 055 final String id,final String... inArgs) { 056 this.no = no; 057 this.kekka = kekka; 058 this.id = id; 059 int cnt = inArgs.length; 060 args = new String[cnt]; 061 for( int i=0; i<cnt; i++ ) { 062 args[i] = argIn( inArgs[i] ); 063 } 064 this.pg = pg; // 3.8.9.5 (2007/09/12) 065 this.step = step; // 3.8.9.5 (2007/09/12) 066 } 067 068 /** 069 * 行番号のみ異なる、新しい ErrMsg オブジェクトを作成します。 070 * 071 * @param newNo 行番号 072 * 073 * @return 行番号のみ異なる、新しい ErrMsgオブジェクト 074 */ 075 public ErrMsg copy( final int newNo ) { 076 return new ErrMsg( newNo,kekka,pg,step,id,args ); 077 } 078 079 /** 080 * 行番号を返します。 081 * 082 * @return 行番号 083 */ 084 public int getNo() { return no; } 085 086 /** 087 * 結果を返します。 088 * 089 * @return 結果 0:正常 1:警告 2:異常 8:EXCEPTION 9:ORACLEエラー 090 */ 091 public int getKekka() { return kekka; } 092 093 /** 094 * メッセージIDを返します。 095 * 096 * @return メッセージID 097 */ 098 public String getId() { return id; } 099 100 /** 101 * メッセージ引数を返します。 102 * 103 * @param no 引数アドレス 104 * 105 * @return メッセージ引数 106 */ 107 public String getArg( final int no ) { return args[no]; } 108 109 /** 110 * メッセージ引数配列を返します。 111 * 112 * @return メッセージ引数配列 113 */ 114 public String[] getArgs() { return args.clone(); } 115 116 /** 117 * 引数について、{#XXXX} 文字列の場合、#XXXX に変換します。 118 * この、{#XXXX} 文字列は、メッセージリソースの引数に、XXXX の 119 * ラベルリソースを適用させる場合に使用します。 120 * この処理は、メッセージリソースでの処理で互換性を確保する為です。 121 * なお、この変更のために、普通に、#YYYY と指定した文字列も、 122 * ラベルキーとして処理されるようになりますので、ご注意ください。 123 * 124 * @og.rev 4.0.0.0 (2005/01/31) 新規作成 125 * 126 * @param arg 入力引数 127 * 128 * @return 変換後引数 129 */ 130 private String argIn( final String arg ) { 131 if( arg != null && arg.startsWith( "{#" ) ) { 132 return arg.substring( 1,arg.length()-1 ) ; 133 } 134 else { 135 return arg ; 136 } 137 } 138 139 /** 140 * PG名を返します。 141 * 142 * @og.rev 3.8.9.5 (2007/09/12) 新規作成 143 * 144 * @return PG名 145 */ 146 public String getPg() { return pg; } 147 148 /** 149 * ステップ名を返します。 150 * 151 * @og.rev 3.8.9.5 (2007/09/12) 新規作成 152 * 153 * @return ステップ名 154 */ 155 public String getStep() { return step; } 156 157 /** 158 * デバッグ用のオブジェクトの内部表現の文字列を返します。 159 * 160 * @og.rev 4.0.0.0 (2004/12/31) 内部表現を文字のみとする。 161 * 162 * @return 内部表現の文字列 163 */ 164 @Override 165 public String toString() { 166 StringBuilder buf = new StringBuilder( BUFFER_MIDDLE ); 167 buf.append( "id=[" ).append( id ).append( "] no=[" ).append( no ).append( "]" ); 168 buf.append( " kekka=[" ).append( kekka ).append( "] values={" ); 169 for( int i=0; i<args.length; i++ ) { 170 if( args[i] != null ) { 171 buf.append( " " ).append( args[i] ); 172 } 173 } 174 buf.append( " }" ); 175 return buf.toString(); 176 } 177}