package com.revolsys.swing.map.layer.record; import java.util.ArrayList; import java.util.Collection; import java.util.concurrent.atomic.AtomicInteger; import com.revolsys.util.Label; public class CachedLayerRecordArrayList extends ArrayList<LayerRecord> { private static final AtomicInteger COUNT = new AtomicInteger(); /** * */ private static final long serialVersionUID = 1L; private final Label cacheId = new Label("list_" + COUNT.incrementAndGet()); private final RecordStoreLayer layer; public CachedLayerRecordArrayList(final RecordStoreLayer layer) { super(); this.layer = layer; } public CachedLayerRecordArrayList(final RecordStoreLayer layer, final Collection<? extends LayerRecord> collection) { super(collection); this.layer = layer; } @Override public void add(final int index, final LayerRecord element) { super.add(index, element); updateCache(); } @Override public boolean add(final LayerRecord e) { final boolean result = super.add(e); updateCache(); return result; } @Override public boolean addAll(final Collection<? extends LayerRecord> c) { final boolean result = super.addAll(c); updateCache(); return result; } @Override public boolean addAll(final int index, final Collection<? extends LayerRecord> c) { final boolean addAll = super.addAll(index, c); updateCache(); return addAll; } @Override public void clear() { super.clear(); this.layer.clearCachedRecords(this.cacheId); } @Override protected void finalize() throws Throwable { super.finalize(); this.layer.clearCachedRecords(this.cacheId); } @Override public LayerRecord remove(final int index) { final LayerRecord result = super.remove(index); updateCache(); return result; } @Override public boolean remove(final Object o) { final boolean result = super.remove(o); updateCache(); return result; } @Override public boolean removeAll(final Collection<?> c) { final boolean result = super.removeAll(c); updateCache(); return result; } @Override public LayerRecord set(final int index, final LayerRecord element) { final LayerRecord oldValue = super.set(index, element); updateCache(); return oldValue; } private void updateCache() { // this.layer.setRecordsToCache(this.cacheId, this); } }