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

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

Step 16 その11 (データ保持クラス)

データ保持クラス

各マスタの Base Class

abstract class EntityBase {
    // ID
    protected String id;
    // 名称
    protected String name;
    // 登録日付
    protected String createDate;
    // 更新日付
    protected String updateDate;
    // 削除日付
    protected String deleteDate;

    // ID
    public String getID()           { return id;    }
    // 名称
    public String getName()         { return name;  }
    // 登録日付                     
    public String getCreateDate()   { return createDate;    }
    // 更新日付                     
    public String getUpdateDate()   { return updateDate;    }
    // 削除日付                     
    public String getDeleteDate()   { return deleteDate;    }

    EntityBase() {
        // ID
        id = "";
        // 名称
        name = "";
        // 登録日付
        createDate = "";
        // 更新日付
        updateDate = "";
        // 削除日付
        deleteDate = "";
    }

    public abstract String[] toArray();

    public void setID(String id) {
        this.id = id;
    }
    public void setName(String name) {
        this.name = name;
    }
    public void setCreateDate(String date) {
        createDate = getDate(date);
    }
    public void setUpdateDate(String date) {
        updateDate = getDate(date);
    }
    public void setDeleteDate(String date) {
        deleteDate = getDate(date);
    }
    private String getDate(String date) {
        java.text.SimpleDateFormat df = new java.text.SimpleDateFormat("yyyyMMdd");

        try {
            Date d = df.parse(date); 
            return date;

        } catch(Exception e) {
            return df.format(new Date());
        }
    }

    public void setValue(int i, String value) {
        String[] data = toArray();
        data[i] = value;
        fromArray(data);
    }

    public String toString() {
        int i = 0;
        String[] data = toArray();
        StringBuffer sb = new StringBuffer();
        for (String s: data) {
            if (i > 0)
                sb.append('\t');
            i++;
            if (s == null) continue;
            sb.append(s);
        }
        sb.append('\n');

        return sb.toString();
    }

    public abstract void fromArray(String[] data);

    protected void readMetaCulumns(String[] data, int startColumn) {
        int i = startColumn;

        // 登録日付
        if (i < data.length) {
            createDate = data[i++];
        }
        // 更新日付
        if (i < data.length) {
            updateDate = data[i++];
        }
        // 削除日付
        if (i < data.length) {
            deleteDate = data[i++];
        }
    }
}

業種マスタ

class Gyoshu extends EntityBase {
    @Override
    public String[] toArray() {
        ArrayList<String> array = new ArrayList<String>();

        array.add(id);
        array.add(name);
        array.add(createDate);
        array.add(updateDate);
        array.add(deleteDate);

        return array.toArray(new String[array.size()]);
    }

    @Override
    public void fromArray(String[] data) {
        int i = 0;

        // 業種ID
        id = data[i++];
        // 業種名
        name = data[i++];

        readMetaCulumns(data, i);
    }
}

稼働状況マスタ

class Kadou extends EntityBase {
    // 人材ID
    private String jinzaiID;
    // 取引先ID
    private String torihikiID;
    // 稼働開始日
    private String startDate;
    // 稼働終了日
    private String endDate;
    // 契約単価
    private String keiyakuTanka;

    // 取引先ID                     
    public String getJinzaiID()     { return jinzaiID;      }
    // 取引先ID                     
    public String getTorihikiID()   { return torihikiID;    }
    // 稼働開始日                   
    public String getStartDate()    { return startDate; }
    // 稼働終了日                   
    public String getEndDate()      { return endDate;   }
    // 契約単価                     
    public String getKeiyakuTanka() { return keiyakuTanka;  }

    Kadou() {
        // 人材ID
        jinzaiID = "";
        // 取引先ID
        torihikiID = "";
        // 稼働開始日
        startDate = "";
        // 稼働終了日
        endDate = "";
        // 契約単価
        keiyakuTanka = "";
    }

    @Override
    public String[] toArray() {
        ArrayList<String> array = new ArrayList<String>();

        array.add(jinzaiID);
        array.add(id);
        array.add(torihikiID);
        array.add(startDate);
        array.add(endDate);
        array.add(keiyakuTanka);

        array.add(createDate);
        array.add(updateDate);
        array.add(deleteDate);

        return array.toArray(new String[array.size()]);
    }

    @Override
    public void fromArray(String[] data) {
        int i = 0;

        // 人材ID
        jinzaiID = data[i++];
        // 稼働状況番号
        id = data[i++];
        // 取引先ID
        torihikiID = data[i++];
        // 稼働開始日
        startDate = data[i++];
        // 稼働終了日
        endDate = data[i++];
        // 契約単価
        keiyakuTanka = data[i++];

        readMetaCulumns(data, i);
    }

    public void setJinzaiID(String jinzaiID) {
        this.jinzaiID = jinzaiID;
    }
}

人材マスタ と 取引先マスタ の Base Class

