package io.cattle.platform.iaas.api.filter.common; import io.github.ibuildthecloud.gdapi.request.ApiRequest; import io.github.ibuildthecloud.gdapi.response.ResourceOutputFilter; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; public abstract class CachedOutputFilter<T> implements ResourceOutputFilter { protected abstract T newObject(ApiRequest apiRequest); protected abstract Long getId(Object obj); protected T getCached(ApiRequest apiRequest) { if (apiRequest == null) { return null; } @SuppressWarnings("unchecked") T cached = (T)apiRequest.getAttribute(this); if (cached == null) { cached = newObject(apiRequest); apiRequest.setAttribute(this, cached); } return cached; } protected List<Long> getIds(ApiRequest apiRequest) { if (apiRequest == null) { return Collections.emptyList(); } Object responseObj = apiRequest.getResponseObject(); if (responseObj instanceof List<?>) { List<Long> ret = new ArrayList<>(((List<?>) responseObj).size()); for (Object obj : ((List<?>) responseObj)) { Long id = getId(obj); if (id != null) { ret.add(id); } } return ret; } else { Long id = getId(responseObj); if (id != null) { return Arrays.asList(id); } } return Collections.emptyList(); } }