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 2ee4fe1de66..55180d3a2ea 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; @@ -366,24 +369,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); + } } } }