Summary Table
Categories |
Total Count |
PII |
0 |
URL |
0 |
DNS |
0 |
EKL |
0 |
IP |
0 |
PORT |
0 |
VsID |
0 |
CF |
0 |
AI |
0 |
VPD |
0 |
PL |
0 |
Other |
0 |
File Content
package gov.va.med.pbm.ampl.fhir.unmarshall.dstu2.unbundle;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Optional;
import ca.uhn.fhir.model.dstu2.composite.CodeableConceptDt;
import ca.uhn.fhir.model.dstu2.composite.ResourceReferenceDt;
import ca.uhn.fhir.model.dstu2.resource.Bundle.Entry;
import ca.uhn.fhir.model.dstu2.resource.Location;
import ca.uhn.fhir.model.dstu2.resource.Organization;
import gov.va.med.pbm.ampl.constant.AmplConstants;
import gov.va.med.pbm.ampl.constant.MockDataConstants;
import gov.va.med.pbm.ampl.model.Facility;
/**
* The UnbundleFacility class marshals an {@link Organization} resource to a client readable JSON format.
*
* @author Ian Meinert
*
*/
public class UnbundleFacility {
private ResourceReferenceDt resourceReference;
private List<Entry> entries;
private Facility facility;
/**
* Overloaded constructor accepting an {@link ResourceReferenceDt}.
*
* @param resourceReference {@link ResourceReferenceDt} containing the required data
*/
public UnbundleFacility(ResourceReferenceDt resourceReference) {
this.resourceReference = resourceReference;
}
/**
* Overloaded constructor accepting a collection of {@link Entry}.
*
* @param entries {@link Entry}
*/
public UnbundleFacility(List<Entry> entries) {
this.entries = entries;
}
/**
* This method saves the bundled entries into a collection of {@link Facility}.
*
* @return collection of {@link Facility}
*/
public Collection<Facility> getEntries() {
Collection<Facility> facilityCollection = new ArrayList<Facility>();
for (Entry entry : entries) {
Optional<Organization> optOrganization = Optional.ofNullable((Organization) entry.getResource());
facilityCollection.add(this.getFromOrganization(optOrganization));
}
return facilityCollection;
}
/**
* This method marshals {@link ResourceReferenceDt} extension data into a {@link Facility}.
*
* @return {@link Facility}
*/
public Facility getResourceFromExtension() {
Organization organization = (Organization) resourceReference.getResource();
UnbundleUndeclaredExtension extensions = new UnbundleUndeclaredExtension(organization.getUndeclaredExtensions());
return extensions.getFacilityFromCodingDt("http://www.va.gov/fhir/extns/dstu2/va-site-code");
}
/**
* This method marshals {@link ResourceReferenceDt} data into a {@link Facility}.
*
* @return {@link Facility}
*/
public Facility getResourceAsOrganization() {
Optional<Organization> optOrganization = Optional.ofNullable((Organization) resourceReference.getResource());
return this.getFromOrganization(optOrganization);
}
/**
* This method marshals {@link ResourceReferenceDt} as {@link Location} data into a {@link Facility}.
*
* @return {@link Facility}
*/
public Facility getResourceAsLocationForFacility() {
Optional<ResourceReferenceDt> optRef = Optional.ofNullable(resourceReference);
Location location = (Location) resourceReference.getResource();
this.facility = new Facility();
if (optRef.isPresent()) {
Optional<Organization> optOrganization = Optional
.ofNullable((Organization) location.getManagingOrganization().getResource());
if (optOrganization.isPresent()) {
return getFromOrganization(optOrganization);
}
else {
this.facility.setName(MockDataConstants.VERIFY_FHIR_ELEMENT);
}
} else {
this.facility.setName(MockDataConstants.VERIFY_FHIR_ELEMENT);
}
return this.facility;
}
/**
* This method marshals {@link Organization} data into a {@link Facility}.
*
* @param optOrganization optional Organization
* @return {@link Facility}
*/
public Facility getFromOrganization(Optional<Organization> optOrganization) {
Optional<ResourceReferenceDt> optRef = Optional.ofNullable(resourceReference);
this.facility = new Facility();
if (optOrganization.isPresent()) {
Organization organization = optOrganization.get();
Optional<CodeableConceptDt> optType = Optional.of(organization.getType());
if (optType.isPresent()) {
if (optType.get().getText().equalsIgnoreCase("CLINIC")) {
this.setFacility(organization);
}
} else {
this.facility.setName(MockDataConstants.NOT_MAPPED);
}
} else if (optRef.isPresent()) {
Optional<String> optText = Optional.ofNullable(resourceReference.getDisplay().getValueAsString());
if (optText.isPresent()) {
String text = optText.get();
if (text.length() <= AmplConstants.FIVE) {
// most likely station number
this.facility.setStationNumber(text);
} else {
this.facility.setName(text);
}
} else {
this.facility.setName(MockDataConstants.NOT_MAPPED);
}
} else {
this.facility.setName(MockDataConstants.NOT_MAPPED);
}
return this.facility;
}
/**
* This method marshals an {@link Organization} to a {@link Facility}.
*
* @param organization {@link Organization}
*/
private void setFacility(Organization organization) {
Facility value = new Facility();
UnbundleAddress unbundledAddress = new UnbundleAddress(organization.getAddress());
value.setLocation(unbundledAddress.getAddressAsWork());
value.setName(organization.getContactFirstRep().getPurpose().getText());
value.setSiteName(organization.getNameElement().getValue());
value.setStationNumber(organization.getNameElement().getElementSpecificId().toString());
this.facility = value;
}
}