/* * This Java source file was generated by the Gradle 'init' task. */ package com.literalice.docrdr; import jakarta.servlet.RequestDispatcher; import jakarta.servlet.ServletContext; import jakarta.servlet.ServletException; import jakarta.servlet.annotation.WebServlet; import jakarta.annotation.Resource; import jakarta.servlet.http.*; import java.io.IOException; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import javax.sql.DataSource; import org.slf4j.LoggerFactory; import org.slf4j.Logger; @WebServlet("/documents/*") public class DocumentsServlet extends HttpServlet { private static Logger LOGGER = LoggerFactory.getLogger(DocumentDraftsServlet.class); @Resource(name = "jdbc/MainDB") private DataSource dataSource; @Override protected void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException { String pathInfo = req.getPathInfo(); LOGGER.info("Path: {}", pathInfo); if (pathInfo != null) { String documentId = req.getPathInfo().split("/")[1]; HTMLDocument document = getDocument(documentId); if (document == null) { res.setStatus(404); getServletContext().setAttribute("message", "Document Not Found"); RequestDispatcher dispatcher = req.getRequestDispatcher("/WEB-INF/jsp/error.jsp"); dispatcher.forward(req, res); } else { getServletContext().setAttribute("document", document); RequestDispatcher dispatcher = req.getRequestDispatcher("/WEB-INF/jsp/documents/show.jsp"); dispatcher.forward(req, res); } } else { List documents = getDocuments(); getServletContext().setAttribute("documents", documents); RequestDispatcher dispatcher = req.getRequestDispatcher("/WEB-INF/jsp/documents/list.jsp"); dispatcher.forward(req, res); } } @Override protected void doPost(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException { HttpSession session = req.getSession(); HTMLDocument document = (HTMLDocument) session.getAttribute("document"); try ( Connection conn = dataSource.getConnection(); PreparedStatement statement = conn.prepareStatement("INSERT INTO DOCUMENTS VALUES (?,?,?,?)");) { statement.setString(1, document.getId()); statement.setString(2, document.getTranslatedTitle()); statement.setString(3, document.getUrl()); statement.setString(4, document.getTranslatedContent()); statement.executeUpdate(); } catch (Exception e) { e.printStackTrace(); } res.sendRedirect(String.format("%s/documents/%s", req.getContextPath(), document.getId())); } private List getDocuments() { List result = new ArrayList<>(); try ( Connection conn = dataSource.getConnection(); PreparedStatement statement = conn.prepareStatement("SELECT * FROM DOCUMENTS");) { ResultSet resultSet = statement.executeQuery(); while (resultSet.next()) { result.add(toDocument(resultSet)); } } catch (Exception e) { throw new RuntimeException(e); } return result; } private HTMLDocument getDocument(String documentId) { try ( Connection conn = dataSource.getConnection(); PreparedStatement statement = conn.prepareStatement("SELECT * FROM DOCUMENTS WHERE ID = ?");) { statement.setString(1, documentId); ResultSet resultSet = statement.executeQuery(); while (resultSet.next()) { return toDocument(resultSet); } } catch (Exception e) { throw new RuntimeException(e); } return null; } private HTMLDocument toDocument(ResultSet resultSet) { ServletContext ctx = getServletContext(); String targetLang = ctx.getInitParameter("TARGET_LANGUAGE"); try { return new HTMLDocument( resultSet.getString("ID"), resultSet.getString("TITLE"), resultSet.getString("URL"), resultSet.getString("ORIGINAL"), targetLang); } catch (SQLException e) { throw new RuntimeException(e); } } }