From 12460b8aaa340f179bcb0393ab450b2c2a4ac1d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Garc=C3=ADa?= Date: Tue, 9 Nov 2021 16:02:10 +0100 Subject: [PATCH] [BP] Update XslProcessApi to process the draft copies for the metadata in a workflow (#5811) * Update XslProcessApi to process the draft copies for the metadata in a workflow * mend --- .../geonet/api/processing/XslProcessApi.java | 38 +++++++++++++------ 1 file changed, 26 insertions(+), 12 deletions(-) diff --git a/services/src/main/java/org/fao/geonet/api/processing/XslProcessApi.java b/services/src/main/java/org/fao/geonet/api/processing/XslProcessApi.java index 7f53479aec6..85e06dcc5d8 100644 --- a/services/src/main/java/org/fao/geonet/api/processing/XslProcessApi.java +++ b/services/src/main/java/org/fao/geonet/api/processing/XslProcessApi.java @@ -28,6 +28,7 @@ import java.io.StringWriter; import java.nio.file.Path; +import java.util.List; import java.util.Set; import javax.servlet.http.HttpServletRequest; @@ -44,6 +45,8 @@ import org.fao.geonet.kernel.DataManager; import org.fao.geonet.kernel.MetadataIndexerProcessor; import org.fao.geonet.kernel.SchemaManager; +import org.fao.geonet.kernel.datamanager.IMetadataUtils; +import org.fao.geonet.repository.specification.MetadataSpecs; import org.fao.geonet.utils.Log; import org.fao.geonet.utils.Xml; import org.jdom.Element; @@ -364,24 +367,35 @@ public BatchXslMetadataReindexer(ServiceContext context, @Override public void process() throws Exception { DataManager dataMan = context.getBean(DataManager.class); + IMetadataUtils metadataUtils = context.getBean(IMetadataUtils.class); + ApplicationContext appContext = ApplicationContextHolder.get(); for (String uuid : this.records) { - String id = getDataManager().getMetadataId(uuid); - Log.info("org.fao.geonet.services.metadata", - "Processing metadata with id:" + id); + List idList = metadataUtils.findAllIdsBy(MetadataSpecs.hasMetadataUuid(uuid)); + + // Increase the total records counter when processing a metadata with approved and working copies + // as the initial counter doesn't take in account this case + if (idList.size() > 1) { + xslProcessingReport.setTotalRecords(xslProcessingReport.getNumberOfRecords() + 1); + } + + for (Integer id : idList) { + Log.info("org.fao.geonet.services.metadata", + "Processing metadata with id:" + id); - Element beforeMetadata = dataMan.getMetadata(context, id, false, false, false); + Element beforeMetadata = dataMan.getMetadata(context, String.valueOf(id), false, false, false); - XslProcessUtils.process(context, id, process, - true, index, updateDateStamp, xslProcessingReport, - siteURL, request.getParameterMap()); + XslProcessUtils.process(context, String.valueOf(id), process, + true, index, updateDateStamp, xslProcessingReport, + siteURL, request.getParameterMap()); - Element afterMetadata = dataMan.getMetadata(context, id, false, false, false); + Element afterMetadata = dataMan.getMetadata(context, String.valueOf(id), false, false, false); - XMLOutputter outp = new XMLOutputter(); - String xmlAfter = outp.outputString(afterMetadata); - String xmlBefore = outp.outputString(beforeMetadata); - new RecordProcessingChangeEvent(Long.parseLong(id), this.userId, xmlBefore, xmlAfter, process).publish(appContext); + XMLOutputter outp = new XMLOutputter(); + String xmlAfter = outp.outputString(afterMetadata); + String xmlBefore = outp.outputString(beforeMetadata); + new RecordProcessingChangeEvent(id, this.userId, xmlBefore, xmlAfter, process).publish(appContext); + } } } }