package com.constellio.model.services.schemas.builders;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import com.constellio.model.entities.schemas.MetadataAccessRestriction;
public class MetadataAccessRestrictionBuilder {
List<String> requiredReadRoles;
List<String> requiredWriteRoles;
List<String> requiredModificationRoles;
List<String> requiredDeleteRoles;
public static MetadataAccessRestrictionBuilder modify(MetadataAccessRestriction accessRestriction) {
MetadataAccessRestrictionBuilder builder = new MetadataAccessRestrictionBuilder();
builder.requiredReadRoles = accessRestriction.getRequiredReadRoles();
builder.requiredWriteRoles = accessRestriction.getRequiredWriteRoles();
builder.requiredModificationRoles = accessRestriction.getRequiredModificationRoles();
builder.requiredDeleteRoles = accessRestriction.getRequiredDeleteRoles();
return builder;
}
public static MetadataAccessRestrictionBuilder create() {
return modify(new MetadataAccessRestriction());
}
public List<String> getRequiredReadRoles() {
return requiredReadRoles;
}
public List<String> getRequiredWriteRoles() {
return requiredWriteRoles;
}
public List<String> getRequiredModificationRoles() {
return requiredModificationRoles;
}
public List<String> getRequiredDeleteRoles() {
return requiredDeleteRoles;
}
public MetadataAccessRestrictionBuilder withRequiredReadRole(String role) {
requiredReadRoles.add(role);
return this;
}
public MetadataAccessRestrictionBuilder withRequiredWriteRole(String role) {
requiredWriteRoles.add(role);
return this;
}
public MetadataAccessRestrictionBuilder withRequiredModificationRole(String role) {
requiredModificationRoles.add(role);
return this;
}
public MetadataAccessRestrictionBuilder withRequiredDeleteRole(String role) {
requiredDeleteRoles.add(role);
return this;
}
public MetadataAccessRestrictionBuilder withRequiredWriteAndDeleteRole(String role) {
requiredWriteRoles.add(role);
requiredDeleteRoles.add(role);
return this;
}
public MetadataAccessRestrictionBuilder withRequiredRole(String role) {
requiredReadRoles.add(role);
requiredWriteRoles.add(role);
requiredModificationRoles.add(role);
requiredDeleteRoles.add(role);
return this;
}
public MetadataAccessRestriction build() {
List<String> unmodifiableReadRequiredRoles = Collections.unmodifiableList(withoutDuplicates(requiredReadRoles));
List<String> unmodifiableWriteRequiredRoles = Collections.unmodifiableList(withoutDuplicates(requiredWriteRoles));
List<String> unmodifiableModificationRequiredRoles = Collections
.unmodifiableList(withoutDuplicates(requiredModificationRoles));
List<String> unmodifiableDeleteRequiredRoles = Collections.unmodifiableList(withoutDuplicates(requiredDeleteRoles));
return new MetadataAccessRestriction(unmodifiableReadRequiredRoles, unmodifiableWriteRequiredRoles,
unmodifiableModificationRequiredRoles, unmodifiableDeleteRequiredRoles);
}
private List<String> withoutDuplicates(List<String> elements) {
List<String> withoutDuplicates = new ArrayList<>();
for (String element : elements) {
if (!withoutDuplicates.contains(element)) {
withoutDuplicates.add(element);
}
}
return withoutDuplicates;
}
public boolean isEmpty() {
return requiredReadRoles.isEmpty()
&& requiredWriteRoles.isEmpty()
&& requiredModificationRoles.isEmpty()
&& requiredDeleteRoles.isEmpty();
}
}