package io.cattle.platform.iaas.api.filter.stack; import io.cattle.platform.core.constants.ServiceConstants; import io.cattle.platform.core.dao.StackDao; import io.cattle.platform.core.model.Stack; import io.cattle.platform.iaas.api.filter.common.CachedOutputFilter; import io.cattle.platform.object.ObjectManager; import io.github.ibuildthecloud.gdapi.context.ApiContext; import io.github.ibuildthecloud.gdapi.model.Resource; import io.github.ibuildthecloud.gdapi.request.ApiRequest; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.inject.Inject; public class StackOutputFilter extends CachedOutputFilter<Map<Long, List<Object>>> { @Inject StackDao stackDao; @Inject ObjectManager objectManager; @Override public Class<?>[] getTypeClasses() { return new Class<?>[] { Stack.class }; } @Override public String[] getTypes() { return new String[] {}; } @Override public Resource filter(ApiRequest request, Object original, Resource converted) { if (request == null || "v1".equals(request.getVersion())) { return converted; } if (original instanceof Stack) { converted.getFields().put(ServiceConstants.STACK_FIELD_SERVICE_IDS, getCached(request).get(((Stack) original).getId())); } return converted; } @Override protected Map<Long, List<Object>> newObject(ApiRequest apiRequest) { if (apiRequest == null) { return new HashMap<>(); } List<Long> ids = getIds(apiRequest); return stackDao.getServicesForStack(ids, ApiContext.getContext().getIdFormatter()); } @Override protected Long getId(Object obj) { if (obj instanceof Stack) { return ((Stack) obj).getId(); } return null; } }