summaryrefslogtreecommitdiff
path: root/opendc-web/opendc-web-server/src/main/java/org/opendc/web/server
diff options
context:
space:
mode:
authorFabian Mastenbroek <mail.fabianm@gmail.com>2023-03-26 21:20:42 +0100
committerFabian Mastenbroek <mail.fabianm@gmail.com>2023-03-26 21:22:18 +0100
commita9da76621c1be7a11bf292e868a8f7c22f2ea203 (patch)
tree51aa097044559a45d18b9dbe44002a0dd2af2bf1 /opendc-web/opendc-web-server/src/main/java/org/opendc/web/server
parent6bc9b999ff0d9a0ad2c1c5bea1554abc30a06c5b (diff)
bug(web): Inform user when deleted topology is still used
This change fixes #135 which showed that trying to delete a topology used by a scenario would result in nothing happening in the UI and a 500 error being returned by the server. We check whether a scenario still references the topology and show an error to the user if that happens. Fixes #135
Diffstat (limited to 'opendc-web/opendc-web-server/src/main/java/org/opendc/web/server')
-rw-r--r--opendc-web/opendc-web-server/src/main/java/org/opendc/web/server/rest/user/TopologyResource.java10
1 files changed, 10 insertions, 0 deletions
diff --git a/opendc-web/opendc-web-server/src/main/java/org/opendc/web/server/rest/user/TopologyResource.java b/opendc-web/opendc-web-server/src/main/java/org/opendc/web/server/rest/user/TopologyResource.java
index 2b66b64b..71491801 100644
--- a/opendc-web/opendc-web-server/src/main/java/org/opendc/web/server/rest/user/TopologyResource.java
+++ b/opendc-web/opendc-web-server/src/main/java/org/opendc/web/server/rest/user/TopologyResource.java
@@ -22,10 +22,12 @@
package org.opendc.web.server.rest.user;
+import io.quarkus.hibernate.orm.panache.Panache;
import io.quarkus.security.identity.SecurityIdentity;
import java.time.Instant;
import java.util.List;
import javax.annotation.security.RolesAllowed;
+import javax.persistence.PersistenceException;
import javax.transaction.Transactional;
import javax.validation.Valid;
import javax.ws.rs.Consumes;
@@ -193,6 +195,14 @@ public final class TopologyResource {
entity.updatedAt = Instant.now();
entity.delete();
+
+ try {
+ // Flush the results, so we can check whether the constraints are not violated
+ Panache.flush();
+ } catch (PersistenceException e) {
+ throw new WebApplicationException("Topology is still in use", 403);
+ }
+
return UserProtocol.toDto(entity, auth);
}
}