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

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