package org.warp.commonutils.type; import java.util.Optional; import java.util.Set; public final class SynchronizedAssociation implements Association { private final Association association; private final Object lock; SynchronizedAssociation(Association association) { this.association = association; this.lock = new Object(); } SynchronizedAssociation(Association association, Object lock) { this.association = association; this.lock = lock; } @Override public boolean link(T src, U dest) { synchronized (lock) { return association.link(src, dest); } } @Override public boolean unlink(T src, U dest) { synchronized (lock) { return association.unlink(src, dest); } } @Override public Set unlink(T src) { synchronized (lock) { return association.unlink(src); } } @Override public Optional unlinkFromSource(U dest) { synchronized (lock) { return association.unlinkFromSource(dest); } } @Override public boolean hasAnyLink(T src) { synchronized (lock) { return association.hasAnyLink(src); } } @Override public boolean hasLinkSource(U dest) { synchronized (lock) { return association.hasLinkSource(dest); } } @Override public boolean hasLink(T src, U dest) { synchronized (lock) { return association.hasLink(src, dest); } } @Override public Set getLinks(T src) { synchronized (lock) { return association.getLinks(src); } } @Override public Optional getLinkSource(U dest) { synchronized (lock) { return association.getLinkSource(dest); } } @Override public void clear() { synchronized (lock) { association.clear(); } } @Override public int size() { synchronized (lock) { return association.size(); } } }