Search in sources :

Example 61 with Table

use of org.obeonetwork.dsl.database.Table in project InformationSystem by ObeoNetwork.

the class EntityToMLD method handleForeignKey.

private void handleForeignKey(Reference reference) {
    Table targetTable = getFromOutputTraceabilityMap(EntityUtils.getContainingEntity(reference), DatabasePackage.Literals.TABLE);
    Entity targetEntity = EntityUtils.getReferencedEntity(reference);
    if (targetEntity == null) {
        Activator.getDefault().getLog().log(new Status(IStatus.ERROR, Activator.PLUGIN_ID, "No entity referenced by " + EntityUtils.getContainingEntity(reference).getName() + "." + reference.getName()));
        return;
    }
    Table sourceTable = getFromOutputTraceabilityMap(targetEntity, DatabasePackage.Literals.TABLE);
    if (sourceTable == null) {
        // Table was not found among the newly created tables
        // try to retrieve it from additional resources
        String targetEntityKey = LabelProvider.getTableKeyForEntity(targetEntity);
        EObject targetObject = getAdditionalResourcesMap().get(targetEntityKey);
        if (targetObject instanceof Table) {
            sourceTable = (Table) targetObject;
        } else {
            Activator.getDefault().getLog().log(new Status(IStatus.ERROR, Activator.PLUGIN_ID, "Cannot resolve table: " + targetEntityKey + " for Reference!"));
            return;
        }
    }
    if (shouldCreateJoinTable(reference)) {
        createJoinTable(reference, sourceTable, targetTable);
    } else {
        boolean nullable = getNullableValueForFK(reference);
        if (shouldCreateFKInSource(reference)) {
            createForeignKey(reference, targetTable, sourceTable, nullable);
        } else if (shouldCreateFKInTarget(reference)) {
            createForeignKey(reference, sourceTable, targetTable, nullable);
        }
    }
}
Also used : IStatus(org.eclipse.core.runtime.IStatus) Status(org.eclipse.core.runtime.Status) Entity(org.obeonetwork.dsl.entity.Entity) Table(org.obeonetwork.dsl.database.Table) EObject(org.eclipse.emf.ecore.EObject)

Example 62 with Table

use of org.obeonetwork.dsl.database.Table in project InformationSystem by ObeoNetwork.

the class MLDToEntity method getOppositeFKOnJoinTable.

private ForeignKey getOppositeFKOnJoinTable(ForeignKey foreignKey) {
    Table sourceTable = foreignKey.getSourceTable();
    if (isJoinTable(sourceTable)) {
        ForeignKey fk1 = sourceTable.getForeignKeys().get(0);
        ForeignKey fk2 = sourceTable.getForeignKeys().get(1);
        if (foreignKey.equals(fk1)) {
            return fk2;
        } else if (foreignKey.equals(fk2)) {
            return fk1;
        }
    }
    return null;
}
Also used : Table(org.obeonetwork.dsl.database.Table) AbstractTable(org.obeonetwork.dsl.database.AbstractTable) ForeignKey(org.obeonetwork.dsl.database.ForeignKey)

Example 63 with Table

use of org.obeonetwork.dsl.database.Table in project InformationSystem by ObeoNetwork.

the class MpdToMldBidiRules method createOrUpdateSequences.

/**
 * Create needed new sequences or update existing ones
 * @param sourceTableContainer
 * @return list of sequences processed so that all other sequences (now useless) could be removed
 */
/**
 * @param sourceTableContainer
 * @return
 */
private Collection<Sequence> createOrUpdateSequences(TableContainer sourceTableContainer) {
    Collection<Sequence> sequences = new ArrayList<Sequence>();
    // for each non-composite PK we create a sequence and associate it with the PK column
    for (AbstractTable sourceAbstractTable : sourceTableContainer.getTables()) {
        if (sourceAbstractTable instanceof Table) {
            Table sourceTable = (Table) sourceAbstractTable;
            // Get associated table
            Table targetTable = getFromOutputTraceabilityMap(sourceTable, DatabasePackage.Literals.TABLE);
            if (targetTable != null) {
                PrimaryKey pk = targetTable.getPrimaryKey();
                // Only for non-composite PK
                if (pk != null && pk.getColumns().size() == 1) {
                    Column targetColumn = pk.getColumns().get(0);
                    // Retrieve the potentially existing sequence
                    Sequence existingSequence = targetColumn.getSequence();
                    String sequenceName = targetTable.getName() + "_SEQ";
                    if (existingSequence != null) {
                        // Update name
                        existingSequence.setName(sequenceName);
                        // Ensure the sequence is in the right container
                        if (!targetTable.getOwner().getSequences().contains(existingSequence)) {
                            targetTable.getOwner().getSequences().add(existingSequence);
                        }
                        sequences.add(existingSequence);
                    } else {
                        // Create a new sequence
                        Sequence newSequence = DatabaseFactory.eINSTANCE.createSequence();
                        newSequence.setName(sequenceName);
                        newSequence.setIncrement(new BigInteger("1"));
                        newSequence.setStart(new BigInteger("1"));
                        newSequence.setComments(String.format(SEQUENCE_INITIAL_COMMENTS, targetTable.getName()));
                        targetTable.getOwner().getSequences().add(newSequence);
                        // Retrieve the associated column and associate it with the sequence
                        targetColumn.setSequence(newSequence);
                        sequences.add(newSequence);
                    }
                }
            }
        }
    }
    if (sourceTableContainer instanceof DataBase) {
        DataBase sourceDataBase = (DataBase) sourceTableContainer;
        for (Schema sourceSchema : sourceDataBase.getSchemas()) {
            sequences.addAll(createOrUpdateSequences(sourceSchema));
        }
    }
    return sequences;
}
Also used : AbstractTable(org.obeonetwork.dsl.database.AbstractTable) Table(org.obeonetwork.dsl.database.Table) AbstractTable(org.obeonetwork.dsl.database.AbstractTable) Column(org.obeonetwork.dsl.database.Column) Schema(org.obeonetwork.dsl.database.Schema) ArrayList(java.util.ArrayList) PrimaryKey(org.obeonetwork.dsl.database.PrimaryKey) BigInteger(java.math.BigInteger) Sequence(org.obeonetwork.dsl.database.Sequence) DataBase(org.obeonetwork.dsl.database.DataBase)

