Search in sources :

Example 6 with Table

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());
    }
}
Also used : JavaSymbolName(org.springframework.roo.model.JavaSymbolName) Table(org.springframework.roo.addon.dbre.addon.model.Table) ForeignKey(org.springframework.roo.addon.dbre.addon.model.ForeignKey) LinkedHashMap(java.util.LinkedHashMap) FieldMetadataBuilder(org.springframework.roo.classpath.details.FieldMetadataBuilder)

Aggregations

Table (org.springframework.roo.addon.dbre.addon.model.Table)6 JavaSymbolName (org.springframework.roo.model.JavaSymbolName)5 ForeignKey (org.springframework.roo.addon.dbre.addon.model.ForeignKey)4 FieldMetadataBuilder (org.springframework.roo.classpath.details.FieldMetadataBuilder)4 LinkedHashMap (java.util.LinkedHashMap)3 JavaType (org.springframework.roo.model.JavaType)3 JdkJavaType (org.springframework.roo.model.JdkJavaType)3 LinkedHashSet (java.util.LinkedHashSet)2 Reference (org.springframework.roo.addon.dbre.addon.model.Reference)2 ArrayList (java.util.ArrayList)1 ClassOrInterfaceTypeDetails (org.springframework.roo.classpath.details.ClassOrInterfaceTypeDetails)1 ClassOrInterfaceTypeDetailsBuilder (org.springframework.roo.classpath.details.ClassOrInterfaceTypeDetailsBuilder)1 AnnotationMetadata (org.springframework.roo.classpath.details.annotations.AnnotationMetadata)1 AnnotationMetadataBuilder (org.springframework.roo.classpath.details.annotations.AnnotationMetadataBuilder)1 JavaPackage (org.springframework.roo.model.JavaPackage)1