org.unitime.timetable.action.SectioningDemoAction.java Source code

Java tutorial

Introduction

Here is the source code for org.unitime.timetable.action.SectioningDemoAction.java

Source

/*
 * UniTime 3.2 (University Timetabling Application)
 * Copyright (C) 2008 - 2010, UniTime LLC, and individual contributors
 * as indicated by the @authors tag.
 * 
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 3 of the License, or
 * (at your option) any later version.
 * 
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License along
 * with this program.  If not, see <http://www.gnu.org/licenses/>.
 * 
*/
package org.unitime.timetable.action;

import java.io.File;
import java.io.FileOutputStream;
import java.util.Date;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.action.ActionMessages;
import org.apache.struts.util.MessageResources;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
import org.springframework.stereotype.Service;
import org.unitime.commons.User;
import org.unitime.commons.web.Web;
import org.unitime.timetable.ApplicationProperties;
import org.unitime.timetable.form.SectioningDemoForm;
import org.unitime.timetable.model.Session;
import org.unitime.timetable.model.Student;
import org.unitime.timetable.test.StudentSectioningTest;

/** 
 * @author Tomas Muller
 */
@Service("/sectioningDemo")
public class SectioningDemoAction extends Action {

    /** 
     * Method execute
     * @param mapping
     * @param form
     * @param request
     * @param response
     * @return ActionForward
     */
    public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request,
            HttpServletResponse response) throws Exception {

        HttpSession httpSession = request.getSession();
        if (!Web.isLoggedIn(httpSession) || !Web.isAdmin(httpSession)) {
            throw new Exception("Access Denied.");
        }

        MessageResources rsc = getResources(request);
        User user = Web.getUser(request.getSession());
        Session session = Session.getCurrentAcadSession(user);
        SectioningDemoForm frm = (SectioningDemoForm) form;
        ActionMessages errors = null;

        String op = frm.getOp();
        if (op == null || op.trim().length() == 0)
            op = rsc.getMessage("op.view");
        if (request.getParameter("op2") != null && request.getParameter("op2").length() > 0)
            op = request.getParameter("op2");

        frm.setOp(op);

        // First access
        if (op.equals(rsc.getMessage("op.view"))) {
            doLoad(request, frm);
            request.getSession().removeAttribute("LastSolution");
        }

        Element studentEl = (Element) request.getSession().getAttribute("LastSolution");
        if (studentEl != null) {
            frm.load(session, studentEl, false, request);
        }

        if ("Add Request".equals(op)) {
            frm.setNrRequests(frm.getNrRequests() + 1);
        }

        if ("Add Alternative Request".equals(op)) {
            frm.setNrAltRequests(frm.getNrAltRequests() + 1);
        }

        if ("Delete".equals(op)) {
            frm.removeRequest(Integer.parseInt(request.getParameter("reqIdx")));
        }

        if ("Move Up".equals(op)) {
            frm.moveRequest(Integer.parseInt(request.getParameter("reqIdx")), -1);
        }

        if ("Move Down".equals(op)) {
            frm.moveRequest(Integer.parseInt(request.getParameter("reqIdx")), +1);
        }

        if ("Clear".equals(op)) {
            frm.getCourseAssignments().clear();
            frm.getMessages().clear();
        }

        if ("Unload".equals(op)) {
            frm.reset(mapping, request);
        }

        if ("Load".equals(op)) {
            errors = frm.validate(mapping, request);
            if (errors == null || errors.size() == 0) {
                if (frm.getStudentId() == null || frm.getStudentId().length() == 0) {
                    errors.add("studentId", new ActionMessage("errors.generic", "No student id provided."));
                    saveErrors(request, errors);
                } else {
                    Student student = Student.findByExternalId(session.getUniqueId(), frm.getStudentId());
                    if (student == null) {
                        frm.setStudentLoaded(false);
                        errors.add("studentId", new ActionMessage("errors.generic",
                                "Student with id " + frm.getStudentId() + " does not exists."));
                        saveErrors(request, errors);
                        frm.reset(mapping, request);
                    } else {
                        Document requestXml = DocumentHelper.createDocument();
                        Element requestEl = requestXml.addElement("request");
                        requestEl.addAttribute("campus", session.getAcademicInitiative());
                        requestEl.addAttribute("year", session.getAcademicYear());
                        requestEl.addAttribute("term", session.getAcademicTerm());
                        requestEl.addAttribute("version", "1.1");
                        requestEl.addAttribute("timestamp", new Date().toString());

                        studentEl = requestEl.addElement("student");
                        studentEl.addAttribute("key", frm.getStudentId());

                        studentEl.addElement("retrieveCourseRequests");

                        Document responseXml = StudentSectioningTest.testSectioning(requestXml);
                        studentEl = responseXml.getRootElement().element("student");

                        frm.load(session, studentEl, true, null);

                        if (studentEl != null) {
                            request.getSession().setAttribute("LastSolution", studentEl);
                        } else {
                            request.getSession().removeAttribute("LastSolution");
                        }

                        File requestFile = ApplicationProperties.getTempFile("request", "xml");
                        XMLWriter out = new XMLWriter(new FileOutputStream(requestFile),
                                OutputFormat.createPrettyPrint());
                        out.write(requestXml);
                        out.flush();
                        out.close();
                        frm.setRequestFile("temp/" + requestFile.getName());

                        File responseFile = ApplicationProperties.getTempFile("response", "xml");
                        out = new XMLWriter(new FileOutputStream(responseFile), OutputFormat.createPrettyPrint());
                        out.write(responseXml);
                        out.flush();
                        out.close();
                        frm.setResponseFile("temp/" + responseFile.getName());

                        frm.setStudentLoaded(true);
                    }
                }
            } else {
                saveErrors(request, errors);
            }
        }

        // Submit request
        if (op.equals(rsc.getMessage("button.submitStudentRequest")) || op.equals("Save")) {
            errors = frm.validate(mapping, request);
            if (errors == null || errors.size() == 0) {

                Document requestXml = DocumentHelper.createDocument();
                Element requestEl = requestXml.addElement("request");
                requestEl.addAttribute("campus", session.getAcademicInitiative());
                requestEl.addAttribute("year", session.getAcademicYear());
                requestEl.addAttribute("term", session.getAcademicTerm());
                requestEl.addAttribute("version", "1.1");
                requestEl.addAttribute("timestamp", new Date().toString());

                studentEl = requestEl.addElement("student");
                studentEl.addAttribute("key", (frm.getStudentId() == null || frm.getStudentId().length() == 0 ? "-1"
                        : frm.getStudentId()));

                frm.save(session, studentEl, op.equals("Save"));

                Document responseXml = StudentSectioningTest.testSectioning(requestXml);
                studentEl = responseXml.getRootElement().element("student");

                frm.load(session, studentEl, false, null);

                if (studentEl != null) {
                    request.getSession().setAttribute("LastSolution", studentEl);
                } else {
                    request.getSession().removeAttribute("LastSolution");
                }

                File requestFile = ApplicationProperties.getTempFile("request", "xml");
                XMLWriter out = new XMLWriter(new FileOutputStream(requestFile), OutputFormat.createPrettyPrint());
                out.write(requestXml);
                out.flush();
                out.close();
                frm.setRequestFile("temp/" + requestFile.getName());

                File responseFile = ApplicationProperties.getTempFile("response", "xml");
                out = new XMLWriter(new FileOutputStream(responseFile), OutputFormat.createPrettyPrint());
                out.write(responseXml);
                out.flush();
                out.close();
                frm.setResponseFile("temp/" + responseFile.getName());

            } else {
                saveErrors(request, errors);
            }
        }

        return mapping.findForward("displayForm");

    }

    /**
     * @param request
     * @param frm
     */
    private void doLoad(HttpServletRequest request, SectioningDemoForm frm) {

    }

}