WorkflowSessionIndex.java
package org.hammer.audio.workflow.collaboration;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
/** Small mutable index whose lifecycle and synchronization are owned by one session lock. */
@SuppressWarnings("PMD.UseConcurrentHashMap")
final class WorkflowSessionIndex<K, V> {
private static final String KEY_FIELD = "key";
private final Map<K, V> entries = new HashMap<>();
V get(K key) {
return entries.get(Objects.requireNonNull(key, KEY_FIELD));
}
V put(K key, V value) {
return entries.put(
Objects.requireNonNull(key, KEY_FIELD), Objects.requireNonNull(value, "value"));
}
V putIfAbsent(K key, V value) {
return entries.putIfAbsent(
Objects.requireNonNull(key, KEY_FIELD), Objects.requireNonNull(value, "value"));
}
V remove(K key) {
return entries.remove(Objects.requireNonNull(key, KEY_FIELD));
}
List<V> values() {
return List.copyOf(entries.values());
}
}