package io.cattle.platform.iaas.api.volume; import io.cattle.platform.core.constants.VolumeConstants; import io.cattle.platform.core.dao.VolumeDao; import io.cattle.platform.core.model.Volume; import io.cattle.platform.object.meta.ObjectMetaDataManager; import io.cattle.platform.object.util.DataAccessor; import io.github.ibuildthecloud.gdapi.model.Resource; import io.github.ibuildthecloud.gdapi.request.ApiRequest; import io.github.ibuildthecloud.gdapi.response.ResourceOutputFilter; import java.util.HashSet; import java.util.List; import java.util.Set; import javax.inject.Inject; public class VolumeRevertRestoreActionOutputFilter implements ResourceOutputFilter { @Inject VolumeDao volumeDao; @Override public Resource filter(ApiRequest request, Object original, Resource converted) { if (!(original instanceof Volume)) { return converted; } Volume volume = (Volume)original; List<String> caps = DataAccessor.fieldStringList(volume, ObjectMetaDataManager.CAPABILITIES_FIELD); Set<String> capabilities = new HashSet<>(caps); boolean snapshotCapable = capabilities.contains(VolumeConstants.CAPABILITY_SNAPSHOT); if (!snapshotCapable) { converted.getActions().remove(VolumeConstants.ACTION_SNAPSHOT); } if (!snapshotCapable || volumeDao.isVolumeInUseByRunningInstance(volume.getId())) { converted.getActions().remove(VolumeConstants.ACTION_REVERT); converted.getActions().remove(VolumeConstants.ACTION_RESTORE); } return converted; } @Override public String[] getTypes() { return new String[] { "volume" }; } @Override public Class<?>[] getTypeClasses() { return new Class<?>[] { Volume.class }; } }