Search in sources :

Example 1 with ValidationError

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;
}
Also used : UploadFileHeader(uk.ac.ebi.spot.goci.utils.UploadFileHeader) XSSFRow(org.apache.poi.xssf.usermodel.XSSFRow) CellProcessingException(uk.ac.ebi.spot.goci.exception.CellProcessingException) ArrayList(java.util.ArrayList) XSSFCell(org.apache.poi.xssf.usermodel.XSSFCell) AssociationUploadRow(uk.ac.ebi.spot.goci.model.AssociationUploadRow) ValidationError(uk.ac.ebi.spot.goci.model.ValidationError) HashMap(java.util.HashMap) Map(java.util.Map)

Example 2 with ValidationError

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);
}
Also used : ArrayList(java.util.ArrayList) ValidationError(uk.ac.ebi.spot.goci.model.ValidationError)

Example 3 with ValidationError

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);
}
Also used : Gene(uk.ac.ebi.spot.goci.model.Gene) RiskAllele(uk.ac.ebi.spot.goci.model.RiskAllele) ArrayList(java.util.ArrayList) ValidationError(uk.ac.ebi.spot.goci.model.ValidationError) Locus(uk.ac.ebi.spot.goci.model.Locus) HashSet(java.util.HashSet)

Example 4 with ValidationError

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);
}
Also used : ValidationError(uk.ac.ebi.spot.goci.model.ValidationError) Test(org.junit.Test)

Example 5 with ValidationError

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);
}
Also used : ValidationError(uk.ac.ebi.spot.goci.model.ValidationError) Test(org.junit.Test)

Aggregations

ValidationError (uk.ac.ebi.spot.goci.model.ValidationError)46 Test (org.junit.Test)32 ArrayList (java.util.ArrayList)11 Locus (uk.ac.ebi.spot.goci.model.Locus)3 Association (uk.ac.ebi.spot.goci.model.Association)2 AssociationSummary (uk.ac.ebi.spot.goci.model.AssociationSummary)2 RowValidationSummary (uk.ac.ebi.spot.goci.model.RowValidationSummary)2 File (java.io.File)1 IOException (java.io.IOException)1 Collection (java.util.Collection)1 HashMap (java.util.HashMap)1 HashSet (java.util.HashSet)1 Iterator (java.util.Iterator)1 List (java.util.List)1 Map (java.util.Map)1 XSSFCell (org.apache.poi.xssf.usermodel.XSSFCell)1 XSSFRow (org.apache.poi.xssf.usermodel.XSSFRow)1 Logger (org.slf4j.Logger)1 LoggerFactory (org.slf4j.LoggerFactory)1 Autowired (org.springframework.beans.factory.annotation.Autowired)1