package com.revolsys.record.schema; import java.util.Collections; import java.util.List; import com.revolsys.geometry.model.GeometryFactory; import com.revolsys.geometry.model.GeometryFactoryProxy; import com.revolsys.io.PathName; import com.revolsys.io.PathNameProxy; import com.revolsys.record.Record; import com.revolsys.record.RecordFactory; import com.revolsys.util.IconNameProxy; public interface RecordDefinitionProxy extends PathNameProxy, IconNameProxy, GeometryFactoryProxy { default int getFieldCount() { final RecordDefinition recordDefinition = getRecordDefinition(); if (recordDefinition == null) { return 0; } else { return recordDefinition.getFieldCount(); } } default FieldDefinition getFieldDefinition(final CharSequence fieldName) { final RecordDefinition recordDefinition = getRecordDefinition(); if (recordDefinition == null) { return null; } else { return recordDefinition.getField(fieldName); } } default FieldDefinition getFieldDefinition(final int fieldIndex) { final RecordDefinition recordDefinition = getRecordDefinition(); if (recordDefinition == null) { return null; } else { return recordDefinition.getField(fieldIndex); } } default List<FieldDefinition> getFieldDefinitions() { final RecordDefinition recordDefinition = getRecordDefinition(); if (recordDefinition == null) { return Collections.emptyList(); } else { return recordDefinition.getFields(); } } default int getFieldIndex(final CharSequence fieldName) { final RecordDefinition recordDefinition = getRecordDefinition(); if (recordDefinition == null) { return -1; } else { return recordDefinition.getFieldIndex(fieldName); } } default String getFieldName(final int fieldIndex) { final RecordDefinition recordDefinition = getRecordDefinition(); if (recordDefinition == null) { return null; } else { return recordDefinition.getFieldName(fieldIndex); } } default List<String> getFieldNames() { final RecordDefinition recordDefinition = getRecordDefinition(); if (recordDefinition == null) { return Collections.emptyList(); } else { return recordDefinition.getFieldNames(); } } default String getFieldTitle(final String name) { final RecordDefinition recordDefinition = getRecordDefinition(); if (recordDefinition == null) { return name; } else { return recordDefinition.getFieldTitle(name); } } @Override default GeometryFactory getGeometryFactory() { final RecordDefinition recordDefinition = getRecordDefinition(); if (recordDefinition == null) { return GeometryFactory.DEFAULT_3D; } else { return recordDefinition.getGeometryFactory(); } } default String getGeometryFieldName() { final RecordDefinition recordDefinition = getRecordDefinition(); if (recordDefinition == null) { return null; } else { return recordDefinition.getGeometryFieldName(); } } @Override default String getIconName() { final RecordDefinition recordDefinition = getRecordDefinition(); if (recordDefinition == null) { return "table"; } else { return recordDefinition.getIconName(); } } default String getIdFieldName() { final RecordDefinition recordDefinition = getRecordDefinition(); if (recordDefinition == null) { return null; } else { return recordDefinition.getIdFieldName(); } } default List<String> getIdFieldNames() { final RecordDefinition recordDefinition = getRecordDefinition(); if (recordDefinition == null) { return Collections.emptyList(); } else { return recordDefinition.getIdFieldNames(); } } @Override default PathName getPathName() { final RecordDefinition recordDefinition = getRecordDefinition(); if (recordDefinition == null) { return null; } else { return recordDefinition.getPathName(); } } RecordDefinition getRecordDefinition(); default <R extends Record> RecordFactory<R> getRecordFactory() { final RecordDefinition recordDefinition = getRecordDefinition(); if (recordDefinition == null) { return null; } else { return recordDefinition.getRecordFactory(); } } default <R extends RecordStore> R getRecordStore() { final RecordDefinition recordDefinition = getRecordDefinition(); if (recordDefinition == null) { return null; } else { return recordDefinition.getRecordStore(); } } /** * Checks to see if the definition for this record has a field with the * specified name. * * @param name The name of the field. * @return True if the record has a field with the specified name. */ default boolean hasField(final CharSequence name) { final RecordDefinition recordDefinition = getRecordDefinition(); if (recordDefinition == null) { return false; } else { return recordDefinition.hasField(name); } } }