package com.revolsys.oracle.recordstore.esri;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import com.revolsys.datatype.DataType;
import com.revolsys.datatype.DataTypes;
import com.revolsys.geometry.model.Geometry;
import com.revolsys.oracle.recordstore.OracleRecordStore;
import com.revolsys.record.schema.RecordStore;
import com.revolsys.record.schema.RecordStoreSchema;
public final class ArcSdeConstants {
public static final int COLLECTION = 6;
public static final int CURVE = 2;
public static final Map<Integer, DataType> DATA_TYPE_MAP = new HashMap<>();
public static final String ESRI_SRID_PROPERTY = "esriSrid";
public static final int GEOMETRY = 0;
public static String GEOMETRY_COLUMN_TYPE = "geometryColumnType";
public static final Map<DataType, Integer> GEOMETRY_DATA_TYPE_ST_TYPE = new HashMap<>();
public static final int LINESTRING = 3;
public static final int MULT_SURFACE = 10;
public static final int MULTI_CURVE = 8;
public static final int MULTI_LINESTRING = 9;
public static final int MULTI_POINT = 7;
public static final int MULTI_POLYGON = 11;
public static final int POINT = 1;
public static final int POLYGON = 5;
public static final String REGISTRATION_ID = "REGISTRATION_ID";
public static final String ROWID_COLUMN = "ROWID_COLUMN";
public static final String SDEBINARY = "SDEBINARY";
public static final String SPATIAL_REFERENCE = "spatialReference";
public static final int ST_GEOMETRY_LINESTRING = 4;
public static final int ST_GEOMETRY_MULTI_LINESTRING = 260;
public static final int ST_GEOMETRY_MULTI_POINT = 257;
public static final int ST_GEOMETRY_MULTI_POLYGON = 264;
public static final int ST_GEOMETRY_POINT = 1;
public static final int ST_GEOMETRY_POLYGON = 8;
public static final int SURFACE = 4;
static {
DATA_TYPE_MAP.put(POINT, DataTypes.POINT);
DATA_TYPE_MAP.put(LINESTRING, DataTypes.LINE_STRING);
DATA_TYPE_MAP.put(POLYGON, DataTypes.POLYGON);
DATA_TYPE_MAP.put(MULTI_POINT, DataTypes.MULTI_POINT);
DATA_TYPE_MAP.put(MULTI_LINESTRING, DataTypes.MULTI_LINE_STRING);
DATA_TYPE_MAP.put(MULTI_POLYGON, DataTypes.MULTI_POLYGON);
GEOMETRY_DATA_TYPE_ST_TYPE.put(DataTypes.POINT, ST_GEOMETRY_POINT);
GEOMETRY_DATA_TYPE_ST_TYPE.put(DataTypes.MULTI_POINT, ST_GEOMETRY_MULTI_POINT);
GEOMETRY_DATA_TYPE_ST_TYPE.put(DataTypes.LINE_STRING, ST_GEOMETRY_LINESTRING);
GEOMETRY_DATA_TYPE_ST_TYPE.put(DataTypes.MULTI_LINE_STRING, ST_GEOMETRY_MULTI_LINESTRING);
GEOMETRY_DATA_TYPE_ST_TYPE.put(DataTypes.POLYGON, ST_GEOMETRY_POLYGON);
GEOMETRY_DATA_TYPE_ST_TYPE.put(DataTypes.MULTI_POLYGON, ST_GEOMETRY_MULTI_POLYGON);
}
public static DataType getGeometryDataType(final int geometryType) {
final DataType dataType = DATA_TYPE_MAP.get(geometryType);
if (dataType == null) {
return DataTypes.GEOMETRY;
} else {
return dataType;
}
}
public static Integer getStGeometryType(final Geometry geometry) {
final DataType dataType = geometry.getDataType();
final Integer type = GEOMETRY_DATA_TYPE_ST_TYPE.get(dataType);
if (type == null) {
throw new IllegalArgumentException("Unsupported geometry type " + dataType);
} else {
return type;
}
}
public static boolean isSdeAvailable(final RecordStore recordStore) {
if (recordStore instanceof OracleRecordStore) {
final OracleRecordStore oracleRecordStore = (OracleRecordStore)recordStore;
final Set<String> allSchemaNames = oracleRecordStore.getAllSchemaNames();
return allSchemaNames.contains("SDE");
}
return false;
}
public static boolean isSdeAvailable(final RecordStoreSchema schema) {
final RecordStore recordStore = schema.getRecordStore();
return isSdeAvailable(recordStore);
}
}