Package org.springframework.roo.addon.dbre.model

Examples of org.springframework.roo.addon.dbre.model.Table


        // Manage existing entities with @RooDbManaged annotation
        for (final ClassOrInterfaceTypeDetails managedEntity : managedEntities) {
            // Remove table from set as each managed entity is processed.
            // The tables that remain in the set will be used for creation of
            // new entities later
            final Table table = updateOrDeleteManagedEntity(managedEntity,
                    database);
            if (table != null) {
                tables.remove(table);
            }
        }

        // Create new entities from tables
        final List<ClassOrInterfaceTypeDetails> newEntities = new ArrayList<ClassOrInterfaceTypeDetails>();
        for (final Table table : tables) {
            // Don't create types from join tables in many-to-many associations
            if (!table.isJoinTable()) {
                JavaPackage schemaPackage = destinationPackage;
                if (database.hasMultipleSchemas()) {
                    schemaPackage = new JavaPackage(
                            destinationPackage.getFullyQualifiedPackageName()
                                    + "."
                                    + DbreTypeUtils.suggestPackageName(table
                                            .getSchema().getName()));
                }
                final JavaType javaType = DbreTypeUtils
                        .suggestTypeNameForNewTable(table.getName(),
                                schemaPackage);
                final boolean activeRecord = database.isActiveRecord()
                        && !database.isRepository();
                if (typeLocationService.getTypeDetails(javaType) == null) {
                    table.setIncludeNonPortableAttributes(database
                            .isIncludeNonPortableAttributes());
                    table.setDisableVersionFields(database
                            .isDisableVersionFields());
                    table.setDisableGeneratedIdentifiers(database
                            .isDisableGeneratedIdentifiers());
                    newEntities.add(createNewManagedEntityFromTable(javaType,
                            table, activeRecord));
                }
            }
View Full Code Here


        final AnnotationAttributeValue<?> schemaAttribute = jpaAnnotation
                .getAttribute(new JavaSymbolName("schema"));
        final String schemaName = schemaAttribute != null ? (String) schemaAttribute
                .getValue() : null;

        final Table table = database.getTable(tableName, schemaName);
        if (table == null) {
            // Table is missing and probably has been dropped so delete managed
            // type and its identifier if applicable
            deleteManagedType(managedEntity, "no database table called '"
                    + tableName + "'");
            return null;
        }

        table.setIncludeNonPortableAttributes(database
                .isIncludeNonPortableAttributes());
        table.setDisableVersionFields(database.isDisableVersionFields());
        table.setDisableGeneratedIdentifiers(database
                .isDisableGeneratedIdentifiers());

        // Update the @RooJpaEntity/@RooJpaActiveRecord attributes
        final AnnotationMetadataBuilder jpaAnnotationBuilder = new AnnotationMetadataBuilder(
                jpaAnnotation);
        final Set<JavaSymbolName> attributesToDeleteIfPresent = new LinkedHashSet<JavaSymbolName>();
        manageIdentifier(managedEntity.getName(), jpaAnnotationBuilder,
                attributesToDeleteIfPresent, table);

        // Manage versionField attribute
        final AnnotationAttributeValue<?> versionFieldAttribute = jpaAnnotation
                .getAttribute(new JavaSymbolName(VERSION_FIELD));
        if (versionFieldAttribute == null) {
            if (hasVersionField(table)) {
                attributesToDeleteIfPresent.add(new JavaSymbolName(
                        VERSION_FIELD));
            }
            else {
                jpaAnnotationBuilder.addStringAttribute(VERSION_FIELD, "");
            }
        }
        else {
            final String versionFieldValue = (String) versionFieldAttribute
                    .getValue();
            if (hasVersionField(table)
                    && (StringUtils.isBlank(versionFieldValue) || VERSION
                            .equals(versionFieldValue))) {
                attributesToDeleteIfPresent.add(new JavaSymbolName(
                        VERSION_FIELD));
            }
        }

        final AnnotationAttributeValue<?> sequenceNameFieldAttribute = jpaAnnotation
                .getAttribute(new JavaSymbolName(SEQUENCE_NAME_FIELD));
        if (sequenceNameFieldAttribute == null) {
            if (!table.isDisableGeneratedIdentifiers()) {
                attributesToDeleteIfPresent.add(new JavaSymbolName(
                        SEQUENCE_NAME_FIELD));
            }
            else {
                jpaAnnotationBuilder
                        .addStringAttribute(SEQUENCE_NAME_FIELD, "");
            }
        }
        else {
            final String sequenceNameFieldValue = (String) sequenceNameFieldAttribute
                    .getValue();
            if (!table.isDisableGeneratedIdentifiers()
                    && ("".equals(sequenceNameFieldValue))) {
                attributesToDeleteIfPresent.add(new JavaSymbolName(
                        SEQUENCE_NAME_FIELD));
            }
        }
View Full Code Here

        this.identifierHolder = identifierHolder;
        this.versionField = versionField;
        this.managedEntities = managedEntities;
        this.database = database;

        final Table table = this.database.getTable(
                DbreTypeUtils.getTableName(governorTypeDetails),
                DbreTypeUtils.getSchemaName(governorTypeDetails));
        if (table == null) {
            valid = false;
            return;
View Full Code Here

            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(
View Full Code Here

    private void addManyToOneFields(final Table table) {
        // Add unique many-to-one fields
        final Map<JavaSymbolName, FieldMetadataBuilder> uniqueFields = new LinkedHashMap<JavaSymbolName, FieldMetadataBuilder>();

        for (final ForeignKey foreignKey : table.getImportedKeys()) {
            final Table foreignTable = foreignKey.getForeignTable();
            if (foreignTable == null || isOneToOne(table, foreignKey)) {
                continue;
            }

            // Assume many-to-one multiplicity
            JavaSymbolName fieldName = null;
            final String foreignTableName = foreignTable.getName();
            final String foreignSchemaName = foreignTable.getSchema().getName();
            if (foreignKey.getReferenceCount() == 1) {
                final Reference reference = foreignKey.getReferences()
                        .iterator().next();
                fieldName = new JavaSymbolName(
                        DbreTypeUtils.suggestFieldName(reference
                                .getLocalColumnName()));
            }
            else {
                final Short keySequence = foreignKey.getKeySequence();
                final String fieldSuffix = keySequence != null
                        && keySequence > 0 ? String.valueOf(keySequence) : "";
                fieldName = new JavaSymbolName(
                        DbreTypeUtils.suggestFieldName(foreignTableName)
                                + fieldSuffix);
            }
            final JavaType fieldType = DbreTypeUtils.findTypeForTableName(
                    managedEntities, foreignTableName, foreignSchemaName);
            Validate.notNull(
                    fieldType,
                    "Attempted to create many-to-one field '%s' in '%s' %s",
                    fieldName,
                    destination.getFullyQualifiedTypeName(),
                    getErrorMsg(foreignTable.getFullyQualifiedTableName(),
                            table.getFullyQualifiedTableName()));

            // Fields are stored in a field-keyed map first before adding them
            // to the builder.
            // This ensures the fields from foreign keys with multiple columns
View Full Code Here

        if (table.isJoinTable()) {
            return;
        }

        for (final ForeignKey exportedKey : table.getExportedKeys()) {
            final Table exportedKeyForeignTable = exportedKey.getForeignTable();
            Validate.notNull(
                    exportedKeyForeignTable,
                    "Foreign key table for foreign key '%s' in table '%s' does not exist. One-to-many relationship not created",
                    exportedKey.getName(), table.getFullyQualifiedTableName());
            if (exportedKeyForeignTable.isJoinTable()) {
                continue;
            }

            final String foreignTableName = exportedKeyForeignTable.getName();
            final String foreignSchemaName = exportedKeyForeignTable
                    .getSchema().getName();
            final Table foreignTable = database.getTable(foreignTableName,
                    foreignSchemaName);
            Validate.notNull(
                    foreignTable,
                    "Related table '%s' could not be found but was referenced by table '%s'",
                    exportedKeyForeignTable.getFullyQualifiedTableName(),
                    table.getFullyQualifiedTableName());

            if (isOneToOne(foreignTable,
                    foreignTable.getImportedKey(exportedKey.getName()))) {
                continue;
            }

            final Short keySequence = exportedKey.getKeySequence();
            final String fieldSuffix = keySequence != null && keySequence > 0 ? String
View Full Code Here

        for (final ForeignKey foreignKey : table.getImportedKeys()) {
            if (!isOneToOne(table, foreignKey)) {
                continue;
            }

            final Table importedKeyForeignTable = foreignKey.getForeignTable();
            Validate.notNull(
                    importedKeyForeignTable,
                    "Foreign key table for foreign key '%s' in table '%s' does not exist. One-to-one relationship not created",
                    foreignKey.getName(), table.getFullyQualifiedTableName());

            final String foreignTableName = importedKeyForeignTable.getName();
            final String foreignSchemaName = importedKeyForeignTable
                    .getSchema().getName();
            final Short keySequence = foreignKey.getKeySequence();
            final String fieldSuffix = keySequence != null && keySequence > 0 ? String
                    .valueOf(keySequence) : "";
            final JavaSymbolName fieldName = new JavaSymbolName(
                    DbreTypeUtils.suggestFieldName(foreignTableName)
                            + fieldSuffix);
            final JavaType fieldType = DbreTypeUtils.findTypeForTableName(
                    managedEntities, foreignTableName, foreignSchemaName);
            Validate.notNull(
                    fieldType,
                    "Attempted to create one-to-one field '%s' in '%s' %s",
                    fieldName,
                    destination.getFullyQualifiedTypeName(),
                    getErrorMsg(importedKeyForeignTable
                            .getFullyQualifiedTableName(), table
                            .getFullyQualifiedTableName()));

            // Fields are stored in a field-keyed map first before adding them
            // to the builder.
            // This ensures the fields from foreign keys with multiple columns
            // will only get created once.
            final FieldMetadataBuilder fieldBuilder = getOneToOneOrManyToOneField(
                    fieldName, fieldType, foreignKey, ONE_TO_ONE, false);
            uniqueFields.put(fieldName, fieldBuilder);
        }

        for (final FieldMetadataBuilder fieldBuilder : uniqueFields.values()) {
            addToBuilder(fieldBuilder);

            // Exclude these fields in @RooToString to avoid circular references
            // - ROO-1399
            excludeFieldsInToStringAnnotation(fieldBuilder.getFieldName()
                    .getSymbolName());
        }

        // Add one-to-one mapped-by fields
        if (table.isJoinTable()) {
            return;
        }

        for (final ForeignKey exportedKey : table.getExportedKeys()) {
            final Table exportedKeyForeignTable = exportedKey.getForeignTable();
            Validate.notNull(
                    exportedKeyForeignTable,
                    "Foreign key table for foreign key '%s' in table '%s' does not exist. One-to-one relationship not created",
                    exportedKey.getName(), table.getFullyQualifiedTableName());
            if (exportedKeyForeignTable.isJoinTable()) {
                continue;
            }

            final String foreignTableName = exportedKeyForeignTable.getName();
            final String foreignSchemaName = exportedKeyForeignTable
                    .getSchema().getName();
            final Table foreignTable = database.getTable(foreignTableName,
                    foreignSchemaName);
            Validate.notNull(
                    foreignTable,
                    "Related table '%s' could not be found but has a foreign-key reference to table '%s'",
                    exportedKeyForeignTable.getFullyQualifiedTableName(),
                    table.getFullyQualifiedTableName());
            if (!isOneToOne(foreignTable,
                    foreignTable.getImportedKey(exportedKey.getName()))) {
                continue;
            }
            final Short keySequence = exportedKey.getKeySequence();
            final String fieldSuffix = keySequence != null && keySequence > 0 ? String
                    .valueOf(keySequence) : "";
            JavaSymbolName fieldName = new JavaSymbolName(
                    DbreTypeUtils.suggestFieldName(foreignTableName)
                            + fieldSuffix);

            final JavaType fieldType = DbreTypeUtils.findTypeForTableName(
                    managedEntities, foreignTableName, foreignSchemaName);
            Validate.notNull(
                    fieldType,
                    "Attempted to create one-to-one mapped-by field '%s' in '%s' %s",
                    fieldName, destination.getFullyQualifiedTypeName(),
                    getErrorMsg(foreignTable.getFullyQualifiedTableName()));

            // Check for existence of same field - ROO-1691
            while (true) {
                if (!hasFieldInItd(fieldName)) {
                    break;
View Full Code Here

TOP

Related Classes of org.springframework.roo.addon.dbre.model.Table

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.