<%@ page import="java.io.*" %> <%@ page import="java.text.*" %> <%@ page import="java.util.*" %> <%@ page import="javax.xml.parsers.*" %> <%@ page import="org.w3c.dom.*" %> <%! private static final String TITLE_PREFIX = "Paul and Sarah's Crazy Road Trip Adventure - "; %> <%! private static final String FILE_DATE_FORMAT = "MMMMM dd, yyyy"; %> <%! private static final SimpleDateFormat fileDateFormatter = new SimpleDateFormat(FILE_DATE_FORMAT, Locale.US); %> <%! private static final String TITLE_DATE_FORMAT = "MMM dd"; %> <%! private static final SimpleDateFormat titleDateFormatter = new SimpleDateFormat(TITLE_DATE_FORMAT, Locale.US); %> <%! private static final String HEADER_DATE_FORMAT = "EEEEE, MMMMM dd, yyyy"; %> <%! private static final SimpleDateFormat headerDateFormatter = new SimpleDateFormat(HEADER_DATE_FORMAT, Locale.US); %> <%! private static final String MONTH_DATE_FORMAT = "MMMMM"; %> <%! private static final SimpleDateFormat monthDateFormatter = new SimpleDateFormat(MONTH_DATE_FORMAT, Locale.US); %> <%! private static final String TAB = "     "; %> <%! private static final String SECTION_SPACER = "
"; %> <%! private static final String TIME_FORMAT = "hh:mm a"; %> <%! private static final SimpleDateFormat timeFormatter = new SimpleDateFormat(TIME_FORMAT, Locale.US); %> <% try { %> <% final class EntryDetail implements Comparable { private int sortOrder; private String detailContent; public EntryDetail (int sortOrder, String detailContent) { this.sortOrder = sortOrder; this.detailContent = detailContent; } public int compareTo (Object o) { EntryDetail compareToEntryDetail = (EntryDetail)o; if (sortOrder < compareToEntryDetail.getSortOrder()) return -1; else if (sortOrder == compareToEntryDetail.getSortOrder()) return 0; return 1; } public int getSortOrder() { return sortOrder; } public String getDetailContent() { return detailContent; } public boolean equals (Object o) { return sortOrder == ((EntryDetail)o).getSortOrder(); } public int hashCode () { return sortOrder; } } final class DayEntry implements Comparable { private int sortOrder; private String timeString; private Set detailSet; public DayEntry (int sortOrder, String timeString) { this.sortOrder = sortOrder; this.timeString = timeString; detailSet = new TreeSet(); } public int compareTo (Object o) { DayEntry compareToDayEntry = (DayEntry)o; if (sortOrder < compareToDayEntry.getSortOrder()) return -1; else if (sortOrder == compareToDayEntry.getSortOrder()) return 0; return 1; } public int getSortOrder() { return sortOrder; } public String getTime() { return timeString; } public void addDetail (EntryDetail entryDetail) { detailSet.add(entryDetail); } public Set getDetail () { return detailSet; } } %> <% DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); String requestURL = HttpUtils.getRequestURL(request).toString(); String urlFileNoExtension = requestURL.substring(0, requestURL.length() - 3); Document document = builder.parse( urlFileNoExtension + "xml" ); Element docElem = document.getDocumentElement(); String destinationName = docElem.getAttribute("name"); // arrival date NodeList arrivalNodes = docElem.getElementsByTagName("arrival"); Node arrivalNode = arrivalNodes.item(0).getFirstChild(); String arrivalNodeValue = arrivalNode.getNodeValue(); Date arrivalDate = fileDateFormatter.parse(arrivalNodeValue); Calendar arrivalCal = Calendar.getInstance(); arrivalCal.setTime(arrivalDate); arrivalCal.set(Calendar.HOUR_OF_DAY, 00); // departure date NodeList departureNodes = docElem.getElementsByTagName("departure"); Node departureNode = departureNodes.item(0).getFirstChild(); String departureNodeValue = departureNode.getNodeValue(); Date departureDate = fileDateFormatter.parse(departureNodeValue); Calendar departureCal = Calendar.getInstance(); departureCal.setTime(departureDate); departureCal.set(Calendar.HOUR_OF_DAY, 23); // weather Element weatherNode = (Element)docElem.getElementsByTagName("weather").item(0); String low = weatherNode.getAttribute("low"); String high = weatherNode.getAttribute("high"); // schedule list Element scheduleNode = (Element)docElem.getElementsByTagName("schedule").item(0); NodeList dayNodes = scheduleNode.getElementsByTagName("day"); Map dayToEntriesMap = new HashMap(); for (int i = 0; i < dayNodes.getLength(); i++) { Element dayNode = (Element)dayNodes.item(i); String day = dayNode.getAttribute("date"); NodeList entryNodes = dayNode.getElementsByTagName("entry"); for (int j = 0; j < entryNodes.getLength(); j++) { Element entryNode = (Element)entryNodes.item(j); if (entryNode != null) { String sortOrder = entryNode.getAttribute("sort"); String timeString = entryNode.getAttribute("time"); Set entries = (Set)dayToEntriesMap.get(day); if (entries == null) { entries = new TreeSet(); } DayEntry dayEntry = new DayEntry(Integer.parseInt(sortOrder), timeString); NodeList detailNodes = entryNode.getElementsByTagName("detail"); for (int k = 0; k < detailNodes.getLength(); k++) { Element detailNode = (Element)detailNodes.item(k); EntryDetail ed = new EntryDetail(Integer.parseInt(detailNode.getAttribute("sort")), detailNode.getFirstChild().getNodeValue()); dayEntry.addDetail(ed); } entries.add(dayEntry); dayToEntriesMap.put(day, entries); } } } // activities list Element activitiesNode = (Element)docElem.getElementsByTagName("activities").item(0); NodeList activitiesNodes = activitiesNode.getElementsByTagName("activity"); %> <%= TITLE_PREFIX %><%= titleDateFormatter.format(arrivalDate) %> thru <%= titleDateFormatter.format(departureDate) %>
<%= SECTION_SPACER %> <%= SECTION_SPACER %> <%= SECTION_SPACER %>
<%= destinationName %>
<%= headerDateFormatter.format(arrivalDate) %> - <%= headerDateFormatter.format(departureDate) %>
Weather - Average Temperatures for <%= monthDateFormatter.format(arrivalDate) %>
  • Low: <%= low %> F
  • High:<%= high %> F
<% while (arrivalCal.before(departureCal)) { %> <% arrivalCal.add(Calendar.DAY_OF_YEAR, 1); } %>
Schedule
<%= headerDateFormatter.format(arrivalCal.getTime()) %>
<% if (dayToEntriesMap.containsKey(fileDateFormatter.format(arrivalCal.getTime()))) { Set entries = (Set)dayToEntriesMap.get(fileDateFormatter.format(arrivalCal.getTime())); Iterator iter = entries.iterator(); while (iter.hasNext()) { DayEntry entry = (DayEntry)iter.next(); Set detailSet = entry.getDetail(); %> <% Iterator detailIter = detailSet.iterator(); while (detailIter.hasNext()) { EntryDetail entryDetail = (EntryDetail)detailIter.next(); %> <% } } } %>
<%= entry.getTime() %>
<%= TAB %> <%= entryDetail.getDetailContent() %>

Activities
    <% for (int i = 0; i < activitiesNodes.getLength(); i++) { Node activity = activitiesNodes.item(i); %>
  • <%= activity.getFirstChild().getNodeValue() %> <% } %>
<% } catch (Exception e) { } %>