
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