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> 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> 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> 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 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 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 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 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 auth) { String login = (String) auth.get("user"); String pass = (String) auth.get("pass"); EvoResponseBean rsp = new EvoResponseBean(); 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 loginData = new HashMap(); loginData.put("username", user.getName()); List tfl = fichasProvidersBean.getENTITY_PROVIDER().listLoad(FcTipoFichaData.class, new Field(FcTipoFichaData.DELETED_STAMP).isEqual(null), new String[]{FcTipoFichaData.DESCRICAO}, null); List tflBean = new LinkedList(); 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 rsp = new EvoResponseBean(); 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 loginData = new HashMap(); loginData.put("username", user.getName()); List tfl = fichasProvidersBean.getENTITY_PROVIDER().listLoad(FcTipoFichaData.class, new Field(FcTipoFichaData.DELETED_STAMP).isEqual(null), new String[]{FcTipoFichaData.DESCRICAO}, null); List tflBean = new LinkedList(); 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 rsp = new EvoResponseBean(); 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 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 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 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 fileContents = new ArrayList(); private String content; private Scanner scanner; public List 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; } } }