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 final int cnt = inArgs == null ? 0 : inArgs.length; // 8.5.7.0 (2024/03/29) 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 * @og.rtnNotNull 075 */ 076 public ErrMsg copy( final int newNo ) { 077 return new ErrMsg( newNo,kekka,pg,step,id,args ); 078 } 079 080 /** 081 * 行番号を返します。 082 * 083 * @return 行番号 084 */ 085 public int getNo() { return no; } 086 087 /** 088 * 結果を返します。 089 * 090 * @return 結果 0:正常 1:警告 2:異常 8:EXCEPTION 9:ORACLEエラー 091 */ 092 public int getKekka() { return kekka; } 093 094 /** 095 * メッセージIDを返します。 096 * 097 * @return メッセージID 098 */ 099 public String getId() { return id; } 100 101 /** 102 * メッセージ引数を返します。 103 * 104 * @param no 引数アドレス 105 * 106 * @return メッセージ引数 107 */ 108 public String getArg( final int no ) { return args[no]; } 109 110 /** 111 * メッセージ引数配列を返します。 112 * 113 * @return メッセージ引数配列 114 * @og.rtnNotNull 115 */ 116 public String[] getArgs() { return args.clone(); } 117 118 /** 119 * 引数について、{#XXXX} 文字列の場合、#XXXX に変換します。 120 * この、{#XXXX} 文字列は、メッセージリソースの引数に、XXXX の 121 * ラベルリソースを適用させる場合に使用します。 122 * この処理は、メッセージリソースでの処理で互換性を確保する為です。 123 * なお、この変更のために、普通に、#YYYY と指定した文字列も、 124 * ラベルキーとして処理されるようになりますので、ご注意ください。 125 * 126 * @og.rev 4.0.0.0 (2005/01/31) 新規作成 127 * 128 * @param arg 入力引数 129 * 130 * @return 変換後引数 131 */ 132 private String argIn( final String arg ) { 133 // 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 134 return arg != null && arg.startsWith( "{#" ) ? arg.substring( 1,arg.length()-1 ) : arg ; 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 ) // 6.0.2.5 (2014/10/31) char を append する。 167 .append( "] kekka=[" ).append( kekka ).append( "] values={" ); 168 // 8.5.4.2 (2024/01/12) PMD 7.0.0 ForLoopCanBeForeach 169// for( int i=0; i<args.length; i++ ) { 170// if( args[i] != null ) { 171// buf.append( ' ' ).append( args[i] ); // 6.0.2.5 (2014/10/31) char を append する。 172// } 173// } 174 for( final String arg : args ) { 175 if( arg != null ) { 176 buf.append( ' ' ).append( arg ); // 6.0.2.5 (2014/10/31) char を append する。 177 } 178 } 179 buf.append( " }" ); 180 return buf.toString(); 181 } 182}