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 * 内部には、行番号とIDと結果と、メッセージリソースで使用される引数を持っています。 022 * 結果は 0:正常 1:警告 2:異常 8:EXCEPTION 9:ORACLEエラーで、 023 * ErrorMessageクラスの public static 変数で定義されている値を使用します。 024 * 025 * @og.group エラー処理 026 * 027 * @version 4.0 028 * @author Kazuhiko Hasegawa 029 * @since JDK5.0, 030 */ 031public final class ErrMsg { 032 /** バッファの初期容量を通常より多い目に設定します。 {@value} */ 033 public static final int BUFFER_MIDDLE = 200; // 5.1.9.0 (2010/08/01) 追加 034 035 private final int no; // 行番号 036 private final int kekka; // 結果 0:正常 1:警告 2:異常 8:EXCEPTION 9:ORACLEエラー 037 private final String id; // メッセージID 038 private final String[] args ; // メッセージの引数配列 039 private final String pg; // PG名 3.8.9.5 (2007/09/12) 040 private final String step; // ステップ名 3.8.9.5 (2007/09/12) 041 042 /** 043 * 必要な引数をすべて設定して、ErrMsg オブジェクトを構築します。 044 * 045 * @param no 行番号 046 * @param kekka 結果 0:正常 1:警告 2:異常 8:EXCEPTION 9:ORACLEエラー 047 * @param pg PG名 048 * @param step STEP名 049 * @param id メッセージID 050 * @param inArgs メッセージIDの可変数引数 051 */ 052 public ErrMsg( final int no,final int kekka, 053 final String pg,final String step, 054 final String id,final String... inArgs) { 055 this.no = no; 056 this.kekka = kekka; 057 this.id = id; 058 final int cnt = inArgs.length; 059 args = new String[cnt]; 060 for( int i=0; i<cnt; i++ ) { 061 args[i] = argIn( inArgs[i] ); 062 } 063 this.pg = pg; // 3.8.9.5 (2007/09/12) 064 this.step = step; // 3.8.9.5 (2007/09/12) 065 } 066 067 /** 068 * 行番号のみ異なる、新しい ErrMsg オブジェクトを作成します。 069 * 070 * @param newNo 行番号 071 * 072 * @return 行番号のみ異なる、新しい ErrMsgオブジェクト 073 * @og.rtnNotNull 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 * @og.rtnNotNull 114 */ 115 public String[] getArgs() { return args.clone(); } 116 117 /** 118 * 引数について、{#XXXX} 文字列の場合、#XXXX に変換します。 119 * この、{#XXXX} 文字列は、メッセージリソースの引数に、XXXX の 120 * ラベルリソースを適用させる場合に使用します。 121 * この処理は、メッセージリソースでの処理で互換性を確保する為です。 122 * なお、この変更のために、普通に、#YYYY と指定した文字列も、 123 * ラベルキーとして処理されるようになりますので、ご注意ください。 124 * 125 * @og.rev 4.0.0.0 (2005/01/31) 新規作成 126 * 127 * @param arg 入力引数 128 * 129 * @return 変換後引数 130 */ 131 private String argIn( final String arg ) { 132 // 6.4.1.1 (2016/01/16) PMD refactoring. A method should have only one exit point, and that should be the last statement in the method 133 return arg != null && arg.startsWith( "{#" ) ? arg.substring( 1,arg.length()-1 ) : arg ; 134 135 } 136 137 /** 138 * PG名を返します。 139 * 140 * @og.rev 3.8.9.5 (2007/09/12) 新規作成 141 * 142 * @return PG名 143 */ 144 public String getPg() { return pg; } 145 146 /** 147 * ステップ名を返します。 148 * 149 * @og.rev 3.8.9.5 (2007/09/12) 新規作成 150 * 151 * @return ステップ名 152 */ 153 public String getStep() { return step; } 154 155 /** 156 * デバッグ用のオブジェクトの内部表現の文字列を返します。 157 * 158 * @og.rev 4.0.0.0 (2004/12/31) 内部表現を文字のみとする。 159 * 160 * @return 内部表現の文字列 161 * @og.rtnNotNull 162 */ 163 @Override 164 public String toString() { 165 final StringBuilder buf = new StringBuilder( BUFFER_MIDDLE ) 166 .append( "id=[" ).append( id ).append( "] no=[" ).append( no ).append( ']' ) // 6.0.2.5 (2014/10/31) char を append する。 167 .append( " kekka=[" ).append( kekka ).append( "] values={" ); 168 for( int i=0; i<args.length; i++ ) { 169 if( args[i] != null ) { 170 buf.append( ' ' ).append( args[i] ); // 6.0.2.5 (2014/10/31) char を append する。 171 } 172 } 173 buf.append( " }" ); 174 return buf.toString(); 175 } 176}