このアーカイブは同期化されません。 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 のシリアライズ(永続化・直列化)機能を使い、
直接操作しないデータとして取り扱うことにする。