001 package org.hackystat.projectbrowser.page.sensordata; 002 003 import java.io.Serializable; 004 import java.math.BigInteger; 005 import java.text.SimpleDateFormat; 006 import java.util.ArrayList; 007 import java.util.List; 008 import java.util.Locale; 009 010 import javax.xml.datatype.XMLGregorianCalendar; 011 012 import org.hackystat.sensorbase.resource.projects.jaxb.ProjectSummary; 013 import org.hackystat.sensorbase.resource.projects.jaxb.SensorDataSummaries; 014 import org.hackystat.sensorbase.resource.projects.jaxb.SensorDataSummary; 015 016 /** 017 * A model for an individual row in the sensor data table. 018 * @author Philip Johnson 019 */ 020 public class SensorDataTableRowModel implements Serializable { 021 022 /** Required for serialization. */ 023 private static final long serialVersionUID = 1L; 024 private ProjectSummary projectSummary = null; 025 private SimpleDateFormat dayFormat = new SimpleDateFormat("EEE, MMM d yyyy", Locale.US); 026 027 /** 028 * Creates a row given a project summary for a given day. 029 * @param summary The ProjectSummary instance. 030 */ 031 public SensorDataTableRowModel (ProjectSummary summary) { 032 this.projectSummary = summary; 033 } 034 035 /** 036 * Returns a string indicating the day associated with this row. 037 * @return The day as a string. 038 */ 039 public String getDayString () { 040 return dayFormat.format(this.projectSummary.getStartTime().toGregorianCalendar().getTime()); 041 } 042 043 /** 044 * Returns the start time for this day. 045 * @return The start time. 046 */ 047 public XMLGregorianCalendar getStartTime() { 048 return this.projectSummary.getStartTime(); 049 } 050 051 /** 052 * Returns the total number of sensor data instances sent on this day. 053 * @return The total number of sensor data instances. 054 */ 055 public int getTotal() { 056 SensorDataSummaries summary = this.projectSummary.getSensorDataSummaries(); 057 BigInteger numInstances; 058 if (summary == null) { 059 return 0; 060 } 061 else { 062 numInstances = summary.getNumInstances(); 063 if (numInstances == null) { 064 return 0; 065 } 066 } 067 return numInstances.intValue(); 068 } 069 070 071 /** 072 * Returns a list of SensorDataSummary instances associated with the passed sdt. 073 * @param sdt The sdt of interest. 074 * @return The SensorDataSummary instances associated with this SDT. 075 */ 076 public List<SensorDataSummary> getSensorDataSummaryList(String sdt) { 077 List<SensorDataSummary> summaryList = new ArrayList<SensorDataSummary>(); 078 if (this.projectSummary.isSetSensorDataSummaries()) { 079 for (SensorDataSummary summary : 080 this.projectSummary.getSensorDataSummaries().getSensorDataSummary()) { 081 String summarySdt = summary.getSensorDataType(); 082 if ((sdt.equals(summarySdt)) || 083 (isUnknownSdt(sdt) && isUnknownSdt(summarySdt))) { 084 summaryList.add(summary); 085 } 086 } 087 } 088 return summaryList; 089 } 090 091 /** 092 * True if there is no SDT associated with this sensor data instance. 093 * @param sdt The SDT field. 094 * @return True if the SDT field value indicates no SDT. 095 */ 096 private boolean isUnknownSdt(String sdt) { 097 return ((sdt == null) || 098 ("".equals(sdt)) || 099 ("Unknown".equals(sdt))); 100 } 101 }