From fd4f4e42db165cab5e67c4b068c45939b8728a7d Mon Sep 17 00:00:00 2001 From: Samantha Hunsley Date: Thu, 26 Mar 2020 21:33:17 -0400 Subject: [PATCH 1/2] Added relationships for CA CI XH HA HG --- .../systemnavigation3d/domain/dto/CA.groovy | 2 + .../systemnavigation3d/domain/dto/CI.groovy | 1 + .../systemnavigation3d/domain/dto/XH.groovy | 2 + .../geia/GeiaDataSource.java | 7 +++ .../geia/XMLGeiaDataSource.java | 54 ++++++++++++++++++- 5 files changed, 65 insertions(+), 1 deletion(-) diff --git a/src/main/groovy/com/lmco/spectrum/systemnavigation3d/domain/dto/CA.groovy b/src/main/groovy/com/lmco/spectrum/systemnavigation3d/domain/dto/CA.groovy index 6ddf92c..259ed8e 100644 --- a/src/main/groovy/com/lmco/spectrum/systemnavigation3d/domain/dto/CA.groovy +++ b/src/main/groovy/com/lmco/spectrum/systemnavigation3d/domain/dto/CA.groovy @@ -45,4 +45,6 @@ class CA implements GeiaEntity { @XmlElement(name = "preventive_maintenance_checks_and_services_indicator_code") String preventiveMaintenanceChecksAndServicesIndicatorCode + transient List ciChildren = new ArrayList<>() + } diff --git a/src/main/groovy/com/lmco/spectrum/systemnavigation3d/domain/dto/CI.groovy b/src/main/groovy/com/lmco/spectrum/systemnavigation3d/domain/dto/CI.groovy index 7d02eed..5079387 100644 --- a/src/main/groovy/com/lmco/spectrum/systemnavigation3d/domain/dto/CI.groovy +++ b/src/main/groovy/com/lmco/spectrum/systemnavigation3d/domain/dto/CI.groovy @@ -39,4 +39,5 @@ class CI implements GeiaEntity { @XmlElement(name = "task_provision_logistics_support_analysis_control_number_type") String taskProvisionLcnType + transient List hgChildren = new ArrayList<>() } diff --git a/src/main/groovy/com/lmco/spectrum/systemnavigation3d/domain/dto/XH.groovy b/src/main/groovy/com/lmco/spectrum/systemnavigation3d/domain/dto/XH.groovy index 386595c..311dbf4 100644 --- a/src/main/groovy/com/lmco/spectrum/systemnavigation3d/domain/dto/XH.groovy +++ b/src/main/groovy/com/lmco/spectrum/systemnavigation3d/domain/dto/XH.groovy @@ -24,4 +24,6 @@ class XH implements GeiaEntity { @XmlElement(name = "commercial_and_government_entity_state") String cageState + transient List haChildren = new ArrayList<>() + } diff --git a/src/main/java/com/lmco/spectrum/systemnavigation3d/geia/GeiaDataSource.java b/src/main/java/com/lmco/spectrum/systemnavigation3d/geia/GeiaDataSource.java index 03a89c5..ab0deee 100644 --- a/src/main/java/com/lmco/spectrum/systemnavigation3d/geia/GeiaDataSource.java +++ b/src/main/java/com/lmco/spectrum/systemnavigation3d/geia/GeiaDataSource.java @@ -3,14 +3,21 @@ package com.lmco.spectrum.systemnavigation3d.geia; import com.lmco.spectrum.systemnavigation3d.domain.dto.CA; import com.lmco.spectrum.systemnavigation3d.domain.dto.XA; import com.lmco.spectrum.systemnavigation3d.domain.dto.XB; +import com.lmco.spectrum.systemnavigation3d.domain.dto.XH; +import com.lmco.spectrum.systemnavigation3d.domain.dto.CI; +import com.lmco.spectrum.systemnavigation3d.domain.dto.HG; import java.util.List; public interface GeiaDataSource { List getXAs(); + List getXHs(); XA getXA(String endItemAcronymCode); + XH getXH(String cageCode); XB getXB(XA src, String lcn); CA getCA(XB src, String taskCode); + CI getCI(CA src, String taskProvisionReferenceNumber); + HG getHG(CI src, String referenceNumber); } diff --git a/src/main/java/com/lmco/spectrum/systemnavigation3d/geia/XMLGeiaDataSource.java b/src/main/java/com/lmco/spectrum/systemnavigation3d/geia/XMLGeiaDataSource.java index 7e5d722..3232f53 100644 --- a/src/main/java/com/lmco/spectrum/systemnavigation3d/geia/XMLGeiaDataSource.java +++ b/src/main/java/com/lmco/spectrum/systemnavigation3d/geia/XMLGeiaDataSource.java @@ -17,9 +17,11 @@ public class XMLGeiaDataSource implements GeiaDataSource { private Map, List> geiaEntityMap; private List xaList; + private List xhList; public XMLGeiaDataSource(InputStream xmlStream) { this.xaList = new ArrayList<>(); + this.xhList = new ArrayList<>(); this.geiaEntityMap = new HashMap<>(); try { @@ -49,11 +51,15 @@ public class XMLGeiaDataSource implements GeiaDataSource { } xaList.addAll(getEntities(XA.class)); + xhList.addAll(getEntities(XH.class)); for(XA xa : xaList) { pairXAWithChildren(xa); } + for(XH xh : xhList){ + pairXHWithChildren(xh); + } } private void pairXAWithChildren(XA src) { @@ -66,6 +72,13 @@ public class XMLGeiaDataSource implements GeiaDataSource { }); } + private void pairXHWithChildren(XH src){ + getEntities(HA.class) + .stream() + .filter(ha -> ha.getCageCode() == src.getCageCode()) + .forEach(ha -> src.getHaChildren().add(ha)); + } + private void pairXBWithChildren(XB src) { getEntities(XB.class) .stream() @@ -77,7 +90,27 @@ public class XMLGeiaDataSource implements GeiaDataSource { getEntities(CA.class) .stream() .filter(ca -> src.getLcn().equals(ca.getLcn())) - .forEach(ca -> src.getCaChildren().add(ca)); // TODO process CA children + .forEach(ca -> { + pairCAWithChildren(ca); + src.getCaChildren().add(ca); + }); + } + + private void pairCAWithChildren(CA src){ + getEntities(CI.class) + .stream() + .filter(ci -> src.getLcn().equals(ci.getLcn())) + .forEach(ci -> { + pairCIWithChildren(ci); + src.getCiChildren().add(ci); + }); + } + + private void pairCIWithChildren(CI src){ + getEntities(HG.class) + .stream() + .filter(hg -> src.getLcn().equals(hg.getLcn())) + .forEach((hg -> src.getHgChildren().add(hg))); } @Override @@ -85,11 +118,19 @@ public class XMLGeiaDataSource implements GeiaDataSource { return xaList; } + @Override + public List getXHs() {return xhList;} + @Override public XA getXA(String endItemAcronymCode) { return xaList.stream().filter(xa -> xa.getEndItemAcronymCode().equals(endItemAcronymCode)).findFirst().orElse(null); } + @Override + public XH getXH(String cageCode){ + return xhList.stream().filter(xh -> xh.getCageCode().equals(cageCode)).findFirst().orElse(null); + } + @Override public XB getXB(XA src, String lcn) { return src.getXbChildren().stream().filter(xb -> xb.getLcn().equals(lcn)).findFirst().orElse(null); @@ -99,4 +140,15 @@ public class XMLGeiaDataSource implements GeiaDataSource { public CA getCA(XB src, String taskCode) { return src.getCaChildren().stream().filter(ca -> ca.getTaskCode().equals(taskCode)).findFirst().orElse(null); } + + @Override + public CI getCI(CA src, String taskProvisionReferenceNumber){ + return src.getCiChildren().stream().filter(ci -> ci.getTaskProvisionReferenceNumber().equals(taskProvisionReferenceNumber)).findFirst().orElse(null); + } + + @Override + public HG getHG(CI src, String referenceNumber) + { + return src.getHgChildren().stream().filter(hg -> hg.getReferenceNumber().equals(referenceNumber)).findFirst().orElse(null); + } } From 4a01965e78ce4120d7e58ed505eebb0af2975b88 Mon Sep 17 00:00:00 2001 From: Daniel Scalzi Date: Mon, 30 Mar 2020 12:54:55 -0400 Subject: [PATCH 2/2] Fix relationships. --- .../systemnavigation3d/domain/dto/CI.groovy | 2 +- .../systemnavigation3d/domain/dto/HA.groovy | 2 + .../systemnavigation3d/domain/dto/HG.groovy | 2 + .../systemnavigation3d/domain/dto/XH.groovy | 2 - .../geia/GeiaDataSource.java | 4 +- .../geia/XMLGeiaDataSource.java | 76 +++++++++++-------- 6 files changed, 52 insertions(+), 36 deletions(-) diff --git a/src/main/groovy/com/lmco/spectrum/systemnavigation3d/domain/dto/CI.groovy b/src/main/groovy/com/lmco/spectrum/systemnavigation3d/domain/dto/CI.groovy index 5079387..9d88a43 100644 --- a/src/main/groovy/com/lmco/spectrum/systemnavigation3d/domain/dto/CI.groovy +++ b/src/main/groovy/com/lmco/spectrum/systemnavigation3d/domain/dto/CI.groovy @@ -39,5 +39,5 @@ class CI implements GeiaEntity { @XmlElement(name = "task_provision_logistics_support_analysis_control_number_type") String taskProvisionLcnType - transient List hgChildren = new ArrayList<>() + transient HG hgChild } diff --git a/src/main/groovy/com/lmco/spectrum/systemnavigation3d/domain/dto/HA.groovy b/src/main/groovy/com/lmco/spectrum/systemnavigation3d/domain/dto/HA.groovy index b0e8377..96b3060 100644 --- a/src/main/groovy/com/lmco/spectrum/systemnavigation3d/domain/dto/HA.groovy +++ b/src/main/groovy/com/lmco/spectrum/systemnavigation3d/domain/dto/HA.groovy @@ -18,4 +18,6 @@ class HA implements GeiaEntity { @XmlElement(name = "item_name") String itemName + transient XH xhParent; + } diff --git a/src/main/groovy/com/lmco/spectrum/systemnavigation3d/domain/dto/HG.groovy b/src/main/groovy/com/lmco/spectrum/systemnavigation3d/domain/dto/HG.groovy index 6c4aed8..375efa5 100644 --- a/src/main/groovy/com/lmco/spectrum/systemnavigation3d/domain/dto/HG.groovy +++ b/src/main/groovy/com/lmco/spectrum/systemnavigation3d/domain/dto/HG.groovy @@ -27,4 +27,6 @@ class HG implements GeiaEntity { @XmlElement(name = "logistics_support_analysis_control_number_type") String lcnType + transient HA haParent + } diff --git a/src/main/groovy/com/lmco/spectrum/systemnavigation3d/domain/dto/XH.groovy b/src/main/groovy/com/lmco/spectrum/systemnavigation3d/domain/dto/XH.groovy index 311dbf4..386595c 100644 --- a/src/main/groovy/com/lmco/spectrum/systemnavigation3d/domain/dto/XH.groovy +++ b/src/main/groovy/com/lmco/spectrum/systemnavigation3d/domain/dto/XH.groovy @@ -24,6 +24,4 @@ class XH implements GeiaEntity { @XmlElement(name = "commercial_and_government_entity_state") String cageState - transient List haChildren = new ArrayList<>() - } diff --git a/src/main/java/com/lmco/spectrum/systemnavigation3d/geia/GeiaDataSource.java b/src/main/java/com/lmco/spectrum/systemnavigation3d/geia/GeiaDataSource.java index ab0deee..8b5e7be 100644 --- a/src/main/java/com/lmco/spectrum/systemnavigation3d/geia/GeiaDataSource.java +++ b/src/main/java/com/lmco/spectrum/systemnavigation3d/geia/GeiaDataSource.java @@ -12,12 +12,10 @@ import java.util.List; public interface GeiaDataSource { List getXAs(); - List getXHs(); XA getXA(String endItemAcronymCode); XH getXH(String cageCode); XB getXB(XA src, String lcn); CA getCA(XB src, String taskCode); - CI getCI(CA src, String taskProvisionReferenceNumber); - HG getHG(CI src, String referenceNumber); + CI getCI(CA src, String cageCode, String taskProvisionReferenceNumber); } diff --git a/src/main/java/com/lmco/spectrum/systemnavigation3d/geia/XMLGeiaDataSource.java b/src/main/java/com/lmco/spectrum/systemnavigation3d/geia/XMLGeiaDataSource.java index 3232f53..2098719 100644 --- a/src/main/java/com/lmco/spectrum/systemnavigation3d/geia/XMLGeiaDataSource.java +++ b/src/main/java/com/lmco/spectrum/systemnavigation3d/geia/XMLGeiaDataSource.java @@ -56,40 +56,33 @@ public class XMLGeiaDataSource implements GeiaDataSource { for(XA xa : xaList) { pairXAWithChildren(xa); } - - for(XH xh : xhList){ - pairXHWithChildren(xh); - } } private void pairXAWithChildren(XA src) { getEntities(XB.class) .stream() - .filter(xb -> xb.getLcnIndentureCode().charAt(0) == 'A' && src.getEndItemAcronymCode().equals(xb.getEndItemAcronymCode())) + .filter(xb -> xb.getLcnIndentureCode().charAt(0) == 'A' + && src.getEndItemAcronymCode().equals(xb.getEndItemAcronymCode())) .forEach(xb -> { pairXBWithChildren(xb); src.getXbChildren().add(xb); }); } - private void pairXHWithChildren(XH src){ - getEntities(HA.class) - .stream() - .filter(ha -> ha.getCageCode() == src.getCageCode()) - .forEach(ha -> src.getHaChildren().add(ha)); - } - private void pairXBWithChildren(XB src) { getEntities(XB.class) .stream() - .filter(xb -> xb.getLcn().startsWith(src.getLcn()) && xb.getLcnIndentureCode().charAt(0)-1 == src.getLcnIndentureCode().charAt(0)) + .filter(xb -> xb.getLcn().startsWith(src.getLcn()) + && xb.getLcnIndentureCode().charAt(0)-1 == src.getLcnIndentureCode().charAt(0) + && xb.getEndItemAcronymCode().equals(src.getEndItemAcronymCode())) .forEach(xb -> { pairXBWithChildren(xb); src.getXbChildren().add(xb); }); getEntities(CA.class) .stream() - .filter(ca -> src.getLcn().equals(ca.getLcn())) + .filter(ca -> src.getLcn().equals(ca.getLcn()) + && src.getEndItemAcronymCode().equals(ca.getEndItemAcronymCode())) .forEach(ca -> { pairCAWithChildren(ca); src.getCaChildren().add(ca); @@ -99,18 +92,46 @@ public class XMLGeiaDataSource implements GeiaDataSource { private void pairCAWithChildren(CA src){ getEntities(CI.class) .stream() - .filter(ci -> src.getLcn().equals(ci.getLcn())) + .filter(ci -> src.getLcn().equals(ci.getLcn()) + && src.getEndItemAcronymCode().equals(ci.getEndItemAcronymCode())) .forEach(ci -> { - pairCIWithChildren(ci); + pairCIWithHGChild(ci); src.getCiChildren().add(ci); }); } - private void pairCIWithChildren(CI src){ + private void pairCIWithHGChild(CI src){ getEntities(HG.class) .stream() - .filter(hg -> src.getLcn().equals(hg.getLcn())) - .forEach((hg -> src.getHgChildren().add(hg))); + .filter(hg -> src.getLcn().equals(hg.getLcn()) + && src.getTaskProvisionCageCode().equals(hg.getCageCode()) + && src.getTaskProvisionReferenceNumber().equals(hg.getReferenceNumber()) + && src.getEndItemAcronymCode().equals(hg.getEndItemAcronymCode())) + .findFirst() + .ifPresent(hg -> { + pairHGWithHAParent(hg); + src.setHgChild(hg); + }); + } + + private void pairHGWithHAParent(HG src) { + getEntities(HA.class) + .stream() + .filter(ha -> ha.getCageCode().equals(src.getCageCode()) + && ha.getReferenceNumber().equals(src.getReferenceNumber())) + .findFirst() + .ifPresent(ha -> { + pairHAWithXHParent(ha); + src.setHaParent(ha); + }); + } + + private void pairHAWithXHParent(HA src){ + getEntities(XH.class) + .stream() + .filter(xh -> xh.getCageCode().equals(src.getCageCode())) + .findFirst() + .ifPresent(src::setXhParent); } @Override @@ -118,9 +139,6 @@ public class XMLGeiaDataSource implements GeiaDataSource { return xaList; } - @Override - public List getXHs() {return xhList;} - @Override public XA getXA(String endItemAcronymCode) { return xaList.stream().filter(xa -> xa.getEndItemAcronymCode().equals(endItemAcronymCode)).findFirst().orElse(null); @@ -142,13 +160,11 @@ public class XMLGeiaDataSource implements GeiaDataSource { } @Override - public CI getCI(CA src, String taskProvisionReferenceNumber){ - return src.getCiChildren().stream().filter(ci -> ci.getTaskProvisionReferenceNumber().equals(taskProvisionReferenceNumber)).findFirst().orElse(null); - } - - @Override - public HG getHG(CI src, String referenceNumber) - { - return src.getHgChildren().stream().filter(hg -> hg.getReferenceNumber().equals(referenceNumber)).findFirst().orElse(null); + public CI getCI(CA src, String cageCode, String taskProvisionReferenceNumber){ + return src.getCiChildren() + .stream() + .filter(ci -> ci.getTaskProvisionCageCode().equals(cageCode) + && ci.getTaskProvisionReferenceNumber().equals(taskProvisionReferenceNumber)) + .findFirst().orElse(null); } }