package pt.estgp.estgweb.web.controllers.widgetmodel;
import jomm.dao.impl.AbstractDao;
import org.apache.struts.action.ActionForm;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import pt.estgp.estgweb.domain.SigesUser;
import pt.estgp.estgweb.domain.Student;
import pt.estgp.estgweb.domain.Teacher;
import pt.estgp.estgweb.domain.User;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.domain.views.UserView;
import pt.estgp.estgweb.web.controllers.utils.AbstractWidgetAjaxController;
import pt.estgp.estgweb.web.form.widgetmodel.WidgetModelForm;
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.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
/**
* Created by jorgemachado on 06/01/17.
*/
public class ModelWidgetController
extends AbstractWidgetAjaxController
{
public JSONObject findUser
(ActionForm form,HttpServletRequest request, HttpServletResponse response
) throws JSONException
{
WidgetModelForm frm =
(WidgetModelForm
) form
;
1.5.0/docs/api/java/lang/String.html">String query = frm.
getQ();
JSONObject result =
new JSONObject
();
JSONArray usersArray =
new JSONArray
();
result.
put("results",usersArray
);
if(query==
null || query.
trim().
length() == 0
)
return result
;
AbstractDao.
getCurrentSession().
beginTransaction();
//result.put("results",usersArray);
List
<User
> users = DaoFactory.
getUserDaoImpl().
findUsers(query
);
getUsersInJson
(usersArray, users
);
AbstractDao.
getCurrentSession().
getTransaction().
commit();
return result
;
}
public JSONObject getUserForUsername
(ActionForm form,HttpServletRequest request, HttpServletResponse response
) throws JSONException
{
WidgetModelForm frm =
(WidgetModelForm
) form
;
1.5.0/docs/api/java/lang/String.html">String username = frm.
getQ();
JSONObject result
;
AbstractDao.
getCurrentSession().
beginTransaction();
//
User user = DaoFactory.
getUserDaoImpl().
loadByUsername(username
);
result = getJsonUser
(user
);
AbstractDao.
getCurrentSession().
getTransaction().
commit();
return result
;
}
public JSONObject findUserRoles
(ActionForm form,HttpServletRequest request, HttpServletResponse response
) throws JSONException
{
WidgetModelForm frm =
(WidgetModelForm
) form
;
1.5.0/docs/api/java/lang/String.html">String query = frm.
getQ();
JSONObject result =
new JSONObject
();
JSONArray usersArray =
new JSONArray
();
result.
put("results",usersArray
);
if(query==
null || query.
trim().
length() == 0
)
return result
;
AbstractDao.
getCurrentSession().
beginTransaction();
result.
put("results",usersArray
);
List
<User
> users = DaoFactory.
getUserDaoImpl().
loadRoleUsers(query
);
getUsersInJson
(usersArray, users
);
AbstractDao.
getCurrentSession().
getTransaction().
commit();
return result
;
}
private void getUsersInJson
(JSONArray usersArray, List
<User
> users
) throws JSONException
{
for(User u: users
)
{
JSONObject user = getJsonUser
(u
);
usersArray.
put(user
);
}
}
public static JSONObject getJsonUser
(User u
) throws JSONException
{
JSONObject user =
new JSONObject
();
user.
put("id",u.
getId());
user.
put("username",u.
getUsername());
user.
put("name",u.
getName());
if(u
instanceof SigesUser
)
{
user.
put("sigesCode",
((SigesUser
)u
).
getSigesCode());
}
if(u
instanceof Teacher
)
{
user.
put("type",
"teacher");
}
if(u
instanceof Student
)
{
user.
put("type",
"student");
}
return user
;
}
/**
* q json object:
* {
* userId:Long,
* role:String,
* }
* Adds a role to a user
*
* @param form
* @param request
* @param response
* @return Users in Json
* @throws JSONException
*/
public JSONObject addRole2User
(ActionForm form,HttpServletRequest request, HttpServletResponse response
) throws 1.5.0/docs/api/java/lang/Throwable.html">Throwable {
WidgetModelForm frm =
(WidgetModelForm
) form
;
1.5.0/docs/api/java/lang/String.html">String query = frm.
getQ();
JSONObject roleUser =
new JSONObject
(query
);
1.5.0/docs/api/java/lang/Long.html">Long userId = roleUser.
getLong("userId");
1.5.0/docs/api/java/lang/String.html">String role = roleUser.
getString("role");
IServiceManager sm = ServiceManager.
getInstance();
1.5.0/docs/api/java/lang/String.html">String[] names =
new 1.5.0/docs/api/java/lang/String.html">String[]{"userId",
"role_2_addRemove"}; //colocacao do nome de parametro role_2_add obrigatoria para validacao no filtro do serviço
5+0%2Fdocs%2Fapi+Object">Object[] args =
new 5+0%2Fdocs%2Fapi+Object">Object[]{userId,role
};
sm.
execute(RequestUtils.
getRequester(request, response
),
"AddRole2User", args, names
);
frm.
setQ(role
);
addMessageAsString
(request,
"Utilizador adicionado com sucesso ao papel institucional");
return findUserRoles
(frm,request,response
);
}
/**
* q json object:
* {
* userId:Long,
* role:String,
* }
* Adds a role to a user
*
* @param form
* @param request
* @param response
* @return Users in Json
* @throws JSONException
*/
public JSONObject removeRole2User
(ActionForm form,HttpServletRequest request, HttpServletResponse response
) throws 1.5.0/docs/api/java/lang/Throwable.html">Throwable {
WidgetModelForm frm =
(WidgetModelForm
) form
;
1.5.0/docs/api/java/lang/String.html">String query = frm.
getQ();
JSONObject roleUser =
new JSONObject
(query
);
1.5.0/docs/api/java/lang/Long.html">Long userId = roleUser.
getLong("userId");
1.5.0/docs/api/java/lang/String.html">String role = roleUser.
getString("role");
IServiceManager sm = ServiceManager.
getInstance();
1.5.0/docs/api/java/lang/String.html">String[] names =
new 1.5.0/docs/api/java/lang/String.html">String[]{"userId",
"role_2_addRemove"}; //colocacao do nome de parametro role_2_add obrigatoria para validacao no filtro do serviço
5+0%2Fdocs%2Fapi+Object">Object[] args =
new 5+0%2Fdocs%2Fapi+Object">Object[]{userId,role
};
sm.
execute(RequestUtils.
getRequester(request, response
),
"RemoveRole2User", args, names
);
frm.
setQ(role
);
addMessageAsString
(request,
"Utilizador removido com sucesso do papel institucional");
return findUserRoles
(frm,request,response
);
}
/**
* For Json Services
* @param form
* @param request
* @param response
* @return
* @throws Throwable
*/
public boolean wsLoginMobileChallenge
(ActionForm form,HttpServletRequest request, HttpServletResponse response
) throws 1.5.0/docs/api/java/lang/Throwable.html">Throwable {
1.5.0/docs/api/java/lang/String.html">String username = request.
getParameter("username");
1.5.0/docs/api/java/lang/String.html">String chaveAppsMoveis = request.
getParameter("chaveAppsMoveis");
IServiceManager sm = ServiceManager.
getInstance();
1.5.0/docs/api/java/lang/String.html">String[] names =
new 1.5.0/docs/api/java/lang/String.html">String[]{};
5+0%2Fdocs%2Fapi+Object">Object[] args =
new 5+0%2Fdocs%2Fapi+Object">Object[]{username,chaveAppsMoveis
};
UserView u =
(UserView
) sm.
execute(RequestUtils.
getRequester(request, response
),
"WSAPILoginChallenge", args, names
);
return u
!=
null;
}
/**
* * For Json Services
* @param form
* @param request
* @param response
* @return
* @throws Throwable
*/
public JSONObject wsListStudents
(ActionForm form,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[] names =
new 1.5.0/docs/api/java/lang/String.html">String[]{};
5+0%2Fdocs%2Fapi+Object">Object[] args =
new 5+0%2Fdocs%2Fapi+Object">Object[]{};
JSONObject result =
(JSONObject
) sm.
execute(RequestUtils.
getRequester(request, response
),
"WSAPIListStudents", args, names
);
return result
;
}
/**
* * For Json Services
* @param form
* @param request
* @param response
* @return
* @throws Throwable
*/
public JSONObject wsListTeachers
(ActionForm form,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[] names =
new 1.5.0/docs/api/java/lang/String.html">String[]{};
5+0%2Fdocs%2Fapi+Object">Object[] args =
new 5+0%2Fdocs%2Fapi+Object">Object[]{};
JSONObject result =
(JSONObject
) sm.
execute(RequestUtils.
getRequester(request, response
),
"WSAPIListTeachers", args, names
);
return result
;
}
/**
* * For Json Services
* @param form
* @param request
* @param response
* @return
* @throws Throwable
*/
public JSONObject wsListServices
(ActionForm form,HttpServletRequest request, HttpServletResponse response
) throws 1.5.0/docs/api/java/lang/Throwable.html">Throwable {
JSONObject result =
new JSONObject
();
JSONObject wsServices =
new JSONObject
();
result.
put("ws-services",wsServices
);
wsServices.
put("info-Developers",
"Precisa de uma chave de API fornecida pelos administradores de sistema, com a chave poderá autênticar-se com o serviço ws-authenticate cada vez que a sua APP comunicar");
wsServices.
put("info-Users",
"O utilizador final necessita de ser encaminhado via WEB para gerar a sua chaveAppsMoveis entrando no PAE/BACO no seguinte URL /startGenerateChaveApps.do");
JSONObject wsAuthenticate =
new JSONObject
();
wsAuthenticate.
put("service",
"/wsjson/api/app/ws-authenticate");
wsAuthenticate.
put("parameter1",
"apikey");
wsAuthenticate.
put("return1",
"certificate: este serviço devolve a chave de comunicação seguinte que deverá ser usada como certificado");
wsAuthenticate.
put("return2",
"certificateExpire: este serviço devolve a data em que o seu certificado de API expira");
JSONObject wsLoginChallenge =
new JSONObject
();
wsLoginChallenge.
put("service",
"/wsjson/api/app/secure/ws-login-challenge");
wsLoginChallenge.
put("parameter1",
"certificate");
wsLoginChallenge.
put("parameter2",
"username");
wsLoginChallenge.
put("parameter3",
"chaveAppsMoveis");
wsLoginChallenge.
put("descricao",
"usa o certificado para garantir autenticidade da APP e verifica se o utilizador e a chave fornecida pelo mesmo estão correctas");
wsLoginChallenge.
put("return1",
"se estiver correcto devolve -> service-simple-response\",\"ok\");");
wsLoginChallenge.
put("return2",
"se estiver incorreto devolve -> service-simple-response\",\"fail\");");
JSONObject wsLoginListStudents =
new JSONObject
();
wsLoginListStudents.
put("service",
"/wsjson/api/app/secure/ws-student-list");
wsLoginListStudents.
put("parameter1",
"certificate");
wsLoginListStudents.
put("descricao",
"usa o certificado para garantir autenticidade da APP e devolve a lista total de estudantes do sistema no parametro response");
wsLoginListStudents.
put("return1",
"lista total de estudantes do sistema no parametro response");
JSONObject wsLoginListTeachers =
new JSONObject
();
wsLoginListTeachers.
put("service",
"/wsjson/api/app/secure/ws-teacher-list");
wsLoginListTeachers.
put("parameter",
"certificate");
wsLoginListTeachers.
put("descricao",
"usa o certificado para garantir autenticidade da APP e devolve a lista total de professores do sistema no parametro response");
wsLoginListTeachers.
put("return1",
"devolve a lista total de professores do sistema no parametro response");
JSONArray services =
new JSONArray
();
services.
put(wsAuthenticate
);
services.
put(wsLoginChallenge
);
services.
put(wsLoginListStudents
);
services.
put(wsLoginListTeachers
);
wsServices.
put("services",services
);
return result
;
}
}