package io.cattle.platform.iaas.api.manager; import io.cattle.platform.api.resource.jooq.AbstractJooqResourceManager; import io.cattle.platform.core.constants.InstanceConstants; import io.cattle.platform.core.model.Instance; import io.cattle.platform.util.type.CollectionUtils; import io.github.ibuildthecloud.gdapi.exception.ClientVisibleException; import io.github.ibuildthecloud.gdapi.request.ApiRequest; import io.github.ibuildthecloud.gdapi.util.ResponseCodes; import java.util.ArrayList; import java.util.List; import java.util.Map; public class InstanceManager extends AbstractJooqResourceManager { @Override public String[] getTypes() { return new String[] { "instance", "container", "virtualMachine" }; } @Override public Class<?>[] getTypeClasses() { return new Class<?>[] { Instance.class }; } @Override protected Object deleteInternal(String type, String id, Object obj, ApiRequest request) { if (!(obj instanceof Instance)) { return super.deleteInternal(type, id, obj, request); } try { return super.deleteInternal(type, id, obj, request); } catch (ClientVisibleException e) { if (ResponseCodes.METHOD_NOT_ALLOWED == e.getStatus() ) { scheduleProcess(InstanceConstants.PROCESS_STOP, obj, CollectionUtils.asMap(InstanceConstants.REMOVE_OPTION, true)); return getObjectManager().reload(obj); } else { throw e; } } } @SuppressWarnings("unchecked") @Override protected <T> T createAndScheduleObject(Class<T> clz, Map<String, Object> properties) { Object count = properties.get(InstanceConstants.FIELD_COUNT); if (count instanceof Number && ((Number) count).intValue() > 1) { int max = ((Number) count).intValue(); List<Object> result = new ArrayList<Object>(max); for (int i = 0; i < max; i++) { Object instance = super.createAndScheduleObject(clz, properties); result.add(instance); } return (T) result; } else { return super.createAndScheduleObject(clz, properties); } } }