001 package org.hackystat.dailyprojectdata.resource.devtime; 002 003 import java.math.BigInteger; 004 import java.util.HashMap; 005 import java.util.HashSet; 006 import java.util.Map; 007 import java.util.Set; 008 009 import javax.xml.datatype.XMLGregorianCalendar; 010 011 /** 012 * An abstraction that collects the DevTime associated with a set of Project Members. 013 * Implemented using a map of Members to DevTimeCounter instances. 014 * @author Philip Johnson 015 * 016 */ 017 public class MemberDevTimeCounter { 018 019 /** The map of member emails to their DevTimeCounter. */ 020 private Map<String, DevTimeCounter> member2devtime = new HashMap<String, DevTimeCounter>(); 021 022 /** Create a new MemberDevTimeCounter. */ 023 public MemberDevTimeCounter() { 024 // does nothing. 025 } 026 027 /** 028 * Updates this abstraction with the DevEvent associated with the Project member. 029 * @param member The member. 030 * @param timestamp The timestamp associated with the DevEvent associated with the member. 031 */ 032 public void addMemberDevEvent(String member, XMLGregorianCalendar timestamp) { 033 if (!member2devtime.containsKey(member)) { 034 member2devtime.put(member, new DevTimeCounter()); 035 } 036 member2devtime.get(member).addDevEvent(timestamp); 037 } 038 039 /** 040 * Return the aggregate DevTime for all members. 041 * @return The total DevTime. 042 */ 043 public BigInteger getTotalDevTime() { 044 BigInteger totalDevTime = BigInteger.valueOf(0); 045 for (DevTimeCounter counter : member2devtime.values()) { 046 totalDevTime = totalDevTime.add(counter.getDevTime()); 047 } 048 return totalDevTime; 049 } 050 051 /** 052 * Returns the DevTime associated with Member, or zero if member does not exist. 053 * @param member The member 054 * @return The member's devtime. 055 */ 056 public BigInteger getMemberDevTime(String member) { 057 if (member2devtime.containsKey(member)) { 058 return member2devtime.get(member).getDevTime(); 059 } 060 else { 061 return BigInteger.valueOf(0); 062 } 063 } 064 065 /** 066 * Returns a newly created Set containing all of the members in this MemberDevTimeCounter. 067 * @return The set of all members in this MemberDevTimeCounter. 068 */ 069 public Set<String> getMembers() { 070 Set<String> members = new HashSet<String>(); 071 members.addAll(member2devtime.keySet()); 072 return members; 073 } 074 }