package org.warp.commonutils.type; import it.unimi.dsi.fastutil.objects.ObjectSet; import java.util.Set; public class SynchronizedMultiAssociation implements MultiAssociation { private final MultiAssociation association; private final Object lock; SynchronizedMultiAssociation(MultiAssociation association) { this.association = association; this.lock = new Object(); } SynchronizedMultiAssociation(MultiAssociation 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 Set unlinkFromSource(U dest) { synchronized (lock) { return association.unlinkFromSource(dest); } } @Override public boolean hasAnyLink(T src) { synchronized (lock) { return association.hasAnyLink(src); } } @Override public boolean hasAnyLinkSource(U dest) { synchronized (lock) { return association.hasAnyLinkSource(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 Set getLinkSources(U dest) { synchronized (lock) { return association.getLinkSources(dest); } } @Override public void clear() { synchronized (lock) { association.clear(); } } @Override public int size() { synchronized (lock) { return association.size(); } } @Override public ObjectSet getSources() { synchronized (lock) { return association.getSources(); } } @Override public ObjectSet getDestinations() { synchronized (lock) { return association.getDestinations(); } } }