private Object checkFIDParticle( SQLIdentifier column ) throws FeatureStoreException { Object value = get( column ); if ( value == null ) { throw new FeatureStoreException( "FIDMapping error: No value for feature id column '" + column + "'." ); } return value; }
@Override void performInsert( Connection conn, boolean propagateAutoGenColumns ) throws SQLException, FeatureStoreException { super.performInsert( conn, propagateAutoGenColumns ); newId = buildNewFid(); if ( newId == null ) { String msg = "Internal/configuration error. Feature id must be assignable after feature row INSERT."; throw new FeatureStoreException( msg ); } // clear everything, but keep key columns (values may still be needed by referencing rows) Map<SQLIdentifier, Object> keyColumnToValue = new HashMap<SQLIdentifier, Object>(); Set<SQLIdentifier> genColumns = mgr.getKeyColumns( table ); if ( genColumns != null ) { for ( SQLIdentifier genColumn : genColumns ) { keyColumnToValue.put( genColumn, get( genColumn ) ); } } columnToLiteral.clear(); columnToObject.clear(); columnToObject.putAll( keyColumnToValue ); }
private String buildNewFid() throws FeatureStoreException { if ( get( fidMapping.getColumns().get( 0 ).getFirst() ) == null ) { // fid columns not available yet return null; } String newId = fidMapping.getPrefix(); List<Pair<SQLIdentifier, BaseType>> fidColumns = fidMapping.getColumns(); newId += checkFIDParticle( fidColumns.get( 0 ).first ); for ( int i = 1; i < fidColumns.size(); i++ ) { newId += fidMapping.getDelimiter() + checkFIDParticle( fidColumns.get( i ).first ); } return newId; }