Add diagram delete support
Some checks failed
Tests / test-java-8-war-generation (push) Failing after 26s
Tests / test-mvn-livecycle (11) (push) Failing after 5s
Tests / test-mvn-livecycle (17) (push) Failing after 6s
Tests / test-embedded (11) (push) Has been skipped
Tests / test-embedded (17) (push) Has been skipped
Tests / test-mvn-jetty-run (11) (push) Has been skipped
Tests / test-mvn-jetty-run (17) (push) Has been skipped
Tests / test-jetty (11) (push) Has been skipped
Tests / test-jetty (17) (push) Has been skipped
Tests / test-tomcat (11) (push) Has been skipped
Tests / test-tomcat (17) (push) Has been skipped

This commit is contained in:
Matthieu
2026-01-06 08:48:28 +01:00
parent c4954b6ebf
commit 96aac19684
3 changed files with 72 additions and 2 deletions

View File

@@ -118,7 +118,31 @@ public class DiagramStorageServlet extends HttpServlet {
final HttpServletRequest req,
final HttpServletResponse resp
) throws ServletException, IOException {
writeError(resp, HttpServletResponse.SC_METHOD_NOT_ALLOWED, "Delete is disabled");
if (!isAuthorized(req)) {
writeError(resp, HttpServletResponse.SC_UNAUTHORIZED, "Missing or invalid token");
return;
}
final String id = extractId(req);
if (id == null || id.isBlank()) {
writeError(resp, HttpServletResponse.SC_BAD_REQUEST, "Diagram id is required");
return;
}
if (!storage.isValidId(id)) {
writeError(resp, HttpServletResponse.SC_BAD_REQUEST, "Invalid diagram id");
return;
}
final boolean deleted;
try {
deleted = storage.delete(id);
} catch (IOException e) {
writeError(resp, HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Unable to delete diagram");
return;
}
if (!deleted) {
writeError(resp, HttpServletResponse.SC_NOT_FOUND, "Diagram not found");
return;
}
writeJson(resp, HttpServletResponse.SC_OK, Map.of("id", id, "deleted", true));
}
private String extractId(final HttpServletRequest req) {

View File

@@ -17,6 +17,7 @@
<div class="actions-row">
<input id="diagram-storage-save" class="ok" type="button" value="Sauvegarder" />
<input id="diagram-storage-load" type="button" value="Charger" />
<input id="diagram-storage-delete" class="cancel" type="button" value="Supprimer" />
<input id="diagram-storage-refresh" type="button" value="Rafraichir la liste" />
</div>
<p id="diagram-storage-status" class="status-message"></p>

View File

@@ -280,6 +280,48 @@
});
}
function deleteDiagram(pathValue) {
log("delete click", pathValue || dom.path.value);
const path = validatePath(pathValue || dom.path.value);
if (!path) {
return;
}
const confirmMessage = `Supprimer le diagramme "${path}" ?`;
if (!window.confirm(confirmMessage)) {
return;
}
if (dom.del) {
dom.del.disabled = true;
}
const headers = authHeaders({});
fetch(`${API_BASE}/${encodeURIComponent(path)}`, { method: "DELETE", headers })
.then(handleResponse)
.then(() => {
setStatus(`Diagramme "${path}" supprime.`, "success");
if (dom.path) {
dom.path.value = "";
}
if (dom.name) {
dom.name.value = "";
}
refreshList();
closeModal("diagram-storage");
})
.catch(err => {
if (err.status === 401) {
setToken();
} else {
setStatus(`Echec de la suppression : ${err.message}`, "error");
console.error("[diagram-storage] delete error", err);
}
})
.finally(() => {
if (dom.del) {
dom.del.disabled = false;
}
});
}
function bindMenuButtons() {
const candidates = [
{ id: "menu-item-editor-save", label: "menu save click" },
@@ -326,7 +368,10 @@
dom.load.addEventListener("click", () => loadDiagram());
}
if (dom.del) {
dom.del.addEventListener("click", () => {});
const freshDelete = dom.del.cloneNode(true);
dom.del.parentNode.replaceChild(freshDelete, dom.del);
dom.del = freshDelete;
dom.del.addEventListener("click", () => deleteDiagram());
}
if (dom.refresh) {
dom.refresh.addEventListener("click", () => refreshList(true));