package com.revolsys.gis.esri.gdb.file.capi.type; import java.lang.ref.Reference; import java.lang.ref.WeakReference; import com.revolsys.datatype.DataType; import com.revolsys.gis.esri.gdb.file.FileGdbRecordStore; import com.revolsys.gis.esri.gdb.file.capi.swig.Row; import com.revolsys.record.Record; import com.revolsys.record.schema.FieldDefinition; public abstract class AbstractFileGdbFieldDefinition extends FieldDefinition { private Reference<FileGdbRecordStore> recordStore; public AbstractFileGdbFieldDefinition(final String name, final DataType dataType, final boolean required) { super(name, dataType, required); } public AbstractFileGdbFieldDefinition(final String name, final DataType dataType, final int length, final boolean required) { super(name, dataType, length, required); } public FileGdbRecordStore getRecordStore() { if (this.recordStore == null) { return null; } else { return this.recordStore.get(); } } public Object getSync() { return getRecordStore().getApiSync(); } public abstract Object getValue(Row row); public boolean isAutoCalculated() { return false; } public void setInsertValue(final Record record, final Row row, final Object value) { setValue(record, row, value); } protected void setNull(final Row row) { final String name = getName(); if (isRequired()) { throw new IllegalArgumentException(name + " is required and cannot be null"); } else { row.setNull(name); } } public void setPostInsertValue(final Record record, final Row row) { } public void setRecordStore(final FileGdbRecordStore recordStore) { this.recordStore = new WeakReference<>(recordStore); } public void setUpdateValue(final Record record, final Row row, final Object value) { setValue(record, row, value); } public abstract void setValue(Record record, Row row, Object value); }