package cactusServer.models; import java.util.HashMap; import java.util.HashSet; import cactusServer.entities.Instance; /** * インスタンスを管理するクラス * * @author ryo isitani * */ public class Instances { private static Instances theInstance = null; private HashMap<String, Instance> instanceMap = new HashMap<>(); // instanceのIDと実体を管理 private HashSet<String> instanceIdSet = new HashSet<>(); // 使用済みIDの集合 private Instances() { } /** * Instancesクラスを取得する (シングルトン) * * @return */ public static Instances getInstance() { if (theInstance == null) { theInstance = new Instances(); } return theInstance; } /** * 新しいInstanceを作成してMapに追加する * * @param instanceId * Instanceを識別する一意のID * @param name * インスタンス名 (仮) * @return 新しく作成されたInstance<br> * ただし, instanceIDが重複した場合は新規Instanceを作成せずにnullを返す */ public Instance createInstance(String instanceId, String name) { if (!instanceIdSet.add(instanceId)) { return null; } Instance instance = new Instance(name); instanceMap.put(instanceId, instance); return instance; } /** * IDに対応するInstanceを取得して返す * * @param instanceId * 取得したいInstanceのID * @return IDに対応するInstance */ public Instance getInstance(String instanceId) { return instanceMap.get(instanceId); } /** * IDに対応するInstanceをMapから削除して返す * * @param instanceId * Instanceを識別する一意のID * @return Mapから削除されたInstance */ public Instance destroyInstance(String instanceId) { return instanceMap.remove(instanceId); } }