package com.revolsys.oracle.recordstore.esri; import java.sql.PreparedStatement; import java.sql.SQLException; import java.util.Map; import com.revolsys.datatype.DataTypes; import com.revolsys.jdbc.field.JdbcFieldDefinition; import com.revolsys.record.Record; import com.revolsys.record.schema.RecordDefinition; import com.revolsys.record.schema.RecordDefinitionImpl; public class ArcSdeObjectIdJdbcFieldDefinition extends JdbcFieldDefinition { public static void replaceAttribute(final String schemaName, final RecordDefinition recordDefinition, final Integer registrationId, final String rowIdColumn) { final JdbcFieldDefinition objectIdAttribute = (JdbcFieldDefinition)recordDefinition .getField(rowIdColumn); if (objectIdAttribute != null && !(objectIdAttribute instanceof ArcSdeObjectIdJdbcFieldDefinition)) { final String name = objectIdAttribute.getName(); final String description = objectIdAttribute.getDescription(); final Map<String, Object> properties = objectIdAttribute.getProperties(); final ArcSdeObjectIdJdbcFieldDefinition newObjectIdAttribute = new ArcSdeObjectIdJdbcFieldDefinition( objectIdAttribute.getDbName(), name, description, properties, schemaName, registrationId); newObjectIdAttribute.setRecordDefinition(recordDefinition); final RecordDefinitionImpl recordDefinitionImpl = (RecordDefinitionImpl)recordDefinition; recordDefinitionImpl.replaceField(objectIdAttribute, newObjectIdAttribute); if (recordDefinition.getIdFieldName() == null && recordDefinition.getIdFieldNames().isEmpty()) { recordDefinitionImpl.setIdFieldName(name); } } } /** The SDE.TABLE_REGISTRY REGISTRATION_ID for the table. */ private final long registrationId; /** The name of the database schema the table owned by. */ private final String schemaName; public ArcSdeObjectIdJdbcFieldDefinition(final String dbName, final String name, final String description, final Map<String, Object> properties, final String schemaName, final long registrationId) { super(dbName, name, DataTypes.INT, -1, 19, 0, true, description, properties); this.schemaName = schemaName; this.registrationId = registrationId; } /** * Generate an OBJECT ID using ESRI's sde.version_user_ddl.next_row_id * function. */ @Override public void addInsertStatementPlaceHolder(final StringBuilder sql, final boolean generateKeys) { sql.append(" sde.version_user_ddl.next_row_id('"); sql.append(this.schemaName); sql.append("', "); sql.append(this.registrationId); sql.append(")"); } @Override public ArcSdeObjectIdJdbcFieldDefinition clone() { return new ArcSdeObjectIdJdbcFieldDefinition(getDbName(), getName(), getDescription(), getProperties(), this.schemaName, this.registrationId); } /** * Ignore any inserted value. */ @Override public int setInsertPreparedStatementValue(final PreparedStatement statement, final int parameterIndex, final Record object) throws SQLException { return parameterIndex; } }