package de.knurt.fam.template.controller;
import java.util.Calendar;
import java.util.Date;
import javax.servlet.http.HttpServletRequest;
import de.knurt.fam.core.model.config.Facility;
import de.knurt.fam.core.model.persist.FacilityAvailability;
import de.knurt.fam.core.model.persist.User;
import de.knurt.fam.core.persistence.dao.FamDaoProxy;
import de.knurt.fam.core.util.mvc.RequestInterpreter;
import de.knurt.fam.template.model.TemplateResource;
import de.knurt.heinzelmann.util.time.TimeFrame;
class FacilityEmergencyController {
protected boolean submit(TemplateResource templateResource) {
assert templateResource.hasAuthUser();
try {
Facility d = RequestInterpreter.getFacility(templateResource.getRequest());
if (RequestInterpreter.isYes(templateResource.getRequest())) { // facility is available again
FamDaoProxy.facilityDao().stopCurrentSuddenFailure(d, templateResource.getAuthUser());
} else if (RequestInterpreter.isNo(templateResource.getRequest())) { // facility failed
this.insertOrUpdateSuddenFailure(d, templateResource.getAuthUser(), templateResource.getRequest());
}
return true;
} catch (Exception e) {
return false;
}
}
private void insertOrUpdateSuddenFailure(Facility d, User userSetThis, HttpServletRequest request) {
Integer timeUnits = RequestInterpreter.getTimeUnits(request);
if (timeUnits != null) {
FacilityAvailability da = FamDaoProxy.facilityDao().getCurrentSuddenFailure(d);
if (da == null) { // insert new
Calendar start = Calendar.getInstance();
Calendar end = Calendar.getInstance();
end.add(Calendar.MINUTE, timeUnits);
da = new FacilityAvailability(d.getKey(), start, end);
da.setNotAvailableBecauseOfSuddenFailure();
da.setUserSetThis(userSetThis);
da.setTimeStampSet(new Date());
da.insert();
} else { // update existing
Calendar newEnd = Calendar.getInstance();
newEnd.add(Calendar.MINUTE, timeUnits);
TimeFrame basePeriodOfTime = da.getBasePeriodOfTime();
basePeriodOfTime.setEnd(newEnd);
da.setBasePeriodOfTime(basePeriodOfTime);
da.setUserSetThis(userSetThis);
da.setTimeStampSet(new Date());
da.update();
}
}
}
}