package cactusServer.models; import java.net.URI; import java.util.HashMap; import java.util.Map; import org.apache.commons.lang3.RandomStringUtils; import cactusServer.entities.AddressedEntity; import cactusServer.entities.Instance; import cactusServer.utils.RandomStringGenerator; import net.arnx.jsonic.JSONHint; /** * インスタンスを管理するクラス * * @author ryo isitani * */ public class Instances { private static Instances theInstance = null; private HashMap<String, Instance> instanceMap = new HashMap<>(); // instanceのIDと実体を管理 private static final int UNIQUE_ID_LENGTH = 12; private static final String INSTANCES_URI = "/CactusServer/rest/instances/"; private Instances() { } /** * Instancesクラスを取得する (シングルトン) * * @return */ public static Instances getInstance() { if (theInstance == null) { theInstance = new Instances(); } return theInstance; } // /** // * 新しいInstanceを作成してMapに追加する // * // * @param instance // * @return 新しく作成されたIDとInstanceのMap // */ // public AddressedEntity createInstance(Instance instance) { // String id = RandomStringGenerator.generateUniqueString(UNIQUE_ID_LENGTH, RandomStringGenerator.ALPHA_NUMERIC, instanceMap.keySet()); // instanceMap.put(id, instance); // return new AddressedEntity(URI.create(INSTANCES_URI + id).toString(), instance); // } /** * InstancesRestとのエラー解消用 (後で消す) * * @param instance * @return 新しく作成されたIDとInstanceのMap */ public Map<String, Instance> createInstance(Instance instance) { String id = RandomStringGenerator.generateUniqueString(UNIQUE_ID_LENGTH, RandomStringGenerator.ALPHA_NUMERIC, instanceMap.keySet()); instanceMap.put(id, instance); return new HashMap<String, Instance>() { {put(id, instance);} }; } /** * InstancesRestのエラー解消用 (後から消す) * @param id * @param name * @return */ public Instance createInstance(String id, String name) { // String id = createUniqueId(UNIQUE_ID_LENGTH, instanceMap.keySet()); Instance instance = new Instance(name, Instance.State.AVAILABLE); instanceMap.put(id, 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); } }