com.healthcit.cacure.web.controller.FormLibraryFormEditController.java Source code

Java tutorial

Introduction

Here is the source code for com.healthcit.cacure.web.controller.FormLibraryFormEditController.java

Source

/*L
 * Copyright HealthCare IT, Inc.
 *
 * Distributed under the OSI-approved BSD 3-Clause License.
 * See http://ncip.github.com/edct-formbuilder/LICENSE.txt for details.
 */

package com.healthcit.cacure.web.controller;

import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.apache.log4j.Logger;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.View;
import org.springframework.web.servlet.view.RedirectView;

import com.healthcit.cacure.model.BaseModule;
import com.healthcit.cacure.model.FormLibraryForm;
import com.healthcit.cacure.model.FormLibraryModule;
import com.healthcit.cacure.model.breadcrumb.BreadCrumb;
import com.healthcit.cacure.model.breadcrumb.BreadCrumb.Action;
import com.healthcit.cacure.model.breadcrumb.FormBreadCrumb;
import com.healthcit.cacure.security.UnauthorizedException;
import com.healthcit.cacure.utils.Constants;

@Controller
@RequestMapping(value = Constants.FORM_LIBRARY_FORM_EDIT_URI)
public class FormLibraryFormEditController extends BaseFormEditController
        implements BreadCrumbsSupporter<FormBreadCrumb> {

    private static final Logger log = Logger.getLogger(FormLibraryFormEditController.class);

    @ModelAttribute
    public void populateModelWithAttributes(@RequestParam(value = "id", required = false) Long id,
            @RequestParam(value = "moduleId", required = false) Long moduleId, ModelMap modelMap) {
        modelMap.addAttribute(MODULE_ID_NAME, moduleId);
        FormLibraryForm form = null;
        if (id == null) {
            FormLibraryModule module = (FormLibraryModule) moduleMgr.getModule(moduleId);
            form = new FormLibraryForm();
            form.setModule(module);
        } else {
            form = (FormLibraryForm) formManager.getForm(id);
        }
        modelMap.addAttribute(COMMAND_NAME, form);
    }

    /**
     * Display edit/update form
     * @param qForm
     * @param moduleId
     * @return
     */
    @RequestMapping(method = RequestMethod.GET)
    public String showForm(@ModelAttribute(COMMAND_NAME) FormLibraryForm qForm,
            @ModelAttribute(MODULE_ID_NAME) Long moduleId) {
        return ("formEdit");
    }

    /**
     * Process data edited by users
     * @param qForm
     * @param moduleId
     * @return
     */
    @RequestMapping(method = RequestMethod.POST)
    public View onSubmit(@ModelAttribute(COMMAND_NAME) FormLibraryForm qForm,
            @ModelAttribute(MODULE_ID_NAME) Long moduleId) {

        if (!isEditable(qForm)) {
            // The UI should never get the user here
            throw new UnauthorizedException("The form is not editable in the current context");
        }

        if (qForm.isNew()) {
            // must insure linkage to module
            // get module object
            FormLibraryModule parent = (FormLibraryModule) moduleMgr.getModule(moduleId);
            qForm.setModule(parent);
            formManager.addNewForm(qForm);
        } else
            formManager.updateForm(qForm);

        // after question is saved - return to question listing
        return new RedirectView(Constants.QUESTIONNAIREFORM_LISTING_URI, true);
    }

    @Override
    public FormBreadCrumb setBreadCrumb(ModelMap modelMap) {
        FormLibraryForm form = (FormLibraryForm) modelMap.get(COMMAND_NAME);
        if (form != null) {
            FormBreadCrumb breadCrumb = new FormBreadCrumb(form.getModule(),
                    form.isNew() ? Action.ADD : Action.EDIT);
            modelMap.addAttribute(Constants.BREAD_CRUMB, breadCrumb);
            return breadCrumb;
        }
        return null;
    }

    @Override
    public List<BreadCrumb.Link> getAllLinks(HttpServletRequest req) {
        return new ArrayList<BreadCrumb.Link>();
    }
}