abstract class Party extends EntityBase {
    // 郵便番号
    protected String zip;
    // 住所
    protected String address;
    // 電話番号
    protected String tel;
    // FAX番号
    protected String fax;
    // e-mailアドレス
    protected String email;

    // 郵便番号                     
    public String getZip()          { return zip;   }
    // 住所                         
    public String getAddress()      { return address;   }
    // 電話番号                     
    public String getTel()          { return tel;   }
    // FAX番号                      
    public String getFax()          { return fax;   }
    // e-mailアドレス               
    public String getEmail()        { return email; }

    Party() {
        // 郵便番号
        zip = "";
        // 住所
        address = "";
        // 電話番号
        tel = "";
        // FAX番号
        fax = "";
        // e-mailアドレス
        email = "";
    }
}

人材マスタ

class Jinzai extends Party {
    // 生年月日
    private String birthDate;
    // 性別
    private String sex;
    // 業種ID
    private String gyoshuID;
    // 経験年数
    private String nensu;
    // 最終学歴
    private String gakureki;
    // 希望単価
    private String tanka;

    // 生年月日                     
    public String getBirthDate()    { return birthDate; }
    // 性別                         
    public String getSex()          { return sex;   }
    // 業種ID                       
    public String getGyoshuID()     { return gyoshuID;  }
    // 経験年数                     
    public String getNensu()        { return nensu; }
    // 最終学歴                     
    public String getGakureki()     { return gakureki;  }
    // 希望単価                     
    public String getTanka()        { return tanka; }

    Jinzai() {
        // 生年月日
        birthDate = "";
        // 性別
        sex = "";
        // 業種ID
        gyoshuID = "";
        // 経験年数
        nensu = "";
        // 最終学歴
        gakureki = "";
        // 希望単価
        tanka = "";
    }

    @Override
    public String[] toArray() {
        ArrayList<String> array = new ArrayList<String>();

        array.add(id);
        array.add(name);

        array.add(zip);
        array.add(address);
        array.add(tel);
        array.add(fax);
        array.add(email);
        array.add(birthDate);
        array.add(sex);
        array.add(gyoshuID);
        array.add(nensu);
        array.add(gakureki);
        array.add(tanka);

        array.add(createDate);
        array.add(updateDate);
        array.add(deleteDate);

        return array.toArray(new String[array.size()]);
    }

    @Override
    public void fromArray(String[] data) {
        int i = 0;

        // 人材ID
        id = data[i++];
        // 氏名
        name = data[i++];
        // 郵便番号
        zip = data[i++];
        // 住所
        address = data[i++];
        // 電話番号
        tel = data[i++];
        // FAX番号
        fax = data[i++];
        // e-mailアドレス
        email = data[i++];
        // 生年月日
        birthDate = data[i++];
        // 性別
        sex = data[i++];
        // 業種ID
        gyoshuID = data[i++];
        // 経験年数
        nensu = data[i++];
        // 最終学歴
        gakureki = data[i++];
        // 希望単価
        tanka = data[i++];

        readMetaCulumns(data, i);
    }

    public void setGyoshuID(String gyoshuID) {
        this.gyoshuID = gyoshuID;
    }
}

取引先マスタ

class Torihiki extends Party {
    // URL
    private String url;
    // 担当者氏名
    private String tanto;
    // 締め日
    private String shimeDate;
    // 支払日
    private String shiharaiDate;

    // URL                          
    public String getUrl()          { return url;   }
    // 担当者氏名                   
    public String getTanto()        { return tanto; }
    // 締め日                       
    public String getShimeDate()    { return shimeDate; }
    // 支払日                       
    public String getShiharaiDate() { return shiharaiDate;  }

    Torihiki() {
        // URL
        url = "";
        // 担当者氏名
        tanto = "";
        // 締め日
        shimeDate = "";
        // 支払日
        shiharaiDate = "";
    }

    @Override
    public String[] toArray() {
        ArrayList<String> array = new ArrayList<String>();

        array.add(id);
        array.add(name);

        array.add(zip);
        array.add(address);
        array.add(tel);
        array.add(fax);
        array.add(url);
        array.add(tanto);
        array.add(email);
        array.add(shimeDate);
        array.add(shiharaiDate);

        array.add(createDate);
        array.add(updateDate);
        array.add(deleteDate);

        return array.toArray(new String[array.size()]);
    }

    @Override
    public void fromArray(String[] data) {
        int i = 0;

        // 取引先ID
        id = data[i++];
        // 取引先名
        name = data[i++];
        // 郵便番号
        zip = data[i++];
        // 住所
        address = data[i++];
        // 電話番号
        tel = data[i++];
        // FAX番号
        fax = data[i++];
        // URL
        url = data[i++];
        // 担当者氏名
        tanto = data[i++];
        // e-mailアドレス
        email = data[i++];
        // 締め日
        shimeDate = data[i++];
        // 支払日
        shiharaiDate = data[i++];

        readMetaCulumns(data, i);
    }
}