package com.constellio.model.entities.security;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class Role {
private final String code;
private final String title;
private final String collection;
private final List<String> operationPermissions;
public static final String READ = "READ";
public static final Role READ_ROLE = new Role(READ);
public static final String WRITE = "WRITE";
public static final Role WRITE_ROLE = new Role(WRITE);
public static final String DELETE = "DELETE";
public static final Role DELETE_ROLE = new Role(DELETE);
public Role(String collection, String code, List<String> operationPermissions) {
this.collection = collection;
this.code = code;
this.title = code;
List<String> allPermissionsList = new ArrayList<>(operationPermissions);
Collections.sort(allPermissionsList);
this.operationPermissions = Collections.unmodifiableList(allPermissionsList);
}
public Role(String collection, String code, String title, List<String> operationPermissions) {
this.collection = collection;
this.code = code;
this.title = title;
List<String> allPermissionsList = new ArrayList<>(operationPermissions);
Collections.sort(allPermissionsList);
this.operationPermissions = Collections.unmodifiableList(allPermissionsList);
}
private Role(String code) {
this.collection = null;
this.code = code;
this.title = code;
this.operationPermissions = Collections.emptyList();
//this.contentPermissions = Arrays.asList(contentPermissions);
}
public String getCode() {
return code;
}
public String getTitle() {
return title;
}
public List<String> getOperationPermissions() {
return operationPermissions;
}
public String getCollection() {
return collection;
}
public boolean isContentPermissionRole() {
return operationPermissions.isEmpty();
}
public boolean hasOperationPermission(String wantedOperationPermission) {
return operationPermissions.contains(wantedOperationPermission);
}
public Role withTitle(String title) {
return new Role(collection, code, title, operationPermissions);
}
public Role withPermissions(List<String> operationPermissions) {
List<String> allPermissionsList = new ArrayList<>(operationPermissions);
Collections.sort(allPermissionsList);
return new Role(collection, code, title, allPermissionsList);
}
public Role withNewPermissions(List<String> operationPermissions) {
Set<String> allPermissions = new HashSet<>(this.operationPermissions);
allPermissions.addAll(operationPermissions);
List<String> allPermissionsList = new ArrayList<>(allPermissions);
Collections.sort(allPermissionsList);
return new Role(collection, code, title, allPermissionsList);
}
public static List<String> toCodes(List<Role> roles) {
List<String> codes = new ArrayList<>();
for (Role role : roles) {
codes.add(role.getCode());
}
return codes;
}
}