package eu.dnetlib.validatorapi.controllers; import eu.dnetlib.validator2.validation.XMLApplicationProfile; import eu.dnetlib.validator2.validation.guideline.Guideline; import eu.dnetlib.validator2.validation.guideline.openaire.AbstractOpenAireProfile; import eu.dnetlib.validator2.validation.guideline.openaire.DataArchiveGuidelinesV2Profile; import eu.dnetlib.validator2.validation.guideline.openaire.LiteratureGuidelinesV3Profile; import eu.dnetlib.validator2.validation.guideline.openaire.LiteratureGuidelinesV4Profile; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.springframework.web.bind.annotation.*; import org.w3c.dom.Document; import org.xml.sax.InputSource; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import java.io.StringReader; import java.util.*; import java.util.stream.Collectors; @RestController @CrossOrigin(origins = "*") public class ValidatorController { private final Logger log = LogManager.getLogger(this.getClass()); @RequestMapping(value = {"/validate"}, method = RequestMethod.POST) public List validate(@RequestParam(name = "guidelines") String guidelinesProfileName, @RequestBody String xml) { log.debug(xml); List resultMessages = new ArrayList<>(); AbstractOpenAireProfile profile = null; if(guidelinesProfileName.equals("dataArchiveGuidelinesV2Profile")) { profile = new DataArchiveGuidelinesV2Profile(); } else if(guidelinesProfileName.equals("literatureGuidelinesV3Profile")) { profile = new LiteratureGuidelinesV3Profile(); } else if(guidelinesProfileName.equals("literatureGuidelinesV4Profile")) { profile = new LiteratureGuidelinesV4Profile(); } if(profile == null) { new Exception("No valid guidelines"); } log.debug("Max score: " + profile.maxScore()); Map scorePerDoc = new LinkedHashMap<>(); // String file = "/home/konstantina/projects/validator-api/src/main/resources/Record_21811.xml"; XMLApplicationProfile.ValidationResult result = null; try { // log.debug("Processing " + file); // Document doc = DOMBuilder.parse(new FileReader(file), false, true, true); DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); Document doc = db.parse(new InputSource(new StringReader(xml))); result = profile.validate("id", doc); Date date = new Date(); scorePerDoc.put("input-"+date.toString(), result.score()); Map results = result.results(); log.debug("\n\nPrinting results..."); for (Map.Entry entry : results.entrySet()) { log.debug(entry.getKey() + " = " + entry.getValue()); resultMessages.add(entry.getKey() + " = " + entry.getValue()); } } catch(Exception e) { log.debug(e.getMessage()); log.debug(e); e.printStackTrace(); resultMessages.add("Error processing input"); } String printout = scorePerDoc.entrySet().stream(). map(entry -> { resultMessages.add("score: " + entry.getValue()); return entry.getValue() + ": " + entry.getKey(); }).collect(Collectors.joining("\n")); log.debug("\n\nPrinting scorePerDoc..."); log.debug(printout); return resultMessages; } }