package com.constellio.model.entities.security.global; import static java.util.Arrays.asList; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.UUID; import org.joda.time.LocalDate; import com.constellio.model.entities.records.Record; import com.constellio.model.entities.records.wrappers.Group; import com.constellio.model.entities.records.wrappers.RecordWrapper; import com.constellio.model.entities.records.wrappers.User; import com.constellio.model.entities.security.Authorization; import com.constellio.model.entities.security.global.AuthorizationDetails; import com.constellio.model.entities.security.Role; import com.constellio.model.services.records.RecordUtils; public class AuthorizationAddRequest { private String id; private String collection; private List<String> principals; private String target; private List<String> roles; private Authorization existingAuthorization; private LocalDate start, end; private User executedBy; private AuthorizationAddRequest(String collection) { this(collection, null); } private AuthorizationAddRequest(String collection, String id) { this.principals = principals; this.collection = collection; this.id = id; } public AuthorizationAddRequest forPrincipalsIds(List<String> principals) { this.principals = principals; return this; } public AuthorizationAddRequest forUsers(String... users) { this.principals = asList(users); return this; } public AuthorizationAddRequest forGroups(Group... groups) { this.principals = new RecordUtils().toWrappedRecordIdsList(asList(groups)); return this; } public AuthorizationAddRequest forUsers(User... users) { this.principals = new RecordUtils().toWrappedRecordIdsList(asList(users)); return this; } public AuthorizationAddRequest forPrincipalsIds(String... principals) { this.principals = asList(principals); return this; } public AuthorizationAddRequest on(String targetWrappersId) { this.target = targetWrappersId; return this; } public AuthorizationAddRequest startingOn(LocalDate date) { this.start = date; return this; } public AuthorizationAddRequest endingOn(LocalDate date) { this.end = date; return this; } public AuthorizationAddRequest during(LocalDate start, LocalDate end) { this.start = start; this.end = end; return this; } public AuthorizationAddRequest on(Record targetRecord) { this.target = targetRecord.getId(); return this; } public AuthorizationAddRequest on(RecordWrapper targetRecord) { this.target = targetRecord.getId(); return this; } private AuthorizationAddRequest withRoles(List<String> roles) { this.roles = roles; return this; } public AuthorizationAddRequest givingReadDeleteAccess() { return withRoles(asList(Role.READ, Role.DELETE)); } public AuthorizationAddRequest givingReadAccess() { return withRoles(asList(Role.READ)); } public AuthorizationAddRequest givingReadWriteAccess() { return withRoles(asList(Role.READ, Role.WRITE)); } public AuthorizationAddRequest givingReadWriteDeleteAccess() { return withRoles(asList(Role.READ, Role.WRITE, Role.DELETE)); } public AuthorizationAddRequest giving(String... roles) { return withRoles(asList(roles)); } public AuthorizationAddRequest giving(List<String> roles) { return withRoles(roles); } public AuthorizationAddRequest giving(Role... roles) { List<String> rolesCodes = new ArrayList<>(); for (Role role : roles) { rolesCodes.add(role.getCode()); } return withRoles(rolesCodes); } public static AuthorizationAddRequest authorizationForUsers(User... users) { return new AuthorizationAddRequest(users[0].getCollection()).forUsers(users); } public static AuthorizationAddRequest authorizationInCollection(String collection) { return new AuthorizationAddRequest(collection); } public static AuthorizationAddRequest authorizationInCollectionWithId(String collection, String id) { return new AuthorizationAddRequest(collection, id); } public String getId() { return id; } public String getCollection() { return collection; } public List<String> getPrincipals() { return principals; } public String getTarget() { return target; } public List<String> getRoles() { return roles; } public Authorization getExistingAuthorization() { return existingAuthorization; } public LocalDate getStart() { return start; } public LocalDate getEnd() { return end; } public User getExecutedBy() { return executedBy; } public AuthorizationAddRequest setExecutedBy(User executedBy) { this.executedBy = executedBy; return this; } }