ProjetDevWeb2/Projet/src/main/java/projet/AfficherPage.java

113 lines
4.1 KiB
Java

package projet;
import jakarta.servlet.RequestDispatcher;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@WebServlet("/AfficherPage")
public class AfficherPage extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession();
Utilisateur u = (Utilisateur) session.getAttribute("utilisateur");
String idStr = request.getParameter("id");
if(u != null) {
u.chargerPages();
u.chargerPagesPartagees();
ArrayList<Page> listePages = u.getListePages();
ArrayList<Page> listePagesPartagees = u.getListePagesPartagees();
ArrayList<Message> listeMessages = Message.getListeMessages();
ArrayList<Utilisateur> listeUtilisateurs = Utilisateur.getListeUtilisateurs();
request.setAttribute("listePages", listePages);
request.setAttribute("listePagesPartagees", listePagesPartagees);
request.setAttribute("listeMessages", listeMessages);
request.setAttribute("listeUtilisateurs", listeUtilisateurs);
String menuHtml = genererMenuHTML(u.getId());
request.setAttribute("menuHtml", menuHtml);
if (idStr != null ) {
try {
int id = Integer.parseInt(idStr);
Page page = Page.getPageById(u.getId(), id);
if (page != null) {
request.setAttribute("page", page);
Map<Integer, String> hierarchie = u.getHierarchie(id);
request.setAttribute("hierarchie", hierarchie);
request.getRequestDispatcher("/WEB-INF/AfficherPage.jsp").forward(request, response);
return;
} else {
request.getRequestDispatcher("/WEB-INF/AfficherPage.jsp").forward(request, response);
return;
}
} catch (NumberFormatException e) {
response.sendError(HttpServletResponse.SC_BAD_REQUEST, "ID invalide");
return;
}
}
RequestDispatcher rd = request.getRequestDispatcher("/WEB-INF/AfficherPage.jsp");
rd.forward(request, response);
} else {
response.sendRedirect("/Projet/");
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
public static String genererMenuHTML(int idU) {
Map<Integer, List<Page>> arbre = Page.getArbreDesPages(idU);
StringBuilder html = new StringBuilder();
html.append("<ul>\n");
construireHTMLRecursif(arbre, -1, html, 6);
html.append(" </ul>\n");
return html.toString();
}
private static void construireHTMLRecursif(Map<Integer, List<Page>> arbre, int parentId, StringBuilder html, int indentLevel) {
List<Page> enfants = arbre.get(parentId);
if (enfants == null || enfants.isEmpty()) return;
String indent = "\t".repeat(indentLevel);
for (Page p : enfants) {
List<Page> sousPages = arbre.get(p.getId());
boolean aSousPages = sousPages != null && !sousPages.isEmpty();
html.append(indent).append("<li>\n");
html.append(indent).append("\t<div class='is-flex is-align-items-center is-justify-content-space-between'>\n");
html.append(indent).append("\t\t<a href='AfficherPage?id=").append(p.getId()).append("'>")
.append(p.getTitre()).append("</a>\n");
html.append(indent).append("\t\t<button class='delete delete-page-btn has-background-danger ml-2' data-id='")
.append(p.getId()).append("'></button>\n");
html.append(indent).append("\t</div>\n");
if (aSousPages) {
html.append(indent).append("\t<ul class='ml-4'>\n");
construireHTMLRecursif(arbre, p.getId(), html, indentLevel + 1);
html.append(indent).append("\t</ul>\n");
}
html.append(indent).append("</li>\n");
}
}
}