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

io.kestra.plugin.gcp.gcs.models.BucketLifecycleRule Maven / Gradle / Ivy

package io.kestra.plugin.gcp.gcs.models;

import com.google.cloud.storage.BucketInfo;
import io.kestra.core.models.annotations.PluginProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Builder;
import lombok.Getter;
import lombok.extern.jackson.Jacksonized;

import java.util.List;
import java.util.stream.Collectors;
import jakarta.validation.constraints.NotNull;

@Getter
@Builder
@Jacksonized
public class BucketLifecycleRule {
    @NotNull
    @Schema(
        title = "The condition"
    )
    @PluginProperty(dynamic = true)
    private final Condition condition;

    @NotNull
    @Schema(
        title = "The action to take when a lifecycle condition is met"
    )
    @PluginProperty(dynamic = true)
    private final Action action;

    @Getter
    @Builder
    @Jacksonized
    public static class Condition {
        @NotNull
        @Schema(
            title = "The Age condition is satisfied when an object reaches the specified age (in days). Age is measured from the object's creation time."
        )
        @PluginProperty(dynamic = true)
        private final Integer age;
    }

    @Getter
    @Builder
    @Jacksonized
    public static class Action {
        @NotNull
        @Schema(
            title = "The type of the action (DELETE ...)"
        )
        @PluginProperty(dynamic = true)
        private final Action.Type type;

        @Schema(
            title = "The value for the action (if any)"
        )
        @PluginProperty(dynamic = true)
        private final String value;

        public enum Type {
            DELETE,
            SET_STORAGE_CLASS
        }
    }

    @Getter
    @Builder
    @Jacksonized
    public static class DeleteAction implements LifecycleAction {
        @Override
        public BucketInfo.LifecycleRule convert(Condition condition) {
            return new BucketInfo.LifecycleRule(
                BucketInfo.LifecycleRule.LifecycleAction.newDeleteAction(),
                BucketInfo.LifecycleRule.LifecycleCondition.newBuilder().setAge(condition.getAge()).build()
            );
        }
    }

    @Getter
    @Builder
    @Jacksonized
    public static class SetStorageAction implements LifecycleAction {
        @NotNull
        @Schema(
            title = "The storage class (standard, nearline, coldline ...)"
        )
        @PluginProperty(dynamic = true)
        private final StorageClass storageClass;

        @Override
        public BucketInfo.LifecycleRule convert(Condition condition) {
            return new BucketInfo.LifecycleRule(
                BucketInfo.LifecycleRule.LifecycleAction.newSetStorageClassAction(com.google.cloud.storage.StorageClass.valueOf(this.storageClass.name())),
                BucketInfo.LifecycleRule.LifecycleCondition.newBuilder().setAge(condition.getAge()).build()
            );
        }
    }

    public interface LifecycleAction {
        BucketInfo.LifecycleRule convert(Condition condition);
    }

    public static List convert(List rules) {
        return rules
            .stream()
            .map(c -> c.convert())
            .collect(Collectors.toList());
    }

    public BucketInfo.LifecycleRule convert() {
        if (this.getCondition() == null || this.getAction() == null) {
            return null;
        }

        switch (this.getAction().getType()) {
            case DELETE:
                return BucketLifecycleRule.DeleteAction.builder()
                    .build()
                    .convert(this.getCondition());
            case SET_STORAGE_CLASS:
                return BucketLifecycleRule.SetStorageAction.builder()
                    .storageClass(StorageClass.valueOf((String) this.getAction().getValue()))
                    .build()
                    .convert(this.getCondition());
            default:
                return null;

        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy