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..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,4 +39,5 @@ class CI implements GeiaEntity { @XmlElement(name = "task_provision_logistics_support_analysis_control_number_type") String taskProvisionLcnType + 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/java/com/lmco/spectrum/systemnavigation3d/geia/GeiaDataSource.java b/src/main/java/com/lmco/spectrum/systemnavigation3d/geia/GeiaDataSource.java index 03a89c5..8b5e7be 100644 --- a/src/main/java/com/lmco/spectrum/systemnavigation3d/geia/GeiaDataSource.java +++ b/src/main/java/com/lmco/spectrum/systemnavigation3d/geia/GeiaDataSource.java @@ -3,6 +3,9 @@ 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; @@ -10,7 +13,9 @@ public interface GeiaDataSource { List getXAs(); 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 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 7e5d722..2098719 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,17 +51,18 @@ public class XMLGeiaDataSource implements GeiaDataSource { } xaList.addAll(getEntities(XA.class)); + xhList.addAll(getEntities(XH.class)); for(XA xa : xaList) { pairXAWithChildren(xa); } - } 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); @@ -69,15 +72,66 @@ public class XMLGeiaDataSource implements GeiaDataSource { 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())) - .forEach(ca -> src.getCaChildren().add(ca)); // TODO process CA children + .filter(ca -> src.getLcn().equals(ca.getLcn()) + && src.getEndItemAcronymCode().equals(ca.getEndItemAcronymCode())) + .forEach(ca -> { + pairCAWithChildren(ca); + src.getCaChildren().add(ca); + }); + } + + private void pairCAWithChildren(CA src){ + getEntities(CI.class) + .stream() + .filter(ci -> src.getLcn().equals(ci.getLcn()) + && src.getEndItemAcronymCode().equals(ci.getEndItemAcronymCode())) + .forEach(ci -> { + pairCIWithHGChild(ci); + src.getCiChildren().add(ci); + }); + } + + private void pairCIWithHGChild(CI src){ + getEntities(HG.class) + .stream() + .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 @@ -90,6 +144,11 @@ public class XMLGeiaDataSource implements GeiaDataSource { 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 +158,13 @@ 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 cageCode, String taskProvisionReferenceNumber){ + return src.getCiChildren() + .stream() + .filter(ci -> ci.getTaskProvisionCageCode().equals(cageCode) + && ci.getTaskProvisionReferenceNumber().equals(taskProvisionReferenceNumber)) + .findFirst().orElse(null); + } }