package com.workshare.msnos.core.cloud;
import java.util.Collection;
import java.util.Collections;
import java.util.concurrent.ConcurrentHashMap;
import com.workshare.msnos.core.Iden;
import com.workshare.msnos.core.Identifiable;
public class IdentifiablesList<T extends Identifiable> {
public interface Callback<T> {
public void onAdd(T identifiable)
;
public void onRemove(T identifiable)
;
}
@SuppressWarnings("hiding")
public final class CallbackAdapter<T> implements Callback<T> {
@Override
public void onAdd(T identifiable) {
}
@Override
public void onRemove(T identifiable) {
}
}
private final Callback<T> callback;
private final ConcurrentHashMap<Iden, T> entities;
public IdentifiablesList() {
this(null);
}
public IdentifiablesList(Callback<T> callback) {
this.entities = new ConcurrentHashMap<Iden, T>();
this.callback = (callback != null ? callback : new CallbackAdapter<T>());
}
public Collection<T> list() {
return Collections.unmodifiableCollection(entities.values());
}
public boolean containsKey(Iden iden) {
return entities.containsKey(iden);
}
public void add(T agent) {
entities.put(agent.getIden(), agent);
callback.onAdd(agent);
}
public T remove(Iden iden) {
final T target = entities.remove(iden);
if (target != null)
callback.onRemove(target);
return target;
}
public T get(Iden iden) {
return entities.get(iden);
}
public String toString() {
return this.entities.toString();
}
}