Newer
Older
CactusServer / src / main / java / cactusServer / models / Instances.java
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);
	}
}