package com.constellio.app.modules.rm.migrations;
import static com.constellio.app.modules.rm.constants.RMTaxonomies.ADMINISTRATIVE_UNITS;
import static com.constellio.app.modules.rm.constants.RMTaxonomies.CLASSIFICATION_PLAN;
import static com.constellio.app.modules.rm.constants.RMTaxonomies.STORAGES;
import static com.constellio.model.entities.schemas.MetadataValueType.BOOLEAN;
import static com.constellio.model.entities.schemas.MetadataValueType.CONTENT;
import static com.constellio.model.entities.schemas.MetadataValueType.DATE;
import static com.constellio.model.entities.schemas.MetadataValueType.NUMBER;
import static com.constellio.model.entities.schemas.MetadataValueType.REFERENCE;
import static com.constellio.model.entities.schemas.MetadataValueType.STRING;
import static com.constellio.model.entities.schemas.MetadataValueType.STRUCTURE;
import static com.constellio.model.entities.schemas.MetadataValueType.TEXT;
import static com.constellio.model.entities.schemas.Schemas.TITLE_CODE;
import static java.util.Arrays.asList;
import java.util.ArrayList;
import java.util.List;
import com.constellio.app.entities.modules.MetadataSchemasAlterationHelper;
import com.constellio.app.entities.modules.MigrationHelper;
import com.constellio.app.entities.modules.MigrationResourcesProvider;
import com.constellio.app.entities.modules.MigrationScript;
import com.constellio.app.entities.schemasDisplay.SchemaDisplayConfig;
import com.constellio.app.entities.schemasDisplay.enums.MetadataInputType;
import com.constellio.app.modules.rm.constants.RMPermissionsTo;
import com.constellio.app.modules.rm.constants.RMRoles;
import com.constellio.app.modules.rm.model.CopyRetentionRuleFactory;
import com.constellio.app.modules.rm.model.calculators.CategoryIsLinkableCalculator;
import com.constellio.app.modules.rm.model.calculators.ContainerTitleCalculator;
import com.constellio.app.modules.rm.model.calculators.FolderActiveRetentionTypeCalculator;
import com.constellio.app.modules.rm.model.calculators.FolderApplicableCopyRuleCalculator;
import com.constellio.app.modules.rm.model.calculators.FolderClosingDateCalculator;
import com.constellio.app.modules.rm.model.calculators.FolderCopyRulesExpectedDepositDatesCalculator;
import com.constellio.app.modules.rm.model.calculators.FolderCopyRulesExpectedDestructionDatesCalculator;
import com.constellio.app.modules.rm.model.calculators.FolderCopyRulesExpectedTransferDatesCalculator;
import com.constellio.app.modules.rm.model.calculators.FolderCopyStatusCalculator;
import com.constellio.app.modules.rm.model.calculators.FolderDecommissioningDateCalculator;
import com.constellio.app.modules.rm.model.calculators.FolderExpectedDepositDateCalculator;
import com.constellio.app.modules.rm.model.calculators.FolderExpectedDestructionDateCalculator;
import com.constellio.app.modules.rm.model.calculators.FolderExpectedTransferDateCalculator;
import com.constellio.app.modules.rm.model.calculators.FolderInactiveDisposalTypeCalculator;
import com.constellio.app.modules.rm.model.calculators.FolderMainCopyRuleCalculator;
import com.constellio.app.modules.rm.model.calculators.FolderSemiActiveRetentionTypeCalculator;
import com.constellio.app.modules.rm.model.calculators.FolderStatusCalculator;
import com.constellio.app.modules.rm.model.calculators.decommissioningList.DecomListContainersCalculator;
import com.constellio.app.modules.rm.model.calculators.decommissioningList.DecomListFoldersCalculator;
import com.constellio.app.modules.rm.model.calculators.decommissioningList.DecomListHasAnalogicalMediumTypesCalculator;
import com.constellio.app.modules.rm.model.calculators.decommissioningList.DecomListHasElectronicMediumTypesCalculator;
import com.constellio.app.modules.rm.model.calculators.decommissioningList.DecomListIsUniform;
import com.constellio.app.modules.rm.model.calculators.decommissioningList.DecomListStatusCalculator;
import com.constellio.app.modules.rm.model.calculators.decommissioningList.DecomListUniformCategoryCalculator;
import com.constellio.app.modules.rm.model.calculators.decommissioningList.DecomListUniformCopyRuleCalculator;
import com.constellio.app.modules.rm.model.calculators.decommissioningList.DecomListUniformCopyTypeCalculator;
import com.constellio.app.modules.rm.model.calculators.decommissioningList.DecomListUniformRuleCalculator;
import com.constellio.app.modules.rm.model.calculators.folder.FolderApplicableCategoryCalculator;
import com.constellio.app.modules.rm.model.calculators.folder.FolderAppliedAdministrativeUnitCalculator;
import com.constellio.app.modules.rm.model.calculators.folder.FolderAppliedFilingSpaceCalculator;
import com.constellio.app.modules.rm.model.calculators.folder.FolderAppliedRetentionRuleCalculator;
import com.constellio.app.modules.rm.model.calculators.folder.FolderAppliedUniformSubdivisionCalculator;
import com.constellio.app.modules.rm.model.calculators.folder.FolderMediaTypesCalculator;
import com.constellio.app.modules.rm.model.calculators.rule.RuleDocumentTypesCalculator;
import com.constellio.app.modules.rm.model.enums.CopyType;
import com.constellio.app.modules.rm.model.enums.DecomListStatus;
import com.constellio.app.modules.rm.model.enums.DecommissioningListType;
import com.constellio.app.modules.rm.model.enums.DecommissioningType;
import com.constellio.app.modules.rm.model.enums.DisposalType;
import com.constellio.app.modules.rm.model.enums.FolderMediaType;
import com.constellio.app.modules.rm.model.enums.FolderStatus;
import com.constellio.app.modules.rm.model.enums.OriginStatus;
import com.constellio.app.modules.rm.model.enums.RetentionType;
import com.constellio.app.modules.rm.model.validators.RetentionRuleValidator;
import com.constellio.app.modules.rm.services.ValueListItemSchemaTypeBuilder;
import com.constellio.app.modules.rm.services.ValueListItemSchemaTypeBuilder.ValueListItemSchemaTypeBuilderOptions;
import com.constellio.app.modules.rm.services.ValueListItemSchemaTypeBuilder.ValueListItemSchemaTypeCodeMode;
import com.constellio.app.modules.rm.wrappers.AdministrativeUnit;
import com.constellio.app.modules.rm.wrappers.Category;
import com.constellio.app.modules.rm.wrappers.ContainerRecord;
import com.constellio.app.modules.rm.wrappers.DecommissioningList;
import com.constellio.app.modules.rm.wrappers.Document;
import com.constellio.app.modules.rm.wrappers.FilingSpace;
import com.constellio.app.modules.rm.wrappers.Folder;
import com.constellio.app.modules.rm.wrappers.RetentionRule;
import com.constellio.app.modules.rm.wrappers.StorageSpace;
import com.constellio.app.modules.rm.wrappers.UniformSubdivision;
import com.constellio.app.modules.rm.wrappers.structures.CommentFactory;
import com.constellio.app.modules.rm.wrappers.structures.DecomListContainerDetailFactory;
import com.constellio.app.modules.rm.wrappers.structures.DecomListFolderDetailFactory;
import com.constellio.app.modules.rm.wrappers.structures.RetentionRuleDocumentTypeFactory;
import com.constellio.app.modules.rm.wrappers.type.ContainerRecordType;
import com.constellio.app.modules.rm.wrappers.type.DocumentType;
import com.constellio.app.modules.rm.wrappers.type.FolderType;
import com.constellio.app.modules.rm.wrappers.type.MediumType;
import com.constellio.app.modules.rm.wrappers.type.StorageSpaceType;
import com.constellio.app.services.factories.AppLayerFactory;
import com.constellio.app.services.schemasDisplay.SchemaDisplayManagerTransaction;
import com.constellio.app.services.schemasDisplay.SchemasDisplayManager;
import com.constellio.model.entities.CorePermissions;
import com.constellio.model.entities.Taxonomy;
import com.constellio.model.entities.records.wrappers.Collection;
import com.constellio.model.entities.records.wrappers.User;
import com.constellio.model.entities.schemas.MetadataValueType;
import com.constellio.model.entities.schemas.Schemas;
import com.constellio.model.entities.security.Role;
import com.constellio.model.services.factories.ModelLayerFactory;
import com.constellio.model.services.schemas.MetadataSchemasManager;
import com.constellio.model.services.schemas.builders.MetadataBuilder;
import com.constellio.model.services.schemas.builders.MetadataSchemaBuilder;
import com.constellio.model.services.schemas.builders.MetadataSchemaTypeBuilder;
import com.constellio.model.services.schemas.builders.MetadataSchemaTypesBuilder;
import com.constellio.model.services.security.roles.RolesManager;
import com.constellio.model.services.taxonomies.TaxonomiesManager;
public class RMMigrationTo5_0_1 extends MigrationHelper implements MigrationScript {
@Override
public String getVersion() {
return "5.0.1";
}
@Override
public void migrate(String collection, MigrationResourcesProvider migrationResourcesProvider,
AppLayerFactory appLayerFactory) {
new SchemaAlterationFor5_0_1(collection, migrationResourcesProvider, appLayerFactory).migrate();
setupTaxonomies(collection, appLayerFactory.getModelLayerFactory(), migrationResourcesProvider);
setupDisplayConfig(collection, appLayerFactory);
setupRoles(collection, appLayerFactory.getModelLayerFactory());
}
private static void setupTaxonomies(String collection, ModelLayerFactory modelLayerFactory,
MigrationResourcesProvider migrationResourcesProvider) {
setupClassificationPlanTaxonomies(collection, modelLayerFactory, migrationResourcesProvider);
setupStorageSpaceTaxonomy(collection, modelLayerFactory, migrationResourcesProvider);
setupAdminUnitTaxonomy(collection, modelLayerFactory, migrationResourcesProvider);
}
public static void setupStorageSpaceTaxonomy(String collection, ModelLayerFactory modelLayerFactory,
MigrationResourcesProvider migrationResourcesProvider) {
MetadataSchemasManager metadataSchemasManager = modelLayerFactory.getMetadataSchemasManager();
TaxonomiesManager taxonomiesManager = modelLayerFactory.getTaxonomiesManager();
Taxonomy storagesTaxonomy = Taxonomy.createHiddenInHomePage(STORAGES, migrationResourcesProvider.getDefaultLanguageString(
"init.rm.containers"), collection,
StorageSpace.SCHEMA_TYPE);
taxonomiesManager.addTaxonomy(storagesTaxonomy, metadataSchemasManager);
}
public static void setupAdminUnitTaxonomy(String collection, ModelLayerFactory modelLayerFactory,
MigrationResourcesProvider migrationResourcesProvider) {
MetadataSchemasManager metadataSchemasManager = modelLayerFactory.getMetadataSchemasManager();
TaxonomiesManager taxonomiesManager = modelLayerFactory.getTaxonomiesManager();
Taxonomy unitTaxonomy = Taxonomy.createPublic(
ADMINISTRATIVE_UNITS, migrationResourcesProvider.getDefaultLanguageString("init.rm.admUnits"), collection,
AdministrativeUnit.SCHEMA_TYPE);
taxonomiesManager.addTaxonomy(unitTaxonomy, metadataSchemasManager);
taxonomiesManager.setPrincipalTaxonomy(unitTaxonomy, metadataSchemasManager);
}
public static void setupClassificationPlanTaxonomies(String collection, ModelLayerFactory modelLayerFactory,
MigrationResourcesProvider migrationResourcesProvider) {
MetadataSchemasManager metadataSchemasManager = modelLayerFactory.getMetadataSchemasManager();
TaxonomiesManager taxonomiesManager = modelLayerFactory.getTaxonomiesManager();
taxonomiesManager
.addTaxonomy(Taxonomy.createPublic(CLASSIFICATION_PLAN, migrationResourcesProvider.getDefaultLanguageString(
"init.rm.plan"), collection,
Category.SCHEMA_TYPE), metadataSchemasManager);
}
private void setupDisplayConfig(String collection, AppLayerFactory appLayerFactory) {
SchemasDisplayManager manager = appLayerFactory.getMetadataSchemasDisplayManager();
manager.enableAllMetadatasInAdvancedSearch(collection, Folder.SCHEMA_TYPE);
manager.enableAllMetadatasInAdvancedSearch(collection, Document.SCHEMA_TYPE);
manager.enableAllMetadatasInAdvancedSearch(collection, ContainerRecord.SCHEMA_TYPE);
SchemaDisplayManagerTransaction transaction = new SchemaDisplayManagerTransaction();
// Enable search for Folders
transaction.add(manager.getType(collection, Folder.SCHEMA_TYPE)
.withSimpleSearchStatus(true).withAdvancedSearchStatus(true));
// Enable search for Documents
transaction.add(manager.getType(collection, Document.SCHEMA_TYPE)
.withSimpleSearchStatus(true).withAdvancedSearchStatus(true));
// Enable search for ContainerRecords
transaction.add(manager.getType(collection, ContainerRecord.SCHEMA_TYPE)
.withSimpleSearchStatus(true).withAdvancedSearchStatus(true));
transaction.setModifiedCollectionTypes(manager.getTypes(collection).withFacetMetadataCodes(asList(
Folder.DEFAULT_SCHEMA + "_schema",
Folder.DEFAULT_SCHEMA + "_" + Folder.ARCHIVISTIC_STATUS,
Folder.DEFAULT_SCHEMA + "_" + Folder.CATEGORY,
Folder.DEFAULT_SCHEMA + "_" + Folder.ADMINISTRATIVE_UNIT,
Folder.DEFAULT_SCHEMA + "_" + Folder.FILING_SPACE,
Folder.DEFAULT_SCHEMA + "_" + Folder.MEDIUM_TYPES,
Folder.DEFAULT_SCHEMA + "_" + Folder.COPY_STATUS)));
// FOLDER TYPE
SchemaDisplayConfig schemaFormFolderTypeConfig = order(collection, appLayerFactory, "form",
manager.getSchema(collection, FolderType.DEFAULT_SCHEMA),
Schemas.TITLE.getLocalCode(),
FolderType.CODE,
FolderType.DESCRIPTION,
FolderType.LINKED_SCHEMA);
SchemaDisplayConfig schemaDisplayFolderTypeConfig = order(collection, appLayerFactory, "display",
manager.getSchema(collection, FolderType.DEFAULT_SCHEMA),
Schemas.TITLE.getLocalCode(),
FolderType.CODE,
FolderType.DESCRIPTION,
FolderType.LINKED_SCHEMA);
transaction.add(
schemaDisplayFolderTypeConfig.withFormMetadataCodes(schemaFormFolderTypeConfig.getFormMetadataCodes()));
// FOLDER
SchemaDisplayConfig schemaFormFolderConfig = order(collection, appLayerFactory, "form",
manager.getSchema(collection, Folder.DEFAULT_SCHEMA),
Folder.TYPE,
Schemas.TITLE.getLocalCode(),
Folder.PARENT_FOLDER,
Folder.CATEGORY_ENTERED,
Folder.UNIFORM_SUBDIVISION_ENTERED,
Folder.RETENTION_RULE_ENTERED,
Folder.COPY_STATUS_ENTERED,
Folder.OPENING_DATE,
Folder.ENTERED_CLOSING_DATE,
Folder.FILING_SPACE_ENTERED,
Folder.ADMINISTRATIVE_UNIT_ENTERED,
Folder.MEDIUM_TYPES,
Folder.KEYWORDS,
Folder.DESCRIPTION,
Folder.CONTAINER,
Folder.ACTUAL_TRANSFER_DATE,
Folder.ACTUAL_DEPOSIT_DATE,
Folder.ACTUAL_DESTRUCTION_DATE);
SchemaDisplayConfig schemaDisplayFolderConfig = order(collection, appLayerFactory, "display",
manager.getSchema(collection, Folder.DEFAULT_SCHEMA),
Folder.PARENT_FOLDER,
Schemas.TITLE.getLocalCode(),
Schemas.CREATED_BY.getLocalCode(),
Folder.DESCRIPTION,
Folder.FILING_SPACE,
Folder.ADMINISTRATIVE_UNIT,
Folder.MEDIUM_TYPES,
Folder.COPY_STATUS,
Folder.ARCHIVISTIC_STATUS,
Folder.CONTAINER,
Folder.CATEGORY,
Folder.UNIFORM_SUBDIVISION,
Folder.RETENTION_RULE,
Folder.MAIN_COPY_RULE,
Folder.RETENTION_RULE_ADMINISTRATIVE_UNITS,
Folder.KEYWORDS,
Schemas.CREATED_ON.getLocalCode(),
Folder.OPENING_DATE,
Folder.CLOSING_DATE,
Folder.ACTUAL_TRANSFER_DATE,
Folder.EXPECTED_TRANSFER_DATE,
Folder.ACTUAL_DEPOSIT_DATE,
Folder.EXPECTED_DEPOSIT_DATE,
Folder.ACTUAL_DESTRUCTION_DATE,
Folder.EXPECTED_DESTRUCTION_DATE,
Schemas.FOLLOWERS.getLocalCode(),
Folder.COMMENTS);
transaction.add(
schemaDisplayFolderConfig.withFormMetadataCodes(schemaFormFolderConfig.getFormMetadataCodes()));
transaction.add(manager.getMetadata(collection, Folder.DEFAULT_SCHEMA + "_" + Folder.MEDIUM_TYPES)
.withInputType(MetadataInputType.CHECKBOXES));
SchemaDisplayConfig schemaDisplayUserConfig = order(collection, appLayerFactory, "display",
manager.getSchema(collection, User.DEFAULT_SCHEMA),
User.USERNAME,
User.FIRSTNAME,
User.LASTNAME,
Schemas.TITLE.getLocalCode(),
User.EMAIL,
User.ROLES,
User.GROUPS,
User.JOB_TITLE,
User.PHONE,
User.STATUS,
Schemas.CREATED_ON.getLocalCode(),
Schemas.MODIFIED_ON.getLocalCode());
transaction.add(schemaDisplayUserConfig);
// DOCUMENT TYPE
SchemaDisplayConfig schemaFormDocumentTypeConfig = order(collection, appLayerFactory, "form",
manager.getSchema(collection, DocumentType.DEFAULT_SCHEMA),
Schemas.TITLE.getLocalCode(),
DocumentType.CODE,
DocumentType.DESCRIPTION,
DocumentType.LINKED_SCHEMA);
SchemaDisplayConfig schemaDisplayDocumentTypeConfig = order(collection, appLayerFactory, "display",
manager.getSchema(collection, DocumentType.DEFAULT_SCHEMA),
Schemas.TITLE.getLocalCode(),
DocumentType.CODE,
DocumentType.DESCRIPTION,
DocumentType.LINKED_SCHEMA);
transaction.add(
schemaDisplayDocumentTypeConfig.withFormMetadataCodes(schemaFormDocumentTypeConfig.getFormMetadataCodes()));
// DOCUMENT
SchemaDisplayConfig schemaFormDocumentConfig = order(collection, appLayerFactory, "form",
manager.getSchema(collection, Document.DEFAULT_SCHEMA),
Document.TYPE,
Schemas.TITLE.getLocalCode(),
Document.FOLDER,
Document.KEYWORDS,
Document.CONTENT);
SchemaDisplayConfig schemaDisplayDocumentConfig = order(collection, appLayerFactory, "display",
manager.getSchema(collection, Document.DEFAULT_SCHEMA),
Schemas.TITLE.getLocalCode(),
Document.CONTENT,
Document.FOLDER,
Document.TYPE,
Schemas.CREATED_ON.getLocalCode(),
Document.KEYWORDS,
Document.DESCRIPTION,
Document.COMMENTS);
transaction.add(
schemaDisplayDocumentConfig.withFormMetadataCodes(schemaFormDocumentConfig.getFormMetadataCodes()));
// CONTAINER RECORD TYPE
SchemaDisplayConfig schemaFormContainerTypeConfig = order(collection, appLayerFactory, "form",
manager.getSchema(collection, ContainerRecordType.DEFAULT_SCHEMA),
Schemas.TITLE.getLocalCode(),
ContainerRecordType.CODE,
ContainerRecordType.DESCRIPTION,
ContainerRecordType.LINKED_SCHEMA);
SchemaDisplayConfig schemaDisplayContainerTypeConfig = order(collection, appLayerFactory, "display",
manager.getSchema(collection, ContainerRecordType.DEFAULT_SCHEMA),
Schemas.TITLE.getLocalCode(),
ContainerRecordType.CODE,
ContainerRecordType.DESCRIPTION,
ContainerRecordType.LINKED_SCHEMA);
transaction.add(
schemaDisplayContainerTypeConfig.withFormMetadataCodes(schemaFormContainerTypeConfig.getFormMetadataCodes()));
// CONTAINER RECORD
SchemaDisplayConfig schemaFormContainerConfig = order(collection, appLayerFactory, "form",
manager.getSchema(collection, ContainerRecord.DEFAULT_SCHEMA),
ContainerRecord.TYPE,
ContainerRecord.TEMPORARY_IDENTIFIER,
ContainerRecord.IDENTIFIER,
ContainerRecord.FULL,
ContainerRecord.DESCRIPTION,
ContainerRecord.POSITION);
SchemaDisplayConfig schemaDisplayContainerConfig = order(collection, appLayerFactory, "display",
manager.getSchema(collection, ContainerRecord.DEFAULT_SCHEMA),
ContainerRecord.TYPE,
ContainerRecord.TEMPORARY_IDENTIFIER,
ContainerRecord.IDENTIFIER,
ContainerRecord.FULL,
ContainerRecord.DESCRIPTION,
ContainerRecord.ADMINISTRATIVE_UNIT,
ContainerRecord.STORAGE_SPACE);
transaction.add(
schemaDisplayContainerConfig.withFormMetadataCodes(schemaFormContainerConfig.getFormMetadataCodes()));
transaction.add(
manager.getMetadata(collection, ContainerRecord.DEFAULT_SCHEMA + "_" + ContainerRecord.TYPE)
.withInputType(MetadataInputType.DROPDOWN));
// MEDIUM TYPE
SchemaDisplayConfig schemaFormMediumTypeConfig = order(collection, appLayerFactory, "form",
manager.getSchema(collection, MediumType.DEFAULT_SCHEMA),
Schemas.TITLE.getLocalCode(),
MediumType.CODE,
MediumType.DESCRIPTION,
MediumType.ANALOGICAL);
SchemaDisplayConfig schemaDisplayMediumTypeConfig = order(collection, appLayerFactory, "display",
manager.getSchema(collection, MediumType.DEFAULT_SCHEMA),
Schemas.TITLE.getLocalCode(),
MediumType.CODE,
MediumType.DESCRIPTION,
MediumType.ANALOGICAL);
transaction.add(
schemaDisplayMediumTypeConfig.withFormMetadataCodes(schemaFormMediumTypeConfig.getFormMetadataCodes()));
// ADMINISTRATIVE UNIT
SchemaDisplayConfig schemaFormAdministrativeUnitConfig = order(collection, appLayerFactory, "form",
manager.getSchema(collection, AdministrativeUnit.DEFAULT_SCHEMA),
AdministrativeUnit.CODE,
AdministrativeUnit.FILING_SPACES,
Schemas.TITLE.getLocalCode(),
AdministrativeUnit.PARENT);
SchemaDisplayConfig schemaDisplayAdministrativeUnitConfig = order(collection, appLayerFactory,
"display",
manager.getSchema(collection, AdministrativeUnit.DEFAULT_SCHEMA),
AdministrativeUnit.CODE,
Schemas.TITLE.getLocalCode(),
AdministrativeUnit.PARENT,
AdministrativeUnit.FILING_SPACES,
Schemas.CREATED_ON.getLocalCode(),
Schemas.MODIFIED_BY.getLocalCode(),
Schemas.CREATED_BY.getLocalCode());
transaction.add(schemaDisplayAdministrativeUnitConfig
.withFormMetadataCodes(schemaFormAdministrativeUnitConfig.getFormMetadataCodes()));
// CATEGORY
SchemaDisplayConfig schemaFormCategoryConfig = order(collection, appLayerFactory, "form",
manager.getSchema(collection, Category.DEFAULT_SCHEMA),
Category.CODE,
Schemas.TITLE.getLocalCode(),
Category.DESCRIPTION,
Category.KEYWORDS,
Category.PARENT,
Category.RETENTION_RULES);
SchemaDisplayConfig schemaDisplayCategoryConfig = order(collection, appLayerFactory, "display",
manager.getSchema(collection, Category.DEFAULT_SCHEMA),
Category.CODE,
Schemas.TITLE.getLocalCode(),
Category.DESCRIPTION,
Schemas.CREATED_ON.getLocalCode(),
Schemas.MODIFIED_BY.getLocalCode(),
Schemas.CREATED_BY.getLocalCode(),
Category.KEYWORDS,
Category.PARENT,
Category.RETENTION_RULES,
Category.COMMENTS);
transaction.add(schemaDisplayCategoryConfig
.withFormMetadataCodes(schemaFormCategoryConfig.getFormMetadataCodes()));
// DECOMMISSIONING LIST
SchemaDisplayConfig schemaFormDecommissioningListConfig = order(collection, appLayerFactory, "form",
manager.getSchema(collection, DecommissioningList.DEFAULT_SCHEMA),
Schemas.TITLE.getLocalCode(),
DecommissioningList.DESCRIPTION);
SchemaDisplayConfig schemaDisplayDecommissioningListConfig = order(collection, appLayerFactory,
"display",
manager.getSchema(collection, DecommissioningList.DEFAULT_SCHEMA),
Schemas.TITLE.getLocalCode(),
DecommissioningList.TYPE,
DecommissioningList.DESCRIPTION,
DecommissioningList.ADMINISTRATIVE_UNIT,
DecommissioningList.FILING_SPACE,
Schemas.CREATED_ON.getLocalCode(),
Schemas.CREATED_BY.getLocalCode(),
Schemas.MODIFIED_ON.getLocalCode(),
Schemas.MODIFIED_BY.getLocalCode(),
DecommissioningList.UNIFORM_CATEGORY,
DecommissioningList.UNIFORM_RULE,
DecommissioningList.STATUS,
DecommissioningList.APPROVAL_DATE,
DecommissioningList.APPROVAL_USER);
transaction.add(schemaDisplayDecommissioningListConfig
.withFormMetadataCodes(schemaFormDecommissioningListConfig.getFormMetadataCodes()));
// FILING SPACE
SchemaDisplayConfig schemaFormFilingSpaceConfig = order(collection, appLayerFactory, "form",
manager.getSchema(collection, FilingSpace.DEFAULT_SCHEMA),
FilingSpace.CODE,
Schemas.TITLE.getLocalCode(),
FilingSpace.ADMINISTRATORS,
FilingSpace.USERS);
SchemaDisplayConfig schemaDisplayFilingSpaceConfig = order(collection, appLayerFactory, "display",
manager.getSchema(collection, FilingSpace.DEFAULT_SCHEMA),
FilingSpace.CODE,
Schemas.TITLE.getLocalCode(),
FilingSpace.DESCRIPTION,
FilingSpace.USERS,
FilingSpace.ADMINISTRATORS);
transaction.add(
schemaDisplayFilingSpaceConfig.withFormMetadataCodes(schemaFormFilingSpaceConfig.getFormMetadataCodes()));
// RETENTION RULE
SchemaDisplayConfig schemaFormRetentionRuleConfig = order(collection, appLayerFactory, "form",
manager.getSchema(collection, RetentionRule.DEFAULT_SCHEMA),
RetentionRule.CODE,
RetentionRule.APPROVED,
RetentionRule.APPROVAL_DATE,
Schemas.TITLE.getLocalCode(),
RetentionRule.CORPUS,
RetentionRule.CORPUS_RULE_NUMBER,
RetentionRule.ADMINISTRATIVE_UNITS,
RetentionRule.RESPONSIBLE_ADMINISTRATIVE_UNITS,
RetentionRule.DESCRIPTION,
RetentionRule.JURIDIC_REFERENCE,
RetentionRule.GENERAL_COMMENT,
RetentionRule.KEYWORDS,
RetentionRule.HISTORY,
RetentionRule.ESSENTIAL_DOCUMENTS,
RetentionRule.CONFIDENTIAL_DOCUMENTS,
RetentionRule.COPY_RETENTION_RULES,
RetentionRule.DOCUMENT_TYPES_DETAILS,
RetentionRule.COPY_RULES_COMMENT);
SchemaDisplayConfig schemaDisplayRetentionRuleConfig = order(collection, appLayerFactory, "display",
manager.getSchema(collection, RetentionRule.DEFAULT_SCHEMA),
RetentionRule.CODE,
RetentionRule.APPROVED,
RetentionRule.APPROVAL_DATE,
Schemas.TITLE.getLocalCode(),
RetentionRule.CORPUS,
RetentionRule.CORPUS_RULE_NUMBER,
RetentionRule.ADMINISTRATIVE_UNITS,
RetentionRule.RESPONSIBLE_ADMINISTRATIVE_UNITS,
RetentionRule.DESCRIPTION,
RetentionRule.JURIDIC_REFERENCE,
RetentionRule.GENERAL_COMMENT,
RetentionRule.KEYWORDS,
RetentionRule.HISTORY,
RetentionRule.ESSENTIAL_DOCUMENTS,
RetentionRule.CONFIDENTIAL_DOCUMENTS,
RetentionRule.COPY_RETENTION_RULES,
RetentionRule.DOCUMENT_TYPES_DETAILS,
RetentionRule.COPY_RULES_COMMENT);
transaction.add(
schemaDisplayRetentionRuleConfig.withFormMetadataCodes(schemaFormRetentionRuleConfig.getFormMetadataCodes()));
// STORAGE SPACE TYPE
SchemaDisplayConfig schemaFormStorageSpaceTypeConfig = order(collection, appLayerFactory, "form",
manager.getSchema(collection, StorageSpaceType.DEFAULT_SCHEMA),
Schemas.TITLE.getLocalCode(),
StorageSpaceType.CODE,
StorageSpaceType.DESCRIPTION,
StorageSpaceType.LINKED_SCHEMA);
SchemaDisplayConfig schemaDisplayStorageSpaceTypeConfig = order(collection, appLayerFactory, "display",
manager.getSchema(collection, StorageSpaceType.DEFAULT_SCHEMA),
Schemas.TITLE.getLocalCode(),
StorageSpaceType.CODE,
StorageSpaceType.DESCRIPTION,
StorageSpaceType.LINKED_SCHEMA);
transaction.add(schemaDisplayStorageSpaceTypeConfig
.withFormMetadataCodes(schemaFormStorageSpaceTypeConfig.getFormMetadataCodes()));
// STORAGE SPACE
SchemaDisplayConfig schemaFormStorageSpaceConfig = order(collection, appLayerFactory, "form",
manager.getSchema(collection, StorageSpace.DEFAULT_SCHEMA),
StorageSpace.TYPE,
StorageSpace.CODE,
Schemas.TITLE.getLocalCode(),
StorageSpace.DESCRIPTION,
StorageSpace.CAPACITY,
StorageSpace.DECOMMISSIONING_TYPE,
StorageSpace.PARENT_STORAGE_SPACE);
SchemaDisplayConfig schemaDisplayStorageSpaceConfig = order(collection, appLayerFactory, "display",
manager.getSchema(collection, StorageSpace.DEFAULT_SCHEMA),
StorageSpace.TYPE,
StorageSpace.CODE,
Schemas.TITLE.getLocalCode(),
Schemas.CREATED_BY.getLocalCode(),
Schemas.CREATED_ON.getLocalCode(),
Schemas.MODIFIED_ON.getLocalCode(),
StorageSpace.CAPACITY,
StorageSpace.DECOMMISSIONING_TYPE,
StorageSpace.PARENT_STORAGE_SPACE,
StorageSpace.DESCRIPTION);
transaction.add(
schemaDisplayStorageSpaceConfig.withFormMetadataCodes(schemaFormStorageSpaceConfig.getFormMetadataCodes()));
// UNIFORM SUBDIVISION
SchemaDisplayConfig schemaFormUniformSubDivisionConfig = order(collection, appLayerFactory, "form",
manager.getSchema(collection, UniformSubdivision.DEFAULT_SCHEMA),
UniformSubdivision.CODE,
Schemas.TITLE.getLocalCode(),
UniformSubdivision.RETENTION_RULE,
UniformSubdivision.DESCRIPTION);
SchemaDisplayConfig schemaDisplayUniformSubDivisionConfig = order(collection, appLayerFactory,
"display",
manager.getSchema(collection, UniformSubdivision.DEFAULT_SCHEMA),
UniformSubdivision.CODE,
Schemas.TITLE.getLocalCode(),
UniformSubdivision.RETENTION_RULE,
UniformSubdivision.DESCRIPTION);
transaction.add(schemaDisplayUniformSubDivisionConfig
.withFormMetadataCodes(schemaFormUniformSubDivisionConfig.getFormMetadataCodes()));
manager.execute(transaction);
}
private void setupRoles(String collection, ModelLayerFactory modelLayerFactory) {
RolesManager rolesManager = modelLayerFactory.getRolesManager();
List<String> userPermissions = new ArrayList<>();
userPermissions.add(RMPermissionsTo.CREATE_DOCUMENTS);
userPermissions.add(RMPermissionsTo.CREATE_FOLDERS);
userPermissions.add(RMPermissionsTo.CREATE_SUB_FOLDERS);
List<String> managerPermissions = new ArrayList<>();
managerPermissions.addAll(userPermissions);
managerPermissions.add(RMPermissionsTo.EDIT_DECOMMISSIONING_LIST);
managerPermissions.add(RMPermissionsTo.PROCESS_DECOMMISSIONING_LIST);
managerPermissions.add(RMPermissionsTo.MANAGE_FOLDER_AUTHORIZATIONS);
managerPermissions.add(RMPermissionsTo.MANAGE_DOCUMENT_AUTHORIZATIONS);
managerPermissions.add(RMPermissionsTo.MANAGE_CONTAINERS);
managerPermissions.add(RMPermissionsTo.APPROVE_DECOMMISSIONING_LIST);
List<String> rgdPermissions = new ArrayList<>();
rgdPermissions.addAll(RMPermissionsTo.PERMISSIONS.getAll());
rgdPermissions.addAll(CorePermissions.PERMISSIONS.getAll());
rolesManager.addRole(new Role(collection, RMRoles.USER, "Utilisateur", userPermissions));
rolesManager.addRole(new Role(collection, RMRoles.MANAGER, "Gestionnaire", managerPermissions));
rolesManager.addRole(
new Role(collection, RMRoles.RGD, "Responsable de la gestion documentaire", rgdPermissions));
}
}
class SchemaAlterationFor5_0_1 extends MetadataSchemasAlterationHelper {
protected SchemaAlterationFor5_0_1(String collection, MigrationResourcesProvider migrationResourcesProvider,
AppLayerFactory appLayerFactory) {
super(collection, migrationResourcesProvider, appLayerFactory);
}
public String getVersion() {
return "5.0.1";
}
@Override
protected void migrate(MetadataSchemaTypesBuilder typesBuilder) {
MetadataSchemaTypeBuilder collectionSchemaType = typesBuilder.getSchemaType(Collection.SCHEMA_TYPE);
MetadataSchemaTypeBuilder userSchemaType = type(User.SCHEMA_TYPE);
MetadataSchemaTypeBuilder storageSpaceTypeSchemaType = setupStorageSpaceTypeSchema();
MetadataSchemaTypeBuilder containerTypeSchemaType = setupContainerTypeSchema();
MetadataSchemaTypeBuilder folderTypeSchemaType = setupFolderTypeSchema();
MetadataSchemaTypeBuilder documentTypeSchemaType = setupDocumentTypeSchema();
MetadataSchemaTypeBuilder mediumTypeSchemaType = setupMediumTypeSchema();
MetadataSchemaTypeBuilder filingSpaceSchemaType = setupFilingSpaceSchemaType(userSchemaType);
MetadataSchemaTypeBuilder administrativeUnitSchemaType = setupAdministrativeUnitSchemaType(filingSpaceSchemaType);
MetadataSchemaTypeBuilder storageSpaceSchemaType = setupStorageSpaceSchemaType(storageSpaceTypeSchemaType);
MetadataSchemaTypeBuilder containerSchemaType = setupContainerSchemaType(storageSpaceSchemaType,
containerTypeSchemaType, administrativeUnitSchemaType, userSchemaType, filingSpaceSchemaType);
MetadataSchemaTypeBuilder retentionRuleSchemaType = setupRetentionRules(administrativeUnitSchemaType,
documentTypeSchemaType);
MetadataSchemaTypeBuilder uniformSubdivisionSchemaType = setupUniformSubdivisionSchemaType(retentionRuleSchemaType);
MetadataSchemaTypeBuilder categorySchemaType = setupCategoriesSchemaType(retentionRuleSchemaType);
MetadataSchemaTypeBuilder folderSchemaType = setupFolder(categorySchemaType, retentionRuleSchemaType,
administrativeUnitSchemaType, filingSpaceSchemaType, folderTypeSchemaType, mediumTypeSchemaType,
containerSchemaType, uniformSubdivisionSchemaType);
MetadataSchemaTypeBuilder decommissioningListType = setupDecommissioningList(administrativeUnitSchemaType, userSchemaType,
filingSpaceSchemaType, folderSchemaType, containerSchemaType, categorySchemaType, retentionRuleSchemaType,
mediumTypeSchemaType);
MetadataSchemaTypeBuilder documentSchemaType = setupDocument(folderSchemaType, documentTypeSchemaType);
addRMFieldsToCollectionSchema(collectionSchemaType);
}
private void addRMFieldsToCollectionSchema(MetadataSchemaTypeBuilder collectionSchema) {
}
private MetadataSchemaTypeBuilder setupMediumTypeSchema() {
MetadataSchemaTypeBuilder schemaType = new ValueListItemSchemaTypeBuilder(types())
.createValueListItemSchema(MediumType.SCHEMA_TYPE, "Type de support", ValueListItemSchemaTypeBuilderOptions.codeMetadataDisabled())
.setSecurity(false);
MetadataSchemaBuilder defaultSchema = schemaType.getDefaultSchema();
defaultSchema.create(MediumType.ANALOGICAL).setType(BOOLEAN).setDefaultRequirement(true);
return schemaType;
}
private MetadataSchemaTypeBuilder setupDocumentTypeSchema() {
MetadataSchemaTypeBuilder schemaType = new ValueListItemSchemaTypeBuilder(types())
.createValueListItemSchema(DocumentType.SCHEMA_TYPE, "Type de document",
ValueListItemSchemaTypeBuilderOptions.codeMetadataDisabled())
.setSecurity(false);
MetadataSchemaBuilder defaultSchema = schemaType.getDefaultSchema();
defaultSchema.create(DocumentType.LINKED_SCHEMA).setType(STRING);
return schemaType;
}
private MetadataSchemaTypeBuilder setupFolderTypeSchema() {
MetadataSchemaTypeBuilder schemaType = new ValueListItemSchemaTypeBuilder(types())
.createValueListItemSchema(FolderType.SCHEMA_TYPE, "Type de dossier", ValueListItemSchemaTypeBuilderOptions.codeMetadataDisabled())
.setSecurity(false);
MetadataSchemaBuilder defaultSchema = schemaType.getDefaultSchema();
defaultSchema.create(FolderType.LINKED_SCHEMA).setType(STRING);
return schemaType;
}
private MetadataSchemaTypeBuilder setupContainerTypeSchema() {
MetadataSchemaTypeBuilder schemaType = new ValueListItemSchemaTypeBuilder(types())
.createValueListItemSchema(ContainerRecordType.SCHEMA_TYPE, "Type de contenant",
ValueListItemSchemaTypeBuilderOptions.codeMetadataDisabled())
.setSecurity(false);
MetadataSchemaBuilder defaultSchema = schemaType.getDefaultSchema();
defaultSchema.create(ContainerRecordType.LINKED_SCHEMA).setType(STRING);
return schemaType;
}
private MetadataSchemaTypeBuilder setupStorageSpaceTypeSchema() {
MetadataSchemaTypeBuilder schemaType = new ValueListItemSchemaTypeBuilder(types())
.createValueListItemSchema(StorageSpaceType.SCHEMA_TYPE, "Type d'emplacement",
ValueListItemSchemaTypeBuilderOptions.codeMetadataDisabled())
.setSecurity(false);
MetadataSchemaBuilder defaultSchema = schemaType.getDefaultSchema();
defaultSchema.create(StorageSpaceType.LINKED_SCHEMA).setType(STRING);
return schemaType;
}
private MetadataSchemaTypeBuilder setupRetentionRules(MetadataSchemaTypeBuilder administrativeUnitSchemaType,
MetadataSchemaTypeBuilder documentType) {
MetadataSchemaTypeBuilder schemaType = types().createNewSchemaType(RetentionRule.SCHEMA_TYPE).setSecurity(false);
MetadataSchemaBuilder defaultSchema = schemaType.getDefaultSchema();
defaultSchema.getMetadata(TITLE_CODE).setSchemaAutocomplete(true);
defaultSchema.defineValidators().add(RetentionRuleValidator.class);
defaultSchema.createUndeletable(RetentionRule.CODE).setDefaultRequirement(true).setType(STRING)
.setSearchable(true).setSchemaAutocomplete(true);
defaultSchema.createUndeletable(RetentionRule.APPROVED).setType(BOOLEAN);
defaultSchema.createUndeletable(RetentionRule.APPROVAL_DATE).setType(DATE);
defaultSchema.createUndeletable(RetentionRule.CORPUS).setType(STRING);
defaultSchema.createUndeletable(RetentionRule.CORPUS_RULE_NUMBER).setType(TEXT);
defaultSchema.createUndeletable(RetentionRule.RESPONSIBLE_ADMINISTRATIVE_UNITS).setType(BOOLEAN);
defaultSchema.createUndeletable(RetentionRule.ADMINISTRATIVE_UNITS).setMultivalue(true)
.defineReferencesTo(administrativeUnitSchemaType);
defaultSchema.createUndeletable(RetentionRule.DESCRIPTION).setType(TEXT);
defaultSchema.createUndeletable(RetentionRule.JURIDIC_REFERENCE).setType(TEXT);
defaultSchema.createUndeletable(RetentionRule.GENERAL_COMMENT).setType(TEXT);
defaultSchema.createUndeletable(RetentionRule.KEYWORDS).setType(STRING).setMultivalue(true);
defaultSchema.createUndeletable(RetentionRule.HISTORY).setType(TEXT);
defaultSchema.createUndeletable(RetentionRule.ESSENTIAL_DOCUMENTS).setType(BOOLEAN);
defaultSchema.createUndeletable(RetentionRule.CONFIDENTIAL_DOCUMENTS).setType(BOOLEAN);
defaultSchema.createUndeletable(RetentionRule.COPY_RETENTION_RULES).setDefaultRequirement(true).setMultivalue(true)
.setType(STRUCTURE).defineStructureFactory(CopyRetentionRuleFactory.class);
defaultSchema.createUndeletable(RetentionRule.DOCUMENT_TYPES_DETAILS).setMultivalue(true)
.setType(STRUCTURE).defineStructureFactory(RetentionRuleDocumentTypeFactory.class);
defaultSchema.createUndeletable(RetentionRule.DOCUMENT_TYPES).setType(REFERENCE).setMultivalue(true)
.defineReferencesTo(documentType)
.defineDataEntry().asCalculated(RuleDocumentTypesCalculator.class);
defaultSchema.createUndeletable(RetentionRule.COPY_RULES_COMMENT).setType(TEXT).setMultivalue(true);
return schemaType;
}
private MetadataSchemaTypeBuilder setupUniformSubdivisionSchemaType(MetadataSchemaTypeBuilder retentionRuleSchemaType) {
MetadataSchemaTypeBuilder schemaType = types().createNewSchemaType(UniformSubdivision.SCHEMA_TYPE).setSecurity(false);
MetadataSchemaBuilder defaultSchema = schemaType.getDefaultSchema();
defaultSchema.getMetadata(TITLE_CODE).setSchemaAutocomplete(true);
defaultSchema.createUndeletable(UniformSubdivision.CODE).setType(STRING).setDefaultRequirement(true).setSearchable(true);
defaultSchema.createUndeletable(UniformSubdivision.DESCRIPTION).setType(STRING).setSearchable(true);
defaultSchema.createUndeletable(UniformSubdivision.COMMENTS).setMultivalue(true)
.setType(MetadataValueType.STRUCTURE).defineStructureFactory(CommentFactory.class);
defaultSchema.createUndeletable(UniformSubdivision.RETENTION_RULE).setMultivalue(true)
.defineReferencesTo(retentionRuleSchemaType);
return schemaType;
}
private MetadataSchemaTypeBuilder setupAdministrativeUnitSchemaType(MetadataSchemaTypeBuilder filingSpaceSchemaType) {
MetadataSchemaTypeBuilder schemaType = types().createNewSchemaType(AdministrativeUnit.SCHEMA_TYPE).setSecurity(false);
MetadataSchemaBuilder defaultSchema = schemaType.getDefaultSchema();
defaultSchema.createUndeletable(AdministrativeUnit.CODE).setType(STRING).setDefaultRequirement(true).setSearchable(
true).setSchemaAutocomplete(true);
defaultSchema.getMetadata(TITLE_CODE).setSchemaAutocomplete(true);
defaultSchema.createUndeletable(AdministrativeUnit.DESCRIPTION).setType(STRING).setSearchable(true);
defaultSchema.createUndeletable(AdministrativeUnit.PARENT).defineChildOfRelationshipToType(schemaType);
defaultSchema.createUndeletable(AdministrativeUnit.FILING_SPACES).setMultivalue(true)
.defineReferencesTo(filingSpaceSchemaType);
defaultSchema.createUndeletable(AdministrativeUnit.ADRESS).setType(STRING);
copy(filingSpaceSchemaType, schemaType, AdministrativeUnit.FILING_SPACES, FilingSpace.USERS,
AdministrativeUnit.FILING_SPACES_USERS);
copy(filingSpaceSchemaType, schemaType, AdministrativeUnit.FILING_SPACES, FilingSpace.ADMINISTRATORS,
AdministrativeUnit.FILING_SPACES_ADMINISTRATORS);
return schemaType;
}
private MetadataSchemaTypeBuilder setupFilingSpaceSchemaType(MetadataSchemaTypeBuilder userSchemaType) {
MetadataSchemaTypeBuilder schemaType = types().createNewSchemaType(FilingSpace.SCHEMA_TYPE).setSecurity(false);
MetadataSchemaBuilder defaultSchema = schemaType.getDefaultSchema();
defaultSchema.getMetadata(TITLE_CODE).setSchemaAutocomplete(true);
defaultSchema.createUndeletable(FilingSpace.CODE).setType(STRING).setDefaultRequirement(true).setSearchable(
true).setSchemaAutocomplete(true);
defaultSchema.createUndeletable(FilingSpace.DESCRIPTION).setType(STRING).setSearchable(true);
defaultSchema.createUndeletable(FilingSpace.USERS).setMultivalue(true).defineReferencesTo(userSchemaType);
defaultSchema.createUndeletable(FilingSpace.ADMINISTRATORS).setMultivalue(true).defineReferencesTo(userSchemaType);
return schemaType;
}
private MetadataSchemaTypeBuilder setupContainerSchemaType(MetadataSchemaTypeBuilder storageSpaceSchemaType,
MetadataSchemaTypeBuilder containerTypeSchemaType, MetadataSchemaTypeBuilder administrativeUnitSchemaType,
MetadataSchemaTypeBuilder userSchemaType, MetadataSchemaTypeBuilder filingSpaceSchemaType) {
MetadataSchemaTypeBuilder schemaType = types().createNewSchemaType(ContainerRecord.SCHEMA_TYPE).setSecurity(true);
MetadataSchemaBuilder defaultSchema = schemaType.getDefaultSchema();
defaultSchema.getMetadata(TITLE_CODE).setSchemaAutocomplete(true);
defaultSchema.getMetadata(Schemas.TITLE.getLocalCode()).defineDataEntry().asCalculated(ContainerTitleCalculator.class)
.setDefaultRequirement(true);
defaultSchema.createUndeletable(ContainerRecord.ADMINISTRATIVE_UNIT).defineTaxonomyRelationshipToType(
administrativeUnitSchemaType);
defaultSchema.createUndeletable(ContainerRecord.BORROW_DATE).setType(DATE);
defaultSchema.createUndeletable(ContainerRecord.BORROWER).defineReferencesTo(userSchemaType);
defaultSchema.createUndeletable(ContainerRecord.COMPLETION_DATE).setType(DATE);
defaultSchema.createUndeletable(ContainerRecord.DECOMMISSIONING_TYPE).defineAsEnum(DecommissioningType.class);
defaultSchema.createUndeletable(ContainerRecord.DESCRIPTION).setType(STRING).setSearchable(true);
defaultSchema.createUndeletable(ContainerRecord.FILING_SPACE).defineReferencesTo(filingSpaceSchemaType);
defaultSchema.createUndeletable(ContainerRecord.FULL).setType(BOOLEAN);
defaultSchema.createUndeletable(ContainerRecord.IDENTIFIER).setType(STRING).setSearchable(true);
defaultSchema.createUndeletable(ContainerRecord.PLANIFIED_RETURN_DATE).setType(DATE);
defaultSchema.createUndeletable(ContainerRecord.REAL_DEPOSIT_DATE).setType(DATE);
defaultSchema.createUndeletable(ContainerRecord.REAL_RETURN_DATE).setType(DATE);
defaultSchema.createUndeletable(ContainerRecord.REAL_TRANSFER_DATE).setType(DATE);
defaultSchema.createUndeletable(ContainerRecord.STORAGE_SPACE).defineTaxonomyRelationshipToType(storageSpaceSchemaType);
defaultSchema.createUndeletable(ContainerRecord.TEMPORARY_IDENTIFIER).setType(STRING)
.setDefaultRequirement(true).setSearchable(true);
defaultSchema.createUndeletable(ContainerRecord.TYPE).defineReferencesTo(containerTypeSchemaType)
.setDefaultRequirement(true);
defaultSchema.createUndeletable(ContainerRecord.POSITION).setType(STRING).setSearchable(true);
defaultSchema.createUndeletable(ContainerRecord.COMMENTS).setMultivalue(true)
.setType(MetadataValueType.STRUCTURE).defineStructureFactory(CommentFactory.class);
return schemaType;
}
private MetadataSchemaTypeBuilder setupStorageSpaceSchemaType(MetadataSchemaTypeBuilder storageSpaceTypeSchema) {
MetadataSchemaTypeBuilder schemaType = types().createNewSchemaType(StorageSpace.SCHEMA_TYPE).setSecurity(false);
MetadataSchemaBuilder defaultSchema = schemaType.getDefaultSchema();
defaultSchema.getMetadata(TITLE_CODE).setSchemaAutocomplete(true);
defaultSchema.createUndeletable(StorageSpace.CAPACITY).setType(NUMBER);
defaultSchema.createUndeletable(StorageSpace.CODE).setType(STRING).setDefaultRequirement(true).setSearchable(
true).setSchemaAutocomplete(true);
defaultSchema.createUndeletable(StorageSpace.DECOMMISSIONING_TYPE).defineAsEnum(DecommissioningType.class);
defaultSchema.createUndeletable(StorageSpace.DESCRIPTION).setType(STRING).setSearchable(true);
defaultSchema.createUndeletable(StorageSpace.PARENT_STORAGE_SPACE).defineChildOfRelationshipToType(schemaType);
defaultSchema.createUndeletable(StorageSpace.TYPE).defineReferencesTo(storageSpaceTypeSchema);
defaultSchema.createUndeletable(StorageSpace.COMMENTS).setMultivalue(true)
.setType(MetadataValueType.STRUCTURE).defineStructureFactory(CommentFactory.class);
return schemaType;
}
private MetadataSchemaTypeBuilder setupCategoriesSchemaType(MetadataSchemaTypeBuilder retentionRuleSchemaType) {
MetadataSchemaTypeBuilder schemaType = types().createNewSchemaType(Category.SCHEMA_TYPE).setSecurity(false);
MetadataSchemaBuilder defaultSchema = schemaType.getDefaultSchema();
defaultSchema.getMetadata(TITLE_CODE).setSchemaAutocomplete(true);
defaultSchema.createUndeletable(Category.CODE).setType(STRING).setDefaultRequirement(true).setSearchable(
true).setSchemaAutocomplete(true);
defaultSchema.createUndeletable(Category.DESCRIPTION).setType(STRING).setSearchable(true);
defaultSchema.createUndeletable(Category.PARENT).defineChildOfRelationshipToType(schemaType);
defaultSchema.createUndeletable(Category.KEYWORDS).setType(STRING).setMultivalue(true).setSearchable(true)
.setSchemaAutocomplete(true);
defaultSchema.createUndeletable(Category.COMMENTS).setMultivalue(true)
.setType(MetadataValueType.STRUCTURE).defineStructureFactory(CommentFactory.class);
defaultSchema.createUndeletable(Category.RETENTION_RULES).setDefaultRequirement(false).setMultivalue(true)
.defineReferencesTo(retentionRuleSchemaType);
defaultSchema.createUndeletable(Schemas.LINKABLE.getLocalCode()).setType(BOOLEAN).defineDataEntry().asCalculated(
CategoryIsLinkableCalculator.class);
return schemaType;
}
private MetadataSchemaTypeBuilder setupFolder(MetadataSchemaTypeBuilder categorySchemaType,
MetadataSchemaTypeBuilder retentionRuleSchemaType,
MetadataSchemaTypeBuilder administrativeUnitSchemaType, MetadataSchemaTypeBuilder filingSpaceSchemaType,
MetadataSchemaTypeBuilder folderTypeSchemaType, MetadataSchemaTypeBuilder mediumTypeSchemaType,
MetadataSchemaTypeBuilder containerSchemaType, MetadataSchemaTypeBuilder uniformSubdivisionSchemaType) {
MetadataSchemaTypeBuilder schemaType = types().createNewSchemaType(Folder.SCHEMA_TYPE).setSecurity(true);
MetadataSchemaBuilder defaultSchema = schemaType.getDefaultSchema();
defaultSchema.get(Schemas.TITLE_CODE).setDefaultRequirement(true);
defaultSchema.createUndeletable(Folder.PARENT_FOLDER)
.defineChildOfRelationshipToType(schemaType);
defaultSchema.createUndeletable(Folder.ADMINISTRATIVE_UNIT_ENTERED)
.defineTaxonomyRelationshipToType(administrativeUnitSchemaType);
defaultSchema.createUndeletable(Folder.ADMINISTRATIVE_UNIT)
.defineReferencesTo(administrativeUnitSchemaType)
.defineDataEntry().asCalculated(FolderAppliedAdministrativeUnitCalculator.class)
.setDefaultRequirement(true);
defaultSchema.createUndeletable(Folder.FILING_SPACE_ENTERED)
.defineReferencesTo(filingSpaceSchemaType);
defaultSchema.createUndeletable(Folder.FILING_SPACE)
.defineReferencesTo(filingSpaceSchemaType)
.defineDataEntry().asCalculated(FolderAppliedFilingSpaceCalculator.class)
.setDefaultRequirement(true);
defaultSchema.createUndeletable(Folder.CATEGORY_ENTERED)
.defineTaxonomyRelationshipToType(categorySchemaType);
defaultSchema.createUndeletable(Folder.CATEGORY)
.defineReferencesTo(categorySchemaType)
.defineDataEntry().asCalculated(FolderApplicableCategoryCalculator.class)
.setDefaultRequirement(true);
defaultSchema.createUndeletable(Folder.MAIN_COPY_RULE)
.setType(MetadataValueType.STRUCTURE).defineStructureFactory(CopyRetentionRuleFactory.class)
.defineDataEntry().asCalculated(FolderMainCopyRuleCalculator.class);
defaultSchema.createUndeletable(Folder.APPLICABLE_COPY_RULES).setMultivalue(true)
.setType(MetadataValueType.STRUCTURE).defineStructureFactory(CopyRetentionRuleFactory.class)
.defineDataEntry().asCalculated(FolderApplicableCopyRuleCalculator.class);
defaultSchema.createUndeletable(Folder.UNIFORM_SUBDIVISION_ENTERED)
.defineReferencesTo(uniformSubdivisionSchemaType);
defaultSchema.createUndeletable(Folder.UNIFORM_SUBDIVISION)
.defineReferencesTo(uniformSubdivisionSchemaType)
.defineDataEntry().asCalculated(FolderAppliedUniformSubdivisionCalculator.class);
defaultSchema.createUndeletable(Folder.DESCRIPTION).setType(TEXT).setSearchable(true);
defaultSchema.createUndeletable(Folder.KEYWORDS).setType(STRING).setMultivalue(true).setSearchable(true);
defaultSchema.createUndeletable(Folder.TYPE).defineReferencesTo(folderTypeSchemaType);
defaultSchema.createUndeletable(Folder.MEDIUM_TYPES).defineReferencesTo(mediumTypeSchemaType).setMultivalue(true);
defaultSchema.createUndeletable(Folder.OPENING_DATE).setType(DATE).setDefaultRequirement(true);
defaultSchema.createUndeletable(Folder.CLOSING_DATE).setType(DATE)
.defineDataEntry().asCalculated(FolderClosingDateCalculator.class);
defaultSchema.createUndeletable(Folder.ENTERED_CLOSING_DATE).setType(DATE);
defaultSchema.createUndeletable(Folder.ACTUAL_TRANSFER_DATE).setType(DATE);
defaultSchema.createUndeletable(Folder.ACTUAL_DEPOSIT_DATE).setType(DATE);
defaultSchema.createUndeletable(Folder.ACTUAL_DESTRUCTION_DATE).setType(DATE);
defaultSchema.createUndeletable(Folder.COPY_RULES_EXPECTED_TRANSFER_DATES).setType(DATE).setMultivalue(true)
.defineDataEntry().asCalculated(FolderCopyRulesExpectedTransferDatesCalculator.class);
defaultSchema.createUndeletable(Folder.COPY_RULES_EXPECTED_DEPOSIT_DATES).setType(DATE).setMultivalue(true)
.defineDataEntry().asCalculated(FolderCopyRulesExpectedDepositDatesCalculator.class);
defaultSchema.createUndeletable(Folder.COPY_RULES_EXPECTED_DESTRUCTION_DATES).setType(DATE).setMultivalue(true)
.defineDataEntry().asCalculated(FolderCopyRulesExpectedDestructionDatesCalculator.class);
defaultSchema.createUndeletable(Folder.EXPECTED_TRANSFER_DATE).setType(DATE)
.defineDataEntry().asCalculated(FolderExpectedTransferDateCalculator.class);
defaultSchema.createUndeletable(Folder.EXPECTED_DEPOSIT_DATE).setType(DATE)
.defineDataEntry().asCalculated(FolderExpectedDepositDateCalculator.class);
defaultSchema.createUndeletable(Folder.EXPECTED_DESTRUCTION_DATE).setType(DATE)
.defineDataEntry().asCalculated(FolderExpectedDestructionDateCalculator.class);
defaultSchema.createUndeletable(Folder.RETENTION_RULE_ENTERED)
.defineReferencesTo(retentionRuleSchemaType);
defaultSchema.createUndeletable(Folder.RETENTION_RULE)
.setDefaultRequirement(true)
.defineReferencesTo(retentionRuleSchemaType)
.defineDataEntry().asCalculated(FolderAppliedRetentionRuleCalculator.class);
defaultSchema.createUndeletable(Folder.ARCHIVISTIC_STATUS).defineAsEnum(FolderStatus.class)
.defineDataEntry().asCalculated(FolderStatusCalculator.class);
defaultSchema.createUndeletable(Folder.COPY_STATUS).defineAsEnum(CopyType.class)
.defineDataEntry().asCalculated(FolderCopyStatusCalculator.class).setDefaultRequirement(true);
defaultSchema.createUndeletable(Folder.COPY_STATUS_ENTERED).defineAsEnum(CopyType.class);
defaultSchema.createUndeletable(Folder.ACTIVE_RETENTION_TYPE).defineAsEnum(RetentionType.class)
.defineDataEntry().asCalculated(FolderActiveRetentionTypeCalculator.class);
defaultSchema.createUndeletable(Folder.SEMIACTIVE_RETENTION_TYPE).defineAsEnum(RetentionType.class)
.defineDataEntry().asCalculated(FolderSemiActiveRetentionTypeCalculator.class);
defaultSchema.createUndeletable(Folder.INACTIVE_DISPOSAL_TYPE).defineAsEnum(DisposalType.class)
.defineDataEntry().asCalculated(FolderInactiveDisposalTypeCalculator.class);
defaultSchema.createUndeletable(Folder.DECOMMISSIONING_DATE).setType(DATE)
.defineDataEntry().asCalculated(FolderDecommissioningDateCalculator.class);
defaultSchema.createUndeletable(Folder.MEDIA_TYPE).defineAsEnum(FolderMediaType.class)
.defineDataEntry().asCalculated(FolderMediaTypesCalculator.class);
defaultSchema.createUndeletable(Folder.CONTAINER).defineReferencesTo(containerSchemaType);
defaultSchema.createUndeletable(Folder.COMMENTS).setMultivalue(true)
.setType(MetadataValueType.STRUCTURE).defineStructureFactory(CommentFactory.class);
copy(categorySchemaType, schemaType, Folder.CATEGORY, Category.CODE, Folder.CATEGORY_CODE);
copy(retentionRuleSchemaType, schemaType, Folder.RETENTION_RULE, RetentionRule.ADMINISTRATIVE_UNITS,
Folder.RETENTION_RULE_ADMINISTRATIVE_UNITS);
copy(filingSpaceSchemaType, schemaType, Folder.FILING_SPACE, FilingSpace.CODE, Folder.FILING_SPACE_CODE);
return schemaType;
}
private MetadataSchemaTypeBuilder setupDecommissioningList(MetadataSchemaTypeBuilder administrativeUnitSchemaType,
MetadataSchemaTypeBuilder userSchemaType, MetadataSchemaTypeBuilder filingSpaceSchemaType,
MetadataSchemaTypeBuilder folderSchemaType, MetadataSchemaTypeBuilder containerSchemaType,
MetadataSchemaTypeBuilder categorySchemaType, MetadataSchemaTypeBuilder retentionRuleSchemaType,
MetadataSchemaTypeBuilder mediumTypeSchemaType) {
MetadataSchemaTypeBuilder schemaType = types().createNewSchemaType(DecommissioningList.SCHEMA_TYPE).setSecurity(false);
MetadataSchemaBuilder defaultSchema = schemaType.getDefaultSchema();
defaultSchema.getMetadata(Schemas.TITLE_CODE).setDefaultRequirement(true);
defaultSchema.createUndeletable(DecommissioningList.DESCRIPTION).setType(TEXT).setSearchable(true);
defaultSchema.createUndeletable(DecommissioningList.FILING_SPACE).setType(REFERENCE).defineReferencesTo(
filingSpaceSchemaType);
defaultSchema.createUndeletable(DecommissioningList.ADMINISTRATIVE_UNIT).defineReferencesTo(administrativeUnitSchemaType);
defaultSchema.createSystemReserved(DecommissioningList.TYPE).defineAsEnum(DecommissioningListType.class)
.setSearchable(true);
defaultSchema.createUndeletable(DecommissioningList.VALIDATION_DATE).setType(DATE);
defaultSchema.createUndeletable(DecommissioningList.VALIDATION_USER).setType(REFERENCE)
.defineReferencesTo(userSchemaType);
defaultSchema.createUndeletable(DecommissioningList.APPROVAL_REQUEST_DATE).setType(DATE);
defaultSchema.createUndeletable(DecommissioningList.APPROVAL_REQUEST).setType(REFERENCE)
.defineReferencesTo(userSchemaType);
defaultSchema.createUndeletable(DecommissioningList.APPROVAL_DATE).setType(DATE);
defaultSchema.createUndeletable(DecommissioningList.APPROVAL_USER).setType(REFERENCE)
.defineReferencesTo(userSchemaType);
defaultSchema.createUndeletable(DecommissioningList.PROCESSING_DATE).setType(DATE);
defaultSchema.createUndeletable(DecommissioningList.PROCESSING_USER).setType(REFERENCE)
.defineReferencesTo(userSchemaType);
defaultSchema.createUndeletable(DecommissioningList.FOLDER_DETAILS).setMultivalue(true)
.setType(STRUCTURE).defineStructureFactory(DecomListFolderDetailFactory.class);
defaultSchema.createUndeletable(DecommissioningList.FOLDERS).setMultivalue(true)
.defineReferencesTo(folderSchemaType)
.defineDataEntry().asCalculated(DecomListFoldersCalculator.class);
defaultSchema.createUndeletable(DecommissioningList.CONTAINER_DETAILS).setMultivalue(true)
.setType(STRUCTURE).defineStructureFactory(DecomListContainerDetailFactory.class);
defaultSchema.createUndeletable(DecommissioningList.CONTAINERS).setType(REFERENCE)
.defineReferencesTo(containerSchemaType).setMultivalue(true)
.defineDataEntry().asCalculated(DecomListContainersCalculator.class);
copy(folderSchemaType, schemaType, DecommissioningList.FOLDERS, Folder.MEDIA_TYPE,
DecommissioningList.FOLDERS_MEDIA_TYPES);
defaultSchema.createUndeletable(DecommissioningList.ANALOGICAL_MEDIUM).setType(BOOLEAN)
.defineDataEntry().asCalculated(DecomListHasAnalogicalMediumTypesCalculator.class);
defaultSchema.createUndeletable(DecommissioningList.ELECTRONIC_MEDIUM).setType(BOOLEAN)
.defineDataEntry().asCalculated(DecomListHasElectronicMediumTypesCalculator.class);
defaultSchema.createUndeletable(DecommissioningList.UNIFORM).setType(BOOLEAN)
.defineDataEntry().asCalculated(DecomListIsUniform.class);
defaultSchema.createUndeletable(DecommissioningList.STATUS).defineAsEnum(DecomListStatus.class)
.defineDataEntry().asCalculated(DecomListStatusCalculator.class);
defaultSchema.createUndeletable(DecommissioningList.UNIFORM_CATEGORY)
.setType(REFERENCE).defineReferencesTo(categorySchemaType)
.defineDataEntry().asCalculated(DecomListUniformCategoryCalculator.class);
defaultSchema.createUndeletable(DecommissioningList.UNIFORM_COPY_RULE)
.setType(STRUCTURE).defineStructureFactory(CopyRetentionRuleFactory.class)
.defineDataEntry().asCalculated(DecomListUniformCopyRuleCalculator.class);
defaultSchema.createUndeletable(DecommissioningList.UNIFORM_COPY_TYPE).defineAsEnum(CopyType.class)
.defineDataEntry().asCalculated(DecomListUniformCopyTypeCalculator.class);
defaultSchema.createUndeletable(DecommissioningList.UNIFORM_RULE)
.setType(REFERENCE).defineReferencesTo(retentionRuleSchemaType)
.defineDataEntry().asCalculated(DecomListUniformRuleCalculator.class);
defaultSchema.createSystemReserved(DecommissioningList.ORIGIN_ARCHIVISTIC_STATUS).defineAsEnum(OriginStatus.class);
defaultSchema.createUndeletable(DecommissioningList.COMMENTS).setMultivalue(true)
.setType(MetadataValueType.ENUM).defineStructureFactory(CommentFactory.class);
return schemaType;
}
private MetadataSchemaTypeBuilder setupDocument(MetadataSchemaTypeBuilder folderSchemaType,
MetadataSchemaTypeBuilder documentTypeSchema) {
MetadataSchemaTypeBuilder schemaType = types().createNewSchemaType(Document.SCHEMA_TYPE).setSecurity(true);
MetadataSchemaBuilder defaultSchema = schemaType.getDefaultSchema();
defaultSchema.getMetadata(Schemas.TITLE_CODE).setDefaultRequirement(true);
defaultSchema.createUndeletable(Document.FOLDER)
.defineChildOfRelationshipToType(folderSchemaType).setDefaultRequirement(true);
defaultSchema.createUndeletable(Document.CONTENT).setType(CONTENT).setSearchable(true);
defaultSchema.createUndeletable(Document.KEYWORDS).setType(STRING).setMultivalue(true).setSearchable(true);
defaultSchema.createUndeletable(Document.DESCRIPTION).setType(TEXT).setSearchable(true);
defaultSchema.createUndeletable(Document.TYPE).defineReferencesTo(documentTypeSchema);
defaultSchema.createUndeletable(Document.COMMENTS).setMultivalue(true).setType(MetadataValueType.STRUCTURE)
.defineStructureFactory(CommentFactory.class);
String ref = Document.FOLDER;
copy(folderSchemaType, schemaType, ref, Folder.CATEGORY, Document.FOLDER_CATEGORY);
copy(folderSchemaType, schemaType, ref, Folder.ADMINISTRATIVE_UNIT, Document.FOLDER_ADMINISTRATIVE_UNIT);
copy(folderSchemaType, schemaType, ref, Folder.FILING_SPACE, Document.FOLDER_FILING_SPACE);
copy(folderSchemaType, schemaType, ref, Folder.RETENTION_RULE, Document.FOLDER_RETENTION_RULE);
copy(folderSchemaType, schemaType, ref, Folder.ARCHIVISTIC_STATUS, Document.FOLDER_ARCHIVISTIC_STATUS);
copy(folderSchemaType, schemaType, ref, Folder.ACTUAL_DEPOSIT_DATE, Document.FOLDER_ACTUAL_DEPOSIT_DATE);
copy(folderSchemaType, schemaType, ref, Folder.ACTUAL_DESTRUCTION_DATE, Document.FOLDER_ACTUAL_DESTRUCTION_DATE);
copy(folderSchemaType, schemaType, ref, Folder.ACTUAL_TRANSFER_DATE, Document.FOLDER_ACTUAL_TRANSFER_DATE);
copy(folderSchemaType, schemaType, ref, Folder.EXPECTED_DEPOSIT_DATE, Document.FOLDER_EXPECTED_DEPOSIT_DATE);
copy(folderSchemaType, schemaType, ref, Folder.EXPECTED_DESTRUCTION_DATE, Document.FOLDER_EXPECTED_DESTRUCTION_DATE);
copy(folderSchemaType, schemaType, ref, Folder.EXPECTED_TRANSFER_DATE, Document.FOLDER_EXPECTED_TRANSFER_DATE);
copy(folderSchemaType, schemaType, ref, Folder.OPENING_DATE, Document.FOLDER_OPENING_DATE);
copy(folderSchemaType, schemaType, ref, Folder.CLOSING_DATE, Document.FOLDER_CLOSING_DATE);
return schemaType;
}
private MetadataBuilder copy(MetadataSchemaTypeBuilder sourceSchemaType,
MetadataSchemaTypeBuilder destinationSchemaType,
String referenceLocalCode, String sourceMetadataLocalCode, String destinationMetadataLocalCode) {
MetadataSchemaBuilder sourceDefaultSchema = sourceSchemaType.getDefaultSchema();
MetadataSchemaBuilder destinationDefaultSchema = destinationSchemaType.getDefaultSchema();
MetadataBuilder refMetadata = destinationDefaultSchema.getMetadata(referenceLocalCode);
MetadataBuilder sourceMetadata = sourceDefaultSchema.getMetadata(sourceMetadataLocalCode);
MetadataBuilder destinationMetadata = destinationDefaultSchema.createUndeletable(destinationMetadataLocalCode);
destinationMetadata.setMultivalue(sourceMetadata.isMultivalue() || refMetadata.isMultivalue());
destinationMetadata.setType(sourceMetadata.getType());
destinationMetadata.defineDataEntry().asCopied(refMetadata, sourceMetadata);
if (sourceMetadata.getType() == MetadataValueType.REFERENCE) {
String referenceSchemaType = sourceMetadata.getAllowedReferencesBuilder().getSchemaType();
destinationMetadata.defineReferences().setCompleteSchemaTypeCode(referenceSchemaType);
} else if (sourceMetadata.getType() == MetadataValueType.ENUM) {
destinationMetadata.defineAsEnum(sourceMetadata.getEnumClass());
}
return destinationMetadata;
}
}