4250: Geonetwork Resolver upgrade: it must return only "private" Metadata Ids for CKAN harversting
Task-Url: https://support.d4science.org/issues/4250 Updated <csw:SearchResults numberOfRecordsMatched="XX" numberOfRecordsReturned="XX" elementSet="summary" nextRecord="XX"> git-svn-id: http://svn.research-infrastructures.eu/public/d4science/gcube/trunk/data-transfer/uri-resolver@129138 82a268e6-3cf1-43bd-a215-b396298e98cf
This commit is contained in:
parent
ca90066456
commit
6afb574c7c
|
@ -7,8 +7,11 @@ package org.gcube.datatransfer.resolver.gis.util;
|
|||
import java.io.BufferedInputStream;
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import javax.xml.parsers.DocumentBuilder;
|
||||
|
@ -19,10 +22,13 @@ import javax.xml.transform.TransformerFactory;
|
|||
import javax.xml.transform.dom.DOMSource;
|
||||
import javax.xml.transform.stream.StreamResult;
|
||||
|
||||
import org.apache.commons.io.IOUtils;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.w3c.dom.Document;
|
||||
import org.w3c.dom.Element;
|
||||
import org.w3c.dom.NamedNodeMap;
|
||||
import org.w3c.dom.Node;
|
||||
import org.w3c.dom.NodeList;
|
||||
|
||||
/**
|
||||
|
@ -37,12 +43,11 @@ public class GetResponseRecordFilter {
|
|||
/**
|
||||
* Delete summary record.
|
||||
*
|
||||
* @param doc
|
||||
* the doc
|
||||
* @param identifier
|
||||
* the identifier
|
||||
* @param doc the doc
|
||||
* @param identifier the identifier
|
||||
* @return true, if successful
|
||||
*/
|
||||
private static void deleteSummaryRecord(Document doc, String identifier) {
|
||||
private static boolean deleteSummaryRecord(Document doc, String identifier) {
|
||||
|
||||
// <csw:SummaryRecord> list
|
||||
NodeList nodes = doc.getElementsByTagName("csw:SummaryRecord");
|
||||
|
@ -56,8 +61,10 @@ public class GetResponseRecordFilter {
|
|||
if (idValue.equals(identifier)) {
|
||||
summaryRecord.getParentNode().removeChild(summaryRecord);
|
||||
logger.trace("Removed child " + idValue);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
|
@ -78,9 +85,36 @@ public class GetResponseRecordFilter {
|
|||
dbf.setValidating(false);
|
||||
DocumentBuilder db = dbf.newDocumentBuilder();
|
||||
Document doc = db.parse(bis);
|
||||
int removed = 0;
|
||||
for (String identifier : idsToRemove) {
|
||||
deleteSummaryRecord(doc, identifier);
|
||||
if(deleteSummaryRecord(doc, identifier))
|
||||
removed++;
|
||||
}
|
||||
logger.debug("Removed "+removed +" node/s");
|
||||
|
||||
NodeList nodeList = doc.getElementsByTagName("csw:SearchResults");
|
||||
if(nodeList!=null && nodeList.item(0)!=null){
|
||||
Node nd = nodeList.item(0);
|
||||
// update staff attribute
|
||||
NamedNodeMap attr = nd.getAttributes();
|
||||
Node numberOfRecordsMatched = attr.getNamedItem("numberOfRecordsMatched");
|
||||
Node numberOfRecordsReturned = attr.getNamedItem("numberOfRecordsReturned");
|
||||
logger.trace("Old numberOfRecordsMatched: "+numberOfRecordsMatched.getTextContent());
|
||||
logger.trace("Old numberOfRecordsReturned: "+numberOfRecordsReturned.getTextContent());
|
||||
try{
|
||||
int oldValueM = Integer.parseInt(numberOfRecordsMatched.getTextContent());
|
||||
int oldValueR = Integer.parseInt(numberOfRecordsReturned.getTextContent());
|
||||
int newValueM = oldValueM-removed;
|
||||
int newValueR = oldValueR-removed;
|
||||
logger.trace("Updating numberOfRecordsMatched at: "+newValueM);
|
||||
logger.trace("Updating numberOfRecordsReturned at: "+newValueR);
|
||||
numberOfRecordsMatched.setTextContent(newValueM+"");
|
||||
numberOfRecordsReturned.setTextContent(newValueR+"");
|
||||
}catch (Exception e) {
|
||||
logger.warn("An error occurred during attribe numberOfRecordsMatched updating, skipping operation");
|
||||
}
|
||||
}
|
||||
|
||||
return documentToInputStream(doc);
|
||||
}
|
||||
catch (Exception e) {
|
||||
|
@ -107,4 +141,25 @@ public class GetResponseRecordFilter {
|
|||
return new ByteArrayInputStream(outputStream.toByteArray());
|
||||
// return out.toString();
|
||||
}
|
||||
|
||||
|
||||
public static void main(String[] args) {
|
||||
|
||||
File file = new File("GetResponseRecords.xml");
|
||||
List<String> idsToRemove = new ArrayList<String>();
|
||||
idsToRemove.add("fao-species-map-hef");
|
||||
idsToRemove.add("fao-species-map-hea");
|
||||
idsToRemove.add("fao-species-map-crb");
|
||||
idsToRemove.add("fao-fsa-map-41.1.2");
|
||||
try {
|
||||
InputStream is = GetResponseRecordFilter.removeSummaryIdsByListIds(new FileInputStream(file), idsToRemove);
|
||||
|
||||
System.out.println(IOUtils.toString(is));
|
||||
}
|
||||
catch (IOException e) {
|
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,29 @@
|
|||
# Created by Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it
|
||||
|
||||
# Set root category priority to ERROR and its only appender to LOGFILE.
|
||||
log4j.rootCategory=ERROR, LOGFILE
|
||||
|
||||
log4j.appender.LOGFILE=org.apache.log4j.RollingFileAppender
|
||||
log4j.appender.LOGFILE.MaxFileSize=25MB
|
||||
log4j.appender.LOGFILE.MaxBackupIndex=10
|
||||
log4j.appender.LOGFILE.File=logs/uri-resolver.log
|
||||
log4j.appender.LOGFILE.Append=true
|
||||
log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
|
||||
log4j.appender.LOGFILE.layout.ConversionPattern=[%-5p] %d %c - %m%n
|
||||
#log4j.category.org.gcube=TRACE,A1
|
||||
|
||||
##GCube
|
||||
log4j.category.org.gcube=ERROR, LOGFILE
|
||||
log4j.additivity.org.gcube=false
|
||||
|
||||
##HomeLibrary
|
||||
#log4j.logger.org.gcube.portlets.user.homelibrary=INFO, LOGFILE
|
||||
|
||||
###MongoLog
|
||||
log4j.logger.com.mongodb=SEVERE, LOGFILE
|
||||
|
||||
##UriResolver
|
||||
log4j.logger.org.gcube.datatransfer.resolver=DEBUG
|
||||
|
||||
##Storage
|
||||
log4j.logger.org.gcube.contentmanager=INFO
|
Loading…
Reference in New Issue