001 package examples.xml.xmlbean;
002
003 import org.apache.xmlbeans.XmlObject;
004 import org.apache.xmlbeans.XmlOptions;
005 import org.apache.xmlbeans.XmlCursor;
006
007 import javax.servlet.http.HttpServlet;
008 import javax.servlet.http.HttpServletRequest;
009 import javax.servlet.http.HttpServletResponse;
010 import javax.servlet.ServletException;
011 import javax.servlet.RequestDispatcher;
012 import java.io.IOException;
013 import java.io.PrintWriter;
014 import java.io.File;
015 import java.util.Calendar;
016 import java.util.regex.Pattern;
017
018 import noNamespace.*;
019
020
021 public class PatientServlet extends HttpServlet{
022 //member variables
023 private String fname = "";
024 private String lname = "";
025 private Calendar dob;
026 private String dobStr = "";
027 private noNamespace.Gender.Enum gender;
028 private String genderStr = "";
029 private String phone = "";
030 private String email = "";
031 private String street = "";
032 private String city = "";
033 private String state = "";
034 private String zip = "";
035 private String country = "";
036 private String ssn = "";
037
038 private PatientXMLValidator validator = new PatientXMLValidator();
039 private MedicalRecordsDocument xmlDoc;
040 // constants
041 public static final String HEADER_COMMENT =
042 "This file contains patient information based on user's input.\n\nIF YOU" +
043 " SUBMITTED EDITS TO THIS FILE. PLEASE HIT THE REFRESH BUTTON.\n";
044 public static final String COPYRIGHT_COMMENT =
045 "Copyright (c) "+Calendar.getInstance().get(Calendar.YEAR)+", Oracle and/or its affiliates. "+
046 "All rights reserved.";
047 public static final String JSP_TARGET = "/xmlBean.jsp";
048 private static final String FILE_SEPARATOR = File.separator;
049
050 protected void doPost(HttpServletRequest req,
051 HttpServletResponse res)
052 throws ServletException, IOException
053 {
054 //retrieving submitted parameters from xmlBean.jsp
055 fname = req.getParameter("fname");
056 lname = req.getParameter("lname");
057 dobStr = req.getParameter("dob");
058 dob = parseDOB(dobStr);
059 genderStr = req.getParameter("gender");
060 if (genderStr.equals("male"))
061 {
062 gender = noNamespace.Gender.Enum.forInt(1);
063 }
064 else
065 {
066 gender = noNamespace.Gender.Enum.forInt(2);
067 }
068 phone = req.getParameter("phone");
069 email = req.getParameter("email");
070 street = req.getParameter("street");
071 city = req.getParameter("city");
072 state = req.getParameter("state");
073 zip = req.getParameter("zip");
074 country = req.getParameter("country");
075 ssn = req.getParameter("ssn");
076
077 //creating a PrintWriter object to write out errors
078 PrintWriter out = res.getWriter();
079
080 try{
081
082 //calling method to create xmlBean Document
083 xmlDoc = createPatientXMLData();
084 File patientInfoFile = new File(".."+FILE_SEPARATOR+".."+FILE_SEPARATOR+
085 "server"+FILE_SEPARATOR+"examples"+FILE_SEPARATOR+"src" +
086 FILE_SEPARATOR+"examples"+FILE_SEPARATOR+"xml"+FILE_SEPARATOR+
087 "xmlbean" +FILE_SEPARATOR+"xmlBeanEar"+FILE_SEPARATOR+"xmlBeanWar"+
088 FILE_SEPARATOR+"patientInfo.xml");
089
090 //if file exists already, delete the file, and instantiate new file
091 if (patientInfoFile.exists())
092 {
093 patientInfoFile.delete();
094 patientInfoFile = new File(".."+FILE_SEPARATOR+".."+FILE_SEPARATOR+
095 "server"+FILE_SEPARATOR+"examples"+FILE_SEPARATOR+"src" +
096 FILE_SEPARATOR+"examples"+FILE_SEPARATOR+"xml"+FILE_SEPARATOR+
097 "xmlbean" +FILE_SEPARATOR+"xmlBeanEar"+FILE_SEPARATOR+"xmlBeanWar"+
098 FILE_SEPARATOR+"patientInfo.xml");
099 }
100
101 //using xmlBean to create xml document based on provided schema
102 writePatientXMLFile(xmlDoc, patientInfoFile);
103 }
104 catch (Exception e)
105 {
106 out.print("Exception thrown while creating Medical Records Document" +
107 "in method 'createPatientXMLData'");
108 }
109
110 //setting attribute "xmlBeanDoc" to be sent back to JSP Page
111 req.setAttribute("xmlBeanDoc", xmlDoc);
112
113 //creating RequestDispatcher to forward request to xmlBean.jsp
114 RequestDispatcher rd;
115 rd = getServletContext().getRequestDispatcher(JSP_TARGET);
116 if (rd == null)
117 {
118 out.print("Null Pointer in variable rd");
119 }
120 else
121 {
122 rd.forward(req,res);
123 }
124 }
125
126
127 private XmlObject parse(File f) {
128 MedicalRecordsDocument exDoc = null;
129 try {
130 exDoc = MedicalRecordsDocument.Factory.parse(f);
131 } catch (Exception e) {
132 System.err.println("Exception occurred: "+e.getMessage());
133 }
134 return exDoc;
135 }
136
137 private Calendar parseDOB(String birthdate)
138 {
139 // Create a pattern to split
140 Pattern p = Pattern.compile("-");
141 // Split input with the pattern
142 String[] date = p.split(birthdate);
143
144 int month = Integer.parseInt(date[0]) - 1;
145 int day = Integer.parseInt(date[1]);
146 int year = Integer.parseInt(date[2]);
147
148 Calendar cal = Calendar.getInstance();
149 cal.set(year, month, day);
150
151 return cal;
152 }
153
154 public MedicalRecordsDocument createPatientXMLData()
155 throws Exception
156 {
157 MedicalRecordsDocument newUserXMLData = MedicalRecordsDocument.Factory.newInstance();
158 MedicalRecordType record = newUserXMLData.addNewMedicalRecords();
159 MedicalVisitType visit = record.addNewMedicalVisit();
160 PatientInfoType patient = visit.addNewPatient();
161 PatientNameType name = patient.addNewPatientName();
162 AddressType address = patient.addNewAddress();
163
164 //setting first name, last name
165 name.setFirstName(fname);
166 name.setLastName(lname);
167 patient.setPatientName(name);
168
169 //setting address information
170 address.setStreetName1(street);
171 address.setCity(city);
172 address.setState(state);
173 address.setCountry(country);
174 address.setZip(zip);
175 patient.setAddress(address);
176
177 //setting patient information
178 patient.setDob(dob);
179 patient.setEmail(email);
180 patient.setGender(gender);
181 patient.setPhone(phone);
182 patient.setSsn(ssn);
183 visit.setPatient(patient);
184
185 //setting visit information
186 MedicalVisitType[] medVisitArry = new MedicalVisitType[1];
187 medVisitArry[0] = visit;
188 record.setMedicalVisitArray(medVisitArry);
189
190 //setting record information
191 newUserXMLData.setMedicalRecords(record);
192
193 // return populated xmlobject
194 return newUserXMLData;
195 }
196
197 private void writePatientXMLFile(MedicalRecordsDocument xmlDoc, File patientXML)
198 throws Exception {
199 if (validator.validate(xmlDoc)){
200 // set save options
201 XmlOptions opts = new XmlOptions();
202 opts.setSavePrettyPrint();
203 opts.setUseDefaultNamespace();
204 // set header comment
205 XmlCursor cursor = xmlDoc.newCursor();
206 cursor.toFirstContentToken();
207 cursor.insertComment("\n"+HEADER_COMMENT+"\n"+COPYRIGHT_COMMENT+"\n");
208 cursor.dispose();
209 // write to patientInfo.xml
210 xmlDoc.save(patientXML, opts);
211 }
212
213 }
214 }
|