/*
* Copyright 2009-2012 by KNURT Systeme (http://www.knurt.de)
*
* Licensed under the Creative Commons License Attribution-NonCommercial-ShareAlike 3.0 Unported;
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://creativecommons.org/licenses/by-nc-sa/3.0/
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package de.knurt.fam.template.controller;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import de.knurt.fam.core.aspects.logging.FamLog;
import de.knurt.fam.core.aspects.security.auth.SessionAuth;
import de.knurt.fam.core.model.persist.User;
import de.knurt.fam.core.util.mvc.RequestInterpreter;
import de.knurt.fam.template.controller.image.availability.AvailabilityLegendImageController;
import de.knurt.fam.template.controller.image.availability.OneMonthDayBookingsImageController;
import de.knurt.fam.template.controller.image.availability.OneMonthDayImageController;
import de.knurt.fam.template.controller.image.availability.OneWeekDayBookingsImageController;
import de.knurt.fam.template.controller.image.availability.OneWeekDayImageController;
import de.knurt.fam.template.controller.image.availability.TimeLineOfDayImageController;
import de.knurt.fam.template.controller.image.statistics.SimplePngImageController;
import de.knurt.fam.template.controller.image.statistics.StatisticDisplayOfWeekImageController;
import de.knurt.fam.template.controller.json.AdminInitPasswordController;
import de.knurt.fam.template.controller.json.BookingNoticeUpdateController;
import de.knurt.fam.template.controller.json.CouchPutController;
import de.knurt.fam.template.controller.json.DeleteUserFromUsersManagerController;
import de.knurt.fam.template.controller.json.DirectBookingRequest2Controller;
import de.knurt.fam.template.controller.json.DirectBookingRequestController;
import de.knurt.fam.template.controller.json.GetBookingsController;
import de.knurt.fam.template.controller.json.GetDetailsOfBookingController;
import de.knurt.fam.template.controller.json.GetEventsController;
import de.knurt.fam.template.controller.json.GetFacilityDetailsController;
import de.knurt.fam.template.controller.json.GetJobController;
import de.knurt.fam.template.controller.json.GetUserController;
import de.knurt.fam.template.controller.json.InsertUserController;
import de.knurt.fam.template.controller.json.JSONController;
import de.knurt.fam.template.controller.json.JobSurveyGetterController;
import de.knurt.fam.template.controller.json.JobSurveyPreviewController;
import de.knurt.fam.template.controller.json.JobSurveyPreviewSessionStoreController;
import de.knurt.fam.template.controller.json.JobSurveyPublishController;
import de.knurt.fam.template.controller.json.PrecheckUserInsertionController;
import de.knurt.fam.template.controller.json.PublicDocController;
import de.knurt.fam.template.controller.json.RegisterGetUsernameController;
import de.knurt.fam.template.controller.json.UpdateUserFromContactDetailsController;
import de.knurt.fam.template.controller.json.UpdateUserFromUsersManagerController;
import de.knurt.fam.template.model.TemplateResource;
import de.knurt.fam.template.util.TemplateConfig;
/**
* this implements the default behaviour of the Facility Access Manager in
* working with data input and output. as a default, this uses the
* {@link DefaultAnswerFactory} for outputs. howevery, you can inject your own.
*
* every post request has a own method.
*
* this is the class to override on writing plugins or module specific
* behaviour.
*
* @author Daniel Oltmanns
* @since 1.3.0 (10/06/2010)
* @version 1.3.0 (13/11/2010)
*/
public class DefaultResourceController implements ResourceController {
/** {@inheritDoc} */
@Override
public ModelAndView handleGetRequests(TemplateResource templateResource, HttpServletResponse response, HttpServletRequest request) {
ModelAndView result = null;
PrintWriter pw = null;
try {
pw = response.getWriter();
} catch (Exception e) {
try {
response.sendError(404);
} catch (IOException e1) {
FamLog.exception(e1, 201011141515l);
}
}
if (templateResource.getSuffix().equals("html")) {
result = TemplateConfig.me().getAnswerFactory().answerHTML(templateResource, response, request, pw);
} else if (templateResource.getSuffix().equals("css")) {
result = TemplateConfig.me().getAnswerFactory().answerCSS(templateResource, response, request, pw);
} else if (templateResource.getSuffix().equals("js")) {
result = TemplateConfig.me().getAnswerFactory().answerJS(templateResource, response, request, pw);
} else if (templateResource.getSuffix().equals("json")) {
result = TemplateConfig.me().getAnswerFactory().answerJSON(templateResource, response, request, pw);
} else {
result = TemplateConfig.me().getAnswerFactory().answerUnknown(templateResource, response, request, pw);
}
return result;
}
/** {@inheritDoc} */
@Override
public ModelAndView handleJSONRequest(String resourceName, HttpServletResponse response, HttpServletRequest request) {
boolean hasAuthUser = SessionAuth.authUser(request);
User user = SessionAuth.user(request);
if (resourceName.equals("couchput") && hasAuthUser) {
return new CouchPutController().handleRequest(request, response);
} else if (resourceName.equals("publicdoc") && hasAuthUser) {
return new PublicDocController().handleRequest(request, response);
} else {
JSONController controller = null;
if (resourceName.equals("getbookings") && hasAuthUser) {
controller = new GetBookingsController(user);
} else if (resourceName.equals("job") && hasAuthUser) {
controller = new GetJobController(user);
} else if (resourceName.equals("insertuser") && hasAuthUser) {
controller = new InsertUserController();
} else if (resourceName.equals("precheckuserinsertion") && hasAuthUser) {
controller = new PrecheckUserInsertionController();
} else if (resourceName.equals("directbookingrequest") && hasAuthUser) {
controller = new DirectBookingRequestController();
} else if (resourceName.equals("directbookingrequest2") && hasAuthUser) {
controller = new DirectBookingRequest2Controller();
} else if (resourceName.equals("bookingnoticeupdate") && hasAuthUser) {
controller = new BookingNoticeUpdateController();
} else if (resourceName.equals("registergetusername") && hasAuthUser) {
controller = new RegisterGetUsernameController();
} else if (resourceName.equals("savecontactdetail") && hasAuthUser) {
controller = new UpdateUserFromContactDetailsController();
} else if (resourceName.equals("updateuser") && hasAuthUser && user.isAdmin()) {
controller = new UpdateUserFromUsersManagerController();
} else if (resourceName.equals("deleteuser") && hasAuthUser && user.isAdmin()) {
controller = new DeleteUserFromUsersManagerController(user);
} else if (resourceName.equals("getuser") && hasAuthUser && user.hasAdminTasks()) {
controller = new GetUserController();
} else if (resourceName.equals("getdetailsofbooking") && hasAuthUser) {
controller = new GetDetailsOfBookingController(user);
} else if (resourceName.equals("admininitpass") && hasAuthUser && user.isAdmin()) {
controller = new AdminInitPasswordController();
} else if (resourceName.equals("jobsurveypublish") && hasAuthUser && user.hasAdminTasks()) {
controller = new JobSurveyPublishController(user);
} else if (resourceName.equals("jobsurveypreview") && hasAuthUser && user.hasAdminTasks()) {
controller = new JobSurveyPreviewController(user);
} else if (resourceName.equals("jobsurveypreviewsessionstore") && hasAuthUser && user.hasAdminTasks()) {
controller = new JobSurveyPreviewSessionStoreController(user);
} else if (resourceName.equals("getevents") && hasAuthUser) {
controller = new GetEventsController(user);
} else if (resourceName.equals("getfacilitydetails") && hasAuthUser) {
controller = new GetFacilityDetailsController(user);
} else if (resourceName.equals("jobsurveygetter") && hasAuthUser) {
controller = new JobSurveyGetterController();
}
return controller != null ? controller.handleRequest(request, response) : null;
}
}
/** {@inheritDoc} */
@Override
public ModelAndView handleImageRequest(String resourceName, HttpServletResponse response, HttpServletRequest request) {
SimplePngImageController controller = null;
if (resourceName.equals("onemonthdaybookingsimage")) {
controller = new OneMonthDayBookingsImageController();
} else if (resourceName.equals("availabilitylegendimage")) {
controller = new AvailabilityLegendImageController();
} else if (resourceName.equals("oneweekdaybookingsimage")) {
controller = new OneWeekDayBookingsImageController();
} else if (resourceName.equals("statisticdisplayofweekimage") && (RequestInterpreter.containsDirectAccess("statistics", request) || SessionAuth.authUser(request))) {
controller = new StatisticDisplayOfWeekImageController();
} else if (resourceName.equals("onemonthdayimage")) {
controller = new OneMonthDayImageController();
} else if (resourceName.equals("oneweekdayimage")) {
controller = new OneWeekDayImageController();
} else if (resourceName.equals("timelineofdayimage")) {
controller = new TimeLineOfDayImageController();
}
try {
return controller != null ? controller.handleRequest(request, response) : null;
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
}