List sets sent in proper format with all possible sets returned.
This commit is contained in:
parent
41ceffda2a
commit
afc881b443
|
@ -13,7 +13,6 @@ import eu.dnetlib.validatorapi.repositories.ValidationResultRepository;
|
||||||
import eu.dnetlib.validatorapi.routes.OaiPmhRoute;
|
import eu.dnetlib.validatorapi.routes.OaiPmhRoute;
|
||||||
import eu.dnetlib.validatorapi.routes.OaiSetListRoute;
|
import eu.dnetlib.validatorapi.routes.OaiSetListRoute;
|
||||||
import org.apache.camel.CamelContext;
|
import org.apache.camel.CamelContext;
|
||||||
import org.apache.camel.ConsumerTemplate;
|
|
||||||
import org.apache.camel.ProducerTemplate;
|
import org.apache.camel.ProducerTemplate;
|
||||||
import org.apache.camel.builder.RouteBuilder;
|
import org.apache.camel.builder.RouteBuilder;
|
||||||
import org.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.LogManager;
|
||||||
|
@ -217,11 +216,6 @@ public class ValidationController {
|
||||||
validationIssueRepository, validationResultRepository);
|
validationIssueRepository, validationResultRepository);
|
||||||
camelContext.addRoutes(oaiPmhRouteBuilder);
|
camelContext.addRoutes(oaiPmhRouteBuilder);
|
||||||
|
|
||||||
|
|
||||||
/* RouteBuilder listSetsBuilder = new OaiSetListRoute("oaipmh://"+ baseURL + "?verb=ListSets");
|
|
||||||
camelContext.addRoutes(listSetsBuilder);
|
|
||||||
validationJob.progress = "COMPLETED";*/
|
|
||||||
|
|
||||||
}
|
}
|
||||||
catch (Exception e) {
|
catch (Exception e) {
|
||||||
log.error("Validation job stopped unexpectedly." + e.getMessage());
|
log.error("Validation job stopped unexpectedly." + e.getMessage());
|
||||||
|
@ -240,11 +234,12 @@ public class ValidationController {
|
||||||
|
|
||||||
RouteBuilder listSetsBuilder = new OaiSetListRoute();
|
RouteBuilder listSetsBuilder = new OaiSetListRoute();
|
||||||
ProducerTemplate producerTemplate = camelContext.createProducerTemplate();
|
ProducerTemplate producerTemplate = camelContext.createProducerTemplate();
|
||||||
producerTemplate.requestBodyAndHeader("direct:getResponse", null, "endpoint", "oaipmh://"+ baseURL + "?verb=ListSets", String.class);
|
String response = producerTemplate.requestBodyAndHeader("direct:getResponse", null, "endpoint", "oaipmh://"+ baseURL + "?verb=ListSets", String.class);
|
||||||
|
/*
|
||||||
ConsumerTemplate consumerTemplate = camelContext.createConsumerTemplate();
|
ConsumerTemplate consumerTemplate = camelContext.createConsumerTemplate();
|
||||||
String result = consumerTemplate.receive("seda:result").getIn().getBody(String.class);
|
String result = consumerTemplate.receive("seda:result").getIn().getBody(String.class);
|
||||||
return result;
|
return result;*/
|
||||||
|
return response;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
System.out.println(camelContext.getRoutes());
|
System.out.println(camelContext.getRoutes());
|
||||||
|
|
|
@ -29,16 +29,16 @@ public interface ValidationResultRepository extends JpaRepository<ValidationRule
|
||||||
"COUNT(CASE WHEN sr.status = 'SUCCESS' THEN 1 END) AS passedRecords," +
|
"COUNT(CASE WHEN sr.status = 'SUCCESS' THEN 1 END) AS passedRecords," +
|
||||||
"COUNT(CASE WHEN sr.status = 'FAILURE' OR sr.status = 'ERROR' THEN 1 END) AS failedRecords," +
|
"COUNT(CASE WHEN sr.status = 'FAILURE' OR sr.status = 'ERROR' THEN 1 END) AS failedRecords," +
|
||||||
"(SELECT CASE" +
|
"(SELECT CASE" +
|
||||||
" WHEN COUNT(DISTINCT CASE WHEN vr.status = 'ERROR' THEN vr.ruleName END) > 0 THEN 'ERROR'" +
|
" WHEN COUNT(DISTINCT CASE WHEN vr.status = 'ERROR' THEN vr.ruleName END) = COUNT(DISTINCT vr.ruleName) THEN 'ERROR'" +
|
||||||
" WHEN COUNT(DISTINCT CASE WHEN vr.status = 'WARNING' THEN vr.ruleName END) > 0 THEN 'WARNING'" +
|
" WHEN COUNT(DISTINCT CASE WHEN vr.status = 'FAILURE' THEN vr.ruleName END) = COUNT(DISTINCT vr.ruleName) THEN 'FAILURE'" +
|
||||||
" ELSE 'SUCCESS'" +
|
" ELSE 'SUCCESS'" +
|
||||||
" END " +
|
" END " +
|
||||||
"FROM eu.dnetlib.validatorapi.entities.ValidationRuleResult vr WHERE vr.ruleName = sr.ruleName)," +
|
"FROM eu.dnetlib.validatorapi.entities.ValidationRuleResult vr WHERE vr.ruleName = sr.ruleName and sr.validationJobId=vr.validationJobId)," +
|
||||||
"CASE WHEN COUNT(CASE WHEN has_errors IS TRUE THEN 1 END) > 0 THEN TRUE ELSE FALSE END AS hasErrors," +
|
"CASE WHEN COUNT(CASE WHEN has_errors IS TRUE THEN 1 END) > 0 THEN TRUE ELSE FALSE END AS hasErrors," +
|
||||||
"CASE WHEN COUNT(CASE WHEN has_warnings IS TRUE THEN 1 END) > 0 THEN TRUE ELSE FALSE END AS hasWarnings)" +
|
"CASE WHEN COUNT(CASE WHEN has_warnings IS TRUE THEN 1 END) > 0 THEN TRUE ELSE FALSE END AS hasWarnings)" +
|
||||||
"FROM eu.dnetlib.validatorapi.entities.ValidationRuleResult sr " +
|
"FROM eu.dnetlib.validatorapi.entities.ValidationRuleResult sr " +
|
||||||
"WHERE sr.validationJobId = :id " +
|
"WHERE sr.validationJobId = :id " +
|
||||||
"GROUP BY sr.ruleName, sr.ruleWeight, sr.internalError")
|
"GROUP BY sr.ruleName, sr.ruleWeight, sr.internalError, sr.validationJobId")
|
||||||
List<SummaryResult> getFullSummaryResult(@Param("id") int validationJobId);
|
List<SummaryResult> getFullSummaryResult(@Param("id") int validationJobId);
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,15 +1,26 @@
|
||||||
package eu.dnetlib.validatorapi.routes;
|
package eu.dnetlib.validatorapi.routes;
|
||||||
|
|
||||||
import eu.dnetlib.validatorapi.utils.ListSetAggregationStrategy;
|
|
||||||
import org.apache.camel.Exchange;
|
|
||||||
import org.apache.camel.builder.RouteBuilder;
|
import org.apache.camel.builder.RouteBuilder;
|
||||||
import org.json.JSONObject;
|
import org.json.JSONObject;
|
||||||
import org.json.XML;
|
import org.json.XML;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
import org.w3c.dom.Document;
|
||||||
|
import org.w3c.dom.Node;
|
||||||
|
import org.w3c.dom.NodeList;
|
||||||
|
import org.xml.sax.InputSource;
|
||||||
|
|
||||||
import java.io.ByteArrayInputStream;
|
import javax.xml.parsers.DocumentBuilder;
|
||||||
import java.io.InputStream;
|
import javax.xml.parsers.DocumentBuilderFactory;
|
||||||
|
import javax.xml.transform.OutputKeys;
|
||||||
|
import javax.xml.transform.Transformer;
|
||||||
|
import javax.xml.transform.TransformerException;
|
||||||
|
import javax.xml.transform.TransformerFactory;
|
||||||
|
import javax.xml.transform.dom.DOMSource;
|
||||||
|
import javax.xml.transform.stream.StreamResult;
|
||||||
|
import java.io.StringReader;
|
||||||
|
import java.io.StringWriter;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
public class OaiSetListRoute extends RouteBuilder {
|
public class OaiSetListRoute extends RouteBuilder {
|
||||||
|
@ -35,9 +46,24 @@ public class OaiSetListRoute extends RouteBuilder {
|
||||||
exchange.getIn().setHeader("dynamicEndpoint", endpoint);
|
exchange.getIn().setHeader("dynamicEndpoint", endpoint);
|
||||||
})
|
})
|
||||||
.recipientList(header("dynamicEndpoint"))
|
.recipientList(header("dynamicEndpoint"))
|
||||||
.to("direct:processSets");
|
.process(exchange -> {
|
||||||
|
List<String> ListSetsXml = exchange.getIn().getBody(ArrayList.class);
|
||||||
|
List<String> desiredJsonParts = new ArrayList<>();
|
||||||
|
String xmlSets ="";
|
||||||
|
// Extract the desired <set> elements from each XML string
|
||||||
|
for (String xml : ListSetsXml) {
|
||||||
|
List<String> extractedSets = extractSets(xml);
|
||||||
|
for (String setXml:extractedSets)
|
||||||
|
xmlSets += setXml;
|
||||||
|
}
|
||||||
|
|
||||||
from("direct:processSets")
|
JSONObject jsonObject = XML.toJSONObject(xmlSets);
|
||||||
|
String jsonString = jsonObject.toString();
|
||||||
|
exchange.getIn().setBody(jsonString);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/*from("direct:processSets")
|
||||||
.process(exchange -> {
|
.process(exchange -> {
|
||||||
// Access the individual response from the ArrayList
|
// Access the individual response from the ArrayList
|
||||||
ArrayList<?> responseList = exchange.getIn().getBody(ArrayList.class);
|
ArrayList<?> responseList = exchange.getIn().getBody(ArrayList.class);
|
||||||
|
@ -51,14 +77,45 @@ public class OaiSetListRoute extends RouteBuilder {
|
||||||
.aggregate(constant(true), new ListSetAggregationStrategy())
|
.aggregate(constant(true), new ListSetAggregationStrategy())
|
||||||
.completionPredicate(exchangeProperty(Exchange.AGGREGATED_SIZE).isEqualTo(header("CamelSplitSize")))
|
.completionPredicate(exchangeProperty(Exchange.AGGREGATED_SIZE).isEqualTo(header("CamelSplitSize")))
|
||||||
.to("direct:processAggregatedSets")
|
.to("direct:processAggregatedSets")
|
||||||
.log("${body}");
|
.log("${body}");*/
|
||||||
|
/*
|
||||||
from("direct:processAggregatedSets")
|
from("direct:processAggregatedSets")
|
||||||
.process(exchange -> {
|
.process(exchange -> {
|
||||||
String aggregatedXml = exchange.getIn().getBody(ArrayList.class) + "";
|
String aggregatedXml = exchange.getIn().getBody(ArrayList.class) + "";
|
||||||
JSONObject jsonObject = XML.toJSONObject(aggregatedXml);
|
JSONObject jsonObject = XML.toJSONObject(aggregatedXml);
|
||||||
String jsonString = jsonObject.toString();
|
String jsonString = jsonObject.toString();
|
||||||
exchange.getIn().setBody(jsonString);
|
exchange.getIn().setBody(jsonString);
|
||||||
}).to("seda:result");
|
}).to("seda:result");*/
|
||||||
|
//}
|
||||||
|
|
||||||
|
private List<String> extractSets(String xml) {
|
||||||
|
List<String> setXmls = new ArrayList<>();
|
||||||
|
try {
|
||||||
|
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
|
||||||
|
DocumentBuilder builder = factory.newDocumentBuilder();
|
||||||
|
InputSource inputSource = new InputSource(new StringReader(xml));
|
||||||
|
Document document = builder.parse(inputSource);
|
||||||
|
|
||||||
|
NodeList setElements = document.getElementsByTagName("set");
|
||||||
|
for (int i = 0; i < setElements.getLength(); i++) {
|
||||||
|
Node setElement = setElements.item(i);
|
||||||
|
String setXml = nodeToString(setElement);
|
||||||
|
setXmls.add(setXml);
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
// Handle any exceptions that occur during XML parsing or processing
|
||||||
|
log.error(e.getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
return setXmls;
|
||||||
|
}
|
||||||
|
|
||||||
|
private String nodeToString(Node node) throws TransformerException {
|
||||||
|
StringWriter sw = new StringWriter();
|
||||||
|
TransformerFactory tf = TransformerFactory.newInstance();
|
||||||
|
Transformer transformer = tf.newTransformer();
|
||||||
|
transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
|
||||||
|
transformer.transform(new DOMSource(node), new StreamResult(sw));
|
||||||
|
return sw.toString();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,6 +5,7 @@ import org.apache.camel.Exchange;
|
||||||
|
|
||||||
public class ListSetAggregationStrategy implements AggregationStrategy {
|
public class ListSetAggregationStrategy implements AggregationStrategy {
|
||||||
|
|
||||||
|
|
||||||
public Exchange aggregate(Exchange oldExchange, Exchange newExchange) {
|
public Exchange aggregate(Exchange oldExchange, Exchange newExchange) {
|
||||||
if (oldExchange == null) {
|
if (oldExchange == null) {
|
||||||
return newExchange;
|
return newExchange;
|
||||||
|
@ -17,5 +18,18 @@ public class ListSetAggregationStrategy implements AggregationStrategy {
|
||||||
return oldExchange;
|
return oldExchange;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* public Exchange aggregate(Exchange oldExchange, Exchange newExchange) {
|
||||||
|
if (oldExchange == null) {
|
||||||
|
newExchange.getIn().setBody("skata", String.class);
|
||||||
|
return newExchange;
|
||||||
|
}
|
||||||
|
|
||||||
|
oldExchange.getIn().setBody("skatakia", String.class);
|
||||||
|
String oldBody = oldExchange.getIn().getBody(String.class);
|
||||||
|
String newBody = newExchange.getIn().getBody(String.class);
|
||||||
|
oldExchange.getIn().setBody(oldBody + newBody);
|
||||||
|
|
||||||
|
return oldExchange;
|
||||||
|
}*/
|
||||||
|
|
||||||
}
|
}
|
Loading…
Reference in New Issue