// package org.javatrainer; // Jeff: Not needed package esse; /** * @author Anika Sindhwani, with the design and help from Jeff Offutt * Date: August, 2013 * Version 2 */ import java.io.IOException; import java.io.File; import java.io.PrintWriter; import java.util.Enumeration; import javax.servlet.ServletException; // import javax.servlet.annotation.WebServlet; // Jeff: Doesn't compile import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; /** * Servlet implementation class ProjectDetails */ // @WebServlet("/projDetails") // Jeff: Our compiler doesn't support this. public class ProjectDetails extends HttpServlet { // private static final long serialVersionUID = 1L; // Jeff: Not needed /** * @see HttpServlet#doGet (HttpServletRequest request, HttpServletResponse response) */ protected void doGet (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try { // String servletPath = "http://localhost:8080/expProj/"; // Anika String servletPath = "http://cs.gmu.edu:8080/offutt/servlet/esse."; // Jeff // String webServerPath = "/"; // Anika String webServerPath = "http://cs.gmu.edu/~offutt/esse/"; // Jeff // String xmlPath = "c:/eclipse/"; // Anika String xmlPath = "/var/www/CS/webapps/offutt/WEB-INF/data/esse/"; // Jeff // String filePath = "/Projects/"; // Anika String filePath = webServerPath + "Projects/"; // Jeff // String imagePath = "/"; // Anika String imagePath = "Images/"; // Jeff PrintWriter out = response.getWriter(); String fileName = request.getParameter ("name"); String fileLanguage = request.getParameter ("language"); String sourceFile = fileName + "." + fileLanguage; // Open the XML file and create list of elements File fXmlFile = new File (xmlPath + "projectList.xml"); DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); Document doc = dBuilder.parse (fXmlFile); //gets elements from XML doc.getDocumentElement().normalize(); NodeList nodes = doc.getElementsByTagName ("project"); for (int i = 0; i < nodes.getLength(); i++) { Node node = nodes.item (i); if (node.getNodeType() == Node.ELEMENT_NODE) { Element element = (Element) node; //verifies info from projectList and xml to display project details String fileNameFromXML = element.getElementsByTagName ("name").item(0).getTextContent(); String fileLanguageFromXML = element.getElementsByTagName ("language").item(0).getTextContent().toLowerCase(); String sourceFileFromXML = fileNameFromXML + "." + fileLanguageFromXML; if (!(sourceFile.equals (sourceFileFromXML))) { continue; } //create the top of page out.print ("Empirical Software Subject: "); out.print (fileName); out.println (""); out.println (""); out.println (""); out.println (""); out.println (""); out.print ("
"); out.print ("

"); out.print (element.getElementsByTagName ("name").item(0).getTextContent()); out.print ("

"); out.println ("

Summary:

"); out.println (element.getElementsByTagName ("summary").item(0).getTextContent()); out.println ("
"); out.println ("
"); out.println ("Download Links:
"); out.println ("
"); //creates link to download file out.print (""); out.print (fileNameFromXML); out.println (""); out.println ("

"); out.println ("Information:
"); out.println ("
"); out.println ("Licensing Restrictions: "); out.println (element.getElementsByTagName ("licensingRestrictions").item(0).getTextContent()); out.println ("

"); out.println ("Environmental Setup Needed:

"); out.println (element.getElementsByTagName ("environmentalSetup").item(0).getTextContent()); out.println ("

"); out.println ("Tests: "); out.println (element.getElementsByTagName ("testFiles").item(0).getTextContent()); out.println ("

"); out.println ("Designs: "); out.println (element.getElementsByTagName ("designFiles").item(0).getTextContent()); out.println ("

"); out.println ("Requirements:"); out.println (element.getElementsByTagName ("reqFiles").item(0).getTextContent()); out.println ("

"); out.println ("Origin:
"); out.println (element.getElementsByTagName ("origin").item(0).getTextContent()); out.println ("

"); out.println ("Publications:"); //checks # of publications, prints all of them in ordered list, unless publications = none String publication = element.getElementsByTagName ("publications").item(0).getTextContent(); if (publication.equals ("None")) { out.println (publication); out.println ("

