package com.constellio.app.modules.rm.services.logging;
import java.util.List;
import com.constellio.app.modules.rm.wrappers.Document;
import org.apache.commons.lang.StringUtils;
import com.constellio.app.modules.rm.wrappers.DecommissioningList;
import com.constellio.data.dao.dto.records.RecordsFlushing;
import com.constellio.data.utils.TimeProvider;
import com.constellio.model.entities.records.Record;
import com.constellio.model.entities.records.Transaction;
import com.constellio.model.entities.records.wrappers.Event;
import com.constellio.model.entities.records.wrappers.EventType;
import com.constellio.model.entities.records.wrappers.User;
import com.constellio.model.entities.schemas.Schemas;
import com.constellio.model.services.factories.ModelLayerFactory;
import com.constellio.model.services.records.RecordServicesException;
import com.constellio.model.services.records.SchemasRecordsServices;
import com.constellio.model.services.schemas.SchemaUtils;
public class DecommissioningLoggingService {
ModelLayerFactory modelLayerFactory;
public DecommissioningLoggingService(ModelLayerFactory modelLayerFactory) {
this.modelLayerFactory = modelLayerFactory;
}
public void logDecommissioning(DecommissioningList decommissioningList, User user) {
SchemasRecordsServices schemasRecords = new SchemasRecordsServices(user.getCollection(), modelLayerFactory);
Record record = decommissioningList.getWrappedRecord();
Event event = schemasRecords.newEvent();
switch(decommissioningList.getDecommissioningListType()){
case FOLDERS_TO_DEPOSIT: event.setType(EventType.FOLDER_DEPOSIT); break;
case FOLDERS_TO_DESTROY: event.setType(EventType.FOLDER_DESTRUCTION); break;
case FOLDERS_TO_TRANSFER: event.setType(EventType.FOLDER_RELOCATION); break;
default : //FIXME
return;
}
setDefaultMetadata(event, user);
setRecordMetadata(event, record);
executeTransaction(event.getWrappedRecord());
}
private void executeTransaction(Record record) {
Transaction transaction = new Transaction();
transaction.setRecordFlushing(RecordsFlushing.WITHIN_SECONDS(1));
transaction.add(record);
try {
modelLayerFactory.newRecordServices().execute(transaction);
} catch (RecordServicesException e) {
//TODO
throw new RuntimeException(e.getMessage());
}
}
private void setRecordMetadata(Event event, Record record) {
event.setRecordId(record.getId());
String principalPath = (String) record.get(Schemas.PRINCIPAL_PATH);
event.setEventPrincipalPath(principalPath);
}
private void setDefaultMetadata(Event event, User user) {
event.setUsername(user.getUsername());
List<String> roles = user.getAllRoles();
event.setUserRoles(StringUtils.join(roles.toArray(), "; "));
event.setCreatedOn(TimeProvider.getLocalDateTime());
}
public void logPdfAGeneration(Document document, User user) {
SchemasRecordsServices schemasRecords = new SchemasRecordsServices(user.getCollection(), modelLayerFactory);
Event event = schemasRecords.newEvent();
event.setType(EventType.PDF_A_GENERATION);
event.setTitle(document.getTitle());
setDefaultMetadata(event, user);
setRecordMetadata(event, document.getWrappedRecord());
executeTransaction(event.getWrappedRecord());
}
}