use of com.revolsys.datatype.DataType in project com.revolsys.open by revolsys.
the class CsvRecordWriter method write.
@Override
public void write(final Record record) {
Writer out = this.out;
if (this.paused) {
this.paused = false;
final Resource resource = getResource();
out = this.out = resource.newWriterAppend();
}
if (out != null) {
try {
final RecordDefinition recordDefinition = this.recordDefinition;
final char fieldSeparator = this.fieldSeparator;
boolean first = true;
for (final FieldDefinition field : recordDefinition.getFields()) {
if (first) {
first = false;
} else {
out.write(fieldSeparator);
}
final String fieldName = field.getName();
final Object value;
if (isWriteCodeValues()) {
value = record.getCodeValue(fieldName);
} else {
value = record.getValue(fieldName);
}
if (value instanceof Geometry) {
final Geometry geometry = (Geometry) value;
if (this.useQuotes) {
out.write('"');
EWktWriter.write(out, geometry, this.ewkt);
out.write('"');
} else {
EWktWriter.write(out, geometry, this.ewkt);
}
} else if (value != null) {
final DataType dataType = field.getDataType();
final String stringValue = dataType.toString(value);
if (dataType.isRequiresQuotes()) {
string(stringValue);
} else {
out.write(stringValue, 0, stringValue.length());
}
}
}
out.write('\n');
} catch (final IOException e) {
throw Exceptions.wrap(e);
}
}
}
use of com.revolsys.datatype.DataType in project com.revolsys.open by revolsys.
the class EsriGeodatabaseXmlRecordWriter method writeDataElement.
private void writeDataElement(final RecordDefinition recordDefinition, final Geometry geometry) {
final String dataElementType;
final FieldDefinition geometryField = recordDefinition.getGeometryField();
boolean hasGeometry = false;
DataType geometryDataType = null;
if (geometryField != null) {
geometryDataType = geometryField.getDataType();
if (this.fieldTypes.getFieldType(geometryDataType) != null) {
hasGeometry = true;
if (geometryDataType.equals(DataTypes.POINT)) {
this.geometryType = GEOMETRY_TYPE_POINT;
} else if (geometryDataType.equals(DataTypes.MULTI_POINT)) {
this.geometryType = GEOMETRY_TYPE_MULTI_POINT;
} else if (geometryDataType.equals(DataTypes.LINE_STRING)) {
this.geometryType = GEOMETRY_TYPE_POLYLINE;
} else if (geometryDataType.equals(DataTypes.MULTI_LINE_STRING)) {
this.geometryType = GEOMETRY_TYPE_POLYLINE;
} else if (geometryDataType.equals(DataTypes.POLYGON)) {
this.geometryType = GEOMETRY_TYPE_POLYGON;
} else {
if (geometry instanceof Point) {
this.geometryType = GEOMETRY_TYPE_POINT;
} else if (geometry instanceof Punctual) {
this.geometryType = GEOMETRY_TYPE_MULTI_POINT;
} else if (geometry instanceof Lineal) {
this.geometryType = GEOMETRY_TYPE_POLYLINE;
} else if (geometry instanceof Polygon) {
this.geometryType = GEOMETRY_TYPE_POLYGON;
} else {
hasGeometry = false;
}
}
}
}
if (hasGeometry) {
dataElementType = DATA_ELEMENT_FEATURE_CLASS;
this.datasetType = DATASET_TYPE_FEATURE_CLASS;
} else {
dataElementType = DATA_ELEMENT_TABLE;
this.datasetType = DATASET_TYPE_TABLE;
}
this.out.startTag(DATA_ELEMENT);
this.out.attribute(XsiConstants.TYPE, dataElementType);
final String path = recordDefinition.getPath();
final String localName = PathUtil.getName(path);
this.out.element(CATALOG_PATH, "/FC=" + localName);
this.out.element(NAME, localName);
this.out.element(METADATA_RETRIEVED, true);
this.out.startTag(METADATA);
this.out.attribute(XsiConstants.TYPE, XML_PROPERTY_SET_TYPE);
this.out.startTag(XML_DOC);
this.out.text("<?xml version=\"1.0\"?>");
this.out.text("<metadata xml:lang=\"en\">");
this.out.text("<Esri>");
this.out.text("<MetaID>{");
this.out.text(UUID.randomUUID().toString().toUpperCase());
this.out.text("}</MetaID>");
this.out.text("<CreaDate>");
final Timestamp date = new Timestamp(System.currentTimeMillis());
this.out.text(Dates.format("yyyyMMdd", date));
this.out.text("</CreaDate>");
this.out.text("<CreaTime>");
this.out.text(Dates.format("HHmmssSS", date));
this.out.text("</CreaTime>");
this.out.text("<SyncOnce>TRUE</SyncOnce>");
this.out.text("</Esri>");
this.out.text("</metadata>");
this.out.endTag(XML_DOC);
this.out.endTag(METADATA);
this.out.element(DATASET_TYPE, this.datasetType);
this.out.element(DSID, this.datasetId++);
this.out.element(VERSIONED, false);
this.out.element(CAN_VERSION, false);
this.out.element(HAS_OID, true);
this.out.element(OBJECT_ID_FIELD_NAME, "OBJECTID");
writeFields(recordDefinition);
this.out.element(CLSID, "{52353152-891A-11D0-BEC6-00805F7C4268}");
this.out.emptyTag(EXTCLSID);
this.out.startTag(RELATIONSHIP_CLASS_NAMES);
this.out.attribute(XsiConstants.TYPE, NAMES_TYPE);
this.out.endTag(RELATIONSHIP_CLASS_NAMES);
this.out.element(ALIAS_NAME, localName);
this.out.emptyTag(MODEL_NAME);
this.out.element(HAS_GLOBAL_ID, false);
this.out.emptyTag(GLOBAL_ID_FIELD_NAME);
this.out.emptyTag(RASTER_FIELD_NAME);
this.out.startTag(EXTENSION_PROPERTIES);
this.out.attribute(XsiConstants.TYPE, PROPERTY_SET_TYPE);
this.out.startTag(PROPERTY_ARRAY);
this.out.attribute(XsiConstants.TYPE, PROPERTY_ARRAY_TYPE);
this.out.endTag(PROPERTY_ARRAY);
this.out.endTag(EXTENSION_PROPERTIES);
this.out.startTag(CONTROLLER_MEMBERSHIPS);
this.out.attribute(XsiConstants.TYPE, CONTROLLER_MEMBERSHIPS_TYPE);
this.out.endTag(CONTROLLER_MEMBERSHIPS);
if (hasGeometry) {
this.out.element(FEATURE_TYPE, FEATURE_TYPE_SIMPLE);
this.out.element(SHAPE_TYPE, this.geometryType);
this.out.element(SHAPE_FIELD_NAME, geometryField.getName());
final GeometryFactory geometryFactory = geometryField.getProperty(FieldProperties.GEOMETRY_FACTORY);
this.out.element(HAS_M, false);
this.out.element(HAS_Z, geometryFactory.hasZ());
this.out.element(HAS_SPATIAL_INDEX, false);
this.out.emptyTag(AREA_FIELD_NAME);
this.out.emptyTag(LENGTH_FIELD_NAME);
writeExtent(geometryFactory);
writeSpatialReference(geometryFactory);
}
this.out.endTag(DATA_ELEMENT);
}
use of com.revolsys.datatype.DataType in project com.revolsys.open by revolsys.
the class EsriXmlRecordDefinitionUtil method addField.
private static Field addField(final DETable table, final FieldDefinition attribute) {
final String fieldName = attribute.getName();
final DataType dataType = attribute.getDataType();
final EsriGeodatabaseXmlFieldType fieldType = FIELD_TYPES.getFieldType(dataType);
if (fieldType == null) {
throw new RuntimeException("Data type not supported " + dataType + " for " + table.getName() + "." + fieldName);
} else {
final Field field = new Field();
field.setName(fieldName);
field.setType(fieldType.getEsriFieldType());
field.setIsNullable(!attribute.isRequired());
field.setRequired(attribute.isRequired());
int length = fieldType.getFixedLength();
if (length < 0) {
length = attribute.getLength();
}
field.setLength(length);
final int precision;
if (fieldType.isUsePrecision()) {
precision = attribute.getLength();
} else {
precision = 0;
}
field.setPrecision(precision);
final int scale = attribute.getScale();
field.setScale(scale);
table.addField(field);
return field;
}
}
use of com.revolsys.datatype.DataType in project com.revolsys.open by revolsys.
the class EsriXmlRecordDefinitionUtil method newDETable.
public static DETable newDETable(final RecordDefinition recordDefinition, final SpatialReference spatialReference, final boolean createLengthField, final boolean createAreaField) {
final String typePath = recordDefinition.getPath();
String schemaPath = PathUtil.getPath(typePath).replaceAll("/", "\\\\");
final FieldDefinition geometryField = recordDefinition.getGeometryField();
boolean hasGeometry = false;
DataType geometryDataType = null;
GeometryType shapeType = null;
if (geometryField != null) {
if (spatialReference == null) {
throw new IllegalArgumentException("A Geometry Factory with a coordinate system must be specified.");
}
geometryDataType = geometryField.getDataType();
if (FIELD_TYPES.getFieldType(geometryDataType) != null) {
hasGeometry = true;
// TODO Z,m
if (geometryDataType.equals(DataTypes.POINT)) {
shapeType = GeometryType.esriGeometryPoint;
} else if (geometryDataType.equals(DataTypes.MULTI_POINT)) {
shapeType = GeometryType.esriGeometryMultipoint;
} else if (geometryDataType.equals(DataTypes.LINE_STRING)) {
shapeType = GeometryType.esriGeometryPolyline;
} else if (geometryDataType.equals(DataTypes.LINEAR_RING)) {
shapeType = GeometryType.esriGeometryPolyline;
} else if (geometryDataType.equals(DataTypes.MULTI_LINE_STRING)) {
shapeType = GeometryType.esriGeometryPolyline;
} else if (geometryDataType.equals(DataTypes.POLYGON)) {
shapeType = GeometryType.esriGeometryPolygon;
} else if (geometryDataType.equals(DataTypes.MULTI_POLYGON)) {
shapeType = GeometryType.esriGeometryPolygon;
} else {
throw new IllegalArgumentException("Unable to detect geometry type");
}
}
}
final List<FieldDefinition> fieldDefinitions = new ArrayList<>(recordDefinition.getFields());
final String path = recordDefinition.getPath();
final String name = PathUtil.getName(path);
DETable table;
if (hasGeometry) {
final DEFeatureClass featureClass = new DEFeatureClass();
table = featureClass;
featureClass.setShapeType(shapeType);
final String geometryFieldName = geometryField.getName();
featureClass.setShapeFieldName(geometryFieldName);
final GeometryFactory geometryFactory = spatialReference.getGeometryFactory();
featureClass.setSpatialReference(spatialReference);
featureClass.setHasM(geometryFactory.hasM());
featureClass.setHasZ(geometryFactory.hasZ());
final EnvelopeN envelope = new EnvelopeN(spatialReference);
featureClass.setExtent(envelope);
final Class<?> geometryClass = geometryDataType.getJavaClass();
if (!Punctual.class.isAssignableFrom(geometryClass)) {
final LengthFieldName lengthFieldNameProperty = LengthFieldName.getProperty(recordDefinition);
String lengthFieldName = lengthFieldNameProperty.getFieldName();
if (createLengthField) {
if (!Property.hasValue(lengthFieldName)) {
lengthFieldName = geometryFieldName + "_Length";
lengthFieldNameProperty.setFieldName(lengthFieldName);
}
if (!recordDefinition.hasField(lengthFieldName)) {
fieldDefinitions.add(new FieldDefinition(lengthFieldName, DataTypes.DOUBLE, true));
}
}
featureClass.setLengthFieldName(lengthFieldName);
if (!Lineal.class.isAssignableFrom(geometryClass)) {
final AreaFieldName areaFieldNameProperty = AreaFieldName.getProperty(recordDefinition);
String areaFieldName = areaFieldNameProperty.getFieldName();
if (createAreaField) {
if (!Property.hasValue(areaFieldName)) {
areaFieldName = geometryFieldName + "_Area";
areaFieldNameProperty.setFieldName(areaFieldName);
}
if (!recordDefinition.hasField(areaFieldName)) {
fieldDefinitions.add(new FieldDefinition(areaFieldName, DataTypes.DOUBLE, true));
}
}
featureClass.setAreaFieldName(areaFieldName);
}
}
} else {
table = new DETable();
schemaPath = "\\";
}
String oidFieldName = recordDefinition.getProperty(EsriGeodatabaseXmlConstants.ESRI_OBJECT_ID_FIELD_NAME);
if (!Property.hasValue(oidFieldName)) {
oidFieldName = "OBJECTID";
}
final String catalogPath;
if (schemaPath.equals("\\")) {
catalogPath = "\\" + name;
} else {
catalogPath = schemaPath + "\\" + name;
}
table.setCatalogPath(catalogPath);
table.setName(name);
table.setHasOID(true);
table.setOIDFieldName(oidFieldName);
addObjectIdField(table);
final FieldDefinition idField = recordDefinition.getIdField();
for (final FieldDefinition fieldDefinition : fieldDefinitions) {
if (fieldDefinition == geometryField) {
addGeometryField(shapeType, table, fieldDefinition);
} else {
final String fieldName = fieldDefinition.getName();
if (!fieldName.equals(oidFieldName)) {
final Field field = addField(table, fieldDefinition);
if (idField == fieldDefinition) {
table.addIndex(field, true, fieldName + "_PK");
}
}
}
}
table.setAliasName(name);
return table;
}
use of com.revolsys.datatype.DataType in project com.revolsys.open by revolsys.
the class EsriXmlRecordDefinitionUtil method addField.
private static void addField(final RecordDefinitionImpl recordDefinition, final DETable deTable, final String tableName, final Field field, final String fieldName) {
final FieldType fieldType = field.getType();
final int precision = field.getPrecision();
final DataType dataType;
if (fieldType == FieldType.esriFieldTypeGeometry && deTable instanceof DEFeatureClass) {
final DEFeatureClass featureClass = (DEFeatureClass) deTable;
final GeometryType shapeType = featureClass.getShapeType();
switch(shapeType) {
case esriGeometryPoint:
dataType = DataTypes.POINT;
break;
case esriGeometryMultipoint:
dataType = DataTypes.MULTI_POINT;
break;
case esriGeometryPolyline:
dataType = DataTypes.MULTI_LINE_STRING;
break;
case esriGeometryPolygon:
dataType = DataTypes.POLYGON;
break;
default:
throw new RuntimeException("Unknown geometry type" + shapeType + " for " + tableName + "." + fieldName);
}
} else if (precision > 0 && (fieldType.equals(FieldType.esriFieldTypeSingle) || fieldType.equals(FieldType.esriFieldTypeDouble))) {
dataType = DataTypes.DECIMAL;
} else {
dataType = EsriGeodatabaseXmlFieldTypeRegistry.INSTANCE.getDataType(fieldType);
}
final int scale = field.getScale();
int length = field.getLength();
if (precision != 0) {
length = precision;
}
final Boolean required = !field.isIsNullable() || Booleans.getBoolean(field.getRequired());
final FieldDefinition attribute = new FieldDefinition(fieldName, dataType, length, scale, required);
recordDefinition.addField(attribute);
if (fieldName.equals(tableName + "_ID")) {
recordDefinition.setIdFieldName(fieldName);
}
}
Aggregations