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

com.eventstore.dbclient.StreamAcl Maven / Gradle / Ivy

package com.eventstore.dbclient;

import java.util.*;

public class StreamAcl implements Acl {
    private ArrayList readRoles;
    private ArrayList writeRoles;
    private ArrayList deleteRoles;
    private ArrayList metaReadRoles;
    private ArrayList metaWriteRoles;

    public StreamAcl addReadRoles(String... roles) {
        this.readRoles = this.readRoles == null ? new ArrayList<>() : this.readRoles;
        this.readRoles.addAll(Arrays.asList(roles));

        return this;
    }

    public StreamAcl addWriteRoles(String... roles) {
        this.writeRoles = this.writeRoles == null ? new ArrayList<>() : this.writeRoles;
        this.writeRoles.addAll(Arrays.asList(roles));

        return this;
    }

    public StreamAcl addDeleteRoles(String... roles) {
        this.deleteRoles = this.deleteRoles == null ? new ArrayList<>() : this.deleteRoles;
        this.deleteRoles.addAll(Arrays.asList(roles));

        return this;
    }

    public StreamAcl addMetaReadRoles(String... roles) {
        this.metaReadRoles = this.metaReadRoles == null ? new ArrayList<>() : this.metaReadRoles;
        this.metaReadRoles.addAll(Arrays.asList(roles));

        return this;
    }

    public StreamAcl addMetaWriteRoles(String... roles) {
        this.metaWriteRoles = this.metaWriteRoles == null ? new ArrayList<>() : this.metaWriteRoles;
        this.metaWriteRoles.addAll(Arrays.asList(roles));

        return this;
    }

    private static void serializeRoles(HashMap output, String key, ArrayList target) {
        if (target == null)
            return;

        if (target.size() == 1) {
            output.put(key, target.get(0));
        } else {
            output.put(key, target);
        }
    }

    private static ArrayList deserializeRoles(HashMap source, String key) {
        ArrayList list = null;
        Object value = source.get(key);

        if (value != null) {
            list = new ArrayList<>();

            if (value instanceof String) {
                list.add((String) value);
            } else if (value instanceof ArrayList) {
                list.addAll((ArrayList) value);
            } else {
                throw new RuntimeException("Unsupported role type: " + value.getClass());
            }
        }

        return list;
    }

    @Override
    public Object serialize() {
        HashMap output = new HashMap<>();
        serializeRoles(output, "$r", this.readRoles);
        serializeRoles(output, "$w", this.writeRoles);
        serializeRoles(output, "$d", this.deleteRoles);
        serializeRoles(output, "$mr", this.metaReadRoles);
        serializeRoles(output, "$mw", this.metaWriteRoles);

        return output;
    }

    public static StreamAcl deserialize(HashMap source) {
        StreamAcl acl = new StreamAcl();

        acl.readRoles = deserializeRoles(source, "$r");
        acl.writeRoles = deserializeRoles(source, "$w");
        acl.deleteRoles = deserializeRoles(source, "$d");
        acl.metaReadRoles = deserializeRoles(source, "$mr");
        acl.metaWriteRoles = deserializeRoles(source, "$mw");

        return acl;
    }
    public ArrayList getReadRoles() {
        return readRoles;
    }

    public ArrayList getWriteRoles() {
        return writeRoles;
    }

    public ArrayList getDeleteRoles() {
        return deleteRoles;
    }

    public ArrayList getMetaReadRoles() {
        return metaReadRoles;
    }

    public ArrayList getMetaWriteRoles() {
        return metaWriteRoles;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        StreamAcl streamAcl = (StreamAcl) o;
        return Objects.equals(readRoles, streamAcl.readRoles) && Objects.equals(writeRoles, streamAcl.writeRoles) && Objects.equals(deleteRoles, streamAcl.deleteRoles) && Objects.equals(metaReadRoles, streamAcl.metaReadRoles) && Objects.equals(metaWriteRoles, streamAcl.metaWriteRoles);
    }

    @Override
    public int hashCode() {
        return Objects.hash(readRoles, writeRoles, deleteRoles, metaReadRoles, metaWriteRoles);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy