Frames No Frames

  %method %block %branch %line
net.jaekl.frank.Schedule
100%(7/7)
88%(21/24)
75%(9/12)
98%(79/81)

hit count method name method modifiers method signature
8 <init> [public] void <init>(java.util.Locale)
6 mapUrl [] java.lang.String mapUrl(double,double)
22 trans [] java.lang.String trans(java.lang.String)
11 writeHeader [] void writeHeader(java.io.PrintWriter,java.lang.String)
2 writePage [] void writePage(java.io.PrintWriter,net.jaekl.frank.octranspo.StopInfo)
2 writeScript [] void writeScript(java.io.PrintWriter,java.lang.String,int)
14 writeStyle [] void writeStyle(java.io.PrintWriter)

 1  
 package net.jaekl.frank;
 2  
 
 3  
 import java.io.PrintWriter;
 4  
 import java.text.DateFormat;
 5  
 import java.text.MessageFormat;
 6  
 import java.text.SimpleDateFormat;
 7  
 import java.util.Date;
 8  
 import java.util.Locale;
 9  
 
 10  
 import net.jaekl.frank.octranspo.Route;
 11  
 import net.jaekl.frank.octranspo.StopInfo;
 12  
 import net.jaekl.frank.octranspo.Trip;
 13  
 
 14  
 public class Schedule {
 15  
 	Locale m_locale;
 16  
 	FrankBundle m_bundle;
 17  
 	DateFormat m_hourMinFmt;
 18  
 	DateFormat m_hourMinSecFmt;
 19  
 	
 20  Block: 1/1 
 	public Schedule(Locale locale) {
 21  
 		m_locale = locale;
 22  
 		m_bundle = FrankBundle.getInst(locale);
 23  
 		m_hourMinFmt = new SimpleDateFormat("hh:mma", locale);
 24  
 		m_hourMinSecFmt = new SimpleDateFormat("hh:mm:ssa", locale);
 25  
 	}
 26  
 	
 27  
 	String trans(String key) {
 28  Block: 1/1 
 		return m_bundle.get(key);
 29  
 	}
 30  
 	
 31  
 	String mapUrl(double latitude, double longitude) {
 32  Block: 1/1 
 		return "http://www.openstreetmap.org/?mlat=" + latitude + "&mlon=" + longitude + "&zoom=15";
 33  
 	}
 34  
 	
 35  
 	void writeStyle(PrintWriter pw) {
 36  Block: 1/1 
 		pw.println("<STYLE>");
 37  
 		pw.println("  body {background-color: #F0F0C0; font-size: 1.5em; }");
 38  
 		pw.println("  #trips {border-collapse: collapse; font-size: 1.5em; }");
 39  
 		pw.println("  #trips td, #trips th {border: 1px solid #600000; padding: 3px 3px 3px 3px; text-align: center;}");
 40  
 		pw.println("  #trips th {background-color: #800000; color: #FFFFFF; }");
 41  
 		pw.println("  #trips tr.ghost td {background-color: #C0C0C0;}");
 42  
 		pw.println("</STYLE>");
 43  
 	}
 44  
 	
 45  
 	// Countdown timer that updates time remaining until each bus is expected.
 46  
 	void writeScript(PrintWriter pw, String remainArray, int remainCount) {
 47  Block: 1/1 
 		String min = trans(FrankBundle.MINUTES);
 48  
 		String sec = trans(FrankBundle.SECONDS);
 49  
 		
 50  
 		pw.println("<SCRIPT>");
 51  
 	    pw.println("var start; var interval; var remain;");
 52  
 	    pw.println("window.onload = function() { start = new Date(); interval = setInterval(\"Tick()\", 1000); remain = " + remainArray + "; }");
 53  
 	    pw.println("function Tick() { ");
 54  
 	    pw.println("  var now = new Date(); var delta = Math.floor((now.getTime() - start.getTime()) / 1000); ");
 55  
 	    pw.println("  var secs = delta % 60; var mins = Math.floor(delta / 60);");
 56  
 	    pw.println("  document.getElementById(\"elapsed\").innerHTML = mins + \"" + min + " \" + secs + \"" + sec + "\"");
 57  
 	    pw.println("  for (var i = 0; i < " + remainCount + "; ++i) {");
 58  
 	    pw.println("    var id = \"in_\" + i;");
 59  
 	    pw.println("    var element = document.getElementById(id);");
 60  
 	    pw.println("    var remain_delta = (remain[i] * 60) + 30 - delta;");
 61  
 	    pw.println("    if (remain_delta <= 0) {");
 62  
 	    pw.println("      element.innerHTML = \"----\"");
 63  
 	    pw.println("    } else {");
 64  
 	    pw.println("      element.innerHTML = (Math.floor(remain_delta / 60)) + \"" + trans(min) + "\"");
 65  
 	    pw.println("    }");
 66  
 	    pw.println("  }");
 67  
 	    pw.println("}");
 68  
 	    pw.println("</SCRIPT>");
 69  
 
 70  
 	}
 71  
 	
 72  
 	void writeHeader(PrintWriter pw, String title) {
 73  Block: 1/1 
 		pw.println("<HTML>");
 74  
 		pw.println("<HEAD>");
 75  
 		pw.println("<TITLE>" + title + "</TITLE>");
 76  
 		writeStyle(pw);
 77  
 		pw.println("</HEAD>");
 78  
 	}
 79  
 	
 80  
 	void writePage(PrintWriter pw, StopInfo stopInfo)
 81  
 	{
 82  Block: 1/1 
 		StringBuilder remainArray = new StringBuilder("[ ");
 83  
 		int           remainCount = 0;
 84  
 		
 85  
 		String title = stopInfo.getDescr() + " (" + stopInfo.getStopNo() + ")";
 86  
 		String min = trans(FrankBundle.MINUTES);
 87  
 		
 88  
 		writeHeader(pw, trans(FrankBundle.FRANK) + ": " + title);
 89  
 		
 90  
 		pw.println("<BODY>");
 91  
 		pw.println("  <TABLE ID=\"trips\">");
 92  
 		pw.println("    <TR><TH COLSPAN=\ř\">" + title + "</TH></TR>");
 93  
 		pw.println("    <TR><TH>" +
 94  
 		        trans(FrankBundle.ROUTE) + 
 95  
 				"</TH><TH>" +
 96  
 				trans(FrankBundle.DESTINATION) +
 97  
 				"</TH><TH>" +
 98  
 				trans(FrankBundle.ETA) +
 99  
 				"</TH><TH>" +
 100  
 				trans(FrankBundle.REMAIN) +  
 101  
 				"</TH><TH>" +
 102  
 				trans(FrankBundle.GPS_READ) +
 103  
 				"</TH>");
 104  
 		
 105  Block: 1/1 Branch: 1/1 
 		for (int routeIdx = 0; routeIdx < stopInfo.getNumRoutes(); ++routeIdx) {
 106  Block: 1/1 Branch: 1/1 
 			Route route = stopInfo.getRoute(routeIdx);
 107  
 			for (int tripIdx = 0; tripIdx < route.getNumTrips(); ++tripIdx) {
 108  Block: 1/1 Branch: 1/1 
 				Trip trip = route.getTrip(tripIdx);
 109  
 				boolean isGhost = ((-1) == trip.getAdjAge());
 110  Block: 1/1 
 				if (isGhost) {
 111  
 					// GPS is off.  This bus may not exist.
 112  Block: 0/1 Branch: 0/1 
 					pw.println("    <TR CLASS=\"ghost\">");
 113  
 				} else {
 114  Block: 1/1 Branch: 1/1 
 					pw.println("    <TR>");
 115  
 				}
 116  Block: 1/1 
 				pw.println("      <TD>" + route.getRouteNo() + "</TD>");
 117  
 				pw.println("      <TD>" + trip.getDest() + "</TD>");
 118  
 				pw.println("      <TD>" + m_hourMinFmt.format(trip.getETA()) + "</TD>");
 119  
 				
 120  
 				pw.println("      <TD><SPAN ID=\"in_" + remainCount + "\">"+ trip.getAdjTime()+min+"</SPAN></TD>");
 121  
 				if (remainCount > 0) {
 122  Block: 1/1 Branch: 1/1 
 					remainArray.append(", ");
 123  
 				}
 124  Block: 1/1 Branch: 1/1 
 				remainArray.append(trip.getAdjTime());
 125  
 				remainCount++;
 126  
 				
 127  
 				if (trip.getAdjAge() < 0) {
 128  Block: 0/1 Branch: 0/1 
 					pw.println("      <TD>" + trans(FrankBundle.GPS_OFF) + "</TD>");
 129  
 				}
 130  
 				else {
 131  Block: 1/1 Branch: 1/1 
 					pw.println("      <TD><A HREF=\"" + mapUrl(trip.getLatitude(), trip.getLongitude()) + 
 132  
 							   "\">" + m_hourMinSecFmt.format(trip.getGPSTime()) + "</A></TD>");
 133  
 				}
 134  Block: 1/1 
 				pw.println("    </TR>");
 135  
 			}
 136  
 		}
 137  
 		
 138  Block: 1/1 Branch: 1/1 
 		pw.println("  </TABLE>");
 139  
 		
 140  
 		String dataCollectedFormat = trans(FrankBundle.DATA_COLLECTED);
 141  
 		String dataCollected = MessageFormat.format(dataCollectedFormat, m_hourMinSecFmt.format(new Date()));
 142  
 		pw.println("  <P>" + dataCollected + "</P>");
 143  
 		
 144  
 		remainArray.append(" ]");
 145  
 		writeScript(pw, remainArray.toString(), remainCount);
 146  
 		pw.println("</BODY></HTML>");
 147  
 	}
 148  
 }

Report generated 11/12/14 11:31 PM