package com.constellio.app.modules.rm.wrappers; import com.constellio.app.modules.rm.model.CopyRetentionRule; import com.constellio.app.modules.rm.model.enums.*; import com.constellio.app.modules.rm.wrappers.structures.*; import com.constellio.model.entities.records.Content; import com.constellio.model.entities.records.Record; import com.constellio.model.entities.records.wrappers.RecordWrapper; import com.constellio.model.entities.records.wrappers.User; import com.constellio.model.entities.schemas.MetadataSchemaTypes; import org.joda.time.LocalDate; import java.util.ArrayList; import java.util.List; import static java.util.Arrays.asList; public class DecommissioningList extends RecordWrapper { public static final String SCHEMA_TYPE = "decommissioningList"; public static final String DEFAULT_SCHEMA = SCHEMA_TYPE + "_default"; public static final String DESCRIPTION = "description"; public static final String TYPE = "type"; public static final String FILING_SPACE = "filingSpace"; public static final String ADMINISTRATIVE_UNIT = "administrativeUnit"; public static final String ANALOGICAL_MEDIUM = "analogicalMedium"; public static final String ELECTRONIC_MEDIUM = "electronicMedium"; public static final String APPROVAL_REQUEST_DATE = "approvalRequestDate"; public static final String APPROVAL_REQUEST = "approvalRequest"; public static final String APPROVAL_DATE = "approvalDate"; public static final String APPROVAL_USER = "approvalUser"; public static final String PROCESSING_DATE = "processingDate"; public static final String PROCESSING_USER = "processingUser"; public static final String FOLDER_DETAILS = "folderDetails"; public static final String CONTAINER_DETAILS = "containerDetails"; public static final String FOLDERS = "folders"; public static final String CONTAINERS = "containers"; public static final String DOCUMENTS = "documents"; public static final String FOLDERS_MEDIA_TYPES = "foldersMediaTypes"; public static final String STATUS = "status"; public static final String UNIFORM_COPY_RULE = "uniformCopyRule"; public static final String UNIFORM_COPY_TYPE = "uniformCopyType"; public static final String UNIFORM_CATEGORY = "uniformCategory"; public static final String UNIFORM_RULE = "uniformRule"; public static final String UNIFORM = "uniform"; public static final String ORIGIN_ARCHIVISTIC_STATUS = "originArchivisticStatus"; public static final String VALIDATIONS = "validations"; public static final String PENDING_VALIDATIONS = "pendingValidations"; public static final String COMMENTS = "comments"; public static final String DOCUMENTS_REPORT_CONTENT = "documentsReportContent"; public static final String FOLDERS_REPORT_CONTENT = "foldersReportContent"; // Disabled fields public static final String VALIDATION_DATE = "validationDate"; // never used, disabled in 5.1.0 public static final String VALIDATION_USER = "validationUser"; // never used, disabled in 5.1.0 public DecommissioningList(Record record, MetadataSchemaTypes types) { super(record, types, SCHEMA_TYPE); } public DecommissioningList setTitle(String title) { super.setTitle(title); return this; } //Description public String getDescription() { return get(DESCRIPTION); } public DecommissioningList setDescription(String description) { set(DESCRIPTION, description); return this; } //Description public DecommissioningListType getDecommissioningListType() { return get(TYPE); } public DecommissioningList setDecommissioningListType(DecommissioningListType type) { set(TYPE, type); return this; } //FilingSpace public String getFilingSpace() { return get(FILING_SPACE); } public DecommissioningList setFilingSpace(String filingSpace) { set(FILING_SPACE, filingSpace); return this; } public DecommissioningList setFilingSpace(Record filingSpace) { set(FILING_SPACE, filingSpace); return this; } public DecommissioningList setFilingSpace(FilingSpace filingSpace) { set(FILING_SPACE, filingSpace); return this; } //AdministrativeUnit public String getAdministrativeUnit() { return get(ADMINISTRATIVE_UNIT); } public DecommissioningList setAdministrativeUnit(String administrativeUnit) { set(ADMINISTRATIVE_UNIT, administrativeUnit); return this; } public DecommissioningList setAdministrativeUnit(Record administrativeUnit) { set(ADMINISTRATIVE_UNIT, administrativeUnit); return this; } public DecommissioningList setAdministrativeUnit(AdministrativeUnit administrativeUnit) { set(ADMINISTRATIVE_UNIT, administrativeUnit); return this; } //Validations public List<DecomListValidation> getValidations() { return getList(VALIDATIONS); } public DecommissioningList setValidations(List<DecomListValidation> validations) { set(VALIDATIONS, validations); return this; } public DecommissioningList addValidationRequest(String userId, LocalDate requestDate) { List<DecomListValidation> validations = new ArrayList<>(getValidations()); validations.add(new DecomListValidation(userId, requestDate)); return setValidations(validations); } public DecommissioningList addValidationRequest(User user, LocalDate requestDate) { return addValidationRequest(user.getId(), requestDate); } public DecomListValidation getValidationFor(String userId) { for (DecomListValidation validation : getValidations()) { if (validation.getUserId().equals(userId)) { return validation; } } return null; } public DecommissioningList removeValidationRequest(DecomListValidation validation) { List<DecomListValidation> validations = new ArrayList<>(getValidations()); validations.remove(validation); return setValidations(validations); } //ApprovalRequestDate public LocalDate getApprovalRequestDate() { return get(APPROVAL_REQUEST_DATE); } public DecommissioningList setApprovalRequestDate(LocalDate approvalRequestDate) { set(APPROVAL_REQUEST_DATE, approvalRequestDate); return this; } //ApprovalRequest public String getApprovalRequest() { return get(APPROVAL_REQUEST); } public DecommissioningList setApprovalRequest(String approvalRequest) { set(APPROVAL_REQUEST, approvalRequest); return this; } public DecommissioningList setApprovalRequest(Record approvalRequest) { set(APPROVAL_REQUEST, approvalRequest); return this; } public DecommissioningList setApprovalRequest(User approvalRequest) { set(APPROVAL_REQUEST, approvalRequest); return this; } //ApprovalDate public LocalDate getApprovalDate() { return get(APPROVAL_DATE); } public DecommissioningList setApprovalDate(LocalDate approvalDate) { set(APPROVAL_DATE, approvalDate); return this; } //ApprovalUser public String getApprovalUser() { return get(APPROVAL_USER); } public DecommissioningList setApprovalUser(String approvalUser) { set(APPROVAL_USER, approvalUser); return this; } public DecommissioningList setApprovalUser(Record approvalUser) { set(APPROVAL_USER, approvalUser); return this; } public DecommissioningList setApprovalUser(User approvalUser) { set(APPROVAL_USER, approvalUser); return this; } //ProcessingDate public LocalDate getProcessingDate() { return get(PROCESSING_DATE); } public DecommissioningList setProcessingDate(LocalDate approvalDate) { set(PROCESSING_DATE, approvalDate); return this; } //ProcessingUser public String getProcessingUser() { return get(PROCESSING_USER); } public DecommissioningList setProcessingUser(String processingUser) { set(PROCESSING_USER, processingUser); return this; } public DecommissioningList setProcessingUser(Record processingUser) { set(PROCESSING_USER, processingUser); return this; } public DecommissioningList setProcessingUser(User processingUser) { set(PROCESSING_USER, processingUser); return this; } //OriginArchivisticStatus public OriginStatus getOriginArchivisticStatus() { return get(ORIGIN_ARCHIVISTIC_STATUS); } public DecommissioningList setOriginArchivisticStatus(OriginStatus originStatus) { set(ORIGIN_ARCHIVISTIC_STATUS, originStatus); return this; } public List<DecomListFolderDetail> getFolderDetails() { return getList(FOLDER_DETAILS); } public DecomListFolderDetail getFolderDetail(String folderId) { for (DecomListFolderDetail detail : getFolderDetails()) { if (folderId.equals(detail.getFolderId())) { return detail; } } return null; } public FolderDetailWithType getFolderDetailWithType(String folderId) { for (FolderDetailWithType detail : getFolderDetailsWithType()) { if (folderId.equals(detail.getFolderId())) { return detail; } } return null; } // public DecommissioningList setFolderDetailsFor(String... folders) { // return setFolderDetailsFor(asList(folders)); // } // // public DecommissioningList addFolderDetailsFor(String... folders) { // List<DecomListFolderDetail> details = new ArrayList<>(); // details.addAll(getFolderDetails()); // List<String> existingDetails = getFolders(); // for (String folder : folders) { // if(!existingDetails.contains(folder)) { // details.add(new DecomListFolderDetail(folder)); // } // } // return setFolderDetails(details); // } // // public DecommissioningList setFolderDetailsFor(List<String> folders) { // List<DecomListFolderDetail> details = new ArrayList<>(); // for (String folder : folders) { // details.add(new DecomListFolderDetail(folder)); // } // return setFolderDetails(details); // } public DecommissioningList removeFolderDetail(String folderId) { List<DecomListFolderDetail> details = new ArrayList<>(); for (DecomListFolderDetail detail : getFolderDetails()) { if (!folderId.equals(detail.getFolderId())) { details.add(detail); } } return setFolderDetails(details); } public DecommissioningList addFolderDetailsFor(Folder... folders) { List<DecomListFolderDetail> details = new ArrayList<>(); details.addAll(getFolderDetails()); List<String> existingDetails = getFolders(); for (Folder folder : folders) { if(!existingDetails.contains(folder.getId())) { details.add(new DecomListFolderDetail(folder)); } } return setFolderDetails(details); } public DecommissioningList setFolderDetailsFor(List<Folder> folders) { List<DecomListFolderDetail> details = new ArrayList<>(); for (Folder folder : folders) { details.add(new DecomListFolderDetail(folder)); } setFolderDetails(details); return this; } public DecommissioningList setFolderDetailsForIds(List<String> folders) { List<DecomListFolderDetail> details = new ArrayList<>(); for (String folder : folders) { details.add(new DecomListFolderDetail().setFolderId(folder)); } setFolderDetails(details); return this; } public DecommissioningList setFolderDetailsForIds(String... folders) { List<DecomListFolderDetail> details = new ArrayList<>(); for (String folder : folders) { details.add(new DecomListFolderDetail().setFolderId(folder)); } setFolderDetails(details); return this; } public DecommissioningList setContainerDetails(List<DecomListContainerDetail> containerDetails) { set(CONTAINER_DETAILS, containerDetails); return this; } public List<DecomListContainerDetail> getContainerDetails() { return getList(CONTAINER_DETAILS); } public DecomListContainerDetail getContainerDetail(String containerId) { for (DecomListContainerDetail detail : getContainerDetails()) { if (containerId.equals(detail.getContainerRecordId())) { return detail; } } return null; } public DecommissioningList setContainerDetailsFor(String... containers) { return setContainerDetailsFor(asList(containers)); } public DecommissioningList setContainerDetailsFor(List<String> containers) { List<DecomListContainerDetail> details = new ArrayList<>(); for (String container : containers) { details.add(new DecomListContainerDetail(container)); } return setContainerDetails(details); } public DecommissioningList removeContainerDetail(String containerId) { List<DecomListContainerDetail> details = new ArrayList<>(); for (DecomListContainerDetail detail : getContainerDetails()) { if (!containerId.equals(detail.getContainerRecordId())) { details.add(detail); } } return setContainerDetails(details); } public DecommissioningList setContainerDetailsFrom(List<ContainerRecord> containers) { List<DecomListContainerDetail> details = new ArrayList<>(); for (ContainerRecord container : containers) { details.add(new DecomListContainerDetail(container.getId()).setFull(container.isFull())); } return setContainerDetails(details); } public DecommissioningList addContainerDetailsFrom(List<ContainerRecord> containers) { List<DecomListContainerDetail> details = new ArrayList<>(getContainerDetails()); for (ContainerRecord container : containers) { DecomListContainerDetail detail = new DecomListContainerDetail(container); details.add(detail); } return setContainerDetails(details); } public DecommissioningList setFolderDetails(List<DecomListFolderDetail> folderDetails) { set(FOLDER_DETAILS, folderDetails); return this; } public List<Comment> getComments() { return getList(COMMENTS); } public DecommissioningList setComments(List<Comment> comments) { set(COMMENTS, comments); return this; } public List<String> getFolders() { return get(FOLDERS); } //Containers public List<String> getContainers() { return get(CONTAINERS); } public boolean hasAnalogicalMedium() { return get(ANALOGICAL_MEDIUM); } public boolean hasElectronicMedium() { return get(ELECTRONIC_MEDIUM); } public boolean isUniform() { return get(UNIFORM); } public String getUniformCategory() { return get(UNIFORM_CATEGORY); } public CopyRetentionRule getUniformCopyRule() { return get(UNIFORM_COPY_RULE); } public String getUniformRule() { return get(UNIFORM_RULE); } public CopyType getUniformCopyType() { return get(UNIFORM_COPY_TYPE); } public List<FolderMediaType> getFoldersMediaTypes() { return getList(FOLDERS_MEDIA_TYPES); } public DecomListStatus getStatus() { return get(STATUS); } public List<FolderDetailWithType> getFolderDetailsWithType() { List<DecomListFolderDetail> details = getFolderDetails(); List<FolderMediaType> types = getFoldersMediaTypes(); List<FolderDetailWithType> result = new ArrayList<>(); for (int i = 0; i < details.size(); i++) { result.add(new FolderDetailWithType(details.get(i), types.get(i), getDecommissioningListType())); } return result; } public boolean isUnprocessed() { return getStatus() != DecomListStatus.PROCESSED; } public boolean isProcessed() { return getStatus() == DecomListStatus.PROCESSED; } public boolean isApproved() { return getApprovalDate() != null; } public boolean isValidated() { List<DecomListValidation> validations = getValidations(); if (validations.isEmpty()) { return false; } for (DecomListValidation validation : validations) { if (!validation.isValidated()) { return false; } } return true; } public boolean isFromActive() { return getOriginArchivisticStatus() == OriginStatus.ACTIVE; } public boolean isFromSemiActive() { return getOriginArchivisticStatus() == OriginStatus.SEMI_ACTIVE; } public boolean isToInactive() { return getDecommissioningListType().isDepositOrDestroyal(); } public Content getDocumentsReportContent() { return get(DOCUMENTS_REPORT_CONTENT); } public DecommissioningList setDocumentsReportContent(Content content) { set(DOCUMENTS_REPORT_CONTENT, content); return this; } public Content getFoldersReportContent() { return get(FOLDERS_REPORT_CONTENT); } public DecommissioningList setFoldersReportContent(Content content) { set(FOLDERS_REPORT_CONTENT, content); return this; } public DecommissioningList setDocuments(List<String> documents) { set(DOCUMENTS, documents); return this; } public DecommissioningList addDocuments(String... documents) { List<String> documentIDs = new ArrayList<>(); documentIDs.addAll(getDocuments()); List<String> existingDocuments = getDocuments(); for (String document : documents) { if(!existingDocuments.contains(document)) { documentIDs.add(document); } } return setDocuments(documentIDs); } public List<String> getDocuments() { return getList(DOCUMENTS); } public DecommissioningList removeDocuments(String... idsToRemove) { ArrayList<String> ids = new ArrayList<>(getDocuments()); for(int i = 0; i < idsToRemove.length; i++) { ids.remove(idsToRemove[i]); } return setDocuments(ids); } public DecommissioningList removeDocument(String id) { ArrayList<String> ids = new ArrayList<>(getDocuments()); ids.remove(id); return setDocuments(ids); } }