All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.cloudfoundry.multiapps.controller.process.util.ServiceOperationGetter Maven / Gradle / Ivy

There is a newer version: 1.183.0
Show newest version
package org.cloudfoundry.multiapps.controller.process.util;

import java.util.List;
import java.util.UUID;

import jakarta.inject.Named;

import org.cloudfoundry.multiapps.controller.client.lib.domain.CloudServiceInstanceExtended;

import com.sap.cloudfoundry.client.facade.CloudControllerClient;
import com.sap.cloudfoundry.client.facade.domain.CloudEvent;
import com.sap.cloudfoundry.client.facade.domain.CloudServiceInstance;
import com.sap.cloudfoundry.client.facade.domain.ServiceOperation;

@Named
public class ServiceOperationGetter {

    private static final String USER_PROVIDED_SERVICE_EVENT_TYPE_DELETE = "audit.user_provided_service_instance.delete";
    private static final String SERVICE_EVENT_TYPE_DELETE = "audit.service_instance.delete";

    public ServiceOperation getLastServiceOperation(CloudControllerClient client, CloudServiceInstanceExtended service) {
        CloudServiceInstance serviceInstance = client.getServiceInstance(service.getName(), false);
        if (serviceInstance == null) {
            return getLastDeleteServiceOperation(client, service);
        }
        return serviceInstance.getLastOperation();
    }

    private ServiceOperation getLastDeleteServiceOperation(CloudControllerClient client, CloudServiceInstanceExtended service) {
        if (service.getMetadata() == null) {
            return null;
        }
        boolean isServiceDeleted = isServiceDeleted(client, service.getMetadata()
                                                                   .getGuid());
        ServiceOperation.State operationState = isServiceDeleted ? ServiceOperation.State.SUCCEEDED : ServiceOperation.State.IN_PROGRESS;
        return new ServiceOperation(ServiceOperation.Type.DELETE, ServiceOperation.Type.DELETE.name(), operationState);
    }

    private boolean isServiceDeleted(CloudControllerClient client, UUID uuid) {
        List serviceEvent = client.getEventsByActee(uuid);
        return serviceEvent.stream()
                           .anyMatch(cloudEvent -> isDeleteEvent(cloudEvent.getType()));
    }

    private boolean isDeleteEvent(String eventType) {
        return SERVICE_EVENT_TYPE_DELETE.equalsIgnoreCase(eventType) || USER_PROVIDED_SERVICE_EVENT_TYPE_DELETE.equalsIgnoreCase(eventType);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy