X-Git-Url: https://gerrit.akraino.org/r/gitweb?p=validation.git;a=blobdiff_plain;f=ui%2Fsrc%2Fmain%2Fjava%2Forg%2Fakraino%2Fvalidation%2Fui%2Fservice%2FDbResultAdapter.java;fp=ui%2Fsrc%2Fmain%2Fjava%2Forg%2Fakraino%2Fvalidation%2Fui%2Fservice%2FDbResultAdapter.java;h=dcb3bac84c761299e88e2ef81f8ec83b6654a6bc;hp=7e8687fae272591f1e966a870adcddefd749bcf8;hb=147ecf7bf79ea9967a121d0038103151a38ebef2;hpb=e6b82a7ccd840c8b089ae4d5e69930fd0dd5ef35 diff --git a/ui/src/main/java/org/akraino/validation/ui/service/DbResultAdapter.java b/ui/src/main/java/org/akraino/validation/ui/service/DbResultAdapter.java index 7e8687f..dcb3bac 100644 --- a/ui/src/main/java/org/akraino/validation/ui/service/DbResultAdapter.java +++ b/ui/src/main/java/org/akraino/validation/ui/service/DbResultAdapter.java @@ -4,34 +4,27 @@ import java.io.IOException; import java.util.ArrayList; import java.util.HashSet; import java.util.List; +import java.util.Set; import javax.annotation.Nonnull; -import org.akraino.validation.ui.client.nexus.resources.RobotTestResult; -import org.akraino.validation.ui.client.nexus.resources.ValidationNexusTestResult; -import org.akraino.validation.ui.client.nexus.resources.WRobotNexusTestResult; import org.akraino.validation.ui.dao.ValidationTestResultDAO; import org.akraino.validation.ui.dao.WRobotTestResultDAO; -import org.akraino.validation.ui.data.BlueprintLayer; import org.akraino.validation.ui.data.JnksJobNotify; -import org.akraino.validation.ui.data.Lab; -import org.akraino.validation.ui.data.SubmissionData; +import org.akraino.validation.ui.entity.Blueprint; +import org.akraino.validation.ui.entity.BlueprintInstance; +import org.akraino.validation.ui.entity.BlueprintLayer; import org.akraino.validation.ui.entity.LabInfo; -import org.akraino.validation.ui.entity.LabSilo; import org.akraino.validation.ui.entity.Submission; import org.akraino.validation.ui.entity.ValidationDbTestResult; import org.akraino.validation.ui.entity.WRobotDbTestResult; import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate; -import org.onap.portalsdk.core.web.support.UserUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.fasterxml.jackson.core.JsonParseException; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.JsonMappingException; -import com.fasterxml.jackson.databind.ObjectMapper; @Service @Transactional @@ -50,97 +43,93 @@ public class DbResultAdapter { private WRobotTestResultDAO wRobotDAO; @Autowired - private SiloService siloService; + DbSubmissionAdapter subService; @Autowired - DbSubmissionAdapter subService; + BlueprintService blueprintService; + + @Autowired + BlueprintInstanceService blueprintInstService; - public void associateSubmissionWithValidationResult(SubmissionData submissionData) + @Autowired + BlueprintLayerService layerService; + + public void associateSubmissionWithValidationResult(Submission submission) throws JsonParseException, JsonMappingException, IOException { synchronized (LOCK) { - ValidationDbTestResult vDbTestResult = this - .convertValidationNexusToDb(submissionData.getValidationNexusTestResult()); - Submission submission = new Submission(); - submission.setSubmissionId(submissionData.getSubmissionId()); - vDbTestResult.setSubmission(submission); - vTestResultDAO.saveOrUpdate(vDbTestResult); - List vRobotDbResults = this.convertWRobotNexusResultsToDb( - submissionData.getValidationNexusTestResult().getwRobotNexusTestResults()); - if (vRobotDbResults != null) { - for (WRobotDbTestResult vRobotDbResult : vRobotDbResults) { - vRobotDbResult.setValidationTestResult(vDbTestResult); + if (!compareBluInstances(submission.getValidationDbTestResult().getBlueprintInstance(), + blueprintInstService.getBlueprintInstance( + submission.getValidationDbTestResult().getBlueprintInstance().getBlueprintInstanceId()))) { + throw new RuntimeException("Blueprint instance data changed."); + } + submission.getValidationDbTestResult().setSubmission(submission); + vTestResultDAO.saveOrUpdate(submission.getValidationDbTestResult()); + if (submission.getValidationDbTestResult().getWRobotDbTestResults() != null) { + for (WRobotDbTestResult vRobotDbResult : submission.getValidationDbTestResult() + .getWRobotDbTestResults()) { + vRobotDbResult.setValidationDbTestResult(submission.getValidationDbTestResult()); wRobotDAO.saveOrUpdate(vRobotDbResult); } } } } - public void storeResultInDb(List vNexusResults) { + public void storeResultsInDb(List vNexusResults) { synchronized (LOCK) { if (vNexusResults == null || vNexusResults.size() < 1) { return; } - for (ValidationNexusTestResult vNexusResult : vNexusResults) { - if (!checkValidityOfValidationNexusTestResult(vNexusResult)) { + for (ValidationDbTestResult vNexusResult : vNexusResults) { + if (vNexusResult.getWRobotDbTestResults() == null) { continue; } - LabInfo labInfo = null; - for (LabSilo silo : siloService.getSilos()) { - if (silo.getSilo().equals(vNexusResult.getSilo())) { - labInfo = silo.getLab(); - } + if (!checkValidityOfNexusResult(vNexusResult)) { + continue; } + LabInfo labInfo = labService.getLabBasedOnSilo(vNexusResult.getLab().getSilo()); ValidationDbTestResult vDbResult = vTestResultDAO.getValidationTestResult(labInfo, vNexusResult.getTimestamp()); if (vDbResult == null) { - vDbResult = new ValidationDbTestResult(); + vDbResult = vNexusResult; vDbResult.setLab(labInfo); - vDbResult.setTimestamp(vNexusResult.getTimestamp()); - vDbResult.setBlueprintName(vNexusResult.getBlueprintName()); - vDbResult.setVersion(vNexusResult.getVersion()); - vDbResult.setAllLayers(vNexusResult.getAllLayers()); - vDbResult.setOptional(vNexusResult.getOptional()); + Blueprint blueprint = blueprintService + .getBlueprint(vNexusResult.getBlueprintInstance().getBlueprint().getBlueprintName()); + if (blueprint == null) { + blueprint = vNexusResult.getBlueprintInstance().getBlueprint(); + blueprintService.saveBlueprint(blueprint); + } + BlueprintInstance blueprintInst = blueprintInstService.getBlueprintInstance(blueprint, + (vNexusResult.getBlueprintInstance().getVersion())); + if (blueprintInst == null) { + blueprintInst = vNexusResult.getBlueprintInstance(); + blueprintInst.setBlueprint(blueprint); + blueprintInstService.saveBlueprintInstance(blueprintInst); + } + vDbResult.setBlueprintInstance(blueprintInst); } + updateBlueInstLayers(vNexusResult); vDbResult.setResult(vNexusResult.getResult()); - vDbResult.setDateStorage(vNexusResult.getDateOfStorage()); + vDbResult.setDateStorage(vNexusResult.getDateStorage()); LOGGER.debug(EELFLoggerDelegate.debugLogger, - "Storing validation test result with keys: blueprint name: " + vNexusResult.getBlueprintName() - + ", version: " + vNexusResult.getVersion() + ", lab: " + vNexusResult.getSilo() - + ", timestamp: " + vNexusResult.getTimestamp()); + "Storing validation test result with keys: blueprint name: " + + vNexusResult.getBlueprintInstance().getBlueprint().getBlueprintName() + ", version: " + + vNexusResult.getBlueprintInstance().getVersion() + ", lab: " + + vNexusResult.getLab().getSilo() + ", timestamp: " + vNexusResult.getTimestamp()); vTestResultDAO.saveOrUpdate(vDbResult); List wRobotDbResults = wRobotDAO .getWRobotTestResult(vDbResult); if (wRobotDbResults == null) { // Store the new wrapper robot rest results in db - for (WRobotNexusTestResult wNexusResult : vNexusResult.getwRobotNexusTestResults()) { - WRobotDbTestResult wRobotDbResult = new WRobotDbTestResult(); - wRobotDbResult.setLayer(wNexusResult.getBlueprintLayer().name()); - wRobotDbResult.setValidationTestResult(vDbResult); - ObjectMapper mapper = new ObjectMapper(); - try { - wRobotDbResult - .setRobotTestResults(mapper.writeValueAsString(wNexusResult.getRobotTestResults())); - } catch (JsonProcessingException e) { - LOGGER.error(EELFLoggerDelegate.errorLogger, - "Error while converting POJO to string. " + UserUtils.getStackTrace(e)); - continue; - } - wRobotDAO.saveOrUpdate(wRobotDbResult); + for (WRobotDbTestResult wNexusResult : vNexusResult.getWRobotDbTestResults()) { + wNexusResult.setValidationDbTestResult(vDbResult); + wRobotDAO.saveOrUpdate(wNexusResult); } } else if (vDbResult.getSubmission() != null) { // update validation result related to submission - for (WRobotNexusTestResult wNexusResult : vNexusResult.getwRobotNexusTestResults()) { - WRobotDbTestResult wRobotDbResult = wRobotDAO - .getWRobotTestResult(wNexusResult.getBlueprintLayer().name(), vDbResult); - ObjectMapper mapper = new ObjectMapper(); - try { - wRobotDbResult - .setRobotTestResults(mapper.writeValueAsString(wNexusResult.getRobotTestResults())); - } catch (JsonProcessingException e) { - LOGGER.error(EELFLoggerDelegate.errorLogger, - "Error while converting POJO to string. " + UserUtils.getStackTrace(e)); - continue; - } + for (WRobotDbTestResult wNexusResult : vNexusResult.getWRobotDbTestResults()) { + WRobotDbTestResult wRobotDbResult = wRobotDAO.getWRobotTestResult(wNexusResult.getLayer(), + vDbResult); + wRobotDbResult.setRobotTestResults(wNexusResult.getRobotTestResults()); wRobotDAO.saveOrUpdate(wRobotDbResult); } } @@ -173,7 +162,7 @@ public class DbResultAdapter { wRobotResults = wRobotDAO.getWRobotTestResult(vDbTimestamp); if (wRobotResults != null && wRobotResults.size() > 0) { for (WRobotDbTestResult wRobotResult : wRobotResults) { - wRobotResult.setValidationTestResult(vDbSubmission); + wRobotResult.setValidationDbTestResult(vDbSubmission); wRobotDAO.saveOrUpdate(wRobotResult); } } @@ -186,38 +175,55 @@ public class DbResultAdapter { } } - public List readResultFromDb(String blueprintName, String version, Lab lab, - List layers, Boolean allLayers, Boolean optional, Boolean outcome) + public List readResultFromDb(String blueprintName, String version, String lab, + List layers, Boolean allLayers, Boolean optional, Boolean outcome) throws JsonParseException, JsonMappingException, IOException { synchronized (LOCK) { - LabInfo actualLabInfo = labService.getLab(lab); - List vDbResults = vTestResultDAO.getValidationTestResults(blueprintName, version, + LabInfo actualLabInfo = null; + if (lab != null) { + actualLabInfo = labService.getLab(lab); + if (actualLabInfo == null) { + return null; + } + } + Blueprint blueprint = null; + if (blueprintName != null) { + blueprint = blueprintService.getBlueprint(blueprintName); + if (blueprint == null) { + return null; + } + } + BlueprintInstance blueprintInst = blueprintInstService.getBlueprintInstance(blueprint, version); + if (blueprintInst == null) { + return null; + } + List vDbResults = vTestResultDAO.getValidationTestResults(blueprintInst, actualLabInfo, allLayers, optional, outcome); if (vDbResults == null || vDbResults.size() < 1) { return null; } - List vNexusResults = new ArrayList(); + List actualResults = new ArrayList(); for (ValidationDbTestResult vDbResult : vDbResults) { if (layers != null && layers.size() > 0) { - List storedLayers = new ArrayList(); + List storedLayers = new ArrayList(); List wDbResults = wRobotDAO.getWRobotTestResult(vDbResult); if (wDbResults == null || wDbResults.size() < 1) { continue; } for (WRobotDbTestResult wRobot : wDbResults) { - storedLayers.add(BlueprintLayer.valueOf(wRobot.getLayer())); + storedLayers.add(wRobot.getLayer()); } if (!new HashSet<>(storedLayers).equals(new HashSet<>(layers))) { continue; } } - vNexusResults.add(convertValidationDbToNexus(vDbResult)); + actualResults.add(vDbResult); } - return vNexusResults; + return actualResults; } } - public ValidationNexusTestResult readResultFromDb(@Nonnull Lab lab, @Nonnull String timestamp) + public ValidationDbTestResult readResultFromDb(@Nonnull String lab, @Nonnull String timestamp) throws JsonParseException, JsonMappingException, IOException { synchronized (LOCK) { LabInfo actualLabInfo = labService.getLab(lab); @@ -225,39 +231,38 @@ public class DbResultAdapter { if (vDbResult == null) { return null; } - return convertValidationDbToNexus(vDbResult); + return vDbResult; } } - public ValidationNexusTestResult readResultFromDb(@Nonnull String submissionId) + public ValidationDbTestResult readResultFromDb(@Nonnull String submissionId) throws JsonParseException, JsonMappingException, IOException { synchronized (LOCK) { - ValidationDbTestResult vDbResult = vTestResultDAO - .getValidationTestResult(subService.getSubmission(submissionId)); - if (vDbResult == null) { - return null; - } - return convertValidationDbToNexus(vDbResult); + return vTestResultDAO.getValidationTestResult(subService.getSubmission(submissionId)); } } - public void deleteUnreferencedEntries(List vNexusResults) { + public void deleteUnreferencedEntries(List vNexusResults) { synchronized (LOCK) { if (vNexusResults == null || vNexusResults.size() < 1) { return; } - LabInfo labInfo = null; - for (LabSilo silo : siloService.getSilos()) { - if (silo.getSilo().equals(vNexusResults.get(0).getSilo())) { - labInfo = silo.getLab(); - } - } + LabInfo labInfo = labService.getLabBasedOnSilo(vNexusResults.get(0).getLab().getSilo()); if (labInfo == null) { return; } - List vDbResults = vTestResultDAO.getValidationTestResults( - vNexusResults.get(0).getBlueprintName(), vNexusResults.get(0).getVersion(), labInfo, null, null, - null); + Blueprint blueprint = blueprintService + .getBlueprint(vNexusResults.get(0).getBlueprintInstance().getBlueprint().getBlueprintName()); + if (blueprint == null) { + return; + } + BlueprintInstance blueInst = blueprintInstService.getBlueprintInstance(blueprint, + vNexusResults.get(0).getBlueprintInstance().getVersion()); + if (blueInst == null) { + return; + } + List vDbResults = vTestResultDAO.getValidationTestResults(blueInst, labInfo, null, + null, null); if (vDbResults == null || vDbResults.size() < 1) { return; } @@ -268,13 +273,8 @@ public class DbResultAdapter { boolean deletion = true; String dbTimestamp = vDbResult.getTimestamp(); LabInfo dbLabInfo = vDbResult.getLab(); - for (ValidationNexusTestResult vNexusResult : vNexusResults) { - LabInfo nexusLabInfo = null; - for (LabSilo silo : siloService.getSilos()) { - if (silo.getSilo().equals(vNexusResult.getSilo())) { - nexusLabInfo = silo.getLab(); - } - } + for (ValidationDbTestResult vNexusResult : vNexusResults) { + LabInfo nexusLabInfo = labService.getLabBasedOnSilo(vNexusResult.getLab().getSilo()); if (nexusLabInfo == null) { continue; } @@ -293,7 +293,6 @@ public class DbResultAdapter { vTestResultDAO.deleteValidationTestResult(vDbResult); } } - } } @@ -309,11 +308,21 @@ public class DbResultAdapter { } } - public List getValidationTestResults(String blueprintName, String version, LabInfo labInfo, - Boolean allLayers, Boolean optional, Boolean outcome) { + public List getValidationTestResults(String blueprintName, @Nonnull String version, + LabInfo labInfo, Boolean allLayers, Boolean optional, Boolean outcome) { synchronized (LOCK) { - return vTestResultDAO.getValidationTestResults(blueprintName, version, labInfo, allLayers, optional, - outcome); + Blueprint blueprint = null; + if (blueprintName != null) { + blueprint = blueprintService.getBlueprint(blueprintName); + if (blueprint == null) { + return null; + } + } + BlueprintInstance bluInst = blueprintInstService.getBlueprintInstance(blueprint, version); + if (bluInst == null) { + return null; + } + return vTestResultDAO.getValidationTestResults(bluInst, labInfo, allLayers, optional, outcome); } } @@ -323,6 +332,12 @@ public class DbResultAdapter { } } + public ValidationDbTestResult getValidationTestResult(String labSilo, String timestamp) { + synchronized (LOCK) { + return vTestResultDAO.getValidationTestResult(labService.getLabBasedOnSilo(labSilo), timestamp); + } + } + public ValidationDbTestResult getValidationTestResult(@Nonnull Submission submission) { synchronized (LOCK) { return vTestResultDAO.getValidationTestResult(submission); @@ -347,134 +362,76 @@ public class DbResultAdapter { } } - private ValidationNexusTestResult convertValidationDbToNexus(ValidationDbTestResult vDbResult) - throws JsonParseException, JsonMappingException, IOException { - ValidationNexusTestResult vNexusResult = new ValidationNexusTestResult(); - vNexusResult.setResultId(vDbResult.getResultId()); - vNexusResult.setBlueprintName(vDbResult.getBlueprintName()); - vNexusResult.setVersion(vDbResult.getVersion()); - vNexusResult.setAllLayers(vDbResult.getAllLayers()); - vNexusResult.setDateOfStorage(vDbResult.getDateStorage()); - vNexusResult.setOptional(vDbResult.getOptional()); - vNexusResult.setResult(vDbResult.getResult()); - String siloText = null; - for (LabSilo silo : siloService.getSilos()) { - if (silo.getLab().getLab().equals(vDbResult.getLab().getLab())) { - siloText = silo.getSilo(); - } - } - if (siloText == null) { - throw new IllegalArgumentException("Lab does not exist: " + vDbResult.getLab().toString()); - } - vNexusResult.setSilo(siloText); - vNexusResult.setTimestamp(vDbResult.getTimestamp()); - if (vDbResult.getSubmission() != null) { - vNexusResult.setSubmissionId(String.valueOf(vDbResult.getSubmission().getSubmissionId())); - } - List wNexusResults = new ArrayList(); - List wDbResults = wRobotDAO.getWRobotTestResult(vDbResult); - if (wDbResults != null && wDbResults.size() > 0) { - for (WRobotDbTestResult wRobot : wDbResults) { - WRobotNexusTestResult wNexusResult = new WRobotNexusTestResult(); - wNexusResult.setBlueprintLayer(BlueprintLayer.valueOf(wRobot.getLayer())); - if (wRobot.getRobotTestResults() != null) { - ObjectMapper mapper = new ObjectMapper(); - wNexusResult.setRobotTestResults( - mapper.readValue(wRobot.getRobotTestResults(), new TypeReference>() { - })); - } - wNexusResults.add(wNexusResult); - } - vNexusResult.setwRobotNexusTestResults(wNexusResults); - } - return vNexusResult; - } - - private ValidationDbTestResult convertValidationNexusToDb(ValidationNexusTestResult vNexusResult) - throws JsonParseException, JsonMappingException, IOException { - LabInfo labInfo = null; - for (LabSilo silo : siloService.getSilos()) { - if (silo.getSilo().equals(vNexusResult.getSilo())) { - labInfo = silo.getLab(); - } + public boolean checkValidityOfNexusResult(ValidationDbTestResult vNexusResult) { + if (vNexusResult == null) { + return true; } + LabInfo labInfo = labService.getLabBasedOnSilo(vNexusResult.getLab().getSilo()); if (labInfo == null) { - return null; - } - ValidationDbTestResult vDbResult = new ValidationDbTestResult(); - vDbResult.setBlueprintName(vNexusResult.getBlueprintName()); - vDbResult.setVersion(vNexusResult.getVersion()); - vDbResult.setLab(labInfo); - vDbResult.setOptional(vNexusResult.getOptional()); - vDbResult.setAllLayers(vNexusResult.getAllLayers()); - vDbResult.setDateStorage(vNexusResult.getDateOfStorage()); - vDbResult.setResult(vNexusResult.getResult()); - vDbResult.setTimestamp(vNexusResult.getTimestamp()); - return vDbResult; - } - - private List convertWRobotNexusResultsToDb(List wRobotNexusResults) { - if (wRobotNexusResults == null || wRobotNexusResults.size() < 1) { - return null; - } - List wDbResults = new ArrayList(); - for (WRobotNexusTestResult wRobotNexusResult : wRobotNexusResults) { - WRobotDbTestResult wDbResult = new WRobotDbTestResult(); - if (wRobotNexusResult.getBlueprintLayer() != null) { - wDbResult.setLayer(wRobotNexusResult.getBlueprintLayer().toString()); - } - ObjectMapper mapper = new ObjectMapper(); - if (wRobotNexusResult.getRobotTestResults() != null && wRobotNexusResult.getRobotTestResults().size() > 0) { - try { - wDbResult.setRobotTestResults(mapper.writeValueAsString(wRobotNexusResult.getRobotTestResults())); - } catch (JsonProcessingException e) { - LOGGER.error(EELFLoggerDelegate.errorLogger, - "Error while converting POJO to string. " + UserUtils.getStackTrace(e)); - continue; - } - } - wDbResults.add(wDbResult); + throw new RuntimeException("Lab silo : " + vNexusResult.getLab().getSilo() + " not found"); } - return wDbResults; - } - - private boolean checkValidityOfValidationNexusTestResult(ValidationNexusTestResult vNexusResult) { - LabInfo labInfo = null; - for (LabSilo silo : siloService.getSilos()) { - if (silo.getSilo().equals(vNexusResult.getSilo())) { - labInfo = silo.getLab(); + ValidationDbTestResult vDbResult = vTestResultDAO.getValidationTestResult( + labService.getLabBasedOnSilo(vNexusResult.getLab().getSilo()), vNexusResult.getTimestamp()); + Blueprint blueprint = null; + BlueprintInstance bluInst = null; + List wRobotDbResults = null; + if (vDbResult != null) { + blueprint = vDbResult.getBlueprintInstance().getBlueprint(); + labInfo = vDbResult.getLab(); + wRobotDbResults = wRobotDAO.getWRobotTestResult(vDbResult); + } else { + blueprint = blueprintService + .getBlueprint(vNexusResult.getBlueprintInstance().getBlueprint().getBlueprintName()); + } + if (blueprint != null) { + if (vDbResult != null) { + bluInst = vDbResult.getBlueprintInstance(); + } else { + bluInst = blueprintInstService.getBlueprintInstance(blueprint, + vNexusResult.getBlueprintInstance().getVersion()); } } - if (labInfo == null) { - LOGGER.error(EELFLoggerDelegate.errorLogger, "No lab Info found for silo. " + vNexusResult.getSilo()); + // Start comparison, be elastic with allLayers and optional + if (!labInfo.getSilo().equals(vNexusResult.getLab().getSilo())) { + LOGGER.error(EELFLoggerDelegate.errorLogger, + "Nexus has different data for blueprint : " + + vDbResult.getBlueprintInstance().getBlueprint().getBlueprintName() + ", version: " + + vDbResult.getBlueprintInstance().getVersion() + " and lab: " + vDbResult.getLab().getLab() + + ". Lab inconsistency : " + vDbResult.getLab() + " " + labInfo); return false; } - ValidationDbTestResult vDbResult = vTestResultDAO.getValidationTestResult(labInfo, vNexusResult.getTimestamp()); - if (vDbResult != null) { - // Be elastic for allLayers and optional - if (!vDbResult.getBlueprintName().equals(vNexusResult.getBlueprintName()) - || !vDbResult.getVersion().equals(vNexusResult.getVersion()) || !vDbResult.getLab().equals(labInfo) - || !vDbResult.getTimestamp().equals(vNexusResult.getTimestamp())) { + if (blueprint != null) { + if (!blueprint.getBlueprintName() + .equals(vNexusResult.getBlueprintInstance().getBlueprint().getBlueprintName())) { + LOGGER.error(EELFLoggerDelegate.errorLogger, + "Nexus has different data for blueprint : " + blueprint.getBlueprintName() + + ". Name inconsistency : " + blueprint.getBlueprintName() + " " + + vNexusResult.getBlueprintInstance().getBlueprint().getBlueprintName()); + return false; + } + } + if (bluInst != null) { + if (!bluInst.getVersion().equals(vNexusResult.getBlueprintInstance().getVersion())) { LOGGER.error(EELFLoggerDelegate.errorLogger, - "Nexus has different data for blueprint : " + vDbResult.getBlueprintName() + ", version: " - + vDbResult.getVersion() + " and lab: " + vDbResult.getLab().getLab().name()); + "Nexus has different data for blueprint : " + bluInst.getBlueprint().getBlueprintName() + + ", version: " + bluInst.getVersion() + ". Version inconsistency : " + + bluInst.getVersion() + " " + vNexusResult.getBlueprintInstance().getVersion()); return false; } } - List wRobotDbResults = wRobotDAO - .getWRobotTestResult(vDbResult); if (wRobotDbResults != null) { - if (vDbResult.getSubmission() != null) { - for (WRobotNexusTestResult wNexusResult : vNexusResult.getwRobotNexusTestResults()) { - WRobotDbTestResult wRobotDbResult = wRobotDAO - .getWRobotTestResult(wNexusResult.getBlueprintLayer().name(), vDbResult); - if (wRobotDbResult == null) { - LOGGER.error(EELFLoggerDelegate.errorLogger, - "Nexus has different layer results for submission id: " - + vDbResult.getSubmission().getSubmissionId()); - return false; - } - } + List storedLayers1 = new ArrayList(); + for (WRobotDbTestResult wNexusResult : vNexusResult.getWRobotDbTestResults()) { + storedLayers1.add(wNexusResult.getLayer()); + } + List storedLayers2 = new ArrayList(); + for (WRobotDbTestResult wDbResult : wRobotDbResults) { + storedLayers2.add(wDbResult.getLayer()); + } + if (!new HashSet<>(storedLayers1).equals(new HashSet<>(storedLayers2))) { + LOGGER.error(EELFLoggerDelegate.errorLogger, + "Nexus has different layer results for validation result id: " + vDbResult.getResultId()); + return false; } } return true; @@ -484,6 +441,14 @@ public class DbResultAdapter { ValidationDbTestResult vDbSubmission = vTestResultDAO .getValidationTestResult(subService.getSubmission(String.valueOf(jnksJobNotify.getSubmissionId()))); if (vDbSubmission == null) { + LOGGER.error(EELFLoggerDelegate.errorLogger, "Received timestamp for submission id : " + + jnksJobNotify.getSubmissionId() + " which has not validation result associated with it"); + return false; + } + if (!vDbSubmission.getAllLayers() && (vDbSubmission.getWRobotDbTestResults() == null + || vDbSubmission.getWRobotDbTestResults().size() < 1)) { + LOGGER.error(EELFLoggerDelegate.errorLogger, "Received timestamp for submission id : " + + jnksJobNotify.getSubmissionId() + " which is not stored correctly"); return false; } ValidationDbTestResult vDbTimestamp = vTestResultDAO.getValidationTestResult(vDbSubmission.getLab(), @@ -497,9 +462,32 @@ public class DbResultAdapter { + " from nexus for submission id: " + jnksJobNotify.getSubmissionId()); return false; } - // Be elastic for allLayers and optional - if (!vDbSubmission.getBlueprintName().equals(vDbTimestamp.getBlueprintName()) - || !vDbSubmission.getVersion().equals(vDbTimestamp.getVersion()) + if (!vDbSubmission.getAllLayers()) { + if (wRobotDAO.getWRobotTestResult(vDbSubmission).size() != wRobotDAO.getWRobotTestResult(vDbTimestamp) + .size()) { + LOGGER.error(EELFLoggerDelegate.errorLogger, "No consistency exists in stored layers records."); + return false; + } + List storedLayers1 = new ArrayList(); + List storedLayers2 = new ArrayList(); + List wDbResults = wRobotDAO.getWRobotTestResult(vDbSubmission); + for (WRobotDbTestResult wRobot : wDbResults) { + storedLayers1.add(wRobot.getLayer()); + } + wDbResults = wRobotDAO.getWRobotTestResult(vDbTimestamp); + for (WRobotDbTestResult wRobot : wDbResults) { + storedLayers2.add(wRobot.getLayer()); + } + if (!new HashSet<>(storedLayers1).equals(new HashSet<>(storedLayers2))) { + LOGGER.error(EELFLoggerDelegate.errorLogger, "No consistency exists in stored layers records."); + return false; + } + } + // Be elastic with allLayers and optional + if (!vDbSubmission.getBlueprintInstance().getBlueprint().getBlueprintName() + .equals(vDbTimestamp.getBlueprintInstance().getBlueprint().getBlueprintName()) + || !vDbSubmission.getBlueprintInstance().getVersion() + .equals(vDbTimestamp.getBlueprintInstance().getVersion()) || !vDbSubmission.getLab().equals(vDbTimestamp.getLab())) { LOGGER.error(EELFLoggerDelegate.errorLogger, "No consistency exists in database records."); return false; @@ -507,4 +495,77 @@ public class DbResultAdapter { return true; } + private void updateBlueInstLayers(ValidationDbTestResult vNexusResult) { + for (BlueprintInstance blueprintInst : blueprintInstService.getBlueprintInstances()) { + if (!blueprintInst.getBlueprint().getBlueprintName() + .equals(vNexusResult.getBlueprintInstance().getBlueprint().getBlueprintName())) { + continue; + } + Set blueprintLayers = blueprintInst.getBlueprintLayers(); + if (blueprintLayers == null) { + blueprintLayers = new HashSet(); + } + for (WRobotDbTestResult nexusResult : vNexusResult.getWRobotDbTestResults()) { + BlueprintLayer layer = layerService.getBlueprintLayer(nexusResult.getLayer()); + if (layer == null) { + layer = new BlueprintLayer(); + layer.setLayer(nexusResult.getLayer()); + layerService.saveBlueprintLayer(layer); + } + if (!blueprintLayers.contains(layer)) { + blueprintLayers.add(layer); + } + } + blueprintInst.setBlueprintLayers(blueprintLayers); + blueprintInstService.saveBlueprintInstance(blueprintInst); + } + } + + private boolean compareBluInstances(BlueprintInstance inst1, BlueprintInstance inst2) { + if (!inst1.getVersion().equals(inst2.getVersion())) { + return false; + } + if (inst1.getBlueprintInstanceId() != inst2.getBlueprintInstanceId()) { + return false; + } + Set layers1 = inst1.getBlueprintLayers(); + Set layers2 = inst2.getBlueprintLayers(); + if (!(layers1 == null && layers2 == null)) { + if (layers1 != null && layers2 == null) { + return false; + } + if (layers1 == null && layers2 != null) { + return false; + } + if (!(layers1.size() == layers2.size())) { + return false; + } + boolean overallLayerEquality = true; + for (BlueprintLayer blulayer1 : layers1) { + boolean layerEquality = false; + for (BlueprintLayer blulayer2 : layers2) { + if (blulayer1.getLayer().equals(blulayer2.getLayer())) { + layerEquality = true; + } + } + if (!layerEquality) { + overallLayerEquality = false; + break; + } + } + if (!overallLayerEquality) { + return false; + } + } + Blueprint blueprint1 = inst1.getBlueprint(); + Blueprint blueprint2 = inst2.getBlueprint(); + if (blueprint1.getBlueprintId() != blueprint2.getBlueprintId()) { + return false; + } + if (!blueprint1.getBlueprintName().equals(blueprint2.getBlueprintName())) { + return false; + } + return true; + } + }