forked from Coded/SIPRP
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
400 lines
12 KiB
400 lines
12 KiB
package shst.medicina.fichasclinicas.webservices.jaxrs;
|
|
|
|
|
|
|
|
|
|
import java.io.File;
|
|
import java.io.FileNotFoundException;
|
|
import java.sql.Timestamp;
|
|
import java.util.ArrayList;
|
|
import java.util.HashMap;
|
|
import java.util.LinkedList;
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
import java.util.Scanner;
|
|
import java.util.logging.Level;
|
|
|
|
import javax.servlet.http.HttpServletRequest;
|
|
import javax.ws.rs.Consumes;
|
|
import javax.ws.rs.DefaultValue;
|
|
import javax.ws.rs.GET;
|
|
import javax.ws.rs.POST;
|
|
import javax.ws.rs.Path;
|
|
import javax.ws.rs.Produces;
|
|
import javax.ws.rs.QueryParam;
|
|
import javax.ws.rs.core.Context;
|
|
import javax.ws.rs.core.MediaType;
|
|
import javax.ws.rs.core.Response;
|
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.beans.factory.annotation.Qualifier;
|
|
|
|
import pt.evolute.data.ProviderSpringBean;
|
|
import shst.medicina.fichasclinicas.beans.EvoMessageBean;
|
|
import shst.medicina.fichasclinicas.beans.EvoMessageTypeBean;
|
|
import shst.medicina.fichasclinicas.beans.EvoResponseBean;
|
|
import shst.medicina.fichasclinicas.beans.FichaBDDataBean;
|
|
import shst.medicina.fichasclinicas.beans.FichaExchangeBean;
|
|
import shst.medicina.fichasclinicas.beans.TrabalhadorResumeBean;
|
|
import shst.medicina.fichasclinicas.beans.fichasclinicas.FcTipoFichaBeanData;
|
|
import shst.medicina.fichasclinicas.beans.shst.EmpresasBeanData;
|
|
import shst.medicina.fichasclinicas.beans.shst.EstabelecimentosBeanData;
|
|
import shst.medicina.fichasclinicas.beans.shst.TrabalhadoresBeanData;
|
|
import shst.medicina.fichasclinicas.data.fichasclinicas.FcTipoFichaData;
|
|
import shst.medicina.fichasclinicas.logic.FichasClinicasLogic;
|
|
import shst.medicina.fichasclinicas.webservices.WebServicesConst;
|
|
|
|
import com.evolute.module.utilizadores.data.EvoUsrUserData;
|
|
import com.evolute.module.utilizadores.users.provider.UsersDataProvider;
|
|
import com.evolute.utils.error.ErrorLogger;
|
|
import com.evolute.utils.sql.Field;
|
|
import com.googlecode.htmlcompressor.compressor.HtmlCompressor;
|
|
|
|
|
|
|
|
@Path("/fichasclinicas")
|
|
public class FichasClinicasImpl {
|
|
|
|
|
|
|
|
@Autowired(required = true)
|
|
@Qualifier("defaultProvider")
|
|
ProviderSpringBean fichasProvidersBean;
|
|
|
|
@Autowired(required = true)
|
|
@Qualifier("siprpProvider")
|
|
ProviderSpringBean siprpProvidersBean;
|
|
|
|
@Autowired(required = true)
|
|
FichasClinicasLogic fichasClinicasLogic;
|
|
|
|
|
|
|
|
@GET
|
|
@Path("/getEmpresas")
|
|
@Produces(MediaType.APPLICATION_JSON)
|
|
public EvoResponseBean<List<EmpresasBeanData>> getEmpresas(@Context HttpServletRequest req, @DefaultValue("") @QueryParam("filter") String filter)
|
|
{
|
|
EvoUsrUserData user = (EvoUsrUserData) req.getSession().getAttribute(WebServicesConst.USER_SESSION_STORE_VAR);
|
|
return fichasClinicasLogic.getEmpresas(user, filter);
|
|
}
|
|
|
|
|
|
@GET
|
|
@Path("/getEstabelecimentos")
|
|
@Produces(MediaType.APPLICATION_JSON)
|
|
public EvoResponseBean<List<EstabelecimentosBeanData>> getEstabelecimentos(@Context HttpServletRequest req, @DefaultValue("0") @QueryParam("empresaID") int empresaID,@DefaultValue("") @QueryParam("filter") String filter)
|
|
{
|
|
EvoUsrUserData user = (EvoUsrUserData) req.getSession().getAttribute(WebServicesConst.USER_SESSION_STORE_VAR);
|
|
return fichasClinicasLogic.getEstabelecimentos(user, empresaID, filter);
|
|
}
|
|
|
|
|
|
@GET
|
|
@Path("/getTrabalhadores")
|
|
@Produces(MediaType.APPLICATION_JSON)
|
|
public EvoResponseBean<List<TrabalhadoresBeanData>> getTrabalhadores(@Context HttpServletRequest req, @DefaultValue("0") @QueryParam("estabelecimentoID") int estabelecimentoID,@DefaultValue("") @QueryParam("filter") String filter)
|
|
{
|
|
EvoUsrUserData user = (EvoUsrUserData) req.getSession().getAttribute(WebServicesConst.USER_SESSION_STORE_VAR);
|
|
return fichasClinicasLogic.getTrabalhadores(user, estabelecimentoID, filter);
|
|
}
|
|
|
|
|
|
|
|
@GET
|
|
@Path("/getFicha")
|
|
@Produces(MediaType.APPLICATION_JSON)
|
|
public EvoResponseBean<FichaExchangeBean> getFicha(@Context HttpServletRequest req, @DefaultValue("0") @QueryParam("fichaID") int fichaID)
|
|
{
|
|
EvoUsrUserData user = (EvoUsrUserData) req.getSession().getAttribute(WebServicesConst.USER_SESSION_STORE_VAR);
|
|
return fichasClinicasLogic.getFicha(user, fichaID);
|
|
}
|
|
|
|
|
|
@POST
|
|
@Path("/sendFicha")
|
|
@Produces(MediaType.APPLICATION_JSON)
|
|
@Consumes(MediaType.APPLICATION_JSON)
|
|
public EvoResponseBean<FichaExchangeBean> sendFicha(@Context HttpServletRequest req, FichaExchangeBean ficha)
|
|
{
|
|
EvoUsrUserData user = (EvoUsrUserData) req.getSession().getAttribute(WebServicesConst.USER_SESSION_STORE_VAR);
|
|
return fichasClinicasLogic.saveFicha(user, ficha);
|
|
}
|
|
|
|
|
|
@GET
|
|
@Path("/getFichaAptidao")
|
|
@Produces(MediaType.APPLICATION_JSON)
|
|
public EvoResponseBean<FichaExchangeBean> getFichaAptidao(@Context HttpServletRequest req,@QueryParam("fichaID") Integer fichaID)
|
|
{
|
|
EvoUsrUserData user = (EvoUsrUserData) req.getSession().getAttribute(WebServicesConst.USER_SESSION_STORE_VAR);
|
|
return fichasClinicasLogic.getFichaAptidao(user, fichaID);
|
|
}
|
|
|
|
|
|
@POST
|
|
@Path("/sendFichaAptidao")
|
|
@Produces(MediaType.APPLICATION_JSON)
|
|
@Consumes(MediaType.APPLICATION_JSON)
|
|
public EvoResponseBean<FichaExchangeBean> sendFichaAptidao(@Context HttpServletRequest req, FichaExchangeBean ficha)
|
|
{
|
|
EvoUsrUserData user = (EvoUsrUserData) req.getSession().getAttribute(WebServicesConst.USER_SESSION_STORE_VAR);
|
|
return fichasClinicasLogic.saveFichaAptidao(user, ficha);
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@POST
|
|
@Path("/doLogin")
|
|
@Produces(MediaType.APPLICATION_JSON)
|
|
@Consumes(MediaType.APPLICATION_JSON)
|
|
public Response doLogin(@Context HttpServletRequest req, Map<String,Object> auth) {
|
|
String login = (String) auth.get("user");
|
|
String pass = (String) auth.get("pass");
|
|
|
|
EvoResponseBean<Object> rsp = new EvoResponseBean<Object>();
|
|
EvoMessageBean mb = new EvoMessageBean();
|
|
rsp.addMessage(mb);
|
|
|
|
EvoUsrUserData user = null;
|
|
|
|
try
|
|
{
|
|
///TODO integração com o springsecurity que esta em falta devido a nao ser usado de momento
|
|
///TODO adicionar o envio de permissoes para o interface grafico poder ligar/desligar funcionalidades
|
|
user = UsersDataProvider.getProvider().loadUserByUsernamePasswordActive(login, pass, null);
|
|
if(user != null )
|
|
{
|
|
user.setLast_login(new Timestamp(System.currentTimeMillis()));
|
|
user.save();
|
|
req.getSession().setAttribute(WebServicesConst.USER_SESSION_STORE_VAR, user);
|
|
|
|
Map<String,Object> loginData = new HashMap<String, Object>();
|
|
loginData.put("username", user.getName());
|
|
|
|
List<FcTipoFichaData> tfl = fichasProvidersBean.getENTITY_PROVIDER().listLoad(FcTipoFichaData.class, new Field(FcTipoFichaData.DELETED_STAMP).isEqual(null), new String[]{FcTipoFichaData.DESCRICAO}, null);
|
|
List<FcTipoFichaBeanData> tflBean = new LinkedList<FcTipoFichaBeanData>();
|
|
for(FcTipoFichaData i : tfl)
|
|
{
|
|
FcTipoFichaBeanData ib = new FcTipoFichaBeanData();
|
|
ib.setMapData(i.getPropertiesValues(new String[]{FcTipoFichaData.ID,FcTipoFichaData.DESCRICAO}));
|
|
tflBean.add(ib);
|
|
}
|
|
loginData.put("tipoFichas", tflBean);
|
|
|
|
|
|
rsp.setData(loginData);
|
|
rsp.setSuccess(true);
|
|
mb.setType(EvoMessageTypeBean.INFO);
|
|
mb.setMessageData("login com sucesso");
|
|
}
|
|
else
|
|
{
|
|
rsp.setData(false);
|
|
rsp.setSuccess(false);
|
|
mb.setType(EvoMessageTypeBean.SECURITYEXCEPTION);
|
|
mb.setMessageData("utilizador e/ou password inválidos");
|
|
}
|
|
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
rsp.setData(false);
|
|
rsp.setSuccess(false);
|
|
mb.setType(EvoMessageTypeBean.ERROR);
|
|
mb.setMessageData("Erro no processo de validação do login!");
|
|
|
|
ErrorLogger.logException(ex, Level.SEVERE);
|
|
}
|
|
|
|
return Response.status(200).entity(rsp).build();
|
|
|
|
}
|
|
|
|
|
|
@GET
|
|
@Path("/checkLogin")
|
|
@Produces(MediaType.APPLICATION_JSON)
|
|
public Response checkLogin(@Context HttpServletRequest req) {
|
|
EvoResponseBean<Object> rsp = new EvoResponseBean<Object>();
|
|
EvoMessageBean mb = new EvoMessageBean();
|
|
rsp.addMessage(mb);
|
|
|
|
if(req.getSession().getAttribute("user") != null )
|
|
{
|
|
try
|
|
{
|
|
EvoUsrUserData user = (EvoUsrUserData) req.getSession().getAttribute(WebServicesConst.USER_SESSION_STORE_VAR);
|
|
|
|
Map<String,Object> loginData = new HashMap<String, Object>();
|
|
loginData.put("username", user.getName());
|
|
|
|
List<FcTipoFichaData> tfl = fichasProvidersBean.getENTITY_PROVIDER().listLoad(FcTipoFichaData.class, new Field(FcTipoFichaData.DELETED_STAMP).isEqual(null), new String[]{FcTipoFichaData.DESCRICAO}, null);
|
|
List<FcTipoFichaBeanData> tflBean = new LinkedList<FcTipoFichaBeanData>();
|
|
for(FcTipoFichaData i : tfl)
|
|
{
|
|
FcTipoFichaBeanData ib = new FcTipoFichaBeanData();
|
|
ib.setMapData(i.getPropertiesValues(new String[]{FcTipoFichaData.ID,FcTipoFichaData.DESCRICAO}));
|
|
tflBean.add(ib);
|
|
}
|
|
loginData.put("tipoFichas", tflBean);
|
|
|
|
|
|
rsp.setData(loginData);
|
|
|
|
|
|
rsp.setSuccess(true);
|
|
mb.setType(EvoMessageTypeBean.INFO);
|
|
mb.setMessageData("sessão activa");
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
rsp.setData(false);
|
|
rsp.setSuccess(false);
|
|
mb.setType(EvoMessageTypeBean.ERROR);
|
|
mb.setMessageData("Erro no processo de validação do login!");
|
|
|
|
ErrorLogger.logException(ex, Level.SEVERE);
|
|
}
|
|
|
|
}
|
|
else
|
|
{
|
|
rsp.setData(false);
|
|
rsp.setSuccess(false);
|
|
mb.setType(EvoMessageTypeBean.SECURITYEXCEPTION);
|
|
mb.setMessageData("sem sessão ou sessão expirada");
|
|
}
|
|
|
|
return Response.status(200).entity(rsp).build();
|
|
}
|
|
|
|
|
|
@POST
|
|
@Path("/doLogout")
|
|
@Produces(MediaType.APPLICATION_JSON)
|
|
public Response doLogout(@Context HttpServletRequest req) {
|
|
EvoResponseBean<Boolean> rsp = new EvoResponseBean<Boolean>();
|
|
EvoMessageBean mb = new EvoMessageBean();
|
|
rsp.addMessage(mb);
|
|
|
|
req.getSession().removeAttribute(WebServicesConst.USER_SESSION_STORE_VAR);
|
|
|
|
rsp.setData(true);
|
|
rsp.setSuccess(true);
|
|
mb.setType(EvoMessageTypeBean.INFO);
|
|
mb.setMessageData("logout com sucesso");
|
|
|
|
|
|
return Response.status(200).entity(rsp).build();
|
|
}
|
|
|
|
|
|
|
|
|
|
@GET
|
|
@Path("/getResumoTrabalhador")
|
|
@Produces(MediaType.APPLICATION_JSON)
|
|
public EvoResponseBean<TrabalhadorResumeBean> getResumoTrabalhador(@Context HttpServletRequest req, @DefaultValue("0") @QueryParam("trabalhadorID") int trabalhadorID)
|
|
{
|
|
EvoUsrUserData user = (EvoUsrUserData) req.getSession().getAttribute(WebServicesConst.USER_SESSION_STORE_VAR);
|
|
return fichasClinicasLogic.loadTrabalhadorResume(user, trabalhadorID);
|
|
}
|
|
|
|
@GET
|
|
@Path("/getDadosFichaFromBD")
|
|
@Produces(MediaType.APPLICATION_JSON)
|
|
public EvoResponseBean<FichaBDDataBean> getDadosFichaFromBD(@Context HttpServletRequest req, @QueryParam("tipoFichaID") Integer tipoFichaID)
|
|
{
|
|
EvoUsrUserData user = (EvoUsrUserData) req.getSession().getAttribute(WebServicesConst.USER_SESSION_STORE_VAR);
|
|
return fichasClinicasLogic.getDadosFichaFromBD(user, tipoFichaID);
|
|
}
|
|
|
|
|
|
|
|
@GET
|
|
@Path("/getViews")
|
|
@Produces(MediaType.TEXT_HTML)
|
|
public Response getViews(@Context HttpServletRequest req) {
|
|
|
|
String html = "";
|
|
|
|
try
|
|
{
|
|
|
|
DirectoryFileUtils dff = new DirectoryFileUtils();
|
|
|
|
//TODO: check the alternative to getRealPath
|
|
|
|
@SuppressWarnings("deprecation")
|
|
String basePath = req.getRealPath("/static/html/app");
|
|
|
|
File baseFolder = new File(basePath);
|
|
|
|
List<String> foundFiles = dff.getFilesContents(baseFolder, ".html");
|
|
|
|
for(int i=0; i < foundFiles.toArray().length; i++){
|
|
|
|
html += foundFiles.get(i);
|
|
}
|
|
|
|
//https://code.google.com/p/htmlcompressor/#Using_HTML_Compressor_from_Java_API
|
|
|
|
HtmlCompressor compressor = new HtmlCompressor();
|
|
|
|
html = compressor.compress(html);
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
|
|
}
|
|
|
|
return Response.status(200).entity(html).build();
|
|
}
|
|
|
|
//TODO: place this class elsewhere
|
|
public class DirectoryFileUtils {
|
|
private List<String> fileContents = new ArrayList<String>();
|
|
|
|
private String content;
|
|
private Scanner scanner;
|
|
|
|
public List<String> getFilesContents(File file, String extension) throws FileNotFoundException {
|
|
|
|
if (file.isFile() && file.getName().endsWith(extension)) {
|
|
|
|
scanner = new Scanner(new File(file.getAbsoluteFile().toString()));
|
|
content = scanner.useDelimiter("\\Z").next();
|
|
fileContents.add(content);
|
|
|
|
} else if (file.isDirectory()) {
|
|
|
|
File[] listOfFiles = file.listFiles();
|
|
if (listOfFiles != null) {
|
|
for (int i = 0; i < listOfFiles.length; i++){
|
|
getFilesContents(listOfFiles[i], extension);
|
|
}
|
|
} else {
|
|
System.out.println("[ACCESS DENIED]");
|
|
}
|
|
}
|
|
return fileContents;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|