if (referenceDescriptor.getTables() != null) {
nAggregateTables = referenceDescriptor.getTables().size();
}
if (! aggregateToSourceFields.isEmpty()) {
DatabaseTable aggregateDefaultTable = null;
if (nAggregateTables != 0) {
aggregateDefaultTable = referenceDescriptor.getTables().get(0);
} else {
aggregateDefaultTable = new DatabaseTable();
}
tableTranslation = new HashMap<DatabaseTable, DatabaseTable>();
fieldTranslation = new HashMap<DatabaseField, DatabaseField>();
for (String aggregateFieldName : aggregateToSourceFields.keySet()) {
DatabaseField aggregateField = new DatabaseField(aggregateFieldName);
// 322233 - continue using a string for the Aggregate field name
// because the table may or may not have been set. DatabaseFields without a table
// will match any DatabaseField with a table if the name is the same, breaking
// legacy support for AggregateCollection inheritance models
if (! aggregateField.hasTableName()) {
aggregateField.setTable(aggregateDefaultTable);
}
DatabaseField sourceField = aggregateToSourceFields.get(aggregateFieldName);
if (! sourceField.hasTableName()) {
if (defaultSourceTable == null) {
// TODO: throw exception: source field doesn't have table
} else {
sourceField.setTable(defaultSourceTable);
}
}
DatabaseTable sourceTable = sourceField.getTable();
DatabaseTable savedSourceTable = tableTranslation.get(aggregateField.getTable());
if (savedSourceTable == null) {
tableTranslation.put(aggregateField.getTable(), sourceTable);
} else {
if (! sourceTable.equals(savedSourceTable)) {
// TODO: throw exception: aggregate table mapped to two source tables