package com.constellio.model.entities.security.global;
import static java.util.Arrays.asList;
import java.util.List;
import org.joda.time.LocalDate;
import com.constellio.model.entities.records.Record;
import com.constellio.model.entities.records.wrappers.User;
import com.constellio.model.entities.security.Authorization;
import com.constellio.model.entities.security.CustomizedAuthorizationsBehavior;
public class AuthorizationModificationRequest {
final String authorizationId;
final String collection;
final LocalDate newStartDate;
final LocalDate newEndDate;
final List<String> newPrincipalIds;
final String recordId;
final List<String> newAccessAndRoles;
final boolean removedOnRecord;
final User executedBy;
public AuthorizationModificationRequest(String authorizationId, String collection, String recordId) {
this.authorizationId = authorizationId;
this.collection = collection;
this.recordId = recordId;
this.newStartDate = null;
this.newEndDate = null;
this.newPrincipalIds = null;
this.newAccessAndRoles = null;
this.removedOnRecord = false;
this.executedBy = null;
}
public AuthorizationModificationRequest(String authorizationId, String collection, String recordId, LocalDate newStartDate,
LocalDate newEndDate, List<String> newPrincipalIds, List<String> newAccessAndRoles,
boolean removedOnRecord, User executedBy) {
this.authorizationId = authorizationId;
this.collection = collection;
this.recordId = recordId;
this.newStartDate = newStartDate;
this.newEndDate = newEndDate;
this.newPrincipalIds = newPrincipalIds;
this.newAccessAndRoles = newAccessAndRoles;
this.removedOnRecord = removedOnRecord;
this.executedBy = executedBy;
}
public AuthorizationModificationRequest withNewStartDate(LocalDate newStartDate) {
return new AuthorizationModificationRequest(authorizationId, collection, recordId, newStartDate, newEndDate,
newPrincipalIds, newAccessAndRoles, removedOnRecord, executedBy);
}
public AuthorizationModificationRequest withNewEndDate(LocalDate newEndDate) {
return new AuthorizationModificationRequest(authorizationId, collection, recordId, newStartDate, newEndDate,
newPrincipalIds, newAccessAndRoles, removedOnRecord, executedBy);
}
public AuthorizationModificationRequest withNewPrincipalIds(List<String> newPrincipalIds) {
return new AuthorizationModificationRequest(authorizationId, collection, recordId, newStartDate, newEndDate,
newPrincipalIds, newAccessAndRoles, removedOnRecord, executedBy);
}
public AuthorizationModificationRequest withNewPrincipalIds(String... newPrincipalIds) {
return new AuthorizationModificationRequest(authorizationId, collection, recordId, newStartDate, newEndDate,
asList(newPrincipalIds), newAccessAndRoles, removedOnRecord, executedBy);
}
public AuthorizationModificationRequest withNewAccessAndRoles(List<String> newAccessAndRoles) {
return new AuthorizationModificationRequest(authorizationId, collection, recordId, newStartDate, newEndDate,
newPrincipalIds, newAccessAndRoles, removedOnRecord, executedBy);
}
public AuthorizationModificationRequest withNewAccessAndRoles(String... newAccessAndRoles) {
return new AuthorizationModificationRequest(authorizationId, collection, recordId, newStartDate, newEndDate,
newPrincipalIds, asList(newAccessAndRoles), removedOnRecord, executedBy);
}
public AuthorizationModificationRequest removingItOnRecord() {
return new AuthorizationModificationRequest(authorizationId, collection, recordId, newStartDate, newEndDate,
newPrincipalIds, newAccessAndRoles, true, executedBy);
}
public AuthorizationModificationRequest setExecutedBy(User executedBy) {
return new AuthorizationModificationRequest(authorizationId, collection, recordId, newStartDate, newEndDate,
newPrincipalIds, newAccessAndRoles, removedOnRecord, executedBy);
}
public static AuthorizationModificationRequest modifyAuthorization(Authorization authorization) {
if (authorization == null) {
throw new IllegalArgumentException("Authorization required");
}
return new AuthorizationModificationRequest(authorization.getDetail().getId(), authorization.getDetail().getCollection(),
authorization.getGrantedOnRecord());
}
public static AuthorizationModificationRequest modifyAuthorizationOnRecord(Authorization authorization, Record record) {
if (authorization == null) {
throw new IllegalArgumentException("Authorization required");
}
if (record == null) {
throw new IllegalArgumentException("Record required");
}
return new AuthorizationModificationRequest(authorization.getDetail().getId(), record.getCollection(), record.getId());
}
public static AuthorizationModificationRequest modifyAuthorizationOnRecord(Authorization authorization, String record) {
if (authorization == null) {
throw new IllegalArgumentException("Authorization required");
}
if (record == null) {
throw new IllegalArgumentException("Record required");
}
return new AuthorizationModificationRequest(authorization.getDetail().getId(), authorization.getDetail().getCollection(),
record);
}
public static AuthorizationModificationRequest modifyAuthorizationOnRecord(String authorizationId, Record record) {
if (authorizationId == null) {
throw new IllegalArgumentException("Authorization id required");
}
if (record == null) {
throw new IllegalArgumentException("Record required");
}
return new AuthorizationModificationRequest(authorizationId, record.getCollection(), record.getId());
}
public static AuthorizationModificationRequest modifyAuthorizationOnRecord(String authorizationId, String collection,
String recordId) {
if (authorizationId == null) {
throw new IllegalArgumentException("Authorization id required");
}
if (collection == null) {
throw new IllegalArgumentException("Collection required");
}
if (recordId == null) {
throw new IllegalArgumentException("Record id required");
}
return new AuthorizationModificationRequest(authorizationId, collection, recordId);
}
public String getAuthorizationId() {
return authorizationId;
}
public String getCollection() {
return collection;
}
public LocalDate getNewStartDate() {
return newStartDate;
}
public LocalDate getNewEndDate() {
return newEndDate;
}
public List<String> getNewPrincipalIds() {
return newPrincipalIds;
}
public String getRecordId() {
return recordId;
}
public List<String> getNewAccessAndRoles() {
return newAccessAndRoles;
}
public boolean isRemovedOnRecord() {
return removedOnRecord;
}
public User getExecutedBy() {
return executedBy;
}
}