package com.revolsys.swing.map.layer.record;
import java.util.Collection;
import java.util.Map;
import com.revolsys.identifier.Identifier;
import com.revolsys.record.Record;
import com.revolsys.record.RecordState;
import com.revolsys.record.schema.FieldDefinition;
public abstract class AbstractProxyLayerRecord extends AbstractLayerRecord {
public AbstractProxyLayerRecord(final AbstractRecordLayer layer) {
super(layer);
}
protected <R extends LayerRecord> R addProxiedRecord(final R record) {
if (record != null) {
final AbstractRecordLayer layer = getLayer();
layer.addProxiedRecord(record);
}
return record;
}
protected Identifier addProxiedRecordIdentifier(final Identifier identifier) {
final AbstractRecordLayer layer = getLayer();
layer.addProxiedRecordIdentifier(identifier);
return identifier;
}
@Override
public boolean cancelChanges() {
final LayerRecord layerRecord = getRecordProxied();
if (layerRecord != null) {
return layerRecord.cancelChanges();
}
return false;
}
@Override
public void clearChanges() {
final LayerRecord layerRecord = getRecordProxied();
if (layerRecord != null) {
layerRecord.clearChanges();
}
}
@Override
public boolean equals(final Object o) {
final LayerRecord recordProxied = getRecordProxied();
if (recordProxied == null) {
return super.equals(o);
} else {
return recordProxied.equals(o);
}
}
@Override
public void firePropertyChange(final String propertyName, final Object oldValue,
final Object newValue) {
final LayerRecord layerRecord = getRecordProxied();
if (layerRecord != null) {
layerRecord.firePropertyChange(propertyName, oldValue, newValue);
}
}
@Override
public <T> T getOriginalValue(final String name) {
final LayerRecord layerRecord = getRecordProxied();
return layerRecord.getOriginalValue(name);
}
protected Record getRecord() {
return getRecordProxied();
}
protected LayerRecord getRecordProxied() {
final AbstractRecordLayer layer = getLayer();
final Identifier identifier = getIdentifier();
final LayerRecord layerRecord = layer.getCachedRecord(identifier);
return layerRecord;
}
@Override
public RecordState getState() {
final Record record = getRecord();
if (record == null) {
return RecordState.DELETED;
} else {
return record.getState();
}
}
@Override
public <T> T getValue(final int index) {
final Record record = getRecord();
if (record == null) {
return null;
} else {
return record.getValue(index);
}
}
@Override
public int hashCode() {
final LayerRecord recordProxied = getRecordProxied();
if (recordProxied == null) {
return super.hashCode();
} else {
return recordProxied.hashCode();
}
}
@Override
public boolean isDeleted() {
final LayerRecord record = getRecordProxied();
if (record == null) {
return true;
} else {
return record.isDeleted();
}
}
@Override
public boolean isGeometryEditable() {
final LayerRecord record = getRecordProxied();
return record.isGeometryEditable();
}
@Override
public boolean isModified() {
final LayerRecord record = getRecordProxied();
return record.isModified();
}
@Override
public boolean isModified(final String name) {
final LayerRecord record = getRecordProxied();
if (record == null) {
return false;
} else {
return record.isModified(name);
}
}
@Override
public boolean isProxyRecord() {
return true;
}
@Override
public boolean isSame(Record record) {
if (record == null) {
return false;
} else if (record == this) {
return true;
} else {
if (record instanceof AbstractProxyLayerRecord) {
final AbstractProxyLayerRecord proxyRecord = (AbstractProxyLayerRecord)record;
record = proxyRecord.getRecordProxied();
}
final LayerRecord layerRecord = getRecordProxied();
if (layerRecord == null) {
return false;
} else {
return layerRecord.isSame(record);
}
}
}
@Override
public boolean isState(final RecordState state) {
final Record record = getRecord();
if (record == null) {
return state == RecordState.DELETED;
} else {
return record.isState(state);
}
}
protected <R extends LayerRecord> R removeProxiedRecord(final R record) {
final AbstractRecordLayer layer = getLayer();
layer.removeProxiedRecord(record);
return null;
}
protected Identifier removeProxiedRecordIdentifier(final Identifier identifier) {
final AbstractRecordLayer layer = getLayer();
layer.removeProxiedRecordIdentifier(identifier);
return null;
}
@Override
public LayerRecord revertChanges() {
final LayerRecord layerRecord = getRecordProxied();
return layerRecord.revertChanges();
}
@Override
public RecordState setState(final RecordState state) {
final Record record = getRecord();
if (record == null) {
return RecordState.DELETED;
} else {
return record.setState(state);
}
}
@Override
protected boolean setValue(final FieldDefinition fieldDefinition, final Object value) {
final int index = fieldDefinition.getIndex();
final Record record = getRecord();
return record.setValue(index, value);
}
@Override
public void setValues(final Map<? extends CharSequence, ? extends Object> values,
final Collection<? extends CharSequence> fieldNames) {
final Record record = getRecord();
record.setValues(values, fieldNames);
}
}