diff --git a/LoadBalancerWeb/src/main/java/ru/dragonestia/loadbalancer/web/component/BucketList.java b/LoadBalancerWeb/src/main/java/ru/dragonestia/loadbalancer/web/component/BucketList.java
index 8a6d332..ea78d20 100644
--- a/LoadBalancerWeb/src/main/java/ru/dragonestia/loadbalancer/web/component/BucketList.java
+++ b/LoadBalancerWeb/src/main/java/ru/dragonestia/loadbalancer/web/component/BucketList.java
@@ -92,7 +92,7 @@ public class BucketList extends VerticalLayout {
private void clickDetailsButton(Bucket bucket) {
getUI().ifPresent(ui -> {
ui.navigate("/nodes/" + bucket.getNodeIdentifier() +
- "/" + bucket.getIdentifier());
+ "/buckets/" + bucket.getIdentifier());
});
}
diff --git a/LoadBalancerWeb/src/main/java/ru/dragonestia/loadbalancer/web/page/BucketsPage.java b/LoadBalancerWeb/src/main/java/ru/dragonestia/loadbalancer/web/page/BucketsPage.java
new file mode 100644
index 0000000..9d55159
--- /dev/null
+++ b/LoadBalancerWeb/src/main/java/ru/dragonestia/loadbalancer/web/page/BucketsPage.java
@@ -0,0 +1,53 @@
+package ru.dragonestia.loadbalancer.web.page;
+
+import com.vaadin.flow.component.Html;
+import com.vaadin.flow.component.html.H2;
+import com.vaadin.flow.component.html.Hr;
+import com.vaadin.flow.component.orderedlayout.VerticalLayout;
+import com.vaadin.flow.router.BeforeEnterEvent;
+import com.vaadin.flow.router.BeforeEnterObserver;
+import com.vaadin.flow.router.Route;
+import ru.dragonestia.loadbalancer.web.component.NavPath;
+import ru.dragonestia.loadbalancer.web.model.Bucket;
+import ru.dragonestia.loadbalancer.web.model.Node;
+import ru.dragonestia.loadbalancer.web.model.type.LoadBalancingMethod;
+import ru.dragonestia.loadbalancer.web.model.type.SlotLimit;
+
+@Route("/nodes/:nodeId/buckets/:bucketId")
+public class BucketsPage extends VerticalLayout implements BeforeEnterObserver {
+
+ private Bucket bucket;
+
+ @Override
+ public void beforeEnter(BeforeEnterEvent event) {
+ var nodeIdOpt = event.getRouteParameters().get("nodeId");
+ var bucketIdOpt = event.getRouteParameters().get("bucketId");
+
+ if (nodeIdOpt.isEmpty() || bucketIdOpt.isEmpty()) {
+ getUI().ifPresent(ui -> ui.navigate("/nodes"));
+ return;
+ }
+ // TODO: getting bucket
+ bucket = Bucket.create(bucketIdOpt.get(), new Node(nodeIdOpt.get(), LoadBalancingMethod.ROUND_ROBIN), SlotLimit.unlimited(), "");
+
+ init();
+ }
+
+ private void init() {
+ add(new NavPath(new NavPath.Point("Nodes", "/nodes"),
+ new NavPath.Point(bucket.getNodeIdentifier(), "/nodes/" + bucket.getNodeIdentifier()),
+ new NavPath.Point(bucket.getIdentifier(), "/nodes/" + bucket.getNodeIdentifier() + "/buckets/" + bucket.getIdentifier())));
+ add(new H2("Bucket details"));
+ printBucketDetails();
+ add(new Hr());
+ add(new H2("Add users"));
+ add(new Hr());
+ add(new H2("Users"));
+ }
+
+ private void printBucketDetails() {
+ add(new Html("Node identifier: " + bucket.getNodeIdentifier() + ""));
+ add(new Html("Bucket identifier: " + bucket.getIdentifier() + ""));
+ add(new Html("Slots: " + (bucket.getSlots().isUnlimited()? "Unlimited" : bucket.getSlots().getSlots()) + ""));
+ }
+}