package com.generation.batch;

import java.lang.reflect.Constructor;
import java.util.ArrayList;
import java.util.List;

import org.apache.log4j.Logger;

public class BatchExecutor {

	private static Logger log = Logger.getLogger(BatchExecutor.class);

	/**
	 * 指定されたバッチを実行します。
	 * @param args
	 */
	@SuppressWarnings("unchecked")
	public static void main(String[] args) {
		log.info("引数の数=" + args.length);
		if (args.length == 0) {
			log.error("引数が指定されていないため、終了します");
			System.exit(1);
		}
		String className = null;
		List<String> argList = new ArrayList<String>();
		for (int i = 0; i < args.length; i++) {
			if (i == 0) {
				className = args[i];
			} else {
				log.info("読込xmlパス" + i + "=" + args[i]);
				argList.add(args[i]);
			}
		}
		log.info("実行クラス=" + className);
		try {
			Class clazz = Class.forName(className);
			Constructor<BatchBase> cunstructor = clazz.getConstructor(new Class[0]);
			BatchBase obj = cunstructor.newInstance(new Object[0]);

			obj.batchExecute(argList.toArray(new String[0]));

		} catch (ClassCastException e) {
			log.error("バッチ名が不正です[" + className + "]", e);
			System.exit(1);
		} catch (ClassNotFoundException e) {
			log.error("バッチ名が不正です[" + className + "]", e);
			System.exit(1);
		} catch (Exception e) {
			log.error("バッチ[" + className + "]実行時にExceptionが発生しました", e);
			System.exit(1);
		}
		System.exit(0);
	}
}
