package com.revolsys.record.io.format.esri.gdb.xml.type; import com.revolsys.datatype.DataType; import com.revolsys.record.io.format.esri.gdb.xml.EsriGeodatabaseXmlConstants; import com.revolsys.record.io.format.esri.gdb.xml.model.enums.FieldType; import com.revolsys.record.io.format.xml.XmlWriter; import com.revolsys.record.io.format.xml.XsiConstants; public abstract class AbstractEsriGeodatabaseXmlFieldType implements EsriGeodatabaseXmlFieldType, EsriGeodatabaseXmlConstants { private final DataType dataType; private final FieldType esriFieldType; private final String xmlSchemaTypeName; public AbstractEsriGeodatabaseXmlFieldType(final DataType dataType, final String xmlSchemaTypeName, final FieldType esriFieldType) { this.dataType = dataType; this.xmlSchemaTypeName = xmlSchemaTypeName; this.esriFieldType = esriFieldType; } @Override public DataType getDataType() { return this.dataType; } @Override public FieldType getEsriFieldType() { return this.esriFieldType; } @Override public int getFixedLength() { return -1; } protected String getType(final Object value) { return this.xmlSchemaTypeName; } @Override public String getXmlSchemaTypeName() { return this.xmlSchemaTypeName; } @Override public boolean isUsePrecision() { return false; } @Override public void writeValue(final XmlWriter out, final Object value) { out.startTag(EsriGeodatabaseXmlConstants.VALUE); if (value == null) { out.attribute(XsiConstants.NIL, true); } else { out.attribute(XsiConstants.TYPE, getType(value)); writeValueText(out, value); } out.endTag(EsriGeodatabaseXmlConstants.VALUE); } protected abstract void writeValueText(XmlWriter out, Object value); }