Skip to content

Commit

Permalink
fix: Set empty data to null for all cert result level fields
Browse files Browse the repository at this point in the history
After switching to upload-to-update, the CSV empty fields were being
parsed as empty strings rather than nulls. This commit adds code that
sets all user-settable string fields (I hope) to null if they are empty.

[#OCD-4793]
  • Loading branch information
kekey1 committed Jan 16, 2025
1 parent 16aa1f6 commit 79bbfa0
Show file tree
Hide file tree
Showing 7 changed files with 111 additions and 17 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ public void normalize(CertifiedProductSearchDetails listing) {
if (listing.getCertificationResults() != null && listing.getCertificationResults().size() > 0) {
clearDataForUnattestedCriteria(listing);
listing.getCertificationResults().stream()
.forEach(certResult -> populateAdditionalSoftwareIds(certResult.getAdditionalSoftware()));
.forEach(certResult -> normalize(certResult.getAdditionalSoftware()));
}
}

Expand All @@ -38,14 +38,32 @@ private void clearDataForUnattestedCriteria(CertifiedProductSearchDetails listin
.forEach(unattestedCertResult -> unattestedCertResult.getAdditionalSoftware().clear());
}

private void populateAdditionalSoftwareIds(List<CertificationResultAdditionalSoftware> additionalSoftwares) {
private void normalize(List<CertificationResultAdditionalSoftware> additionalSoftwares) {
if (additionalSoftwares != null && additionalSoftwares.size() > 0) {
additionalSoftwares.stream()
.forEach(additionalSoftware -> setEmptyStringFieldsToNull(additionalSoftware));

additionalSoftwares.stream()
.filter(additionalSoftware -> hasListingAsAdditionalSoftware(additionalSoftware))
.forEach(additionalSoftware -> populateAdditionalSoftwareId(additionalSoftware));
}
}

private void setEmptyStringFieldsToNull(CertificationResultAdditionalSoftware additionalSoftware) {
if (StringUtils.isEmpty(additionalSoftware.getGrouping())) {
additionalSoftware.setGrouping(null);
}
if (StringUtils.isEmpty(additionalSoftware.getJustification())) {
additionalSoftware.setJustification(null);
}
if (StringUtils.isEmpty(additionalSoftware.getVersion())) {
additionalSoftware.setVersion(null);
}
if (StringUtils.isEmpty(additionalSoftware.getName())) {
additionalSoftware.setName(null);
}
}

private boolean hasListingAsAdditionalSoftware(CertificationResultAdditionalSoftware additionalSoftware) {
return !StringUtils.isEmpty(additionalSoftware.getCertifiedProductNumber())
&& additionalSoftware.getCertifiedProductId() == null;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,9 @@ public CertificationResultNormalizer(CertificationCriterionNormalizer criterionN
}

public void normalize(CertifiedProductSearchDetails listing, List<CertificationResultLevelNormalizer> additionalNormalizers) {
listing.getCertificationResults().stream()
.forEach(certResult -> setEmptyStringFieldsToNull(certResult));

removeCertificationResultsWithNullCriterion(listing);
removeCertificationResultsForDuplicateCriteria(listing);

Expand Down Expand Up @@ -150,6 +153,30 @@ private void setSedTrueIfApplicableToCriteria(CertifiedProductSearchDetails list
.forEach(certResult -> certResult.setSed(true));
}

private void setEmptyStringFieldsToNull(CertificationResult cr) {
if (StringUtils.isEmpty(cr.getApiDocumentation())) {
cr.setApiDocumentation(null);
}
if (StringUtils.isEmpty(cr.getDocumentationUrl())) {
cr.setDocumentationUrl(null);
}
if (StringUtils.isEmpty(cr.getExportDocumentation())) {
cr.setExportDocumentation(null);
}
if (StringUtils.isEmpty(cr.getPrivacySecurityFramework())) {
cr.setPrivacySecurityFramework(null);
}
if (StringUtils.isEmpty(cr.getRiskManagementSummaryInformation())) {
cr.setRiskManagementSummaryInformation(null);
}
if (StringUtils.isEmpty(cr.getServiceBaseUrlList())) {
cr.setServiceBaseUrlList(null);
}
if (StringUtils.isEmpty(cr.getUseCases())) {
cr.setUseCases(null);
}
}

@NoArgsConstructor
private class CertificationResultComparator implements Comparator<CertificationResult> {
private boolean descending = false;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ public void normalize(CertifiedProductSearchDetails listing) {
if (!CollectionUtils.isEmpty(listing.getCertificationResults())) {
clearDataForUnattestedCriteria(listing);
listing.getCertificationResults().stream()
.forEach(certResult -> fillInConformanceMethodData(listing, certResult));
.forEach(certResult -> normalize(listing, certResult));
}
}

Expand All @@ -55,11 +55,21 @@ private void clearDataForUnattestedCriteria(CertifiedProductSearchDetails listin
.forEach(unattestedCertResult -> unattestedCertResult.getTestProcedures().clear());
}

private void fillInConformanceMethodData(CertifiedProductSearchDetails listing, CertificationResult certResult) {
private void normalize(CertifiedProductSearchDetails listing, CertificationResult certResult) {
if (!CollectionUtils.isEmpty(certResult.getConformanceMethods())) {
certResult.getConformanceMethods().stream()
.forEach(crcm -> setEmptyStringFieldsToNull(crcm));
}
populateConformanceMethodIds(certResult.getCriterion(), certResult.getConformanceMethods());
populateConformanceMethodRemovalDates(certResult.getCriterion(), certResult.getConformanceMethods());
}

private void setEmptyStringFieldsToNull(CertificationResultConformanceMethod crcm) {
if (StringUtils.isEmpty(crcm.getConformanceMethodVersion())) {
crcm.setConformanceMethodVersion(null);
}
}

private void populateConformanceMethodIds(CertificationCriterion criterion, List<CertificationResultConformanceMethod> conformanceMethods) {
if (!CollectionUtils.isEmpty(conformanceMethods)) {
conformanceMethods.stream()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,11 +25,25 @@ public QmsStandardNormalizer(QmsStandardDAO qmsStandardDao, FuzzyChoicesManager
public void normalize(CertifiedProductSearchDetails listing) {
if (listing.getQmsStandards() != null && listing.getQmsStandards().size() > 0) {
listing.getQmsStandards().stream()
.forEach(qmsStandard -> populateQmsStandardId(qmsStandard));
.forEach(qmsStandard -> normalize(qmsStandard));
findFuzzyMatchesForUnknownStandards(listing);
}
}

private void normalize(CertifiedProductQmsStandard qmsStandard) {
setEmptyStringFieldsToNull(qmsStandard);
populateQmsStandardId(qmsStandard);
}

private void setEmptyStringFieldsToNull(CertifiedProductQmsStandard qmsStandard) {
if (StringUtils.isEmpty(qmsStandard.getApplicableCriteria())) {
qmsStandard.setApplicableCriteria(null);
}
if (StringUtils.isEmpty(qmsStandard.getQmsModification())) {
qmsStandard.setQmsModification(null);
}
}

private void populateQmsStandardId(CertifiedProductQmsStandard qmsStandard) {
if (!StringUtils.isEmpty(qmsStandard.getQmsStandardName())) {
QmsStandard lookedUpQms = qmsStandardDao.getByName(qmsStandard.getQmsStandardName());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,21 @@ private void populateTestDataIds(CertificationCriterion criterion,
List<CertificationResultTestData> testDatas) {
if (testDatas != null && testDatas.size() > 0) {
testDatas.stream()
.forEach(testData -> populateTestDataId(criterion, testData));
.forEach(testData -> normalize(criterion, testData));
}
}

private void normalize(CertificationCriterion criterion, CertificationResultTestData testData) {
setEmptyStringFieldsToNull(testData);
populateTestDataId(criterion, testData);
}

private void setEmptyStringFieldsToNull(CertificationResultTestData testData) {
if (StringUtils.isEmpty(testData.getAlteration())) {
testData.setAlteration(null);
}
if (StringUtils.isEmpty(testData.getVersion())) {
testData.setVersion(null);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,15 +31,7 @@ public void normalize(CertifiedProductSearchDetails listing) {
if (!CollectionUtils.isEmpty(listing.getCertificationResults())) {
clearDataForUnattestedCriteria(listing);
listing.getCertificationResults().stream()
.forEach(certResult -> fillInTestToolData(certResult));
}
}

@Transactional
public void normalize(List<CertificationResultTestTool> testTools) {
if (!CollectionUtils.isEmpty(testTools)) {
testTools.stream()
.forEach(certResultTestTool -> populateTestToolId(certResultTestTool));
.forEach(certResult -> normalize(certResult));
}
}

Expand All @@ -50,10 +42,20 @@ private void clearDataForUnattestedCriteria(CertifiedProductSearchDetails listin
.forEach(unattestedCertResult -> unattestedCertResult.getTestToolsUsed().clear());
}

private void fillInTestToolData(CertificationResult certResult) {
private void normalize(CertificationResult certResult) {
if (!CollectionUtils.isEmpty(certResult.getTestToolsUsed())) {
certResult.getTestToolsUsed().stream()
.forEach(crtt -> setEmptyStringFieldsToNull(crtt));
}
populateTestToolIds(certResult.getTestToolsUsed());
}

private void setEmptyStringFieldsToNull(CertificationResultTestTool crtt) {
if (StringUtils.isEmpty(crtt.getVersion())) {
crtt.setVersion(null);
}
}

private void populateTestToolIds(List<CertificationResultTestTool> testTools) {
if (testTools != null && testTools.size() > 0) {
testTools.stream()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,10 @@ public void normalize(CertifiedProductSearchDetails listing) {
if (listing.getSed() != null && !CollectionUtils.isEmpty(listing.getSed().getUcdProcesses())) {
clearDataForUnattestedCriteria(listing);
listing.getSed().getUcdProcesses().stream()
.forEach(ucdProcess -> populateUcdProcessId(ucdProcess));
.forEach(ucdProcess -> {
setEmptyStringFieldsToNull(ucdProcess);
populateUcdProcessId(ucdProcess);
});
findFuzzyMatchesForUnknownUcdProcesses(listing);

List<CertifiedProductUcdProcess> ucdProcessesToRemove = getHopelessUcdProcesses(listing.getSed().getUcdProcesses());
Expand Down Expand Up @@ -81,6 +84,12 @@ private List<CertifiedProductUcdProcess> getHopelessUcdProcesses(List<CertifiedP
.toList();
}

private void setEmptyStringFieldsToNull(CertifiedProductUcdProcess crup) {
if (StringUtils.isEmpty(crup.getDetails())) {
crup.setDetails(null);
}
}

private void populateUcdProcessId(CertifiedProductUcdProcess ucdProcess) {
if (!StringUtils.isEmpty(ucdProcess.getName())) {
UcdProcess foundUcdProcess = ucdDao.getByName(ucdProcess.getName());
Expand Down

0 comments on commit 79bbfa0

Please sign in to comment.