use of uk.ac.ebi.spot.goci.model.ValidationError in project goci by EBISPOT.
the class SheetProcessorImpl method readSheetRows.
// Read and parse uploaded spreadsheet
@Override
public Collection<AssociationUploadRow> readSheetRows(XSSFSheet sheet) {
XSSFRow headerRow = sheet.getRow(0);
Map<Integer, UploadFileHeader> headerRowMap = createHeaderMap(headerRow);
// Create collection to store all newly created rows
Collection<AssociationUploadRow> associationUploadRows = new ArrayList<>();
Integer lastRow = sheet.getLastRowNum();
Integer rowNum = 1;
while (rowNum <= lastRow) {
AssociationUploadRow associationUploadRow = new AssociationUploadRow();
// Set row number so its consistent with numbering curator will see via Excel
associationUploadRow.setRowNumber(rowNum + 1);
XSSFRow row = sheet.getRow(rowNum);
// If the row contains defined cell values
if (row.getPhysicalNumberOfCells() > 0) {
for (Map.Entry<Integer, UploadFileHeader> heading : headerRowMap.entrySet()) {
Integer colNum = heading.getKey();
UploadFileHeader headerName = heading.getValue();
XSSFCell cell = row.getCell(colNum, Row.RETURN_BLANK_AS_NULL);
if (cell != null) {
try {
switch(headerName) {
case GENES:
associationUploadRow.setAuthorReportedGene(SheetCellProcessingService.processMandatoryStringValue(cell));
break;
case SNP:
associationUploadRow.setSnp(SheetCellProcessingService.processMandatoryStringValue(cell));
break;
case EFFECT_ALLELE:
associationUploadRow.setStrongestAllele(SheetCellProcessingService.processMandatoryStringValue(cell));
break;
case SECONDARY_EFFECT_ALLELE:
associationUploadRow.setEffectAllele(SheetCellProcessingService.processMandatoryStringValue(cell));
break;
case OTHER_ALLELES:
associationUploadRow.setOtherAllele(SheetCellProcessingService.processMandatoryStringValue(cell));
break;
case PROXY_SNP:
associationUploadRow.setProxy(SheetCellProcessingService.processMandatoryStringValue(cell));
break;
case EFFECT_ELEMENT_FREQUENCY_IN_CONTROLS:
associationUploadRow.setAssociationRiskFrequency(SheetCellProcessingService.processStringValue(cell));
break;
case INDEPENDENT_SNP_EFFECT_ALLELE_FREQUENCY_IN_CONTROLS:
associationUploadRow.setRiskFrequency(SheetCellProcessingService.processStringValue(cell));
break;
case PVALUE_MANTISSA:
associationUploadRow.setPvalueMantissa(SheetCellProcessingService.processIntValues(cell));
break;
case PVALUE_EXPONENT:
associationUploadRow.setPvalueExponent(SheetCellProcessingService.processIntValues(cell));
break;
case PVALUE_DESCRIPTION:
associationUploadRow.setPvalueDescription(SheetCellProcessingService.processMandatoryStringValue(cell));
break;
case OR:
associationUploadRow.setOrPerCopyNum(SheetCellProcessingService.processFloatValues(cell));
break;
case OR_RECIPROCAL:
associationUploadRow.setOrPerCopyRecip(SheetCellProcessingService.processFloatValues(cell));
break;
case BETA:
associationUploadRow.setBetaNum(SheetCellProcessingService.processFloatValues(cell));
break;
case BETA_UNIT:
associationUploadRow.setBetaUnit(SheetCellProcessingService.processMandatoryStringValue(cell));
break;
case BETA_DIRECTION:
associationUploadRow.setBetaDirection(SheetCellProcessingService.processMandatoryStringValue(cell));
break;
case RANGE:
associationUploadRow.setRange(SheetCellProcessingService.processMandatoryStringValue(cell));
break;
case OR_RECIPROCAL_RANGE:
associationUploadRow.setOrPerCopyRecipRange(SheetCellProcessingService.processMandatoryStringValue(cell));
break;
case STANDARD_ERROR:
associationUploadRow.setStandardError(SheetCellProcessingService.processFloatValues(cell));
break;
case DESCRIPTION:
associationUploadRow.setDescription(SheetCellProcessingService.processMandatoryStringValue(cell));
break;
case MULTI_SNP_HAPLOTYPE:
associationUploadRow.setMultiSnpHaplotype(SheetCellProcessingService.processMandatoryStringValue(cell));
break;
case SNP_INTERACTION:
associationUploadRow.setSnpInteraction(SheetCellProcessingService.processMandatoryStringValue(cell));
break;
case SNP_STATUS:
associationUploadRow.setSnpStatus(SheetCellProcessingService.processMandatoryStringValue(cell));
break;
case SNP_TYPE:
associationUploadRow.setSnpType(SheetCellProcessingService.processMandatoryStringValue(cell));
break;
case EFO_TRAITS:
associationUploadRow.setEfoTrait(SheetCellProcessingService.processMandatoryStringValue(cell));
break;
default:
getLog().warn("Column with unknown heading found in file.");
break;
}
} catch (CellProcessingException cpe) {
// Add an excel error to the list of the errors.
ValidationError cpeValidationError = new ValidationError(headerName.toString(), cpe.getMessage(), false, "excel");
associationUploadRow.addCellErrorType(cpeValidationError);
}
}
}
associationUploadRows.add(associationUploadRow);
}
rowNum++;
}
return associationUploadRows;
}
use of uk.ac.ebi.spot.goci.model.ValidationError in project goci by EBISPOT.
the class ValidationChecksBuilder method runAuthorLevelBetaChecks.
/**
* Run author level beta checks on a row
*
* @param association row to be checked
*/
public Collection<ValidationError> runAuthorLevelBetaChecks(Association association) {
Collection<ValidationError> validationErrors = new ArrayList<>();
ValidationError betaIsPresent = errorCreationService.checkBetaIsPresentAndIsNotNegative(association.getBetaNum());
validationErrors.add(betaIsPresent);
ValidationError betaUnitNotFound = errorCreationService.checkBetaUnitIsPresent(association.getBetaUnit());
validationErrors.add(betaUnitNotFound);
ValidationError betaDirectionNotFound = errorCreationService.checkBetaDirectionIsPresent(association.getBetaDirection());
validationErrors.add(betaDirectionNotFound);
ValidationError orFound = errorCreationService.checkOrEmpty(association.getOrPerCopyNum());
validationErrors.add(orFound);
ValidationError rangeNotFound = errorCreationService.checkRangeIsPresent(association.getRange());
validationErrors.add(rangeNotFound);
return ErrorProcessingService.checkForValidErrors(validationErrors);
}
use of uk.ac.ebi.spot.goci.model.ValidationError in project goci by EBISPOT.
the class ValidationChecksBuilder method runLociAttributeChecks.
/**
* Run loci attributes checks on association
*
* @param association association to be checked
*/
public Collection<ValidationError> runLociAttributeChecks(Association association, String eRelease) {
Collection<ValidationError> validationErrors = new ArrayList<>();
if (association.getLoci() != null) {
Set<String> associationGenes = new HashSet<>();
Collection<ValidationError> geneErrors = new ArrayList<>();
// Create a unique set of all locus genes
for (Locus locus : association.getLoci()) {
Set<String> locusGenes = new HashSet<>();
if (!locus.getAuthorReportedGenes().isEmpty()) {
locusGenes = locus.getAuthorReportedGenes().stream().map(Gene::getGeneName).collect(Collectors.toSet());
}
associationGenes.addAll(locusGenes);
}
// Check genes
associationGenes.forEach(geneName -> {
getLog().info("Checking gene: ".concat(geneName));
ValidationError geneError = errorCreationService.checkGene(geneName, eRelease);
if (geneError.getError() != null) {
geneErrors.add(geneError);
}
});
if (!geneErrors.isEmpty()) {
validationErrors.addAll(geneErrors);
}
for (Locus locus : association.getLoci()) {
Collection<RiskAllele> riskAlleles = locus.getStrongestRiskAlleles();
// Check risk allele attributes
riskAlleles.forEach(riskAllele -> {
ValidationError riskAlleleError = errorCreationService.checkRiskAllele(riskAllele.getRiskAlleleName());
validationErrors.add(riskAlleleError);
// If gene is valid proceed to check gene and snp location
if (geneErrors.isEmpty()) {
Set<String> locusGenes = locus.getAuthorReportedGenes().stream().map(Gene::getGeneName).collect(Collectors.toSet());
locusGenes.forEach(geneName -> {
getLog().info("Checking snp/gene location: ".concat(geneName).concat(" ").concat(riskAllele.getSnp().getRsId()));
ValidationError snpGeneLocationError = errorCreationService.checkSnpGeneLocation(riskAllele.getSnp().getRsId(), geneName, eRelease);
validationErrors.add(snpGeneLocationError);
});
} else {
// Check snp is valid
ValidationError snpError = errorCreationService.checkSnp(riskAllele.getSnp().getRsId(), eRelease);
validationErrors.add(snpError);
}
});
}
}
return ErrorProcessingService.checkForValidErrors(validationErrors);
}
use of uk.ac.ebi.spot.goci.model.ValidationError in project goci by EBISPOT.
the class ErrorCreationServiceTest method testCheckOrIsPresent.
@Test
public void testCheckOrIsPresent() throws Exception {
when(validationChecks.checkOrIsPresent(null)).thenReturn("Value is empty");
ValidationError error1 = errorCreationService.checkOrIsPresent((null));
assertThat(error1).extracting("field", "error", "warning").contains("OR", "Value is empty", false);
when(validationChecks.checkOrIsPresent((float) 1.23)).thenReturn(null);
ValidationError error2 = errorCreationService.checkOrIsPresent((float) 1.23);
assertThat(error2).extracting("field", "error", "warning").contains(null, null, false);
Float f1 = (float) (0.0 / 0.0);
when(validationChecks.checkOrIsPresent(f1)).thenReturn("Value is not number");
ValidationError error3 = errorCreationService.checkOrIsPresent((f1));
assertThat(error3).extracting("field", "error", "warning").contains("OR", "Value is not number", false);
}
use of uk.ac.ebi.spot.goci.model.ValidationError in project goci by EBISPOT.
the class ErrorCreationServiceTest method testCheckSnpType.
@Test
public void testCheckSnpType() throws Exception {
when(validationChecks.checkSnpType("bigger")).thenReturn("Value does not contain novel or known");
ValidationError error1 = errorCreationService.checkSnpType("bigger");
assertThat(error1).extracting("field", "error", "warning").contains("SNP type", "Value does not contain novel or known", false);
when(validationChecks.checkSnpType("novel")).thenReturn(null);
ValidationError error2 = errorCreationService.checkSnpType("novel");
assertThat(error2).extracting("field", "error", "warning").contains(null, null, false);
}
Aggregations