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());
}
}