private void process( FeatureTypeJAXB ftDecl ) throws SQLException, FeatureStoreException { if ( ftDecl.getTable() == null || ftDecl.getTable().isEmpty() ) { String msg = "Feature type element without or with empty table attribute."; throw new FeatureStoreException( msg ); } TableName table = new TableName( ftDecl.getTable() ); LOG.debug( "Processing feature type mapping for table '" + table + "'." ); if ( getColumns( table ).isEmpty() ) { throw new FeatureStoreException( "No table with name '" + table + "' exists (or no columns defined)." ); } QName ftName = ftDecl.getName(); if ( ftName == null ) { LOG.debug( "Using table name for feature type." ); ftName = new QName( table.getTable() ); } ftName = makeFullyQualified( ftName, "app", "http://www.deegree.org/app" ); LOG.debug( "Feature type name: '" + ftName + "'." ); FIDMapping fidMapping = buildFIDMapping( table, ftName, ftDecl.getFIDMapping() ); List<JAXBElement<? extends AbstractPropertyJAXB>> propDecls = ftDecl.getAbstractProperty(); if ( propDecls != null && !propDecls.isEmpty() ) { process( table, ftName, fidMapping, propDecls ); } else { process( table, ftName, fidMapping ); } }
QName propName = propDecl.getName(); if ( propName != null ) { propName = makeFullyQualified( propName, "app", "http://www.deegree.org/app" ); MappingExpression mapping = parseMappingExpression( propDecl.getMapping() ); if ( !( mapping instanceof DBField ) ) { throw new FeatureStoreException( "Unhandled mapping type '" + mapping.getClass() LOG.debug( "Using column name for property name." ); propName = new QName( columnName ); propName = makeFullyQualified( propName, "app", "http://www.deegree.org/app" ); TableName valueTable = table; if ( joinConfig != null ) { jc = buildJoinTable( table, joinConfig ); DBField dbField = new DBField( jc.get( 0 ).getToTable().toString(), jc.get( 0 ).getToColumns().get( 0 ).toString() ); ColumnMetadataOld md = getColumn( valueTable, new SQLIdentifier( columnName ) ); int minOccurs = joinConfig != null ? 0 : md.isNullable ? 0 : 1; BaseType primType = null; if ( simpleDecl.getType() != null ) { primType = getPrimitiveType( simpleDecl.getType() ); } else { primType = valueOf( md.sqlType );
for ( ColumnJAXB configColumn : config.getColumn() ) { SQLIdentifier columnName = new SQLIdentifier( configColumn.getName() ); BaseType columnType = configColumn.getType() != null ? getPrimitiveType( configColumn.getType() ) : null; if ( columnType == null ) { ColumnMetadataOld md = getColumn( table, columnName ); columnType = BaseType.valueOf( md.sqlType ); IDGenerator generator = buildGenerator( config == null ? null : config.getAbstractIDGenerator() ); if ( generator instanceof AutoIDGenerator ) { if ( columns.isEmpty() ) { for ( ColumnMetadataOld md : getColumns( table ).values() ) { if ( md.isAutoincrement ) { BaseType columnType = BaseType.valueOf( md.sqlType );
for ( ColumnMetadataOld md : getColumns( table ).values() ) { if ( fidColumnNames.contains( new SQLIdentifier( md.column.toLowerCase() ) ) ) { LOG.debug( "Omitting column '" + md.column + "' from properties. Used in FIDMapping." ); QName ptName = makeFullyQualified( new QName( md.column.toLowerCase() ), ftName.getPrefix(), ftName.getNamespaceURI() ); if ( md.geomType == null ) {
DatabaseMetaData md = getDBMetadata(); columnNameToMD = new LinkedHashMap<SQLIdentifier, ColumnMetadataOld>(); ResultSet rs = null; dim = DIM_3; geomType = getGeometryType( rs2.getString( 3 ) ); LOG.debug( "Derived geometry type: " + geomType + ", crs: " + crs + ", srid: " + srid + ", dim: " + dim + "" ); dim = DIM_3; geomType = getGeometryType( rs2.getString( 3 ).toUpperCase() ); LOG.debug( "Derived geometry type (geography): " + geomType + ", crs: " + crs + ", srid: " + srid + ", dim: " + dim + "" );
private ColumnMetadataOld getColumn( TableName qTable, SQLIdentifier columnName ) throws SQLException, FeatureStoreException { ColumnMetadataOld md = getColumns( qTable ).get( columnName ); if ( md == null ) { throw new FeatureStoreException( "Table '" + qTable + "' does not have a column with name '" + columnName + "'" ); } return md; }
public static MappedAppSchema build( String configURL, SQLFeatureStoreJAXB config, SQLDialect dialect, Workspace workspace ) throws SQLException, FeatureStoreException { boolean deleteCascadingByDB = true; if ( config.getJoinTableDeletePropagation() != null ) { deleteCascadingByDB = config.getJoinTableDeletePropagation().equals( "db" ); } AbstractMappedSchemaBuilder builder = null; if ( config.getGMLSchema() == null || config.getGMLSchema().isEmpty() ) { LOG.debug( "Table-driven mode configuration" ); if ( config.getFeatureType() != null && !config.getFeatureType().isEmpty() ) { builder = new MappedSchemaBuilderTableOld( config.getJDBCConnId().getValue(), config.getFeatureType(), dialect, deleteCascadingByDB, workspace ); } else { builder = new MappedSchemaBuilderTable( config.getJDBCConnId().getValue(), config.getFeatureTypeMapping(), dialect, deleteCascadingByDB, workspace ); } } else { LOG.debug( "Schema-driven mode configuration" ); List<String> gmlSchemas = config.getGMLSchema(); StorageCRS storageCRS = config.getStorageCRS(); List<NamespaceHint> nsHints = config.getNamespaceHint(); BLOBMapping blobConf = config.getBLOBMapping(); List<FeatureTypeMappingJAXB> ftMappingConfs = config.getFeatureTypeMapping(); builder = new MappedSchemaBuilderGML( configURL, gmlSchemas, storageCRS, nsHints, blobConf, ftMappingConfs, deleteCascadingByDB ); } return builder.getMappedSchema(); }