「Javaプログラミング能力認定試験課題プログラムのリファクタリングレポート」に触発されて

ryoasai さんの「Javaプログラミング能力認定試験課題プログラムのリファクタリングレポート」に触発されたので、
Java の勉強がてら、同様なプログラムを作成してみる。

Step 16 その5 (人材追加)

処理フローを 制御する クラス (人材追加)

各項目 を 入力

class JinzaiAppend extends AbstractDispatcher {
    private int fieldIdx;
    private Jinzai jinzai;

    protected String run(BufferedReader reader) {
        Repository<Jinzai> jinzaiRepository = new Repository<Jinzai>();
        jinzaiRepository.select("jinzai.txt", true, new Matcher(null), Jinzai.class);
        jinzai = new Jinzai();
        jinzai.setID(jinzaiRepository.getNewID());

        this.fieldIdx = 1;
        hasEndCommand = false;
        return super.run(reader);
    }

    // 選択肢 を 表示
    @Override
    protected boolean displayMenu() {
        System.out.println();

        if      (fieldIdx == 1)  System.out.print("氏名");
        else if (fieldIdx == 2)  System.out.print("郵便番号");
        else if (fieldIdx == 3)  System.out.print("住所");
        else if (fieldIdx == 4)  System.out.print("電話番号");
        else if (fieldIdx == 5)  System.out.print("FAX番号");
        else if (fieldIdx == 6)  System.out.print("e-mailアドレス");
        else if (fieldIdx == 7)  System.out.print("生年月日");
        else if (fieldIdx == 8)  System.out.print("性別");
        else if (fieldIdx == 9)  System.out.print("業種");
        else if (fieldIdx == 10) System.out.print("経験年数");
        else if (fieldIdx == 11) System.out.print("最終学歴");
        else if (fieldIdx == 12) System.out.print("希望単価");

        System.out.println("を入力してください。");
        System.out.print(">");
        return true;
    }

    // 選択した処理 を 実行
    @Override
    protected String runFunction(String inputCode) {
        // 更新内容セット
        jinzai.setValue(fieldIdx, inputCode);
        if (fieldIdx++ < 12) return ""; // 次の項目を 入力

        // 内容確認後 登録処理
        DataViewer dataViewer = new JinzaiDetailView();
        InsertConfirm<Jinzai> ad = new InsertConfirm<Jinzai>();
        String s = ad.run(reader, Jinzai.class, jinzai, dataViewer, "jinzai.txt", new JinzaiMatcher(jinzai));
        if (s == null) return "E";

        // 「以下の内容で更新します。」で "Y" なら 「人材IDを入力」に 戻る、 
        if (s.equals("Y")) return "E";
        // 「以下の内容で更新します。」で "N" なら 更新項目 選択
        if (s.equals("N")) {
            SelectUpdateField su = new SelectUpdateField();
            return su.run(reader, jinzai, ad);
        }
        return inputCode;
    }
}