String namesQuery = "select person.name, person.id from person in " +
"class org.nxplanner.domain.Person where person.hidden = false";
HashMap names = new HashMap();
Session session = ThreadSession.get();
try {
try {
names.clear();
List nameResults = session.find(namesQuery);
Iterator iter = nameResults.iterator();
while (iter.hasNext()) {
Object[] result = (Object[])iter.next();
names.put(result[1], result[0]);
}
developerMetrics.clear();
List acceptedTasks = session.find(acceptedTaskQuery, new Integer(iterationId), Hibernate.INTEGER);
Iterator acceptedTaskIter = acceptedTasks.iterator();
while (acceptedTaskIter.hasNext()) {
Object[] result = (Object[])acceptedTaskIter.next();
double acceptedHours = toDouble(result[2]);
if (acceptedHours > 0.0) {
getDeveloperMetrics((String)names.get(result[1]),
toInt(result[1]), iterationId).setAcceptedHours(acceptedHours);
}
}
totalHours = 0.0;
maxDeveloperHours = 0.0;
List hoursResults = session.find(hoursQuery, new Integer(iterationId), Hibernate.INTEGER);
Iterator hoursIterator = hoursResults.iterator();
while (hoursIterator.hasNext()) {
Object[] result = (Object[])hoursIterator.next();
int person1Id = toInt(result[0]);
int person2Id = toInt(result[1]);
Date startTime = (Date)result[2];
Date endTime = (Date)result[3];
int acceptorId = toInt(result[4]);
double duration = toDouble(result[5]);
if ((endTime != null && startTime != null) || duration != 0) {
double hours = duration == 0 ?
(endTime.getTime() - startTime.getTime()) / 3600000.0 :
duration;
boolean isPaired = person1Id != 0 && person2Id != 0;
if (person1Id != 0) {
updateWorkedHours(iterationId, (String)names.get(result[0]),
person1Id, hours, isPaired, acceptorId);
totalHours += hours;
}
if (person2Id != 0) {
updateWorkedHours(iterationId, (String)names.get(result[1]),
person2Id, hours, isPaired, acceptorId);
totalHours += hours;
}
}
}
} catch (Exception ex) {
if (session.isConnected()) {
session.connection().rollback();
}
log.error("error", ex);
}
} catch (Exception ex) {
log.error("error", ex);