Index: [Article Count Order] [Thread]

Date:  Sun, 17 Sep 2000 02:09:05 +0900
From:  Kaoru Hosokawa <khosokawa@....com>
Subject:  [XP-jp:00895] Re: VXP タスク3 	--Config
To:  extremeprogramming-jp@....jp (extremeprogramming-jp ML)
Message-Id:  <B5E9D79A.37C9%khosokawa@....com>
In-Reply-To:  <39C377C3.95263051@....jp>
Posted:  Sun, 17 Sep 2000 02:06:19 +0900
X-Mail-Count: 00895

ホソカワです。

on 00.9.16 10:20 PM, firo@....jp at firo@....jp wrote:

> 矢崎です。
> 
> firo@....jp wrote:
> 
>> (太郎さん)
>> コンパイル、テスト、よし通った。
>> 後、$-MemberList行がなかった場合も同じような処理
>> をすればConfigはおしまいかな?
>> 
> 
> (太郎さん)
> ということで、$-MemberListについても同じような対応を
> しました。
> 
> ConfigTestに
> testNoMemberListConfig1、2、3を追加
> 
> Configの
> String getMemberListFileNameの最初に以下の2行を追加
> if (nameOfMemberListFile == null) throw new IllegalArgumentException();
> if (nameOfMemberListFile.length() == 0) throw new IllegalArgumentException();
> 

もうちょっときれいになると思います。name と nameOfMemberListFile が正しいか
どうかチェックするメソッドを導入します。(Once and Only Once に従って、
isEmptyString にまとめました。)

    private boolean isValidMLName(String name) {
        return !isEmptyString(name);
    }
 
    private boolean isValidMemberListFileName(String fileName) {
        return !isEmptyString(fileName);
    }

    private boolean isEmptyString(String str) {
        return str == null || str.length() == 0;
    }

それから、これは、ユーザーに有意義な情報ということで、例外も追加します。

    class BadMLName extends Exception { }
    class BadMemberListFileName extends Exception { }

それで、class Config を refactor すると、

/*
 * @(#)Config.java
 */
package XP.jp.co.esm.wiki.extremedomo;

import java.util.*;
import java.io.*;

public class BadMLName extends Exception { }
public class BadMemberListFileName extends Exception { }

public class Config {

    public Config(String nameOfConfigFile) {

        BufferedReader bufIn = null;
        try {
            bufIn = new BufferedReader(new FileReader(nameOfConfigFile));

            String fileLine;

            while (true) {
                fileLine = bufIn.readLine();
                if (fileLine == null)
                    break;

                if (fileLine.startsWith("X-ML-Name:")) {
                    name = fileLine.substring("X-ML-Name:".length()).trim();
                    if (!isValidMLName(name))
                        throw new BadMLName();
                }

                if (fileLine.startsWith("$-MemberList:")) {
                    nameOfMemberListFile =
fileLine.substring("$-MemberList:".length()).trim();
                    if (!isValidMemberListFileName(nameOfMemberListFile))
                        throw new BadMemberListFileName();
                }

                if (fileLine.startsWith("X-"))
                    xList.add(fileLine.trim());
            }
        } catch (FileNotFoundException e) {
            // What is exception handling carried out?
            throw new IllegalArgumentException();

        } catch (IOException e) {
            // What is exception handling carried out?
        } finally {
            try {
                if (bufIn != null)
                    bufIn.close();
            } catch (Exception e) {
            }
        }
    }

    public String getName() {
        return name;
    }

    public Iterator getXInfo() {
        return xList.iterator();
    }

    public String getMemberListFileName(){
        return nameOfMemberListFile;
    }

    private boolean isValidMLName(String name) {
        return !isEmptyString(name);
    }
 
    private boolean isValidMemberListFileName(String fileName) {
        return !isEmptyString(fileName);
    }

    private boolean isEmptyString(String str) {
        return str == null || str.length() == 0;
    }

    private String name;
    private List xList = new ArrayList();
    private String nameOfMemberListFile;

}

-- 
Kaoru Hosokawa
khosokawa@....com