001 package org.hackystat.tickertape.ticker.data; 002 003 import java.util.HashMap; 004 import java.util.Iterator; 005 import java.util.Map; 006 import java.util.logging.Logger; 007 008 import org.hackystat.sensorbase.client.SensorBaseClient; 009 010 /** 011 * Provides an abstract data type for managing a set of ProjectSensorDataLogs. 012 * @author Philip Johnson 013 * 014 */ 015 public class MultiProjectSensorDataLog implements Iterable<ProjectSensorDataLog> { 016 017 /** A map of projects to the associated SensorDataLog. The key is {project}:{owner} */ 018 private Map<String, ProjectSensorDataLog> project2log = 019 new HashMap<String, ProjectSensorDataLog>(); 020 021 /** 022 * Constructs a new MultiProjectSensorDataLog. 023 */ 024 public MultiProjectSensorDataLog() { 025 // nothing needed yet. 026 } 027 028 /** 029 * Return the ProjectSensorDataLog for this project, creating it if it does not yet exist. 030 * @param client The SensorBaseClient. 031 * @param maxLife The maxLife for sensor data entries in this log. 032 * @param projectOwner The owner. 033 * @param projectName The name. 034 * @param logger The logger to be used if things go wrong. 035 * @return The ProjectSensorDataLog. 036 */ 037 public ProjectSensorDataLog get(SensorBaseClient client, double maxLife, 038 String projectOwner, String projectName, Logger logger) { 039 String key = projectName + ":" + projectOwner; 040 // If we can't find it, create it. 041 if (!this.project2log.containsKey(key)) { 042 ProjectSensorDataLog log = new ProjectSensorDataLog(client, maxLife, projectOwner, 043 projectName, logger); 044 this.project2log.put(key, log); 045 } 046 return this.project2log.get(key); 047 } 048 049 /** 050 * Returns true if any of the ProjectSensorDataLogs have data. 051 * @return True if there is data. 052 */ 053 public boolean hasSensorData() { 054 for (ProjectSensorDataLog log : this.project2log.values()) { 055 if (log.hasSensorData()) { 056 return true; 057 } 058 } 059 return false; 060 } 061 062 /** 063 * Returns an iterator over the ProjectSensorDataLogs in this collection. 064 * @return An iterator. 065 */ 066 public Iterator<ProjectSensorDataLog> iterator() { 067 return this.project2log.values().iterator(); 068 } 069 070 071 072 }