package junkutil.sample;

import java.io.IOException;
import java.util.List;
import java.util.Map;

import junkutil.common.FileUtil;
import junkutil.common.OptGets;
import junkutil.set.LzList;
import junkutil.set.LzListClosure;
import junkutil.set.LzMap;
import junkutil.set.LzMapClosure;

/**
 * 引数に与えられたファイルの中で、英字で始まる行だけを出力するプログラム。
 * 引数 -h でヘッダーを出力する。クロージャを活用する。
 * @author Hiroyuki Shioa
 */
public class BatchTest2 {

	/**
	 * Mapを出力するクロージャ
	 */
	private static class MapDump implements LzMapClosure {
		public boolean process(Object key, Object value) {
			System.out.println(key + "=" + value);
			return false;
		};
	}

	/**
	 * リストを出力するクロージャ
	 */
	private static class ListDump implements LzListClosure {
		public boolean process(int i, int len, Object obj) {
			System.out.println(obj);
			return false;
		}
	}

	/**
	 * ファイルを出力するクロージャ
	 */
	private static class FileDataDump implements LzListClosure {
		public boolean process(int i, int len, Object obj) {
			String filename = (String)obj;
			if (!FileUtil.exists(filename)) {
				System.out.println("File not found: " + filename);
				return false;
			} else {
				System.out.println("File: " + filename);
				List lines = null;
				try {
					lines = FileUtil.readLines(filename, "Shift_JIS");
					new LzList(lines).grep("^[a-zA-Z]").forEach(new ListDump());
				} catch (IOException e) {
					e.printStackTrace();
				}
				return true;
			}
		}
	}

	/**
	 * メイン
	 * @param args
	 */
	public static void main(String [] args) {
		args = new String[] { "-h", "testdata/readFile.txt", "testdata/writeFile.txt", "Nothing.txt" };
		OptGets optGets = new OptGets("abch");
		Map opts = optGets.parse(args);
		if (opts.get("h") == Boolean.TRUE) {
			System.out.println("====BatchTest Heaader====");
		}
		List argList = optGets.getArgList();
		LzMap optsMap = new LzMap(opts);
		optsMap.forEach(optsMap.sortedKeys(), new MapDump()); //Mapをダンプ
		new LzList(argList).forEach(new FileDataDump()); //ファイル情報をダンプ
	}
}
