common-utils/src/main/java/org/warp/commonutils/type/SynchronizedBiAssociation.java

97 lines
1.7 KiB
Java

package org.warp.commonutils.type;
import java.util.Optional;
public class SynchronizedBiAssociation<T, U> implements BiAssociation<T, U> {
private final BiAssociation<T,U> association;
private final Object lock;
public SynchronizedBiAssociation(BiAssociation<T, U> association) {
this.association = association;
this.lock = new Object();
}
public SynchronizedBiAssociation(BiAssociation<T, U> association, Object lock) {
this.association = association;
this.lock = lock;
}
@Override
public Optional<U> 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 Optional<U> unlink(T src) {
synchronized (lock) {
return association.unlink(src);
}
}
@Override
public Optional<T> unlinkFromSource(U dest) {
synchronized (lock) {
return association.unlinkFromSource(dest);
}
}
@Override
public boolean hasLink(T src) {
synchronized (lock) {
return association.hasLink(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 Optional<U> getLink(T src) {
synchronized (lock) {
return association.getLink(src);
}
}
@Override
public Optional<T> 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();
}
}
}