package logbook.config;
import java.io.IOException;
import java.util.Map;
import javax.annotation.CheckForNull;
import logbook.config.bean.KdockBean;
import logbook.config.bean.KdockMapBean;
import logbook.constants.AppConstants;
import logbook.data.context.GlobalContext;
import logbook.dto.ResourceDto;
import logbook.dto.ShipDto;
import logbook.util.BeanUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
/**
* 建造ドックの投入資源を保存・復元します
*
*/
public class KdockConfig {
/** ロガー */
private static final Logger LOG = LogManager.getLogger(KdockConfig.class);
/** 建造ドックのBean */
private static KdockMapBean mapBean;
/**
* 建造ドックの投入資源を設定します
*
* @param dock ドック
* @param resource 資源
* @throws IOException IOException
*/
public static void store(String dock, ResourceDto resource) throws IOException {
if (mapBean == null) {
mapBean = new KdockMapBean();
}
KdockBean kdock = new KdockBean();
kdock.setType(resource.getType());
kdock.setFuel(resource.getFuel());
kdock.setAmmo(resource.getAmmo());
kdock.setMetal(resource.getMetal());
kdock.setBauxite(resource.getBauxite());
kdock.setResearchMaterials(resource.getResearchMaterials());
kdock.setShipId(resource.getSecretary().getId());
kdock.setHqLevel(resource.getHqLevel());
kdock.setFreeDock(resource.getFreeDock());
mapBean.getKdockMap().put(dock, kdock);
BeanUtils.writeObject(AppConstants.KDOCK_CONFIG_FILE, mapBean);
}
/**
* 建造ドックの投入資源を取得します
*
* @param dock ドック
* @return 建造ドックの投入資源
*/
@CheckForNull
public static ResourceDto load(String dock) {
try {
if (mapBean == null) {
mapBean = BeanUtils.readObject(AppConstants.KDOCK_CONFIG_FILE, KdockMapBean.class);
}
if (mapBean != null) {
KdockBean kdock = mapBean.getKdockMap().get(dock);
if (kdock == null) {
return null;
}
Map<Long, ShipDto> ships = GlobalContext.getShipMap();
if (!ships.isEmpty() && ships.containsKey(kdock.getShipId())) {
ResourceDto resource = new ResourceDto(kdock.getType(), kdock.getFuel(), kdock.getAmmo(),
kdock.getMetal(),
kdock.getBauxite(), kdock.getResearchMaterials(), ships.get(kdock.getShipId()),
kdock.getHqLevel());
resource.setFreeDock(kdock.getFreeDock());
return resource;
}
}
} catch (Exception e) {
LOG.warn("建造ドックの投入資源を取得しますに失敗しました", e);
}
return null;
}
/**
* 建造ドックの投入資源を削除します
*
* @param dock ドック
* @throws IOException IOException
*/
public static void remove(String dock) throws IOException {
if (mapBean != null) {
mapBean.getKdockMap().remove(dock);
}
BeanUtils.writeObject(AppConstants.KDOCK_CONFIG_FILE, mapBean);
}
}