protected List<TableJoin> buildJoinTable( TableName from, org.deegree.feature.persistence.sql.jaxb.Join join ) {
if ( join != null ) {
TableName target = createFromQualifiedName( join.getTable() );
if ( join.getFromColumns().size() != join.getToColumns().size() ) {
throw new UnsupportedOperationException( "Joins must use same number of from and to columns." );
}
if ( join.getFromColumns().isEmpty() ) {
throw new UnsupportedOperationException( "Joins must use at least a single column." );
}
boolean isNumbered = join.isNumbered() == null ? false : join.isNumbered();
Map<SQLIdentifier, IDGenerator> keyColumnToGenerator = new HashMap<SQLIdentifier, IDGenerator>();
for ( AutoKeyColumn keyColumn : join.getAutoKeyColumn() ) {
SQLIdentifier columnName = new SQLIdentifier( keyColumn.getName() );
IDGenerator idGenerator = buildGenerator( keyColumn.getAbstractIDGenerator() );
keyColumnToGenerator.put( columnName, idGenerator );
}
if ( keyColumnToGenerator.isEmpty() ) {
keyColumnToGenerator.put( new SQLIdentifier( "id" ), new AutoIDGenerator() );
}
TableJoin tj = new TableJoin( from, target, join.getFromColumns(), join.getToColumns(),
join.getOrderColumns(), isNumbered, keyColumnToGenerator );
return Collections.singletonList( tj );
}
return null;
}