Implemented node repository

This commit is contained in:
Andrey Terentev 2023-11-16 12:04:26 +07:00
parent 9ae71189c7
commit f9547b9cbe
2 changed files with 63 additions and 0 deletions

View File

@ -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<Node> findNode(String nodeId);
List<Node> all();
}

View File

@ -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<String, Node> 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<Node> findNode(String nodeId) {
synchronized (nodeMap) {
return nodeMap.containsKey(nodeId)? Optional.of(nodeMap.get(nodeId)) : Optional.empty();
}
}
@Override
public List<Node> all() {
synchronized (nodeMap) {
return nodeMap.values().stream().toList();
}
}
}