Subversion Repositories bacoAlunos

Rev

Rev 1500 | Rev 1776 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

package pt.estgp.estgweb.web.json;

import com.owlike.genson.TransformationException;
import org.apache.log4j.Logger;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import pt.estgp.estgweb.domain.UserSession;
import pt.estgp.estgweb.services.courses.xsd.Curso;
import pt.estgp.estgweb.web.UserSessionProxy;
import pt.estgp.estgweb.web.utils.RequestUtils;
import pt.utl.ist.berserk.logic.serviceManager.IServiceManager;
import pt.utl.ist.berserk.logic.serviceManager.ServiceManager;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringReader;

/**
 * Created by jorgemachado on 02/02/16.
 */

public class JsonHandler extends HttpServlet
{
    private static final 1.5.0/docs/api/java/util/logging/Logger.html">Logger logger = 1.5.0/docs/api/java/util/logging/Logger.html">Logger.getLogger(JsonHandler.class);

    /** Handles the HTTP <code>GET</code> method.
     * @param request servlet request
     * @param response servlet response
     */

    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, 1.5.0/docs/api/java/io/IOException.html">IOException {
        processRequestSafe(request, response);
    }

    /** Handles the HTTP <code>POST</code> method.
     * @param request servlet request
     * @param response servlet response
     */

    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, 1.5.0/docs/api/java/io/IOException.html">IOException {
        processRequestSafe(request, response);
    }


    private void processRequestSafe(HttpServletRequest request, HttpServletResponse response) throws 1.5.0/docs/api/java/io/IOException.html">IOException {
        response.setContentType("application/json");
        try {
            processRequest(request, response);
        } catch (TransformationException e)
        {
            response.getWriter().print(e);
            response.getWriter().print("See log for details:");
            logger.error(e,e);
        }
        catch (JAXBException e)
        {
            response.getWriter().print(e);
            response.getWriter().print("See log for details:");
            logger.error(e,e);
        }
        catch (JSONException e)
        {
            response.getWriter().print(e);
            response.getWriter().print("See log for details:");
            logger.error(e, e);
        } catch (1.5.0/docs/api/java/lang/Throwable.html">Throwable throwable) {
            response.getWriter().print(throwable);
            response.getWriter().print("See log for details:");
            logger.error(throwable, throwable);
        }
    }

    private void processRequest(HttpServletRequest request, HttpServletResponse response) throws 1.5.0/docs/api/java/lang/Throwable.html">Throwable {

        IServiceManager sm = ServiceManager.getInstance();

        1.5.0/docs/api/java/lang/String.html">String service = request.getParameter("service");
        if(service == null)
        {
            printServices(response.getWriter());
        }
        else if(service.equals("listCourses"))
        {
            1.5.0/docs/api/java/lang/String.html">String school = request.getParameter("school");
            1.5.0/docs/api/java/lang/String.html">String type = request.getParameter("type");
            JSONObject obj = (JSONObject) sm.execute(RequestUtils.getRequester(request, response), "GetActiveCoursesForJsonApi", new 5+0%2Fdocs%2Fapi+Object">Object[]{school, type});
            response.getWriter().write(obj.toString());
        }
        else if(service.equals("getCourse") && request.getParameter("code") != null)
        {
            1.5.0/docs/api/java/lang/String.html">String code = request.getParameter("code");
            JSONObject obj = (JSONObject) sm.execute(RequestUtils.getRequester(request, response), "GetCourseDetailForJsonApi", new 5+0%2Fdocs%2Fapi+Object">Object[]{code});
            response.getWriter().write(obj.toString());
        }
        else if(service.equals("getStudiesPlanXml") && request.getParameter("code") != null)
        {
            1.5.0/docs/api/java/lang/String.html">String code = request.getParameter("code");
            1.5.0/docs/api/java/lang/String.html">String renew = request.getParameter("renew");
            response.setContentType("application/xml");
            response.setCharacterEncoding("UTF-8");
            1.5.0/docs/api/java/lang/String.html">String xml = (1.5.0/docs/api/java/lang/String.html">String) sm.execute(RequestUtils.getRequester(request, response), "GetCourseStudiesPlanXml", new 5+0%2Fdocs%2Fapi+Object">Object[]{code,renew});

            JAXBContext jc = JAXBContext.newInstance(Curso.class);
            Unmarshaller unmarshaller = jc.createUnmarshaller();
            Curso curso = (Curso) unmarshaller.unmarshal(new 1.5.0/docs/api/java/io/StringReader.html">StringReader(xml));
            Marshaller marshaller = jc.createMarshaller();
            marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
            marshaller.marshal(curso, response.getOutputStream());
            //SETTING XML in COURSE STUDIES PLAN
        }
        else if(service.equals("syncSystemPlans") && request.getParameter("systemUrl") != null && request.getParameter("setActive") != null)
        {
            UserSession sess = UserSessionProxy.loadUserSessionFromRequest(request);
            response.setContentType("application/xml");
            if(sess.getUser() != null && sess.getUser().isSuperuserOrAdmin())
            {
                1.5.0/docs/api/java/lang/String.html">String systemUrl = request.getParameter("systemUrl");
                boolean setActive = 1.5.0/docs/api/java/lang/Boolean.html">Boolean.parseBoolean(request.getParameter("setActive"));
                response.setContentType("application/xml");
                1.5.0/docs/api/java/lang/String.html">String log = (1.5.0/docs/api/java/lang/String.html">String) sm.execute(RequestUtils.getRequester(request, response), "SincronizeCoursesStudiesPlans", new 5+0%2Fdocs%2Fapi+Object">Object[]{systemUrl,setActive});
                response.getWriter().write("<response><status>OK</status><log>" + log + "</log></response>");
            }
            else
            {
                response.getWriter().write("<error>Permission Denied</error>");
            }
        }
        else
        {
            printServices(response.getWriter());
        }
    }

    public void printServices(1.5.0/docs/api/java/io/PrintWriter.html">PrintWriter out) throws JSONException, 1.5.0/docs/api/java/io/IOException.html">IOException
    {
        JSONObject obj = new JSONObject();

        JSONArray availableServices = new JSONArray();

        JSONObject service2 = new JSONObject();
        service2.put("name","getCourse");
        service2.put("parameterCode","code");
        service2.put("parameterCodeType","integer");
        service2.put("exampleCall1","/wsjson/api?service=getCourse&code=9119");

        JSONObject service = new JSONObject();
        service.put("name","listCourses");
        service.put("parameterType","type");
        service.put("parameterTypeEnumValues","Licenciaturas,Mestrados,PosGraduacoes,CET,CTeSP or none for all");
        service.put("parameterSchool","school");
        service.put("parameterSchoolEnumValues","ESTG,ESECS,ESS,ESAE or none for all");
        service.put("exampleCall1","/wsjson/api?service=listCourses");
        service.put("exampleCall2","/wsjson/api?service=listCourses&type=Licenciaturas&school=ESTG");

        availableServices.put(service);
        availableServices.put(service2);
        JSONObject response = new JSONObject();
        obj.put("response",response);
        response.put("status","invalid service");
        response.put("availableServices",availableServices);
        out.write(obj.toString());
    }

}