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.process; 017 018import java.util.Map; 019 020import org.opengion.fukurou.util.Argument; 021import org.opengion.fukurou.system.HybsConst; // 6.1.0.0 (2014/12/26) refactoring 022 023/** 024 * AbstractProcess は、ChainProcess インターフェースを実装した、Abstract クラスです。 025 * ChainProcess を用いて、順次、バッチプロセスを実行することができます。 026 * 027 * @version 4.0 028 * @author Kazuhiko Hasegawa 029 * @since JDK5.0, 030 */ 031public abstract class AbstractProcess implements HybsProcess { 032 033 /** タブセパレータ */ 034 public static final char TAB = '\t'; // 6.0.2.5 (2014/10/31) タブ区切り文字を char 化します。 035 036 /** システムの改行コードを設定します。*/ 037 protected static final String CR = HybsConst.CR; // 6.1.0.0 (2014/12/26) refactoring 038 /** StringBilderなどの初期値を設定します。 {@value} */ 039 protected static final int BUFFER_MIDDLE = HybsConst.BUFFER_MIDDLE; // 6.1.0.0 (2014/12/26) refactoring 040 /** StringBilderなどの初期値を設定します。 {@value} */ 041 protected static final int BUFFER_LARGE = HybsConst.BUFFER_LARGE; // 6.1.0.0 (2014/12/26) refactoring 042 043 /** データ検索時のフェッチサイズを設定します。 {@value} */ 044 protected static final int DB_BATCH_SIZE = HybsConst.DB_BATCH_SIZE; // 6.9.4.1 (2018/04/09) 045 046 /** 8.5.6.1 (2024/03/29) ChainProcess の ファイル関連処理の 共通メッセージ */ 047 protected static final String CHAIN_FILE_USAGE = new StringBuilder( BUFFER_MIDDLE ) 048 .append( "上流プロセスでは、Name 属性として、『File』を持ち、値は、Fileオブジェクト" ).append( CR ) 049 .append( "である、Process_FileSearch を使用するのが、便利です。それ以外のクラスを" ).append( CR ) 050 .append( "使用する場合でも、Name属性と、File オブジェクトを持つ LineModel を受け渡し" ).append( CR ) 051 .append( "できれば、使用可能です。" ).append( CR ) 052 .toString(); 053 054 /** 8.5.6.1 (2024/03/29) Process の パラメータ処理の 共通メッセージ */ 055 protected static final String PROCESS_PARAM_USAGE = new StringBuilder( BUFFER_MIDDLE ) 056 .append( "引数文字列中に空白を含む場合は、ダブルコーテーション(\"\") で括って下さい。" ).append( CR ) 057 .append( "引数文字列の 『=』 の前後には、空白は挟めません。必ず、-key=value の様に" ).append( CR ) 058 .append( "繋げてください。" ).append( CR ) 059 .toString(); 060 061 /** 8.5.6.1 (2024/03/29)データベース の パラメータ処理の 共通メッセージ */ 062 protected static final String DB_PARAM_USAGE = new StringBuilder( BUFFER_MIDDLE ) 063 .append( "データベース接続先等は、ParamProcess のサブクラス(Process_DBParam)に" ).append( CR ) 064 .append( "設定された接続(Connection)を使用します。" ).append( CR ) 065 .append( CR ) 066 .append( "SQL文には、{@DATE.YMDH}等のシステム変数が使用できます。" ).append( CR ) 067 .toString(); 068 069 private final Argument argments ; 070 private LoggerProcess logger ; 071 072 /** 073 * コンストラクター 074 * 075 * @og.rev 8.5.4.2 (2024/01/12) PMD 7.0.0 FormalParameterNamingConventions 対応 076 * 077 * @param name このクラス(サブクラス)のクラス名称 078 * @param mustProparty 必須チェックMap 079 * @param usableProparty 整合性チェックMap 080 */ 081// public AbstractProcess( final String name , final Map<String,String> MUST_PROPARTY ,final Map<String,String> USABLE_PROPARTY ) { 082 public AbstractProcess( final String name , final Map<String,String> mustProparty ,final Map<String,String> usableProparty ) { 083 argments = new Argument( name ) ; 084// argments.setMustProparty( MUST_PROPARTY ); 085// argments.setUsableProparty( USABLE_PROPARTY ); 086 argments.setMustProparty( mustProparty ); 087 argments.setUsableProparty( usableProparty ); 088 } 089 090 /** 091 * 引数形式を解析する 引数オブジェクトに、引数を設定します。 092 * Argument の文字列から、引数かプロパティをセットします。 093 * [プロパティ]のキー部の大文字・小文字は、厳格に判定しています。 094 * Argument の文字列には、タイプがあります。 095 * 096 * [コメント] : # で始まる引数で、使用されません。(登録もされません。) 097 * [引数] : #,-,= 以外で始まる通常の文字列。登録の順番が指定されます。 098 * [プロパティ]: - で始まり、キーと値を=で区切っているパラメータです。順序は無関係。 099 * 100 * @param arg 引数 101 */ 102 @Override // HybsProcess 103 public void putArgument( final String arg ) { 104 argments.putArgument( arg ) ; 105 } 106 107 /** 108 * Argument の文字列から、プロパティをセットします。 109 * [プロパティ]のキー部の大文字・小文字は、厳格に判定しています。 110 * このメソッドは、引数 や コメントの判断を行いません。プロパティ のみ 111 * 設定されるものとして、処理します。 112 * プロパティの key=val が初めから分割されている場合の簡易メソッドです。 113 * 114 * @param key キー 115 * @param val 値 116 */ 117 @Override // HybsProcess 118 public void putArgument( final String key,final String val ) { 119 argments.putArgument( key,val ) ; 120 } 121 122 /** 123 * 引数形式を解析する 引数オブジェクトを返します。 124 * 125 * @return 引数オブジェクト 126 */ 127 public Argument getArgument() { 128 return argments ; 129 } 130 131 /** 132 * ディスプレイにメッセージを表示します。 133 * 134 * @param msg 表示するメッセージ 135 */ 136 @Override // HybsProcess 137 public void println( final String msg ) { 138 if( logger != null ) { 139 logger.println( msg ) ; 140 } 141 } 142 143 /** 144 * ディスプレイにメッセージを表示します。 145 * 146 * @param msg 表示するメッセージ 147 */ 148 @Override // HybsProcess 149 public void logging( final String msg ) { 150 if( logger != null ) { 151 logger.logging( msg ) ; 152 } 153 } 154 155 /** 156 * ディスプレイ出力する LoggerProcess オブジェクトをセットします。 157 * 158 * @param logger LoggerProcessオブジェクト 159 */ 160 @Override // HybsProcess 161 public final void setLoggerProcess( final LoggerProcess logger ) { 162 this.logger = logger ; 163 } 164 165 /** 166 * エラー発生時に、RuntimeException を throw するか、ログ出力します。 167 * 引数に、エラーメッセージを指定します。 168 * isAbend引数は、RuntimeException を throw するか、ログ出力するかを指定する 169 * 引数です。true で、RuntimeException を throw し、false で、ログ出力 170 * のみとします。(つまり、継続処理されます。) 171 * 172 * @og.rev 6.3.1.1 (2015/07/10) RuntimeException を throwする機能を追加 173 * 174 * @param errMsg エラーメッセージ 175 * @param isAbend 異常発生時に、処理を中断(true)するか、継続(false)するか 176 */ 177 public void throwException( final String errMsg , final boolean isAbend ) { 178 throwException( errMsg,null,isAbend ); 179 } 180 181 /** 182 * エラー発生時に、RuntimeException を throw するか、ログ出力します。 183 * 引数に、エラーメッセージと、発生元 Throwable を指定します。 184 * 発生元 Throwable が null の場合は、エラーメッセージのみで throw します。 185 * isAbend引数は、RuntimeException を throw するか、ログ出力するかを指定する 186 * 引数です。true で、RuntimeException を throw し、false で、ログ出力 187 * のみとします。(つまり、継続処理されます。) 188 * 189 * @og.rev 6.3.1.1 (2015/07/10) RuntimeException を throwする機能を追加 190 * 191 * @param errMsg エラーメッセージ 192 * @param th 発生元 Throwable 193 * @param isAbend 異常発生時に、処理を中断(true)するか、継続(false)するか 194 */ 195 public void throwException( final String errMsg,final Throwable th,final boolean isAbend ) { 196 if( isAbend ) { 197 throw th == null ? new RuntimeException( errMsg ) : new RuntimeException( errMsg,th ); 198 } 199 else { 200 logging( "=================================================================" ); 201 if( errMsg != null ) { logging( errMsg ); } 202 if( th != null ) { logging( th.getMessage() ); } 203 } 204 } 205 206 /** 207 * プロセスの内容表示を行います。 208 * Argument#toString() を呼び出しています。 209 * 210 * @return 内容表示 211 */ 212 @Override // Object 213 public String toString() { 214 return argments.toString(); 215 } 216}