package com.constellio.app.modules.rm.configScripts; import com.constellio.app.modules.rm.model.calculators.storageSpace.StorageSpaceTitleCalculator; import com.constellio.app.modules.rm.wrappers.StorageSpace; import com.constellio.app.services.factories.ConstellioFactories; import com.constellio.model.entities.configs.AbstractSystemConfigurationScript; import com.constellio.model.services.collections.CollectionsListManager; import com.constellio.model.services.factories.ModelLayerFactory; import com.constellio.model.services.schemas.MetadataSchemaTypesAlteration; import com.constellio.model.services.schemas.MetadataSchemasManager; import com.constellio.model.services.schemas.builders.MetadataSchemaTypesBuilder; public class EnableOrDisableStorageSpaceTitleCalculatorScript extends AbstractSystemConfigurationScript<Boolean> { @Override public void onValueChanged(Boolean previousValue, Boolean newValue, ModelLayerFactory modelLayerFactory) { if (newValue == null) { newValue = Boolean.FALSE; } if (previousValue == null) { previousValue = Boolean.FALSE; } if(newValue != previousValue) { CollectionsListManager collectionManager = modelLayerFactory .getCollectionsListManager(); for (String collection : collectionManager.getCollectionsExcludingSystem()) { onValueChangedForCollection(newValue, modelLayerFactory, collection); } } } private void onValueChangedForCollection(Boolean newValue, ModelLayerFactory modelLayerFactory, String collection) { if(Boolean.TRUE.equals(newValue)) { enableUniformSubdivisionTitleCalculator(modelLayerFactory, collection); } else { disableUniformSubdivisionTitleCalculator(modelLayerFactory, collection); } } private void disableUniformSubdivisionTitleCalculator(ModelLayerFactory modelLayerFactory, String collection) { MetadataSchemasManager metadataSchemasManager = modelLayerFactory.getMetadataSchemasManager(); metadataSchemasManager.modify(collection, new MetadataSchemaTypesAlteration() { @Override public void alter(MetadataSchemaTypesBuilder types) { types.getDefaultSchema(StorageSpace.SCHEMA_TYPE).get(StorageSpace.TITLE).setUniqueValue(false).defineDataEntry().asManual(); types.getDefaultSchema(StorageSpace.SCHEMA_TYPE).get(StorageSpace.CODE).setUniqueValue(true); } }); } private void enableUniformSubdivisionTitleCalculator(ModelLayerFactory modelLayerFactory, String collection) { MetadataSchemasManager metadataSchemasManager = modelLayerFactory.getMetadataSchemasManager(); metadataSchemasManager.modify(collection, new MetadataSchemaTypesAlteration() { @Override public void alter(MetadataSchemaTypesBuilder types) { types.getDefaultSchema(StorageSpace.SCHEMA_TYPE).get(StorageSpace.TITLE).setUniqueValue(true).defineDataEntry().asCalculated(StorageSpaceTitleCalculator.class); types.getDefaultSchema(StorageSpace.SCHEMA_TYPE).get(StorageSpace.CODE).setUniqueValue(false); } }); ConstellioFactories.getInstance().getAppLayerFactory().getSystemGlobalConfigsManager().setReindexingRequired(true); } }