[Java] 68 Swing 08 外部プログラムの選択 改良版

前回の続きです。switch文の重複部分が気になったので書き直しました。こちらの方がメンテナンス性も優れており断然スマートです。

import java.util.ArrayList;

public class ProcessExecutor {
    public static void exec(String type) throws Exception {
    	System.out.println("ProcessExecutor");

    	// 分類用リスト作成 集計:agg,分析:ana,血統:blo 以降随時追加
    	ArrayList<String> types = new ArrayList<String>();
    		types.add("agg");
    		types.add("ana");

		// cmdリスト作成
		ArrayList<String> cmds = new ArrayList<String>();
    		cmds.add("python HS_csv_agg.py ; echo 'コマンド完了'");
    		cmds.add("python HS_csv_ana.py ; echo 'コマンド完了'");

    	// index番号取得
    	int type_num = types.indexOf(type);
    	System.out.println("index番号 " + type_num);

    	// コマンド選択
    	String cmd = cmds.get(type_num);

		ProcessBuilder p = new ProcessBuilder("sh", "-c", cmd);
        p.redirectErrorStream(true);
        // プロセス開始
        Process process = p.start();
        // プロセス終了まで待機
        process.waitFor();
        int result = process.exitValue();
        System.out.printf("result = %d%n", result);
    }
}