"); } else { out.println ("
    "); NodeList publicationNodes = element.getElementsByTagName ("publications"); for (int x = 0; x < publicationNodes.getLength(); x++) { out.println ("
  1. "); out.println (publicationNodes.item(x).getTextContent()); out.println ("
    "); } out.println ("
"); } out.println ("Information About Contributors:
"); out.print (element.getElementsByTagName ("name").item(0).getTextContent()); out.print (" was written by "); out.print (element.getElementsByTagName ("authorName").item(0).getTextContent()); //creates email link out.print (" ("); out.print (element.getElementsByTagName ("email").item(0).getTextContent()); out.println (")


"); out.println ("Comments and Reviews From Users:
"); //checks # of comments, puts in ordered list out.println (""); //link to post method of project details to add comments out.print ("
"); out.println (""); out.println ("


"); out.println ("
"); out.println ("Average Ratings From Users: "); //find average number of ratings String totalStars = element.getElementsByTagName ("totalStars").item(0).getTextContent(); String numberOfRatings = element.getElementsByTagName ("numberOfRatings").item(0).getTextContent(); int totalStar = Integer.parseInt (totalStars); int ratingsNumber = Integer.parseInt (numberOfRatings); float averageRating = (float) totalStar / (float)ratingsNumber; out.println (""); //display average number of ratings out.println ("
"); out.print ("
Currently rated: "); out.printf ("%1.1f", averageRating); out.print (" out of 5 stars rated by "); out.print (numberOfRatings); if (ratingsNumber==1) { out.print (" person.
"); } else { out.print (" people.
"); } out.println (""); out.println (""); out.println ("
"); } // end if Node type is not element Node } // End for through the nodes in the list //create bottom of the page out.println ("
Designed and Built by Anika Sindhwani"); out.println ("
Last Updated: August 16th, 2013
"); out.println (""); out.close(); } catch (Exception e) { e.printStackTrace(); } } // End doGet() /** * @see HttpServlet#doPost (HttpServletRequest request, HttpServletResponse response) */ protected void doPost (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try { // String servletPath = "http://localhost:8080/expProj/"; // Anika String servletPath = "/"; // Jeff // String webServerPath = "/"; // Anika String webServerPath = "http://cs.gmu.edu/~offutt/esse/"; // Jeff // String xmlPath = "c:/eclipse/"; // Anika String xmlPath = "/var/www/CS/webapps/offutt/WEB-INF/data/esse/"; // Jeff // String filePath = "/Projects/"; // Anika String filePath = webServerPath + "Projects/"; // Jeff String fileName = request.getParameter ("name"); String fileLanguage = request.getParameter ("language"); String commentByUser = request.getParameter ("comment"); String sourceFile = fileName + "." + fileLanguage; // Open the XML file and create list of elements DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder(); Document document = documentBuilder.parse (xmlPath + "projectList.xml"); document.getDocumentElement().normalize(); //get elements from the XML file NodeList nodes = document.getElementsByTagName ("project"); for (int i = 0; i < nodes.getLength(); i++) { Node node = nodes.item (i); if (node.getNodeType() == Node.ELEMENT_NODE) { Element element = (Element) node; // compare data to add info to the right xml tag String fileNameFromXML = element.getElementsByTagName ("name").item(0).getTextContent(); String fileLanguageFromXML = element.getElementsByTagName ("language").item(0).getTextContent().toLowerCase(); String sourceFileFromXML = fileNameFromXML + "." + fileLanguageFromXML; if (!(sourceFile.equals (sourceFileFromXML))) { continue; } // server elements Element commentsRatings = (Element) document.getElementsByTagName ("commentsRatings").item(0); Element comment = document.createElement ("comment"); comment.appendChild (document.createTextNode (commentByUser)); commentsRatings.appendChild (comment); //write the content into xml file TransformerFactory transformerFactory = TransformerFactory.newInstance(); Transformer transformer = transformerFactory.newTransformer(); DOMSource source = new DOMSource (document); StreamResult result = new StreamResult (new File (xmlPath + "projectList.xml")); transformer.transform (source, result); } } } catch (Exception e) { e.printStackTrace(); } } // End doPost() }