2007 年 4 月 1 日 21 時 48 分

Value Bean の設計


このアーカイブは同期化されません。 mixi の日記が更新されても、このアーカイブには反映されません。


まずは、Value Bean の方をさっさと作ろう。
感覚としては、パケットフィルタの設定ファイルがあり、
その設定ファイルの構造を表現したクラスが、
Value Bean ということになる。

さくっと設計してみよう。

Filter:
    FilterInfo info
    List<FilterRule> rules

FilterInfo:
    String defaultAction
    String note

FilterRule:
    boolean enabled
    String action
    String[] protocols
    FilterService source
    FilterService destination
    String note

FilterService:
    String network
    String port

========== Filter.java ==========
package jp.loafer.test.beans;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

public class Filter implements Serializable {

    public Filter() {
        info = new FilterInfo();
        rules = new ArrayList<FilterRule>();
    }

    public FilterInfo getInfo() {
        return info;
    }
    public void setInfo(FilterInfo info) {
        this.info = info;
    }

    public List<FilterRule> getRules() {
        return rules;
    }
    public void setRules(List<FilterRule> rules) {
        this.rules = rules;
    }

    private FilterInfo info;
    private List<FilterRule> rules;

    static private final long serialVersionUID = 1L;
}
========== end of Filter.java ==========

========== FilterInfo.java ==========
package jp.loafer.test.beans;

import java.io.Serializable;

public class FilterInfo implements Serializable {

    public FilterInfo() {
        defaultAction = "deny";
        note = null;
    }

    public String getDefaultAction() {
        return defaultAction;
    }
    public void setDefaultAction(
            String defaultAction) {
        this.defaultAction = defaultAction;
    }

    public String getNote() {
        return note;
    }
    public void setNote(String note) {
        this.note = note;
    }

    private String defaultAction;
    private String note;

    static private final long serialVersionUID = 1L;

}
========== end of FilterInfo.java ==========

========== FilterRule.java ==========
package jp.loafer.test.beans;

import java.io.Serializable;

public class FilterRule implements Serializable {

    public FilterRule() {
        enabled = false;
        action = "deny";
        protocols = new String[0];
        source = new FilterService();
        destination = new FilterService();
        note = null;
    }

    public boolean isEnabled() {
        return enabled;
    }
    public void setEnabled(boolean enabled) {
        this.enabled = enabled;
    }

    public String getAction() {
        return action;
    }
    public void setAction(String action) {
        this.action = action;
    }

    public String[] getProtocols() {
        return protocols;
    }
    public void setProtocols(String[] protocols) {
        this.protocols = protocols;
    }

    public FilterService getSource() {
        return source;
    }
    public void setSource(FilterService source) {
        this.source = source;
    }

    public FilterService getDestination() {
        return destination;
    }
    public void setDestination(FilterService destination) {
        this.destination = destination;
    }

    public String getNote() {
        return note;
    }
    public void setNote(String note) {
        this.note = note;
    }

    private boolean enabled; // 有効かどうか
    private String action; // 処理: allow / deny
    private String[] protocols; // tcp, udp 等
    private FilterService source; // 発信
    private FilterService destination; // 宛先

    private String note; // 備考
   
    static private final long serialVersionUID = 1L;

}
========== end of FilterRule.java ==========

========== FilterService.java ==========
package jp.loafer.test.beans;

import java.io.Serializable;

public class FilterService implements Serializable {

    public FilterService() {
        network = "*"; // all
        port = "*"; // all
    }

    public String getNetwork() {
        return network;
    }
    public void setNetwork(String network) {
        this.network = network;
    }

    public String getPort() {
        return port;
    }
    public void setPort(String port) {
        this.port = port;
    }

    private String network; // * or IP[/ビット長]
    private String port; // * or ポート

    static private final long serialVersionUID = 1L;

}
========== end of FilterService.java ==========

いや~。クラスのソースを書くとすげー長くなるな。

Filter クラスが、パケットフィルタの設定を表す。
アプリケーションは設定ファイルを直接読み書きせず、
このクラスのインスタンスを経由して取り扱うことにしよう。

本来は、設定ファイルと Filter クラスの橋渡しも必要だ。

例えば、設定ファイルを読み込んで、
Filter インスタンス成する、Loader クラスや、
その逆の Saver クラスを作るか、
Filter クラスを Externalizable として実装し、
readExternal/writeExternal で読み書きすることができる。

しかしながら、今回はその作業は重要ではないので、
単純に Java のシリアライズ(永続化・直列化)機能を使い、
直接操作しないデータとして取り扱うことにする。



Copyright (c) 1994-2007 Project Loafer. All rights reserved.