package logbook.config;
import java.io.IOException;
import logbook.config.bean.ShipGroupBean;
import logbook.config.bean.ShipGroupListBean;
import logbook.constants.AppConstants;
import logbook.gui.ApplicationMain;
import logbook.gui.logic.ShipGroupListener;
import logbook.gui.logic.ShipGroupObserver;
import logbook.internal.LoggerHolder;
import logbook.util.BeanUtils;
/**
* 所有艦娘グループを保存・復元します
*
*/
public class ShipGroupConfig {
/** ロガー */
private static final LoggerHolder LOG = new LoggerHolder(ShipGroupConfig.class);
/** 所有艦娘グループ */
private static ShipGroupListBean group;
/** 変更があったか */
private static boolean modified = false;
// 変更検出用
private static class ChangeListener implements ShipGroupListener {
@Override
public void listChanged() {
modified = true;
}
@Override
public void groupNameChanged(ShipGroupBean group) {
modified = true;
}
@Override
public void groupShipChanged(ShipGroupBean group) {
modified = true;
}
}
// 始めてアクセスした時に読み込む
static {
load();
// 変更を検知する
ShipGroupObserver.addListener(new ChangeListener());
}
/**
* 設定ファイルに書き込みます
*/
public static void store() throws IOException {
// 変更があったときだけ書き込む
if (modified) {
if (group == null) {
group = new ShipGroupListBean();
}
ApplicationMain.sysPrint("グループファイル更新");
BeanUtils.writeObject(AppConstants.GROUP_CONFIG_FILE, group);
modified = false;
}
}
/**
* 所有艦娘グループを読み込みます
*/
private static void load() {
try {
ShipGroupListBean bean = BeanUtils.readObject(AppConstants.GROUP_CONFIG_FILE, ShipGroupListBean.class);
if (bean != null) {
group = bean;
} else {
group = new ShipGroupListBean();
}
} catch (Exception e) {
LOG.get().warn("所有艦娘グループを読み込みますに失敗しました", e);
}
}
/**
* 所有艦娘グループを取得します
*
* @return 所有艦娘グループ
*/
public static ShipGroupListBean get() {
return group;
}
}