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

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

Step 12 その3 (人材更新)

こまごまと修正してみた。

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

人材ID を 入力

class InputJinzaiID extends AbstractDispatcher {
    // 選択肢 を 表示
    public void beforeDisplayMenu() {
        System.out.print("人材IDを入力してください。\n [人材ID, E]>");
    }

    // 選択した処理 を 実行
    public boolean runFunction(String inputCode) {
        // 人材一覧 取得
        Repository<Jinzai> jinzaiRepository = new Repository<Jinzai>();
        jinzaiRepository.select("jinzai.txt", false, "", Jinzai.class);
        Jinzai jinzai = (Jinzai)(jinzaiRepository.seek(inputCode));

        // 人材情報 表示
        JinzaiDetailView  jinzaiDetailView = new JinzaiDetailView();
        if (jinzaiDetailView.display(jinzai)) {
            System.out.println();
            // 更新項目 選択
            SelectUpdateField ad = new SelectUpdateField();
            ad.run(reader, jinzai);
        }
        return false;
    }
}

更新項目を選択

class SelectUpdateField extends AbstractDispatcher {
    private boolean isDirty = false;
    private Jinzai jinzai;

    protected void run(BufferedReader reader, Jinzai jinzai) {
        this.jinzai = jinzai;
        hasEndCommand = false;
        super.run(reader);
    }

    // 選択肢 を 表示
    public void beforeDisplayMenu() {
        System.out.println("\n更新したい項目を入力してください。");
        System.out.println("1.氏名");
        System.out.println("2.郵便番号");
        System.out.println("3.住所");
        System.out.println("4.電話番号");
        System.out.println("5.FAX番号");
        System.out.println("6.e-mailアドレス");
        System.out.println("7.生年月日");
        System.out.println("8.性別");
        System.out.println("9.業種");
        System.out.println("10.経験年数");
        System.out.println("11.最終学歴");
        System.out.println("12.希望単価");
        System.out.print(" [1-12, E]>");
    }

    // 選択した処理 を 実行
    public boolean runFunction(String inputCode) {
        if (inputCode.equals("E")) {
            // 内容確認後 更新処理
            if (isDirty) {
                UpdateConfirm ad = new UpdateConfirm();
                ad.run(reader, jinzai);
            } else
                System.out.println();
            return true;

        } else {
            int fieldIdx = 0;
            try {
                fieldIdx = Integer.parseInt(inputCode);
            } catch (Exception e) {
                return false;
            }
            if (fieldIdx < 1) return false;
            if (fieldIdx > 12) return false;

            // 更新内容を入力
            InputUpdateValue ad = new InputUpdateValue();
            ad.run(reader, jinzai, fieldIdx);
            isDirty = true;
            return false;
        }
    }
}

更新内容を入力

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

    public void run(BufferedReader reader, Jinzai jinzai, int fieldIdx) {
        this.jinzai = jinzai;
        this.fieldIdx = fieldIdx;
        super.run(reader);
    }

    // 選択肢 を 表示
    public void beforeDisplayMenu() {
        System.out.print("更新後の値を入力してください。\n>");
    }

    // 選択した処理 を 実行
    public boolean runFunction(String inputCode) {
        // 更新内容セット
        jinzai.setValue(fieldIdx, inputCode);
        return true;
    }
}

内容確認後 更新

class UpdateConfirm extends AbstractDispatcher {
    private Jinzai jinzai;

    public void run(BufferedReader reader, Jinzai jinzai) {
        this.jinzai = jinzai;
        super.run(reader);
    }

    // 選択肢 を 表示
    public void beforeDisplayMenu() {
        System.out.print("\n以下の内容で更新します。");
        // 人材情報 表示
        JinzaiDetailView jinzaiDetailView = new JinzaiDetailView();
        jinzaiDetailView.display(jinzai);
        System.out.print(" [Y, N]>");
    }

    // 選択した処理 を 実行
    public boolean runFunction(String inputCode) {
        if (!inputCode.equals("Y")) {
            System.out.println();
            return true;
        }

        // 人材更新 更新処理
        Repository<Jinzai> jinzaiRepository = new Repository<Jinzai>();
        jinzaiRepository.update("jinzai.txt", jinzai, Jinzai.class);

        System.out.println("更新しました。\n");
        return true;
    }
}