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
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:
@@ -118,7 +118,31 @@ public class DiagramStorageServlet extends HttpServlet {
|
|||||||
final HttpServletRequest req,
|
final HttpServletRequest req,
|
||||||
final HttpServletResponse resp
|
final HttpServletResponse resp
|
||||||
) throws ServletException, IOException {
|
) 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) {
|
private String extractId(final HttpServletRequest req) {
|
||||||
|
|||||||
@@ -17,6 +17,7 @@
|
|||||||
<div class="actions-row">
|
<div class="actions-row">
|
||||||
<input id="diagram-storage-save" class="ok" type="button" value="Sauvegarder" />
|
<input id="diagram-storage-save" class="ok" type="button" value="Sauvegarder" />
|
||||||
<input id="diagram-storage-load" type="button" value="Charger" />
|
<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" />
|
<input id="diagram-storage-refresh" type="button" value="Rafraichir la liste" />
|
||||||
</div>
|
</div>
|
||||||
<p id="diagram-storage-status" class="status-message"></p>
|
<p id="diagram-storage-status" class="status-message"></p>
|
||||||
|
|||||||
@@ -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() {
|
function bindMenuButtons() {
|
||||||
const candidates = [
|
const candidates = [
|
||||||
{ id: "menu-item-editor-save", label: "menu save click" },
|
{ id: "menu-item-editor-save", label: "menu save click" },
|
||||||
@@ -326,7 +368,10 @@
|
|||||||
dom.load.addEventListener("click", () => loadDiagram());
|
dom.load.addEventListener("click", () => loadDiagram());
|
||||||
}
|
}
|
||||||
if (dom.del) {
|
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) {
|
if (dom.refresh) {
|
||||||
dom.refresh.addEventListener("click", () => refreshList(true));
|
dom.refresh.addEventListener("click", () => refreshList(true));
|
||||||
|
|||||||
Reference in New Issue
Block a user