package fr.lteconsulting.hexa.client.ui.miracle; import java.util.HashMap; public abstract class CollectionOf<T> implements RefMng<T> { abstract protected int getObjectId( T object ); abstract protected void updated( T object ); abstract protected void deleted( int ref, T object ); abstract protected void refreshed( Iterable<T> objects ); private HashMap<Integer, T> map = new HashMap<Integer, T>(); @Override final public int getRef( T object ) { return getObjectId( object ); } @Override final public T getObject( int ref ) { return map.get( ref ); } final public void add( T object ) { map.put( getObjectId( object ), object ); updated( getObjectId( object ) ); } final public void refresh( Iterable<T> list ) { map.clear(); if( list != null ) { for( T t : list ) add( t ); } refreshed( map.values() ); } final public void update( T object ) { map.put( getObjectId( object ), object ); updated( getObjectId( object ) ); } final public void updated( int ref ) { T object = getObject( ref ); updated( object ); } final public void delete( T object ) { delete( getRef( object ) ); } final public void delete( int ref ) { T object = map.remove( ref ); deleted( ref, object ); } final public Iterable<T> getList() { return map.values(); } final public int size() { return map.size(); } }