use of org.springframework.roo.addon.dbre.addon.model.Table in project spring-roo by spring-projects.
the class DbreMetadata method addManyToManyFields.
private void addManyToManyFields(final Table table) {
final Map<Table, Integer> owningSideTables = new LinkedHashMap<Table, Integer>();
final Map<JavaSymbolName, FieldMetadataBuilder> uniqueOwningSideFields = new LinkedHashMap<JavaSymbolName, FieldMetadataBuilder>();
final Map<JavaSymbolName, FieldMetadataBuilder> uniqueInverseSideFields = new LinkedHashMap<JavaSymbolName, FieldMetadataBuilder>();
for (final Table joinTable : database.getTables()) {
if (!joinTable.isJoinTable()) {
continue;
}
final String errMsg = "table in join table '" + joinTable.getName() + "' for many-to-many relationship could not be found. Note that table names are case sensitive in some databases such as MySQL.";
final Iterator<ForeignKey> iter = joinTable.getImportedKeys().iterator();
// First foreign key in set
final ForeignKey foreignKey1 = iter.next();
// Second and last foreign key in set
final ForeignKey foreignKey2 = iter.next();
final Table owningSideTable = foreignKey1.getForeignTable();
Validate.notNull(owningSideTable, "Owning-side %s", errMsg);
final Table inverseSideTable = foreignKey2.getForeignTable();
Validate.notNull(inverseSideTable, "Inverse-side %s", errMsg);
final Integer tableCount = owningSideTables.containsKey(owningSideTable) ? owningSideTables.get(owningSideTable) + 1 : 0;
owningSideTables.put(owningSideTable, tableCount);
final String fieldSuffix = owningSideTables.get(owningSideTable) > 0 ? String.valueOf(owningSideTables.get(owningSideTable)) : "";
final boolean sameTable = owningSideTable.equals(inverseSideTable);
if (owningSideTable.equals(table)) {
final JavaSymbolName fieldName = new JavaSymbolName(getInflectorPlural(DbreTypeUtils.suggestFieldName(inverseSideTable)) + (sameTable ? "1" : fieldSuffix));
final FieldMetadataBuilder fieldBuilder = getManyToManyOwningSideField(fieldName, joinTable, inverseSideTable, foreignKey1.getOnUpdate(), foreignKey1.getOnDelete());
uniqueOwningSideFields.put(fieldName, fieldBuilder);
}
if (inverseSideTable.equals(table)) {
final JavaSymbolName fieldName = new JavaSymbolName(getInflectorPlural(DbreTypeUtils.suggestFieldName(owningSideTable)) + (sameTable ? "2" : fieldSuffix));
final JavaSymbolName mappedByFieldName = new JavaSymbolName(getInflectorPlural(DbreTypeUtils.suggestFieldName(inverseSideTable)) + (sameTable ? "1" : fieldSuffix));
final FieldMetadataBuilder fieldBuilder = getManyToManyInverseSideField(fieldName, mappedByFieldName, owningSideTable, foreignKey2.getOnUpdate(), foreignKey2.getOnDelete());
uniqueInverseSideFields.put(fieldName, fieldBuilder);
}
}
// Add unique owning-side many-to-one fields
for (final FieldMetadataBuilder fieldBuilder : uniqueOwningSideFields.values()) {
addToBuilder(fieldBuilder);
// Exclude these fields in @RooToString to avoid circular references
// - ROO-1399
excludeFieldsInToStringAnnotation(fieldBuilder.getFieldName().getSymbolName());
}
// Add unique inverse-side many-to-one fields
for (final FieldMetadataBuilder fieldBuilder : uniqueInverseSideFields.values()) {
addToBuilder(fieldBuilder);
// Exclude these fields in @RooToString to avoid circular references
// - ROO-1399
excludeFieldsInToStringAnnotation(fieldBuilder.getFieldName().getSymbolName());
}
}
Aggregations