From d13a84beac64a0d0b8865a40087d2dedcbaa7044 Mon Sep 17 00:00:00 2001 From: Georgy Litvinov Date: Fri, 22 Dec 2023 14:35:59 +0100 Subject: [PATCH] Audit module (Change Tracking) (#3879) * Added audit to startup listeners * provide editor info in create and link resource controller * Added example audit configuration --------- Co-authored-by: Georgy Litvinov --- .../freemarker/CreateAndLinkResourceController.java | 10 ++++++---- .../resources/config/example.applicationSetup.n3 | 12 ++++++++++++ .../webapp/WEB-INF/resources/startup_listeners.txt | 3 +++ 3 files changed, 21 insertions(+), 4 deletions(-) diff --git a/api/src/main/java/org/vivoweb/webapp/controller/freemarker/CreateAndLinkResourceController.java b/api/src/main/java/org/vivoweb/webapp/controller/freemarker/CreateAndLinkResourceController.java index e6c14905dc..f2533a9d4d 100644 --- a/api/src/main/java/org/vivoweb/webapp/controller/freemarker/CreateAndLinkResourceController.java +++ b/api/src/main/java/org/vivoweb/webapp/controller/freemarker/CreateAndLinkResourceController.java @@ -21,6 +21,7 @@ import edu.cornell.mannlib.vitro.webapp.dao.IndividualDao; import edu.cornell.mannlib.vitro.webapp.dao.InsertException; import edu.cornell.mannlib.vitro.webapp.dao.NewURIMakerVitro; +import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.N3EditUtils; import edu.cornell.mannlib.vitro.webapp.modelaccess.ModelNames; import edu.cornell.mannlib.vitro.webapp.rdfservice.ChangeSet; import edu.cornell.mannlib.vitro.webapp.rdfservice.RDFService; @@ -391,7 +392,7 @@ protected ResponseValues processRequest(VitroRequest vreq) { } // Finished processing confirmation, write the differences between the existing and updated model - writeChanges(vreq.getRDFService(), existingModel, updatedModel); + writeChanges(vreq.getRDFService(), existingModel, updatedModel, N3EditUtils.getEditorUri(vreq)); } // Get any IDs that have not yet been processed from the form @@ -1815,8 +1816,9 @@ protected boolean isResourceOfType(Resource resource, String typeUri) { * @param rdfService * @param existingModel * @param updatedModel + * @param editroUri */ - protected void writeChanges(RDFService rdfService, Model existingModel, Model updatedModel) { + protected void writeChanges(RDFService rdfService, Model existingModel, Model updatedModel, String editorUri) { Model removeModel = existingModel.difference(updatedModel); Model addModel = updatedModel.difference(existingModel); @@ -1829,12 +1831,12 @@ protected void writeChanges(RDFService rdfService, Model existingModel, Model up if (!addModel.isEmpty()) { addStream = makeN3InputStream(addModel); - changeSet.addAddition(addStream, RDFService.ModelSerializationFormat.N3, ModelNames.ABOX_ASSERTIONS); + changeSet.addAddition(addStream, RDFService.ModelSerializationFormat.N3, ModelNames.ABOX_ASSERTIONS, editorUri); } if (!removeModel.isEmpty()) { removeStream = makeN3InputStream(removeModel); - changeSet.addRemoval(removeStream, RDFService.ModelSerializationFormat.N3, ModelNames.ABOX_ASSERTIONS); + changeSet.addRemoval(removeStream, RDFService.ModelSerializationFormat.N3, ModelNames.ABOX_ASSERTIONS, editorUri); } try { diff --git a/home/src/main/resources/config/example.applicationSetup.n3 b/home/src/main/resources/config/example.applicationSetup.n3 index 0acd91f0f1..ce5dfa2fd4 100644 --- a/home/src/main/resources/config/example.applicationSetup.n3 +++ b/home/src/main/resources/config/example.applicationSetup.n3 @@ -26,10 +26,22 @@ :hasSearchIndexer :basicSearchIndexer ; :hasImageProcessor :iioImageProcessor ; :hasFileStorage :ptiFileStorage ; +# :hasAuditModule :tdbAuditModule ; :hasContentTripleSource :tdbContentTripleSource ; :hasConfigurationTripleSource :tdbConfigurationTripleSource ; :hasTBoxReasonerModule :jfactTBoxReasonerModule . +# ---------------------------- +# +# Audit module: +# + +#:tdbAuditModule +# a , +# ; +# :hasTdbDirectory "tdbAuditModels" . + + # ---------------------------- # # Image processor module: diff --git a/webapp/src/main/webapp/WEB-INF/resources/startup_listeners.txt b/webapp/src/main/webapp/WEB-INF/resources/startup_listeners.txt index 3061e655d8..5128e9486f 100644 --- a/webapp/src/main/webapp/WEB-INF/resources/startup_listeners.txt +++ b/webapp/src/main/webapp/WEB-INF/resources/startup_listeners.txt @@ -92,3 +92,6 @@ edu.cornell.mannlib.vitro.webapp.controller.individual.VIVOIndividualResponseBui # This should be near the end, because it will issue a warning if the connection to the SearchEngine times out. edu.cornell.mannlib.vitro.webapp.servlet.setup.SearchEngineSmokeTest + +edu.cornell.mannlib.vitro.webapp.audit.AuditSetup +