From f9547b9cbe30655df85ff89eff29129d34d1a30f Mon Sep 17 00:00:00 2001 From: ScarletRedMan Date: Thu, 16 Nov 2023 12:04:26 +0700 Subject: [PATCH] Implemented node repository --- .../repository/NodeRepository.java | 17 +++++++ .../repository/impl/NodeRepositoryImpl.java | 46 +++++++++++++++++++ 2 files changed, 63 insertions(+) create mode 100644 src/main/java/ru/dragonestia/loadbalancer/repository/NodeRepository.java create mode 100644 src/main/java/ru/dragonestia/loadbalancer/repository/impl/NodeRepositoryImpl.java diff --git a/src/main/java/ru/dragonestia/loadbalancer/repository/NodeRepository.java b/src/main/java/ru/dragonestia/loadbalancer/repository/NodeRepository.java new file mode 100644 index 0000000..7f9cec8 --- /dev/null +++ b/src/main/java/ru/dragonestia/loadbalancer/repository/NodeRepository.java @@ -0,0 +1,17 @@ +package ru.dragonestia.loadbalancer.repository; + +import ru.dragonestia.loadbalancer.model.Node; + +import java.util.List; +import java.util.Optional; + +public interface NodeRepository { + + void createNode(Node node); + + void deleteNode(Node node); + + Optional findNode(String nodeId); + + List all(); +} diff --git a/src/main/java/ru/dragonestia/loadbalancer/repository/impl/NodeRepositoryImpl.java b/src/main/java/ru/dragonestia/loadbalancer/repository/impl/NodeRepositoryImpl.java new file mode 100644 index 0000000..dc18e61 --- /dev/null +++ b/src/main/java/ru/dragonestia/loadbalancer/repository/impl/NodeRepositoryImpl.java @@ -0,0 +1,46 @@ +package ru.dragonestia.loadbalancer.repository.impl; + +import ru.dragonestia.loadbalancer.model.Node; +import ru.dragonestia.loadbalancer.repository.NodeRepository; + +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.concurrent.ConcurrentHashMap; + +public class NodeRepositoryImpl implements NodeRepository { + + private final Map nodeMap = new ConcurrentHashMap<>(); + + @Override + public void createNode(Node node) { + synchronized (nodeMap) { + if (nodeMap.containsKey(node.identifier())) { + throw new IllegalArgumentException("Node with id '" + node.identifier() + "' already exists"); + } + + nodeMap.put(node.identifier(), node); + } + } + + @Override + public void deleteNode(Node node) { + synchronized (nodeMap) { + nodeMap.remove(node.identifier()); + } + } + + @Override + public Optional findNode(String nodeId) { + synchronized (nodeMap) { + return nodeMap.containsKey(nodeId)? Optional.of(nodeMap.get(nodeId)) : Optional.empty(); + } + } + + @Override + public List all() { + synchronized (nodeMap) { + return nodeMap.values().stream().toList(); + } + } +}