package io.cattle.platform.servicediscovery.api.filter; import io.cattle.platform.core.model.Stack; import io.cattle.platform.iaas.api.filter.common.AbstractDefaultResourceManagerFilter; import io.cattle.platform.object.meta.ObjectMetaDataManager; import io.github.ibuildthecloud.gdapi.condition.Condition; import io.github.ibuildthecloud.gdapi.condition.ConditionType; import io.github.ibuildthecloud.gdapi.request.ApiRequest; import io.github.ibuildthecloud.gdapi.request.resource.ResourceManager; import io.github.ibuildthecloud.gdapi.request.resource.ResourceManagerLocator; import io.github.ibuildthecloud.gdapi.validation.ValidationErrorCodes; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.inject.Inject; import javax.inject.Named; @Named public class StackCreateValidationFilter extends AbstractDefaultResourceManagerFilter { @Inject ResourceManagerLocator locator; @Override public Class<?>[] getTypeClasses() { return new Class<?>[] { Stack.class }; } @Override public Object create(String type, ApiRequest request, ResourceManager next) { Stack env = request.proxyRequestObject(Stack.class); if (env.getName().startsWith("-") || env.getName().endsWith("-")) { ValidationErrorCodes.throwValidationError(ValidationErrorCodes.INVALID_CHARACTERS, "name"); } ResourceManager rm = locator.getResourceManagerByType(type); Map<Object, Object> criteria = new HashMap<>(); criteria.put(ObjectMetaDataManager.NAME_FIELD, env.getName()); criteria.put(ObjectMetaDataManager.REMOVED_FIELD, new Condition(ConditionType.NULL)); List<?> existingEnv = rm.list(type, criteria, null); if (!existingEnv.isEmpty()) { ValidationErrorCodes.throwValidationError(ValidationErrorCodes.NOT_UNIQUE, "name"); } return super.create(type, request, next); } }