/**
   * 查询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;
  }
Beispiel #2
0
 public List<News> findAll() {
   return newsDAO.findAll();
 }
Beispiel #3
0
 public void delete(News news) {
   newsDAO.delete(news);
 }
Beispiel #4
0
 public void save(News news) {
   newsDAO.save(news);
 }
Beispiel #5
0
 public News findById(int id) {
   return newsDAO.findById(id);
 }
Beispiel #6
0
  /**
   * 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) {
      }
    }
  }