/** * 查询query对应的扩展事件,扩展新闻,扩展关键词,并返回结果 * * @param query * @return 返回一个由JSONArray表示的相关新闻列表,格式如下: {"q":{q}, "expan":{ * "events":[{"id":"","desc":"","title":""},{"id":"","desc":"","title":""}...], * "news":[{"id":"","desc":"","title":""},{"id":"","desc":"","title":""}...], * "keywords":["",""...]} } */ public JSONObject getExpansion(String query) { init(); JSONObject jsonObj = new JSONObject(); Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; try { conn = dataSource.getConnection(); pstmt = conn.prepareStatement(SQL_SELECT_EXPANSION_BY_KEYWORDS); pstmt.setString(1, query); if (pstmt.execute()) { rs = pstmt.getResultSet(); JSONObject expan = new JSONObject(); while (rs.next()) { // 将查询结果转化为json格式 // 获得所有的events JSONArray eventsArray = new JSONArray(); if (rs.getString("eventsId") != null) { String eventsIdString[] = rs.getString("eventsId").split(","); int[] eventsId = new int[eventsIdString.length]; for (int i = 0; i < eventsIdString.length; i++) { eventsId[i] = Integer.parseInt(eventsIdString[i]); EventDAO eventDao = new EventDAO(); Event event = eventDao.getEventById(eventsId[i]); // 根据event的id进行查询,并且获得相关属性 JSONObject eventObj = new JSONObject(); eventObj.put("id", eventsId[i]); eventObj.put("desc", event.getDesc()); eventObj.put("title", event.getTitle()); eventsArray.add(eventObj); } // for } // 获得所有的news JSONArray newsArray = new JSONArray(); if (rs.getString("newsId") != null) { String newsIdString[] = rs.getString("newsId").split(","); int[] newsId = new int[newsIdString.length]; for (int i = 0; i < newsIdString.length; i++) { newsId[i] = Integer.parseInt(newsIdString[i]); NewsDAO newsDao = new NewsDAO(); News news = newsDao.getNewsById(newsId[i]); JSONObject newsObj = new JSONObject(); newsObj.put("id", newsId[i]); newsObj.put("desc", news.getDescription()); newsObj.put("title", news.getTitle()); newsArray.add(newsObj); } // for } // 获得所有的扩展词 String[] expansionTerms = rs.getString("expansionTerms").split(","); JSONArray expansionArray = new JSONArray(); for (String expansion : expansionTerms) { expansionArray.add(expansion); } // for expan.put("events", eventsArray); expan.put("news", newsArray); expan.put("keywords", expansionArray); } // while jsonObj.put("q", query); jsonObj.put("expan", expan); } // try } catch (SQLException e) { e.printStackTrace(); } finally { try { if (rs != null) rs.close(); if (pstmt != null) pstmt.close(); if (conn != null) conn.close(); } catch (SQLException e) { e.printStackTrace(); } } return jsonObj; }
public List<News> findAll() { return newsDAO.findAll(); }
public void delete(News news) { newsDAO.delete(news); }
public void save(News news) { newsDAO.save(news); }
public News findById(int id) { return newsDAO.findById(id); }
/** * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods. * * @param request servlet request * @param response servlet response * @throws ServletException if a servlet-specific error occurs * @throws IOException if an I/O error occurs */ protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("UTF-8"); Connection conexion = null; try { ///////////////////////////////////////// // ESTABLECER CONEXION ///////////////////////////////////////// conexion = ds.getConnection(); NewsDAO newsDAO = new NewsDAO(); newsDAO.setConexion(conexion); ///////////////////////////////////////// // COMPROBAR SESSION ///////////////////////////////////////// try { /* recuperar sesion */ HttpSession session = request.getSession(false); /* obtener parametros de session */ int access = Integer.parseInt((String) session.getAttribute("access")); String username = (String) session.getAttribute("username"); /* comprobar permisos de usuario */ if (access != 777) { request.getRequestDispatcher("/ForbiddenServlet").forward(request, response); } /* obtener los valores de session y asignar valores a la jsp */ request.setAttribute("userJsp", username); request.setAttribute("access", access); try { ///////////////////////////////////////// // RECIBIR Y COMPROBAR PARAMETROS ///////////////////////////////////////// String sidNews = request.getParameter("idNews"); String stittle = request.getParameter("tittle"); String sdetails = request.getParameter("details"); String stypeNews = request.getParameter("typeNews"); String surlImage = request.getParameter("urlImage"); String sdateBegin = request.getParameter("dateBegin"); String sdateEnd = request.getParameter("dateEnd"); News news = new News(); boolean error = false; /* comprobar id news */ if (sidNews == null || sidNews.trim().equals("")) { request.setAttribute("msgErrorIdNews", "Error al recibir id noticias. "); error = true; } else { try { news.setIdNews(Integer.parseInt(sidNews)); } catch (NumberFormatException n) { request.setAttribute("msgErrorIdNews", "Error al recibir id noticias. "); error = true; } } /* comprobar tittle */ if (stittle == null || stittle.trim().equals("")) { request.setAttribute( "msgErrorTittle", "Error: Debe ingresar un titulo para la noticia. "); error = true; } else { news.setTittle(stittle); } /* comprobar details */ if (sdetails == null || sdetails.trim().equals("")) { request.setAttribute("msgErrorDetails", "Error: Debe ingresar detalle de la noticia"); error = true; } else { news.setDetails(sdetails); } /* comprobar type news */ if (stypeNews == null || stypeNews.trim().equals("")) { request.setAttribute("msgErrorTypeNews", "Error al recibir tipo de noticia."); error = true; } else { try { news.setTypeNews(Integer.parseInt(stypeNews)); } catch (NumberFormatException n) { request.setAttribute( "msgErrorTypeNews", "Error: Debe recibir un valor numérico en tipo de noticias."); error = true; } } /* comprobar url image */ if (surlImage == null || surlImage.trim().equals("")) { request.setAttribute("msgErrorUrlImage", "Error: Debe ingresar la url de la imagen."); error = true; } else { news.setUrlImage(surlImage); } /* comprobar dateBegin */ if (sdateBegin == null || sdateBegin.trim().equals("")) { request.setAttribute("msgErrorDate", "Error al recibir feha de inicio."); error = true; } else { /* comprobar dateEnd */ if (sdateEnd == null || sdateEnd.trim().equals("")) { request.setAttribute("msgErrorDate", "Error al recibir feha de término."); error = true; } else { /* comparar fechas */ news.setDateBegin(sdateBegin); news.setDateEnd(sdateEnd); // System.out.println("Comparar fecha 1 y fecha 2: " + // event.getDateBegin().compareTo(event.getDateEnd())); if (news.getDateBegin().compareTo(news.getDateEnd()) >= 0) { request.setAttribute( "msgErrorDate", "Error: La fecha de término debe ser mayor que la fecha de inicio."); error = true; } } } if (!error) { /* comprobar registros duplicados */ boolean find = newsDAO.validateDuplicate(news); if (find) { request.setAttribute( "msgErrorDup", "Error: ya existe esta noticia. Compruebe utilizando otro título u otro rango de fechas."); } else { News aux = newsDAO.findByNews(news); if (aux != null) { newsDAO.update(news); request.setAttribute("msgOk", "Registro actualizado exitosamente! "); } else { request.setAttribute( "msgErrorFound", "Error: El registro no existe o ha sido mientras se actualizaba."); } } } ///////////////////////////////////////// // ESTABLECER ATRIBUTOS AL REQUEST ///////////////////////////////////////// request.setAttribute("news", news); } catch (Exception parameterException) { } finally { request.getRequestDispatcher("/news/newsUpdate.jsp").forward(request, response); } } catch (Exception sessionException) { /* enviar a la vista de login */ System.out.println("no ha iniciado session"); request.getRequestDispatcher("/login/login.jsp").forward(request, response); } } catch (Exception connectionException) { connectionException.printStackTrace(); } finally { try { conexion.close(); } catch (Exception noGestionar) { } } }