예제 #1
0
  /**
   * Build a hash map with OderSpecimen as key, configured SpecimenContainer as secondary key, and
   * OrderInvestigation collection as values
   *
   * <p>Instead of comparing every specimen container from every investigation with every specimen
   * from other investigations, build a hash map with OrderSpecimen primary key, SpecimenContainer
   * secondary key and add all investigations from an OrderSpecimen that have SpecimenContainer
   * configured. If there are more than one investigation in the collection, then that
   * SpecimenContainer is common to more than one investigation for the OrderSpecimen
   */
  private HashMap<
          OrderSpecimenVo, HashMap<PathSpecimenContainerDetailVo, OrderInvestigationVoCollection>>
      buildHashMapOfAlternativeContainers(OrderSpecimenVoCollection myOrderPotentialSpecimens) {
    if (myOrderPotentialSpecimens == null || myOrderPotentialSpecimens.size() == 0) return null;

    HashMap<OrderSpecimenVo, HashMap<PathSpecimenContainerDetailVo, OrderInvestigationVoCollection>>
        generalAlternativeContainers =
            new HashMap<
                OrderSpecimenVo,
                HashMap<PathSpecimenContainerDetailVo, OrderInvestigationVoCollection>>();

    for (OrderSpecimenVo specimen : myOrderPotentialSpecimens) {
      HashMap<PathSpecimenContainerDetailVo, OrderInvestigationVoCollection>
          specimenAlternativeContainers =
              new HashMap<PathSpecimenContainerDetailVo, OrderInvestigationVoCollection>();

      for (int i = 0; i < specimen.getInvestigations().size(); i++) {
        OrderInvestigationVo investigation =
            (OrderInvestigationVo)
                specimen.getInvestigations().get(i); // Unsafe upcast due to performance reasons
        PathInvDetailsVo pathologyDetails = null;

        if (investigation.getInvestigation().getParentInvestigationPathDetails() != null) {
          pathologyDetails = investigation.getInvestigation().getParentInvestigationPathDetails();
        } else {
          pathologyDetails = investigation.getInvestigation().getPathInvDetails();
        }

        SpecimenVo specimenVo = pathologyDetails.getSpecimens().get(0);

        PathSpecimenContainerDetailVo pediatricContainer =
            specimenVo.getPaediatricContainers().get(0).getSpecContainer();
        addSpecimenInvestigationToMap(
            specimenAlternativeContainers, investigation, pediatricContainer);

        for (SpecimenContainerVo containers : specimenVo.getAlternativePaediatricContainers()) {
          addSpecimenInvestigationToMap(
              specimenAlternativeContainers, investigation, containers.getSpecContainer());
        }
      }

      generalAlternativeContainers.put(specimen, specimenAlternativeContainers);
    }

    return generalAlternativeContainers;
  }
예제 #2
0
  private float addInvestigationsWithAlternates(
      OrderInvestigationRefVoCollection investigations,
      grdItemsRow specimenRow,
      HashMap<PathSpecimenContainerDetailVo, OrderInvestigationVoCollection>
          alternativeContainers) {
    if (investigations == null || investigations.size() == 0)
      throw new CodingRuntimeException(
          "Logical Error - can't choose alternative containers for specimens without investigations");

    float totalRequiedVolume = 0;

    for (OrderInvestigationRefVo investigationRef : investigations) {
      // Upcast - possible error, but done due to performance consideration
      OrderInvestigationVo investigation = (OrderInvestigationVo) investigationRef;

      // Get investigation pathology details
      // Favor parent investigation Pathology Details - this might indicate an add-on investigation
      PathInvDetailsVo pathologyDetails = null;
      if (investigation.getInvestigation().getParentInvestigationPathDetails() != null) {
        pathologyDetails = investigation.getInvestigation().getParentInvestigationPathDetails();
      } else {
        pathologyDetails = investigation.getInvestigation().getPathInvDetails();
      }

      // Create child row for OrderInvestigationVo
      grdItemsRow investigationRow = specimenRow.getRows().newRow();

      // Set investigation name and value to row
      investigationRow.setColText(getInvestigationDisplayText(investigation, pathologyDetails));
      investigationRow.setValue(investigation);

      boolean isPaed = isUsePaedContainer();

      if (isPaed) {
        // Get specimen from pathology details - implementation only for Simple Investigation
        // Revise code when implementing Complex investigations
        SpecimenVo specimen = pathologyDetails.getSpecimens().get(0);
        // Pediatric container - alternate containers can only be configured for investigations with
        // only one pediatric container; any investigation must contain at least one pediatric
        // container
        SpecimenContainerVo paediatricContainer = specimen.getPaediatricContainers().get(0);

        investigationRow
            .getColContainer()
            .newRow(paediatricContainer, paediatricContainer.getSpecContainer().getName());
        investigationRow.getColContainer().setValue(paediatricContainer);

        totalRequiedVolume +=
            pathologyDetails.getSpecimens().get(0).getPaediatricContainers().get(0).getVolume();

        if (specimen.getAlternativePaediatricContainers() != null) {
          int addedAlternatives = 0;

          for (SpecimenContainerVo alternatePaedContainer :
              specimen.getAlternativePaediatricContainers()) {
            OrderInvestigationVoCollection orderInvestigations =
                alternativeContainers.get(alternatePaedContainer.getSpecContainer());

            if (orderInvestigations != null
                && orderInvestigations.size() > 1
                && orderInvestigations.contains(investigation)) {
              alternatePaedContainer
                  .getSpecContainer()
                  .setAlternativeVol(alternatePaedContainer.getVolume());
              investigationRow
                  .getColContainer()
                  .newRow(
                      alternatePaedContainer, alternatePaedContainer.getSpecContainer().getName());

              addedAlternatives++;
            }
          }

          investigationRow.setColContainerReadOnly(addedAlternatives == 0);
        }
      }
    }

    return totalRequiedVolume;
  }