package com.revolsys.record.io.format.esri.gdb.xml.type;
import java.util.HashMap;
import java.util.Map;
import com.revolsys.datatype.DataType;
import com.revolsys.datatype.DataTypes;
import com.revolsys.record.io.format.esri.gdb.xml.EsriGeodatabaseXmlConstants;
import com.revolsys.record.io.format.esri.gdb.xml.model.enums.FieldType;
public class EsriGeodatabaseXmlFieldTypeRegistry implements EsriGeodatabaseXmlConstants {
public static final EsriGeodatabaseXmlFieldTypeRegistry INSTANCE = new EsriGeodatabaseXmlFieldTypeRegistry();
private final Map<FieldType, DataType> esriToDataType = new HashMap<>();
private final Map<DataType, EsriGeodatabaseXmlFieldType> typeMapping = new HashMap<>();
public EsriGeodatabaseXmlFieldTypeRegistry() {
addFieldType(new SimpleFieldType(FieldType.esriFieldTypeOID, DataTypes.INT, false));
addFieldType(new SimpleFieldType(FieldType.esriFieldTypeGlobalID, DataTypes.STRING, false));
addFieldType(new SimpleFieldType(FieldType.esriFieldTypeGUID, DataTypes.STRING, false));
addFieldType(new SimpleFieldType(FieldType.esriFieldTypeString, DataTypes.ANY_URI, false));
addFieldType(new SimpleFieldType(null, DataTypes.BASE64_BINARY, false));
addFieldType(new SimpleFieldType(FieldType.esriFieldTypeString, DataTypes.BOOLEAN, false));
addFieldType(new SimpleFieldType(FieldType.esriFieldTypeSmallInteger, DataTypes.BYTE,
"xs:short", false, 2));
addFieldType(new SimpleFieldType(FieldType.esriFieldTypeDate, DataTypes.DATE, false, 8));
addFieldType(new SimpleFieldType(FieldType.esriFieldTypeDate, DataTypes.SQL_DATE, false, 8));
addFieldType(new SimpleFieldType(FieldType.esriFieldTypeDate, DataTypes.DATE_TIME, false, 8));
addFieldType(new SimpleFieldType(FieldType.esriFieldTypeDate, DataTypes.TIMESTAMP, false, 8));
addFieldType(
new SimpleFieldType(FieldType.esriFieldTypeDouble, DataTypes.DECIMAL, "xs:double", false, 8));
addFieldType(new SimpleFieldType(FieldType.esriFieldTypeDouble, DataTypes.DOUBLE, false, 8));
addFieldType(
new SimpleFieldType(FieldType.esriFieldTypeSingle, DataTypes.FLOAT, "xs:double", false, 4));
addFieldType(
new SimpleFieldType(FieldType.esriFieldTypeInteger, DataTypes.INTEGER, "xs:int", false, 4));
addFieldType(
new SimpleFieldType(FieldType.esriFieldTypeInteger, DataTypes.LONG, "xs:int", false, 4));
addFieldType(new SimpleFieldType(FieldType.esriFieldTypeInteger, DataTypes.INT, false, 4));
addFieldType(
new SimpleFieldType(FieldType.esriFieldTypeString, DataTypes.QNAME, "xs:string", true, -1));
addFieldType(
new SimpleFieldType(FieldType.esriFieldTypeSmallInteger, DataTypes.SHORT, false, 2));
addFieldType(new SimpleFieldType(FieldType.esriFieldTypeString, DataTypes.STRING, false));
addFieldType(new XmlGeometryFieldType(FieldType.esriFieldTypeGeometry, DataTypes.POINT));
addFieldType(new XmlGeometryFieldType(FieldType.esriFieldTypeGeometry, DataTypes.MULTI_POINT));
addFieldType(new XmlGeometryFieldType(FieldType.esriFieldTypeGeometry, DataTypes.LINE_STRING));
addFieldType(new XmlGeometryFieldType(FieldType.esriFieldTypeGeometry, DataTypes.LINEAR_RING));
addFieldType(
new XmlGeometryFieldType(FieldType.esriFieldTypeGeometry, DataTypes.MULTI_LINE_STRING));
addFieldType(new XmlGeometryFieldType(FieldType.esriFieldTypeGeometry, DataTypes.POLYGON));
addFieldType(
new XmlGeometryFieldType(FieldType.esriFieldTypeGeometry, DataTypes.MULTI_POLYGON));
addFieldType(new XmlGeometryFieldType(FieldType.esriFieldTypeGeometry, DataTypes.GEOMETRY));
}
public void addFieldType(final DataType dataType, final EsriGeodatabaseXmlFieldType fieldType) {
this.typeMapping.put(dataType, fieldType);
this.esriToDataType.put(fieldType.getEsriFieldType(), dataType);
}
public void addFieldType(final EsriGeodatabaseXmlFieldType fieldType) {
final DataType dataType = fieldType.getDataType();
addFieldType(dataType, fieldType);
}
public DataType getDataType(final FieldType fieldType) {
return this.esriToDataType.get(fieldType);
}
public EsriGeodatabaseXmlFieldType getFieldType(final DataType dataType) {
return this.typeMapping.get(dataType);
}
}