Example 64 with Table

use of org.obeonetwork.dsl.database.Table in project InformationSystem by ObeoNetwork.

the class MpdToMldBidiRules method createFK.

private void createFK(ForeignKey sourceFK, Table targetTable) {
    if (sourceFK.getTarget() == null) {
        return;
    }
    ForeignKey targetFK = getFromInputTraceabilityMap(sourceFK, DatabasePackage.Literals.FOREIGN_KEY);
    if (targetFK != null) {
    // Reuse existing FK
    } else {
        // We have to create a new FK
        targetFK = DatabaseFactory.eINSTANCE.createForeignKey();
        targetTable.getForeignKeys().add(targetFK);
    }
    addToOutputTraceability(sourceFK, targetFK);
    targetFK.setName(sourceFK.getName());
    targetFK.setComments(sourceFK.getComments());
    // Try to retrieve the table referenced by the FK
    Table fkTargetTable = getFromOutputTraceabilityMap(sourceFK.getTargetTable(), DatabasePackage.Literals.TABLE);
    if (fkTargetTable == null) {
        // We look into the additional resources
        String fkTargetTableKey = ModelUtils.getKey(sourceFK.getTarget());
        fkTargetTable = (Table) getAdditionalResourcesMap().get(fkTargetTableKey);
    }
    if (fkTargetTable == null) {
        Activator.getDefault().getLog().log(new Status(IStatus.ERROR, Activator.PLUGIN_ID, "Cannot resolve table: " + sourceFK.getTargetTable().getName() + " for ForeignKey: " + sourceFK.getName() + "!"));
    }
    targetFK.setTarget(fkTargetTable);
    for (ForeignKeyElement sourceFkElement : sourceFK.getElements()) {
        createFKElement(sourceFkElement, targetFK);
    }
}
Also used : IStatus(org.eclipse.core.runtime.IStatus) Status(org.eclipse.core.runtime.Status) ForeignKeyElement(org.obeonetwork.dsl.database.ForeignKeyElement) Table(org.obeonetwork.dsl.database.Table) AbstractTable(org.obeonetwork.dsl.database.AbstractTable) ForeignKey(org.obeonetwork.dsl.database.ForeignKey)

Example 65 with Table

use of org.obeonetwork.dsl.database.Table in project InformationSystem by ObeoNetwork.

the class MpdToMldBidiRules method createForeignKeys.

private void createForeignKeys(TableContainer sourceTableContainer) {
    // create all foreignkeys
    for (AbstractTable sourceAbstractTable : sourceTableContainer.getTables()) {
        if (sourceAbstractTable instanceof Table) {
            Table sourceTable = (Table) sourceAbstractTable;
            Table targetTable = getFromOutputTraceabilityMap(sourceTable, DatabasePackage.Literals.TABLE);
            for (ForeignKey foreignKey : sourceTable.getForeignKeys()) {
                createFK(foreignKey, targetTable);
            }
        }
    }
    if (sourceTableContainer instanceof DataBase) {
        DataBase sourceDataBase = (DataBase) sourceTableContainer;
        for (Schema sourceSchema : sourceDataBase.getSchemas()) {
            createForeignKeys(sourceSchema);
        }
    }
}
Also used : AbstractTable(org.obeonetwork.dsl.database.AbstractTable) Table(org.obeonetwork.dsl.database.Table) AbstractTable(org.obeonetwork.dsl.database.AbstractTable) Schema(org.obeonetwork.dsl.database.Schema) ForeignKey(org.obeonetwork.dsl.database.ForeignKey) DataBase(org.obeonetwork.dsl.database.DataBase)

Aggregations

Table (org.obeonetwork.dsl.database.Table)86 Column (org.obeonetwork.dsl.database.Column)41 Test (org.junit.Test)31 AbstractTest (org.obeonetwork.database.m2doc.services.common.AbstractTest)31 AbstractTable (org.obeonetwork.dsl.database.AbstractTable)22 EObject (org.eclipse.emf.ecore.EObject)17 ForeignKey (org.obeonetwork.dsl.database.ForeignKey)16 ArrayList (java.util.ArrayList)11 ForeignKeyElement (org.obeonetwork.dsl.database.ForeignKeyElement)7 Index (org.obeonetwork.dsl.database.Index)7 ResultSet (java.sql.ResultSet)6 SQLException (java.sql.SQLException)6 ReferencesTableSettings (org.eclipse.emf.eef.runtime.ui.widgets.referencestable.ReferencesTableSettings)6 Viewer (org.eclipse.jface.viewers.Viewer)6 ViewerFilter (org.eclipse.jface.viewers.ViewerFilter)6 Constraint (org.obeonetwork.dsl.database.Constraint)6 Sequence (org.obeonetwork.dsl.database.Sequence)6 BigInteger (java.math.BigInteger)5 PreparedStatement (java.sql.PreparedStatement)5 EObjectPropertiesEditionContext (org.eclipse.emf.eef.runtime.context.impl.EObjectPropertiesEditionContext)5