package ua.stu.scplib.attribute;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Vector;
/**
* <p>A class to encapsulate patient and study information to be used for coercion of
* identifiers in DICOM instances.</p>
*
* @author dclunie
*/
public class CoercionModel {
private class Patient {
String patientName;
String patientID;
String patientBirthDate;
String patientSex;
Patient(AttributeList list) {
patientName=Attribute.getSingleStringValueOrEmptyString(list,TagFromName.PatientName);
patientID=Attribute.getSingleStringValueOrEmptyString(list,TagFromName.PatientID);
patientBirthDate=Attribute.getSingleStringValueOrEmptyString(list,TagFromName.PatientBirthDate);
patientSex=Attribute.getSingleStringValueOrEmptyString(list,TagFromName.PatientSex);
}
Patient(String patientName,String patientID,String patientBirthDate,String patientSex) {
this.patientName=patientName;
this.patientID=patientID;
this.patientBirthDate=patientBirthDate;
this.patientSex=patientSex;
}
String getKey() { return patientName+":"+patientID+":"+patientBirthDate+":"+patientSex; }
public String toString() {
StringBuffer strbuf = new StringBuffer();
strbuf.append(getKey());
return strbuf.toString();
}
}
private class PatientConvertor {
Patient oldPatientIdentifiers;
Patient newPatientIdentifiers;
}
private HashMap patients; // map of patient keys to CoercionModel.PatientConvertor objects
/**
* @param paths paths to DICOM files from which to extract all patient and study information
*/
public CoercionModel(Vector paths) /*throws DicomException, IOException*/ {
patients = new HashMap();
if (paths != null) {
for (int j=0; j< paths.size(); ++j) {
String dicomFileName = (String)(paths.get(j));
if (dicomFileName != null) {
try {
DicomInputStream i = new DicomInputStream(new BufferedInputStream(new FileInputStream(dicomFileName)));
AttributeList list = new AttributeList();
list.read(i,TagFromName.PixelData);
i.close();
Patient patient=new Patient(list);
String key=patient.getKey();
if (patients.get(key) == null) {
patients.put(key,patient);
}
} catch (Exception e) {
e.printStackTrace(System.err);
}
}
}
}
}
/**
*
*/
public String toString() {
StringBuffer strbuf = new StringBuffer();
Iterator i = patients.values().iterator();
while (i.hasNext()) {
Patient p = (Patient)(i.next());
strbuf.append(p);
strbuf.append("\n");
}
return strbuf.toString();
}
}