source: ccr/trunk/nhin-vista/projects/NHINC/Current/Product/Production/Adapters/General/MpiLib/src/gov/hhs/fha/nhinc/mpilib/MiniMpi.java@ 507

Last change on this file since 507 was 507, checked in by George Lilly, 15 years ago

NHIN gateway and adaptor for use on linux with VistA EHR and RPMS

File size: 7.3 KB
Line 
1/*
2 * To change this template, choose Tools | Templates
3 * and open the template in the editor.
4 */
5package gov.hhs.fha.nhinc.mpilib;
6
7import org.apache.commons.logging.Log;
8import org.apache.commons.logging.LogFactory;
9
10/**
11 *
12 * @author rayj
13 */
14public class MiniMpi implements IMPI {
15
16 private static Log log = LogFactory.getLog(MiniMpi.class);
17 private Patients _patients = null;
18 private String customFileName = "";
19
20 private MiniMpi() {
21 LoadData();
22 }
23
24 private MiniMpi(String fileName) {
25 LoadData(fileName);
26 }
27
28 public static MiniMpi GetMpiInstance() {
29 return new MiniMpi();
30 }
31
32 public static MiniMpi GetMpiInstance(String fileName) {
33 return new MiniMpi(fileName);
34 }
35
36 public void Reset() {
37 _patients = null;
38 SaveData();
39 }
40
41 private Patients SearchByDemographics(Patient searchParams, boolean includeOptOutPatient) {
42 Patients results = new Patients();
43 log.info("performing a demograpics search");
44 if (includeOptOutPatient) {
45 for (Patient patient : this.getPatients()) {
46 if (PatientMatcher.IsSearchMatchByDemographics(patient, searchParams)) {
47 results.add(patient);
48 }
49 }
50 } else {
51 for (Patient patient : this.getPatients()) {
52 if (PatientMatcher.isPatientOptedInCriteriaMet(patient)) {
53 if (PatientMatcher.IsSearchMatchByDemographics(patient, searchParams)) {
54 results.add(patient);
55 }
56 }
57 }
58 }
59 return results;
60 }
61
62 private Patients SearchById(Patient searchParams, boolean includeOptOutPatient) {
63 Patients results = new Patients();
64 //System.out.println("performing an id search");
65 log.info("performing an id search");
66 if (includeOptOutPatient) {
67 for (Patient patient : this.getPatients()) {
68 if (PatientMatcher.IsSearchMatchByIds(patient, searchParams)) {
69 results.add(patient);
70 }
71 }
72 } else {
73 for (Patient patient : this.getPatients()) {
74 if (PatientMatcher.isPatientOptedInCriteriaMet(patient)) {
75 if (PatientMatcher.IsSearchMatchByIds(patient, searchParams)) {
76 results.add(patient);
77 }
78 }
79 }
80 }
81 return results;
82 }
83
84 private void ValidateNewPatient(Patient patient) {
85 if (patient.getName().getLastName().contentEquals("")) {
86 throw new IllegalArgumentException("Must supply a patient name");
87 }
88 }
89
90 public Patient AddUpdate(Patient newPatient) {
91 Patient resultPatient = null;
92 ValidateNewPatient(newPatient);
93
94 Patients existingPatients = Search(newPatient, true, true);
95
96 if (existingPatients.size() == 2) {
97 //throw exception
98 } else if (existingPatients.size() == 1) {
99 resultPatient = existingPatients.get(0);
100 resultPatient.getIdentifiers().add(newPatient.getIdentifiers());
101 resultPatient.setName(newPatient.getName());
102 resultPatient.setGender(newPatient.getGender());
103 resultPatient.setOptedIn(newPatient.isOptedIn());
104 } else {
105 getPatients().add(newPatient);
106 resultPatient = newPatient;
107 }
108
109 SaveData();
110
111 return resultPatient;
112 }
113
114 public void Delete(Patient patient, String homeCommunityId) {
115 log.info("Attemping to Delete identifiers for community: " + homeCommunityId +
116 " for patient: " + patient.getName().getFirstName() + " " + patient.getName().getLastName());
117 Patients existingPatients = Search(patient, true, true);
118 int patIdx = 0;
119 int idIdx = 0;
120
121 if (existingPatients.size() > 1) {
122 log.info("ERROR: Multiple instances of the patient were found");
123 } else if (existingPatients.size() == 1) {
124 log.info("Found 1 entry in MPI for the patient");
125 for (Patient tmpPatient : getPatients()) {
126 if (existingPatients.get(0) == tmpPatient) {
127 log.info("Found a match in index " + patIdx);
128
129 for (Identifier id : getPatients().get(patIdx).getIdentifiers()) {
130 if (homeCommunityId.contentEquals(id.getOrganizationId())) {
131 log.info("Found a match for identifiers in index" + idIdx);
132 Identifier result = getPatients().get(patIdx).getIdentifiers().remove(idIdx);
133 break;
134 }
135 idIdx++;
136 }
137 break;
138 }
139 patIdx++;
140 }
141 } else {
142 //System.out.println("ERROR: Patient not found in MPI");
143 log.info("ERROR: Patient not found in MPI");
144 }
145
146 SaveData();
147 }
148
149 public Patients Search(Patient searchParams, boolean AllowSearchByDemographics) {
150 return Search(searchParams, AllowSearchByDemographics, false);
151 }
152
153 public Patients Search(Patient searchParams, boolean AllowSearchByDemographics, boolean includeOptOutPatient) {
154 Patients results = new Patients();
155
156 //if not results, try a demographics search
157 log.info("should we perform an demographic search?");
158 if ((AllowSearchByDemographics) && (!(searchParams.getName().getFirstName().contentEquals("") && searchParams.getName().getLastName().contentEquals("")))) {
159 log.info("attempt demographic search");
160 results = SearchByDemographics(searchParams, includeOptOutPatient);
161 if (results == null) {
162 log.info("results==null");
163 } else {
164 log.info("results.size()=" + results.size());
165 }
166 } else {
167 log.info("no attempt on demographic search");
168 }
169
170 //perform a id search
171 log.info("should we perform an id search?");
172 if ((results.size() == 0) && (searchParams.getIdentifiers().size() > 0)) {
173 log.info("attempt id search");
174 results = SearchById(searchParams, includeOptOutPatient);
175 if (results == null) {
176 log.info("results==null");
177 } else {
178 log.info("results.size()=" + results.size());
179 }
180 } else {
181 log.info("no attempt on id search");
182 }
183
184 log.info("result size=" + results.size());
185 return results;
186 }
187
188 public Patients getPatients() {
189 if (_patients == null) {
190 _patients = new Patients();
191 }
192 return _patients;
193 }
194
195 private void setPatients(Patients value) {
196 _patients = value;
197 }
198
199 private void LoadData() {
200 this.setPatients(MpiDataSaver.LoadMpi());
201 }
202
203 private void LoadData(String fileName) {
204 customFileName = fileName;
205 this.setPatients(MpiDataSaver.LoadMpi(fileName));
206 }
207
208 private void SaveData() {
209 if (customFileName == "") {
210 MpiDataSaver.SaveMpi(this.getPatients());
211 } else {
212 MpiDataSaver.SaveMpi(this.getPatients(), customFileName);
213 }
214 }
215
216 public Patients Search(Patient searchParams) {
217 return Search(searchParams, true, false);
218 }
219}
Note: See TracBrowser for help on using the repository browser.