use of net.sourceforge.processdash.ev.EVDependencyCalculator in project processdash by dtuma.
the class EVWeekReport method writeContents.
/** Generate CGI output. */
protected void writeContents() throws IOException {
EVReportSettings settings = new EVReportSettings(getDataRepository(), parameters, getPrefix());
// Get the name of the earned value model to report on.
String taskListName = settings.getTaskListName();
if (taskListName == null)
throw new IOException("No EV task list specified.");
// Load and recalculate the named earned value model.
EVTaskList evModel = EVTaskList.openExisting(taskListName, getDataRepository(), getPSPProperties(), getObjectCache(), // change notification not required
false);
if (evModel == null)
throw new TinyCGIException(404, "Not Found", "No such task/schedule");
UserFilter f = settings.getUserGroupFilter();
if (f != null && !UserGroup.isEveryone(f) && evModel instanceof EVTaskListRollup)
((EVTaskListRollup) evModel).applyTaskListFilter(new EVTaskListGroupFilter(f));
EVTaskFilter taskFilter = settings.getEffectiveFilter(evModel);
EVTaskListFilter privacyFilter = null;
UserFilter pf = GroupPermission.getGrantedMembers(EVPermissions.PERSONAL_WEEK);
if (!UserGroup.isEveryone(pf))
privacyFilter = new EVTaskListGroupFilter(pf);
EVDependencyCalculator depCalc = new EVDependencyCalculator(getDataRepository(), getPSPProperties(), getObjectCache());
evModel.setDependencyCalculator(depCalc);
evModel.setTaskLabeler(new DefaultTaskLabeler(getDashboardContext()));
evModel.recalc();
EVSchedule schedule = evModel.getSchedule();
String effDateParam = getParameter(EFF_DATE_PARAM);
Date effDate = null;
if (effDateParam != null)
try {
effDate = new Date(Long.parseLong(effDateParam));
} catch (Exception e) {
}
boolean monthly = isMonthly(settings);
if (effDate == null || parameters.containsKey(ADJ_EFF_DATE_PARAM)) {
// if the user hasn't specified an effective date, then use the
// current time to round the effective date to the nearest week.
// With a Sunday - Saturday schedule, the following line will show
// the report for the previous week through Tuesday, and will
// start showing the next week's report on Wednesday.
Date now = effDate;
if (now == null)
now = EVCalculator.getFixedEffectiveDate();
if (now == null)
now = new Date();
int dayOffset = (monthly ? 0 : (effDate == null ? 3 : 7));
Date effDateTime = new Date(now.getTime() + EVSchedule.WEEK_MILLIS * dayOffset / 7);
// now, identify the schedule boundary that precedes the effective
// date and time; use that as the effective date.
Date scheduleEnd = schedule.getLast().getEndDate();
Date firstPeriodEnd = schedule.get(1).getEndDate();
if (effDateTime.compareTo(scheduleEnd) >= 0) {
if (effDate == null)
effDate = maybeRoundToMonthEnd(monthly, scheduleEnd);
else if (monthly)
effDate = roundToMonthEnd(effDate);
else
effDate = extrapolateWeekAfterScheduleEnd(effDateTime, scheduleEnd);
} else if (monthly) {
Date scheduleStart = schedule.get(1).getBeginDate();
if (effDateTime.before(scheduleStart))
effDateTime = scheduleStart;
effDate = roundToMonthEnd(effDateTime);
} else if (effDateTime.compareTo(firstPeriodEnd) <= 0)
effDate = firstPeriodEnd;
else
effDate = schedule.getPeriodStart(effDateTime);
// make certain we have an effective date to proceed with.
if (effDate == null)
effDate = maybeRoundToMonthEnd(monthly, new Date());
}
int purpose = PLAIN_REPORT;
if (evModel instanceof EVTaskListRollup && parameters.containsKey(SPLIT_PARAM))
purpose = SPLIT_REPORT;
writeReport(taskListName, evModel, effDate, settings, taskFilter, privacyFilter, purpose);
}
use of net.sourceforge.processdash.ev.EVDependencyCalculator in project processdash by dtuma.
the class ArchiveMetricsFileExporter method getEVSchedules.
private Map getEVSchedules(Collection taskListNames) {
Map schedules = new TreeMap();
for (Iterator iter = taskListNames.iterator(); iter.hasNext(); ) {
boolean merged = false;
String taskScheduleName = (String) iter.next();
if (taskScheduleName.startsWith(MERGED_PREFIX)) {
merged = true;
taskScheduleName = taskScheduleName.substring(MERGED_PREFIX.length());
}
EVTaskList tl = EVTaskList.openExisting(taskScheduleName, ctx.getData(), ctx.getHierarchy(), ctx.getCache(), false);
if (tl == null)
continue;
tl.setDependencyCalculator(new EVDependencyCalculator(ctx.getData(), ctx.getHierarchy(), ctx.getCache()));
tl.recalc();
if (merged)
tl = new EVTaskListMerged(tl, false, false, null);
schedules.put(taskScheduleName, tl);
}
return schedules;
}
use of net.sourceforge.processdash.ev.EVDependencyCalculator in project processdash by dtuma.
the class EVReport method getEVModel.
private void getEVModel() throws TinyCGIException {
taskListName = settings.getTaskListName();
if (taskListName == null)
throw new TinyCGIException(400, "schedule name missing");
else if (FAKE_MODEL_NAME.equals(taskListName)) {
evModel = null;
return;
}
long now = System.currentTimeMillis();
synchronized (EVReport.class) {
if (drawingChart && (now - lastRecalcTime < MAX_DELAY) && taskListName.equals(lastTaskListName)) {
evModel = lastEVModel.get();
if (evModel != null)
return;
}
}
evModel = EVTaskList.openExisting(taskListName, getDataRepository(), getPSPProperties(), getObjectCache(), // change notification not required
false);
if (evModel == null)
throw new TinyCGIException(404, "Not Found", "No such task/schedule");
UserFilter f = settings.getUserGroupFilter();
if (f != null && !UserGroup.isEveryone(f) && evModel instanceof EVTaskListRollup) {
EVTaskListRollup rollup = (EVTaskListRollup) evModel;
rollup.applyTaskListFilter(new EVTaskListGroupFilter(f));
String permID = (parameters.containsKey(CHARTS_PARAM) ? EVPermissions.PERSONAL_CHARTS : EVPermissions.PERSONAL_REPORT);
settings.checkPersonalDataPermission(rollup, permID);
}
EVDependencyCalculator depCalc = new EVDependencyCalculator(getDataRepository(), getPSPProperties(), getObjectCache());
evModel.setDependencyCalculator(depCalc);
evModel.setTaskLabeler(new DefaultTaskLabeler(getDashboardContext()));
if (settings.getBool(CUSTOMIZE_HIDE_BASELINE))
evModel.disableBaselineData();
evModel.recalc();
synchronized (EVReport.class) {
lastTaskListName = taskListName;
lastRecalcTime = now;
lastEVModel = new WeakReference<EVTaskList>(evModel);
}
}
Aggregations