PatientServlet.java
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 }