package com.constellio.app.modules.rm.extensions;
import com.constellio.app.modules.rm.RMConfigs;
import com.constellio.app.modules.rm.services.RMSchemasRecordsServices;
import com.constellio.app.modules.rm.wrappers.AdministrativeUnit;
import com.constellio.app.modules.rm.wrappers.DecommissioningList;
import com.constellio.model.entities.records.wrappers.Event;
import com.constellio.model.entities.records.wrappers.EventType;
import com.constellio.model.extensions.behaviors.RecordExtension;
import com.constellio.model.extensions.events.records.RecordInCreationBeforeSaveEvent;
import com.constellio.model.services.factories.ModelLayerFactory;
import com.constellio.model.services.records.RecordServices;
import com.constellio.model.services.search.SearchServices;
import com.constellio.model.services.taxonomies.TaxonomiesManager;
import com.constellio.model.services.taxonomies.TaxonomiesSearchServices;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Created by constellios on 2017-04-11.
*/
public class RMEventRecordExtension extends RecordExtension {
private final static Logger LOGGER = LoggerFactory.getLogger(RMEventRecordExtension.class);
private final RMSchemasRecordsServices rmSchema;
final String collection;
final ModelLayerFactory modelLayerFactory;
final RecordServices recordServices;
final SearchServices searchServices;
final TaxonomiesSearchServices taxonomiesSearchServices;
final TaxonomiesManager taxonomyManager;
final RMSchemasRecordsServices rm;
final RMConfigs configs;
public RMEventRecordExtension(String collection, ModelLayerFactory modelLayerFactory) {
this.collection = collection;
this.modelLayerFactory = modelLayerFactory;
rmSchema = new RMSchemasRecordsServices(collection, modelLayerFactory);
recordServices = modelLayerFactory.newRecordServices();
searchServices = modelLayerFactory.newSearchServices();
taxonomiesSearchServices = modelLayerFactory.newTaxonomiesSearchService();
taxonomyManager = modelLayerFactory.getTaxonomiesManager();
this.rm = new RMSchemasRecordsServices(collection, modelLayerFactory);
this.configs = new RMConfigs(modelLayerFactory.getSystemConfigurationsManager());
}
@Override
public void recordInCreationBeforeSave(RecordInCreationBeforeSaveEvent event) {
if (event.isSchemaType(Event.SCHEMA_TYPE)) {
Event wrappedEvent = rmSchema.wrapEvent(event.getRecord());
if (wrappedEvent.getType().equals(EventType.FOLDER_DESTRUCTION) || wrappedEvent.getType().equals(EventType.FOLDER_DEPOSIT)
|| wrappedEvent.getType().equals(EventType.FOLDER_RELOCATION) || wrappedEvent.getType().equals(EventType.RECEIVE_FOLDER)
|| wrappedEvent.getType().equals(EventType.RECEIVE_CONTAINER))
{
try
{
DecommissioningList decommissioningList = rm.getDecommissioningList(wrappedEvent.getRecordId());
AdministrativeUnit administrativeUnit = rmSchema.getAdministrativeUnit(decommissioningList.getAdministrativeUnit());
wrappedEvent.setEventPrincipalPath(administrativeUnit.getPaths().get(0) + wrappedEvent.getPaths().get(0));
}
catch(Exception e)
{
// When event are created before the DecommissioningList.
LOGGER.warn("recordInCreationBeforeSave, When event are created before the DecommissioningList, Should not happen in production only in unit testing.");
}
}
}
}
}