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.services.borrowingServices.BorrowingType;
import com.constellio.app.modules.rm.wrappers.structures.Comment;
import com.constellio.app.modules.rm.wrappers.structures.PendingAlert;
import com.constellio.app.modules.rm.wrappers.type.FolderType;
import com.constellio.model.entities.records.Record;
import com.constellio.model.entities.records.wrappers.User;
import com.constellio.model.entities.schemas.MetadataSchemaTypes;
import org.joda.time.LocalDate;
import org.joda.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Folder extends RMObject {
public static final String SCHEMA_TYPE = "folder";
public static final String DEFAULT_SCHEMA = SCHEMA_TYPE + "_default";
public static final String ADMINISTRATIVE_UNIT_ENTERED = "administrativeUnitEntered";
public static final String ADMINISTRATIVE_UNIT = "administrativeUnit";
public static final String ADMINISTRATIVE_UNIT_CODE = "administrativeUnitCode";
public static final String ADMINISTRATIVE_UNIT_ANCESTORS = "administrativeUnitAncestors";
public static final String ARCHIVISTIC_STATUS = "archivisticStatus";
public static final String PERMISSION_STATUS = "permissionStatus";
public static final String UNIFORM_SUBDIVISION = "uniformSubdivision";
public static final String UNIFORM_SUBDIVISION_ENTERED = "uniformSubdivisionEntered";
public static final String CATEGORY_ENTERED = "categoryEntered";
public static final String CATEGORY = "category";
public static final String CATEGORY_CODE = "categoryCode";
public static final String MAIN_COPY_RULE = "mainCopyRule";
public static final String MAIN_COPY_RULE_ID_ENTERED = "mainCopyRuleIdEntered";
public static final String APPLICABLE_COPY_RULES = "applicableCopyRule";
public static final String COPY_STATUS = "copyStatus";
public static final String COPY_STATUS_ENTERED = "copyStatusEntered";
public static final String CLOSING_DATE = "closingDate";
public static final String ENTERED_CLOSING_DATE = "enteredClosingDate";
public static final String DESCRIPTION = "description";
public static final String FILING_SPACE_ENTERED = "filingSpaceEntered";
public static final String FILING_SPACE = "filingSpace";
public static final String FILING_SPACE_CODE = "filingSpaceCode";
public static final String KEYWORDS = "keywords";
public static final String MEDIUM_TYPES = "mediumTypes";
public static final String OPENING_DATE = "openingDate";
public static final String PARENT_FOLDER = "parentFolder";
public static final String ACTUAL_TRANSFER_DATE = "actualTransferDate";
public static final String ACTUAL_DEPOSIT_DATE = "actualDepositDate";
public static final String ACTUAL_DESTRUCTION_DATE = "actualDestructionDate";
public static final String COPY_RULES_EXPECTED_TRANSFER_DATES = "copyRulesExpectedTransferDates";
public static final String EXPECTED_TRANSFER_DATE = "expectedTransferDate";
public static final String COPY_RULES_EXPECTED_DEPOSIT_DATES = "copyRulesExpectedDepositDates";
public static final String EXPECTED_DEPOSIT_DATE = "expectedDepositDate";
public static final String COPY_RULES_EXPECTED_DESTRUCTION_DATES = "copyRulesExpectedDestructionDates";
public static final String EXPECTED_DESTRUCTION_DATE = "expectedDestructionDate";
public static final String RETENTION_RULE = "retentionRule";
public static final String RETENTION_RULE_ENTERED = "retentionRuleEntered";
public static final String DECOMMISSIONING_DATE = "decommissioningDate";
public static final String ACTIVE_RETENTION_TYPE = "activeRetentionType";
public static final String ACTIVE_RETENTION_CODE = "activeRetentionPeriodCode";
public static final String SEMIACTIVE_RETENTION_TYPE = "semiactiveRetentionType";
public static final String SEMIACTIVE_RETENTION_CODE = "semiactiveRetentionPeriodCode";
public static final String INACTIVE_DISPOSAL_TYPE = "inactiveDisposalType";
public static final String MEDIA_TYPE = "mediaType";
public static final String CONTAINER = "container";
public static final String TYPE = "type";
public static final String TITLE = "title";
public static final String FOLDER_TYPE = "folderType";
public static final String COMMENTS = "comments";
public static final String BORROWED = "borrowed";
public static final String BORROW_DATE = "borrowDate";
public static final String BORROW_RETURN_DATE = "borrowReturnDate";
public static final String BORROW_PREVIEW_RETURN_DATE = "borrowPreviewReturnDate";
public static final String RETURN_BORROW_USER_ENTERED = "returnBorrowUserEntered";
public static final String BORROW_USER = "borrowUser";
public static final String BORROW_USER_ENTERED = "borrowUserEntered";
public static final String BORROWING_TYPE = "borrowingType";
public static final String LINEAR_SIZE = "linearSize";
public static final String ALERT_USERS_WHEN_AVAILABLE = "alertUsersWhenAvailable";
public static final String PENDING_ALERTS = "pendingAlerts";
public static final String NEXT_ALERT_ON = "nextAlertOn";
public static final String CREATED_BY_ROBOT = "createdByRobot";
public static final String ESSENTIAL = "essential";
public static final String CONFIDENTIAL = "confidential";
public static final String CALENDAR_YEAR_ENTERED = "calendarYearEntered";
public static final String CALENDAR_YEAR = "calendarYear";
public static final String MANUAL_EXPECTED_TRANSFER_DATE = "manualExpectedTransferDate";
public static final String MANUAL_EXPECTED_DEPOSIT_DATE = "manualExpectedDepositDate";
public static final String MANUAL_EXPECTED_DESTRUCTION_DATE = "manualExpectedDesctructionDate";
public static final String MANUAL_ARCHIVISTIC_STATUS = "manualArchivisticStatus";
public static final String TIME_RANGE = "timerange";
//public static final String CALENDAR_YEAR_ENTERED = "calendarYearEntered";
//public static final String CALENDAR_YEAR = "calendarYear";
//TO DELETE
public static final String RETENTION_RULE_ADMINISTRATIVE_UNITS = "ruleAdminUnit";
public static final String REACTIVATION_DECOMMISSIONING_DATE = "reactivationDecommissioningDate";
public static final String REACTIVATION_DATES = "reactivationDates";
public static final String REACTIVATION_USERS = "reactivationUsers";
public static final String PREVIOUS_TRANSFER_DATES = "previousTransferDates";
public static final String PREVIOUS_DEPOSIT_DATES = "previousDepositDates";
public Folder(Record record,
MetadataSchemaTypes types) {
super(record, types, SCHEMA_TYPE);
}
public Folder setTitle(String title) {
super.setTitle(title);
return this;
}
public Double getLinearSize() {
return get(LINEAR_SIZE);
}
public Folder setLinearSize(Double linearSize) {
set(LINEAR_SIZE, linearSize);
return this;
}
public String getParentFolder() {
return get(PARENT_FOLDER);
}
public Folder setParentFolder(String folder) {
set(PARENT_FOLDER, folder);
return this;
}
public Folder setParentFolder(Folder folder) {
set(PARENT_FOLDER, folder);
return this;
}
public Folder setParentFolder(Record folder) {
set(PARENT_FOLDER, folder);
return this;
}
public String getContainer() {
return get(CONTAINER);
}
public Folder setContainer(String container) {
set(CONTAINER, container);
return this;
}
public Folder setContainer(ContainerRecord container) {
set(CONTAINER, container);
return this;
}
public Folder setContainer(Record container) {
set(CONTAINER, container);
return this;
}
public String getUniformSubdivision() {
return get(UNIFORM_SUBDIVISION);
}
public String getUniformSubdivisionEntered() {
return get(UNIFORM_SUBDIVISION_ENTERED);
}
public Folder setUniformSubdivisionEntered(String uniformSubdivision) {
set(UNIFORM_SUBDIVISION_ENTERED, uniformSubdivision);
return this;
}
public Folder setUniformSubdivisionEntered(Record uniformSubdivision) {
set(UNIFORM_SUBDIVISION_ENTERED, uniformSubdivision);
return this;
}
public Folder setUniformSubdivisionEntered(UniformSubdivision uniformSubdivision) {
set(UNIFORM_SUBDIVISION_ENTERED, uniformSubdivision);
return this;
}
public String getApplicableAdministrative() {
return get(ADMINISTRATIVE_UNIT);
}
public String getAdministrativeUnit() {
return get(ADMINISTRATIVE_UNIT);
}
public String getAdministrativeUnitCode() {
return get(ADMINISTRATIVE_UNIT_CODE);
}
public String getAdministrativeUnitEntered() {
return get(ADMINISTRATIVE_UNIT_ENTERED);
}
public Folder setAdministrativeUnitEntered(String administrativeUnit) {
set(ADMINISTRATIVE_UNIT_ENTERED, administrativeUnit);
return this;
}
public Folder setAdministrativeUnitEntered(Record administrativeUnit) {
set(ADMINISTRATIVE_UNIT_ENTERED, administrativeUnit);
return this;
}
public Folder setAdministrativeUnitEntered(AdministrativeUnit administrativeUnit) {
set(ADMINISTRATIVE_UNIT_ENTERED, administrativeUnit);
return this;
}
public String getFilingSpace() {
return get(FILING_SPACE);
}
public String getFilingSpaceEntered() {
return get(FILING_SPACE_ENTERED);
}
public String getFilingSpaceCode() {
return get(FILING_SPACE_CODE);
}
public Folder setFilingSpaceEntered(String filingSpace) {
set(FILING_SPACE_ENTERED, filingSpace);
return this;
}
public Folder setFilingSpaceEntered(Record filingSpace) {
set(FILING_SPACE_ENTERED, filingSpace);
return this;
}
public Folder setFilingSpaceEntered(FilingSpace filingSpace) {
set(FILING_SPACE_ENTERED, filingSpace);
return this;
}
public String getCategory() {
return get(CATEGORY);
}
public String getCategoryEntered() {
return get(CATEGORY_ENTERED);
}
public Folder setCategoryEntered(String category) {
set(CATEGORY_ENTERED, category);
return this;
}
public Folder setCategoryEntered(Record category) {
set(CATEGORY_ENTERED, category);
return this;
}
public Folder setCategoryEntered(Category category) {
set(CATEGORY_ENTERED, category);
return this;
}
public String getCategoryCode() {
return get(CATEGORY_CODE);
}
public List<String> getMediumTypes() {
return get(MEDIUM_TYPES);
}
public Folder setMediumTypes(String... mediumTypes) {
return setMediumTypes(Arrays.asList(mediumTypes));
}
public Folder setMediumTypes(List<?> mediumTypes) {
set(MEDIUM_TYPES, mediumTypes);
return this;
}
public RetentionType getActiveRetentionType() {
return get(ACTIVE_RETENTION_TYPE);
}
public String getActiveRetentionCode() {
return get(ACTIVE_RETENTION_CODE);
}
public RetentionType getSemiActiveRetentionType() {
return get(SEMIACTIVE_RETENTION_TYPE);
}
public String getSemiActiveRetentionCode() {
return get(SEMIACTIVE_RETENTION_CODE);
}
public DisposalType getInactiveDisposalType() {
return get(INACTIVE_DISPOSAL_TYPE);
}
public String getRetentionRule() {
return get(RETENTION_RULE);
}
public String getRetentionRuleEntered() {
return get(RETENTION_RULE_ENTERED);
}
public Folder setRetentionRuleEntered(String retentionRule) {
set(RETENTION_RULE_ENTERED, retentionRule);
return this;
}
public Folder setRetentionRuleEntered(Record retentionRule) {
set(RETENTION_RULE_ENTERED, retentionRule);
return this;
}
public Folder setRetentionRuleEntered(RetentionRule retentionRule) {
set(RETENTION_RULE_ENTERED, retentionRule);
return this;
}
public String getDescription() {
return get(DESCRIPTION);
}
public Folder setDescription(String description) {
set(DESCRIPTION, description);
return this;
}
public List<String> getKeywords() {
return getList(KEYWORDS);
}
public Folder setKeywords(List<String> keywords) {
set(KEYWORDS, keywords);
return this;
}
public String getCreatedByRobot() {
return get(CREATED_BY_ROBOT);
}
public Folder setCreatedByRobot(String robotId) {
set(CREATED_BY_ROBOT, robotId);
return this;
}
public LocalDate getCloseDate() {
return get(CLOSING_DATE);
}
public LocalDate getCloseDateEntered() {
return get(ENTERED_CLOSING_DATE);
}
public Folder setCloseDateEntered(LocalDate closeDate) {
set(ENTERED_CLOSING_DATE, closeDate);
return this;
}
public LocalDate getOpeningDate() {
return get(OPENING_DATE);
}
public LocalDate getOpenDate() {
return get(OPENING_DATE);
}
public Folder setOpenDate(LocalDate openDate) {
set(OPENING_DATE, openDate);
return this;
}
public List<LocalDate> getCopyRulesExpectedTransferDates() {
return getList(COPY_RULES_EXPECTED_TRANSFER_DATES);
}
public LocalDate getExpectedTransferDate() {
return get(EXPECTED_TRANSFER_DATE);
}
public LocalDate getActualTransferDate() {
return get(ACTUAL_TRANSFER_DATE);
}
public Folder setActualTransferDate(LocalDate transferDate) {
set(ACTUAL_TRANSFER_DATE, transferDate);
return this;
}
public List<LocalDate> getCopyRulesExpectedDepositDates() {
return getList(COPY_RULES_EXPECTED_DEPOSIT_DATES);
}
public LocalDate getExpectedDepositDate() {
return get(EXPECTED_DEPOSIT_DATE);
}
public LocalDate getActualDepositDate() {
return get(ACTUAL_DEPOSIT_DATE);
}
public Folder setActualDepositDate(LocalDate depositDate) {
set(ACTUAL_DEPOSIT_DATE, depositDate);
return this;
}
public List<LocalDate> getCopyRulesExpectedDestructionDates() {
return getList(COPY_RULES_EXPECTED_DESTRUCTION_DATES);
}
public LocalDate getExpectedDestructionDate() {
return get(EXPECTED_DESTRUCTION_DATE);
}
public LocalDate getActualDestructionDate() {
return get(ACTUAL_DESTRUCTION_DATE);
}
public Folder setActualDestructionDate(LocalDate destructionDate) {
set(ACTUAL_DESTRUCTION_DATE, destructionDate);
return this;
}
public String getType() {
return get(TYPE);
}
public Folder setType(FolderType type) {
set(TYPE, type);
return this;
}
public Folder setType(Record type) {
set(TYPE, type);
return this;
}
public Folder setType(String type) {
set(TYPE, type);
return this;
}
public Folder setCopyStatusEntered(CopyType type) {
set(COPY_STATUS_ENTERED, type);
return this;
}
public List<Comment> getComments() {
return getList(COMMENTS);
}
public Folder setComments(List<Comment> comments) {
set(COMMENTS, comments);
return this;
}
public CopyType getCopyStatusEntered() {
return get(COPY_STATUS_ENTERED);
}
public List<String> getAdministrativeUnitAncestors() {
return getList(ADMINISTRATIVE_UNIT_ANCESTORS);
}
public FolderStatus getArchivisticStatus() {
return get(ARCHIVISTIC_STATUS);
}
public FolderStatus getPermissionStatus() {
FolderStatus status = get(PERMISSION_STATUS);
return status != null ? status : getArchivisticStatus();
}
public Folder setPermissionStatus(FolderStatus status) {
set(PERMISSION_STATUS, status);
return this;
}
public CopyType getCopyStatus() {
return get(COPY_STATUS);
}
public CopyRetentionRule getMainCopyRule() {
return get(MAIN_COPY_RULE);
}
public String getMainCopyRuleIdEntered() {
return get(MAIN_COPY_RULE_ID_ENTERED);
}
public Folder setMainCopyRuleEntered(String mainCopyRuleIdEntered) {
set(MAIN_COPY_RULE_ID_ENTERED, mainCopyRuleIdEntered);
return this;
}
public List<CopyRetentionRule> getApplicableCopyRules() {
return getList(APPLICABLE_COPY_RULES);
}
public LocalDate getDecommissioningDate() {
return get(DECOMMISSIONING_DATE);
}
public FolderMediaType getMediaType() {
return get(MEDIA_TYPE);
}
public Boolean getBorrowed() {
return get(BORROWED);
}
public Folder setBorrowed(Boolean borrowed) {
set(BORROWED, borrowed);
return this;
}
public LocalDateTime getBorrowDate() {
return get(BORROW_DATE);
}
public Folder setBorrowDate(LocalDateTime borrowDate) {
set(BORROW_DATE, borrowDate);
return this;
}
public LocalDateTime getBorrowReturnDate() {
return get(BORROW_RETURN_DATE);
}
public Folder setBorrowReturnDate(LocalDateTime borrowReturnDate) {
set(BORROW_RETURN_DATE, borrowReturnDate);
return this;
}
public LocalDate getBorrowPreviewReturnDate() {
return get(BORROW_PREVIEW_RETURN_DATE);
}
public Folder setBorrowPreviewReturnDate(LocalDate borrowPreviewReturnDate) {
set(BORROW_PREVIEW_RETURN_DATE, borrowPreviewReturnDate);
return this;
}
public String getReturnBorrowUserEntered() {
return get(RETURN_BORROW_USER_ENTERED);
}
public Folder setReturnBorrowUserEntered(String returnBorrowUserEntered) {
set(RETURN_BORROW_USER_ENTERED, returnBorrowUserEntered);
return this;
}
public String getBorrowUser() {
return get(BORROW_USER);
}
public Folder setBorrowUser(String borrowUser) {
set(BORROW_USER, borrowUser);
return this;
}
public String getBorrowUserEntered() {
return get(BORROW_USER_ENTERED);
}
public Folder setBorrowUserEntered(String borrowUserEntered) {
set(BORROW_USER_ENTERED, borrowUserEntered);
return this;
}
public BorrowingType getBorrowType() {
return get(BORROWING_TYPE);
}
public Folder setBorrowType(BorrowingType borrowType) {
set(BORROWING_TYPE, borrowType);
return this;
}
public boolean hasAnalogicalMedium() {
FolderMediaType mediaType = getMediaType();
return mediaType != null && mediaType.potentiallyHasAnalogMedium();
}
public boolean hasElectronicMedium() {
FolderMediaType mediaType = getMediaType();
return mediaType != null && mediaType.potentiallyHasElectronicMedium();
}
public List<String> getAlertUsersWhenAvailable() {
return getList(ALERT_USERS_WHEN_AVAILABLE);
}
public Folder setAlertUsersWhenAvailable(List<String> users) {
set(ALERT_USERS_WHEN_AVAILABLE, users);
return this;
}
public List<String> getPendingAlerts() {
return getList(PENDING_ALERTS);
}
public Folder setPendingAlerts(List<PendingAlert> pendingAlerts) {
set(PENDING_ALERTS, pendingAlerts);
return this;
}
public LocalDateTime getNextAlertOn() {
return get(NEXT_ALERT_ON);
}
public Folder setNextAlertOn(LocalDateTime nextAlertOn) {
set(PENDING_ALERTS, nextAlertOn);
return this;
}
public Folder setFormCreatedBy(String userId) {
set(FORM_CREATED_BY, userId);
return this;
}
public Folder setFormCreatedBy(Record user) {
set(FORM_CREATED_BY, user);
return this;
}
public Folder setFormCreatedBy(User user) {
set(FORM_CREATED_BY, user);
return this;
}
public LocalDateTime getFormCreatedOn() {
return get(FORM_CREATED_ON);
}
public Folder setFormCreatedOn(LocalDateTime dateTime) {
set(FORM_CREATED_ON, dateTime);
return this;
}
public Folder setFormModifiedBy(String userId) {
set(FORM_MODIFIED_BY, userId);
return this;
}
public Folder setFormModifiedBy(Record user) {
set(FORM_MODIFIED_BY, user);
return this;
}
public Folder setFormModifiedBy(User user) {
set(FORM_MODIFIED_BY, user);
return this;
}
public Folder setFormModifiedOn(LocalDateTime dateTime) {
set(FORM_MODIFIED_ON, dateTime);
return this;
}
public LocalDate getManualExpecteTransferdDate() {
return get(MANUAL_EXPECTED_TRANSFER_DATE);
}
public Folder setManualExpectedTransferDate(LocalDate date) {
set(MANUAL_EXPECTED_TRANSFER_DATE, date);
return this;
}
public LocalDate getManualExpectedDepositDate() {
return get(MANUAL_EXPECTED_DEPOSIT_DATE);
}
public Folder setManualExpectedDepositDate(LocalDate date) {
set(MANUAL_EXPECTED_DEPOSIT_DATE, date);
return this;
}
public LocalDate getManualExpectedDestructionDate() {
return get(MANUAL_EXPECTED_DESTRUCTION_DATE);
}
public Folder setManualExpectedDestructionDate(LocalDate date) {
set(MANUAL_EXPECTED_DESTRUCTION_DATE, date);
return this;
}
public FolderStatus getManualArchivisticStatus() {
return get(MANUAL_ARCHIVISTIC_STATUS);
}
public Folder setManualArchivisticStatus(FolderStatus status) {
set(MANUAL_ARCHIVISTIC_STATUS, status);
return this;
}
public List<LocalDate> getReactivationDates() {
return getList(REACTIVATION_DATES);
}
public List<String> getReactivationUsers() {
return getList(REACTIVATION_USERS);
}
public Folder setReactivationDates(List<LocalDate> reactivationDates) {
set(REACTIVATION_DATES, reactivationDates);
return this;
}
public Folder setReactivationUsers(List<String> reactivationUsers) {
set(REACTIVATION_USERS, reactivationUsers);
return this;
}
public Folder addReactivation(User user, LocalDate date) {
List<LocalDate> dates = new ArrayList<>(getReactivationDates());
List<String> usersIds = new ArrayList<>(getReactivationUsers());
dates.add(date);
usersIds.add(user.getId());
setReactivationDates(dates);
setReactivationUsers(usersIds);
return this;
}
public LocalDate getReactivationDecommissioningDate() {
return get(REACTIVATION_DECOMMISSIONING_DATE);
}
public Folder setReactivationDecommissioningDate(LocalDate date) {
return set(REACTIVATION_DECOMMISSIONING_DATE, date);
}
public String getTimeRange() {
return get(TIME_RANGE);
}
public boolean isEssential() {
return getBooleanWithDefaultValue(ESSENTIAL, false);
}
public boolean isConfidential() {
return getBooleanWithDefaultValue(CONFIDENTIAL, false);
}
public Folder addPreviousTransferDate(LocalDate date) {
if(date != null) {
ArrayList<LocalDate> localDates = new ArrayList<>(getPreviousTransferDates());
localDates.add(date);
setPreviousTransferDate(localDates);
}
return this;
}
public Folder setPreviousTransferDate(List<LocalDate> dates) {
set(PREVIOUS_TRANSFER_DATES, dates);
return this;
}
public List<LocalDate> getPreviousTransferDates() {
return get(PREVIOUS_TRANSFER_DATES);
}
public List<LocalDate> getPreviousDepositDates() {
return get(PREVIOUS_DEPOSIT_DATES);
}
public Folder addPreviousDepositDate(LocalDate date) {
if(date != null) {
ArrayList<LocalDate> localDates = new ArrayList<>(getPreviousDepositDates());
localDates.add(date);
setPreviousDepositDate(localDates);
}
return this;
}
public Folder setPreviousDepositDate(List<LocalDate> dates) {
set(PREVIOUS_DEPOSIT_DATES, dates);
return this;
}
}