「Javaプログラミング能力認定試験課題プログラムのリファクタリングレポート」に触発されて
ryoasai さんの「Javaプログラミング能力認定試験課題プログラムのリファクタリングレポート」に触発されたので、
Java の勉強がてら、同様なプログラムを作成してみる。
Step 16 その2 (人材検索)
処理フローを 制御する クラス (人材検索)
検索方法を選択
class JinzaiSearch extends AbstractDispatcher { // 選択肢 を 表示 @Override protected boolean displayMenu() { System.out.println(); System.out.println("検索方法を指定してください。"); System.out.println("N->氏名から検索"); System.out.println("T->業種から検索"); System.out.println("E->人材検索終了(メニューに戻る)"); System.out.print(" [N, T, E]>"); return true; } // 選択した処理 を 実行 @Override protected String runFunction(String inputCode) { if (inputCode.equals("N")) { // 人材検索 呼び出し (氏名で検索) AbstractDispatcher ad = new InputSearchStrByName(); ad.run(reader); } else if (inputCode.equals("T")) { // 人材検索 呼び出し (業種で検索) AbstractDispatcher ad = new InputSearchStrByGyoshu(); ad.run(reader); } return ""; // 「検索方法を指定してください」に 戻る } }
検索 呼び出し (氏名で検索)
class InputSearchStrByName extends AbstractDispatcher { @Override protected String run(BufferedReader reader) { hasEndCommand = false; // "E" で 終了しない return super.run(reader); } // 選択肢 を 表示 @Override protected boolean displayMenu() { // 氏名で検索 System.out.println(); System.out.println("氏名に含まれる文字列を指定してください。"); System.out.print(">"); return true; } // 選択した処理 を 実行 @Override protected String runFunction(String inputCode) { Jinzai search = new Jinzai(); search.setName(inputCode); Matcher matcher = new JinzaiMatcherByName(search); // 氏名で検索 Repository<Jinzai> jinzaiRepository = new Repository<Jinzai>(); jinzaiRepository.select("jinzai.txt", false, matcher, Jinzai.class); // 入力文字列で検索 JinzaiKensaku ad = new JinzaiKensaku(); return ad.run(reader, jinzaiRepository); } }
検索 呼び出し (業種で検索)
class InputSearchStrByGyoshu extends AbstractDispatcher { private Repository<Gyoshu> gyoshuRepository; @Override protected String run(BufferedReader reader) { // 業種一覧を作成 gyoshuRepository = new Repository<Gyoshu>(); gyoshuRepository.select("gyoshu.txt", false, new Matcher(null), Gyoshu.class); return super.run(reader); } // 選択肢 を 表示 @Override protected boolean displayMenu() { // 業種で検索 System.out.println(); System.out.println("業種を選択してください。"); System.out.print(" ["); System.out.print(gyoshuRepository.keySetToString()); System.out.print(", E]>"); return true; } // 選択した処理 を 実行 @Override protected String runFunction(String inputCode) { Jinzai search = new Jinzai(); search.setGyoshuID(inputCode); Matcher matcher = new JinzaiMatcherByGyoshu(search); // 業種で検索 Repository<Jinzai> jinzaiRepository = new Repository<Jinzai>(); jinzaiRepository.select("jinzai.txt", false, matcher, Jinzai.class); // 入力文字列で検索 JinzaiKensaku ad = new JinzaiKensaku(); return ad.run(reader, jinzaiRepository); } }
検索結果 表示
class JinzaiKensaku extends AbstractDispatcher { private String searchType; private String searchStr; private Repository<Jinzai> jinzaiRepository; private JinzaiListView jinzaiListView; protected String run(BufferedReader reader, Repository<Jinzai> jinzaiRepository) { this.searchType = searchType; this.searchStr = searchStr; this.jinzaiRepository = jinzaiRepository; jinzaiListView = new JinzaiListView(jinzaiRepository); return super.run(reader); } // 選択肢 を 表示 @Override protected boolean displayMenu() { // 人材一覧 表示 System.out.println(); jinzaiListView.display(); System.out.println(); // 選択肢 を 表示 System.out.println("P->前の10件"); System.out.println("N->次の10件"); System.out.println("E->検索一覧終了( 検索条件指定に戻る )"); System.out.print(" [人材ID, P, N, E]>"); return true; } // 選択した処理 を 実行 @Override protected String runFunction(String jinzaiID) { if (jinzaiID.equals("P")) jinzaiListView.prev(); else if (jinzaiID.equals("N")) jinzaiListView.next(); else { // 人材情報 取得 Repository<Jinzai> jinzaiRepositoryAll = new Repository<Jinzai>(); jinzaiRepositoryAll.select("jinzai.txt", false, new Matcher(null), Jinzai.class); Jinzai jinzai = (Jinzai)(jinzaiRepositoryAll.seek(jinzaiID)); // 人材情報 表示 System.out.println(); JinzaiDetailView jinzaiDetailView = new JinzaiDetailView(); if (jinzaiDetailView.display(jinzai)) { System.out.println(); // 稼働状況 取得 Kadou search = new Kadou(); search.setJinzaiID(jinzaiID); Matcher matcher = new KadouMatcherByJinzai(search); Repository<Kadou> kadouRepository = new Repository<Kadou>(); kadouRepository.select("kadou.txt", false, matcher, Kadou.class); // 稼働状況 表示 System.out.println("稼働状況---------------------------------------------"); KadouListView kadouListView = new KadouListView(kadouRepository); kadouListView.display(); System.out.println(); System.out.print("エンターキーを押すと検索結果一覧に戻ります。\n>"); try { reader.readLine(); } catch (Exception e) { e.printStackTrace(); } } } return ""; // 検索結果一覧 に 戻る } }