package com.revolsys.swing.map.layer.record.table.model;
import java.util.List;
import javax.swing.Icon;
import com.revolsys.record.RecordState;
import com.revolsys.swing.Icons;
import com.revolsys.swing.action.enablecheck.EnableCheck;
import com.revolsys.swing.action.enablecheck.ObjectPropertyEnableCheck;
import com.revolsys.swing.map.layer.record.AbstractRecordLayer;
import com.revolsys.swing.map.layer.record.LayerRecord;
import com.revolsys.swing.parallel.Invoke;
import com.revolsys.util.Property;
public class ModeChanged extends ModeAbstractCached {
private final EnableCheck enableCheck;
public ModeChanged(final RecordLayerTableModel model) {
super(RecordLayerTableModel.MODE_RECORDS_CHANGED, model);
final AbstractRecordLayer layer = getLayer();
this.enableCheck = new ObjectPropertyEnableCheck(layer, "hasChangedRecords");
}
@Override
public void activate() {
final AbstractRecordLayer layer = getLayer();
addListeners( //
Property.addListenerNewValueSource(layer, AbstractRecordLayer.RECORDS_INSERTED,
this::addCachedRecords), //
newRecordsDeletedListener(layer), //
Property.addListenerNewValueSource(layer, AbstractRecordLayer.RECORD_CACHE_MODIFIED,
this::addCachedRecord) //
);
super.activate();
}
@Override
public EnableCheck getEnableCheck() {
return this.enableCheck;
}
@Override
public Icon getIcon() {
return Icons.getIcon("change_table_filter");
}
@Override
protected List<LayerRecord> getRecordsForCache() {
final AbstractRecordLayer layer = getLayer();
return layer.getRecordsChanged();
}
@Override
public String getTitle() {
return "Show Only Changed Records";
}
@Override
protected void recordsDeleted(final List<LayerRecord> records) {
Invoke.later(() -> {
for (final LayerRecord record : records) {
if (RecordState.DELETED == record.getState()) {
removeCachedRecord(record);
} else {
addCachedRecord(record);
}
}
});
}
}