package io.cattle.platform.servicediscovery.api.filter; import io.cattle.platform.core.addon.ToServiceUpgradeStrategy; import io.cattle.platform.core.constants.ServiceConstants; import io.cattle.platform.core.model.Service; import io.cattle.platform.json.JsonMapper; import io.cattle.platform.object.util.DataAccessor; import io.github.ibuildthecloud.gdapi.context.ApiContext; import io.github.ibuildthecloud.gdapi.id.IdFormatter; import io.github.ibuildthecloud.gdapi.model.Resource; import io.github.ibuildthecloud.gdapi.request.ApiRequest; import io.github.ibuildthecloud.gdapi.response.ResourceOutputFilter; import javax.inject.Inject; import javax.inject.Named; @Named public class ServiceOutputFilter implements ResourceOutputFilter { @Inject JsonMapper jsonMapper; @Override public Resource filter(ApiRequest request, Object original, Resource converted) { converted = convertUpgradeField(original, converted); return converted; } public Resource convertUpgradeField(Object original, Resource converted) { String type = ApiContext.getSchemaFactory().getSchemaName(Service.class); if (type == null) { return converted; } io.cattle.platform.core.addon.ServiceUpgrade upgrade = DataAccessor.field(original, ServiceConstants.FIELD_UPGRADE, jsonMapper, io.cattle.platform.core.addon.ServiceUpgrade.class); if (upgrade == null || upgrade.getToServiceStrategy() == null) { return converted; } ToServiceUpgradeStrategy toServiceStrategy = upgrade.getToServiceStrategy(); if (toServiceStrategy.getToServiceId() == null) { return converted; } IdFormatter formatter = ApiContext.getContext().getIdFormatter(); toServiceStrategy.setToServiceId(formatter.formatId(type, toServiceStrategy.getToServiceId()).toString()); upgrade.setToServiceStrategy(toServiceStrategy); converted.getFields().put(ServiceConstants.FIELD_UPGRADE, upgrade); return converted; } @Override public String[] getTypes() { return new String[]{ServiceConstants.KIND_SERVICE}; } @Override public Class<?>[] getTypeClasses() { return new Class<?>[]{Service.class}; } }