Search in sources :

Example 11 with Table

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

the class MLDToEntity method createReference.

private void createReference(ForeignKey foreignKey) {
    Table sourceTable = foreignKey.getSourceTable();
    boolean isJoinTable = isJoinTable(sourceTable);
    if (isJoinTable) {
        sourceTable = getOppositeFKOnJoinTable(foreignKey).getTargetTable();
    }
    Table targetTable = foreignKey.getTargetTable();
    Entity sourceEntity = getFromOutputTraceabilityMap(targetTable, EntityPackage.Literals.ENTITY);
    Entity targetEntity = getFromOutputTraceabilityMap(sourceTable, EntityPackage.Literals.ENTITY);
    if (targetEntity == null) {
        // Entity was not found in the newly created entities
        // try to retrieve it from additional resources
        String targetTableKey = LabelProvider.getEntityKeyForTable(targetTable);
        EObject sourceObject = getAdditionalResourcesMap().get(targetTableKey);
        if (sourceObject instanceof Entity) {
            targetEntity = (Entity) sourceObject;
        } else {
            Activator.getDefault().getLog().log(new Status(IStatus.ERROR, Activator.PLUGIN_ID, "Cannot resolve entity: " + targetTableKey + " for Reference!"));
            return;
        }
    }
    // Try to retrieve existing reference
    Reference reference = getFromInputTraceabilityMap(foreignKey, EnvironmentPackage.Literals.REFERENCE);
    if (reference != null) {
        // Ensure it is contained by the right entity
        if (!EcoreUtil.equals(reference.getContainingType(), sourceEntity)) {
            sourceEntity.getOwnedReferences().add(reference);
        }
        // Ensure it references the right entity
        if (!EcoreUtil.equals(reference.getReferencedType(), targetEntity)) {
            reference.setReferencedType(targetEntity);
        }
    } else {
        boolean nullable = !areAllColumnsNonNullable(foreignKey);
        String referenceName = LabelProvider.getReferenceNameFromFK(foreignKey);
        Reference reference1 = EnvironmentFactory.eINSTANCE.createReference();
        sourceEntity.getOwnedReferences().add(reference1);
        reference1.setReferencedType(targetEntity);
        reference1.setName(referenceName);
        reference1.setNavigable(true);
        // Define the required multiplicity
        MultiplicityKind multiplicity = (nullable || isJoinTable) ? MultiplicityKind.ZERO_STAR_LITERAL : MultiplicityKind.ONE_STAR_LITERAL;
        reference1.setMultiplicity(multiplicity);
        // The reference does not already exist, we have to crate a new one
        reference = reference1;
    }
    addToOutputTraceability(foreignKey, reference);
    // The following properties are modified even if they already existed
    reference.setDescription("Contrainte FK avec la table " + sourceTable.getName());
    AnnotationHelper.setPhysicalNameAnnotation(reference, LabelProvider.getReferencePhysicalNameFromFK(foreignKey));
    // For join tables, set the oppositeOf property
    if (isJoinTable) {
        ForeignKey oppositeFK = getOppositeFKOnJoinTable(foreignKey);
        // Check if the reference corresponding to the opposite FK has already been created
        Reference oppositeReference = getFromOutputTraceabilityMap(oppositeFK, EnvironmentPackage.Literals.REFERENCE);
        if (oppositeReference != null) {
            reference.setOppositeOf(oppositeReference);
        }
    }
}
Also used : IStatus(org.eclipse.core.runtime.IStatus) Status(org.eclipse.core.runtime.Status) Entity(org.obeonetwork.dsl.entity.Entity) MultiplicityKind(org.obeonetwork.dsl.environment.MultiplicityKind) Table(org.obeonetwork.dsl.database.Table) AbstractTable(org.obeonetwork.dsl.database.AbstractTable) Reference(org.obeonetwork.dsl.environment.Reference) EObject(org.eclipse.emf.ecore.EObject) ForeignKey(org.obeonetwork.dsl.database.ForeignKey)

Example 12 with Table

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

the class MpdToMldBidiRules method createTable.

private void createTable(Table sourceTable, TableContainer targetTableContainer) {
    Table targetTable = getFromInputTraceabilityMap(sourceTable, DatabasePackage.Literals.TABLE);
    if (targetTable != null) {
    // Reuse existing table
    } else {
        // Create a new table
        targetTable = DatabaseFactory.eINSTANCE.createTable();
        targetTableContainer.getTables().add(targetTable);
    }
    addToOutputTraceability(sourceTable, targetTable);
    targetTable.setName(sourceTable.getName());
    targetTable.setComments(sourceTable.getComments());
    for (Column column : sourceTable.getColumns()) {
        createColumn(column, targetTable);
    }
    if (sourceTable.getPrimaryKey() != null) {
        createPK(sourceTable.getPrimaryKey(), targetTable);
    }
    for (Index index : sourceTable.getIndexes()) {
        createIndex(index, targetTable);
    }
    for (Constraint constraint : sourceTable.getConstraints()) {
        createConstraint(constraint, targetTable);
    }
}
Also used : Table(org.obeonetwork.dsl.database.Table) AbstractTable(org.obeonetwork.dsl.database.AbstractTable) Column(org.obeonetwork.dsl.database.Column) Constraint(org.obeonetwork.dsl.database.Constraint) Index(org.obeonetwork.dsl.database.Index)

Example 13 with Table

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

the class DefaultDataBaseBuilder method buildForeignKeys.

@Override
public void buildForeignKeys() {
    ArrayList<AbstractTable> tables = new ArrayList<AbstractTable>();
    tables.addAll(tableContainer.getTables());
    for (AbstractTable table : tables) {
        if (table instanceof Table) {
            buildForeignKeys((Table) table);
        }
    }
}
Also used : AbstractTable(org.obeonetwork.dsl.database.AbstractTable) Table(org.obeonetwork.dsl.database.Table) AbstractTable(org.obeonetwork.dsl.database.AbstractTable) ArrayList(java.util.ArrayList)

Example 14 with Table

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

the class H2DataBaseBuilder method buildSequences.

private void buildSequences(DatabaseMetaData metaData, TableContainer owner) {
    ResultSet rs = null;
    PreparedStatement pstmt = null;
    try {
        // TODO récupérer cycle avec IS_CYCLE
        // TODO récupérer Cache
        PreparedStatement psmt = metaData.getConnection().prepareStatement("SELECT SEQUENCE_NAME, INCREMENT, MIN_VALUE, MAX_VALUE, CURRENT_VALUE " + "FROM INFORMATION_SCHEMA.SEQUENCES");
        rs = psmt.executeQuery();
        while (rs.next()) {
            String name = rs.getString(1);
            BigInteger increment = getBigIntValueForColumn(rs, 2);
            BigInteger minValue = getBigIntValueForColumn(rs, 3);
            BigInteger maxValue = getBigIntValueForColumn(rs, 4);
            BigInteger start = getBigIntValueForColumn(rs, 5);
            Sequence sequence = CreationUtils.createSequence(owner, name, increment, minValue, maxValue, start, false, null);
            // Look for a table that could correspond to the sequence
            if (name.endsWith("_SEQ")) {
                String tableName = name.substring(0, name.length() - "_SEQ".length());
                AbstractTable abstractTable = queries.getTable(tableName);
                if (abstractTable != null && abstractTable instanceof Table) {
                    Table table = (Table) abstractTable;
                    if (table.getPrimaryKey() != null && table.getPrimaryKey().getColumns().size() == 1) {
                        Column column = table.getPrimaryKey().getColumns().get(0);
                        column.setSequence(sequence);
                    }
                }
            }
        }
    } catch (Exception ex) {
        ex.printStackTrace();
    } finally {
        JdbcUtils.closeStatement(pstmt);
        JdbcUtils.closeResultSet(rs);
    }
}
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) ResultSet(java.sql.ResultSet) BigInteger(java.math.BigInteger) PreparedStatement(java.sql.PreparedStatement) Sequence(org.obeonetwork.dsl.database.Sequence) SQLException(java.sql.SQLException)

Example 15 with Table

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

the class MySQLDataBaseBuilder method removeIndexForFK.

private void removeIndexForFK(TableContainer owner) {
    HashSet<String> fkNames = new HashSet<String>();
    for (AbstractTable table : owner.getTables()) {
        if (table instanceof Table) {
            for (ForeignKey foreignKey : ((Table) table).getForeignKeys()) {
                fkNames.add(foreignKey.getName());
            }
        }
    }
    for (AbstractTable t : owner.getTables()) {
        if (t instanceof Table) {
            Table table = (Table) t;
            ArrayList<Index> indices = new ArrayList<Index>();
            if (table.getIndexes().size() > 0) {
                for (Index index : table.getIndexes()) {
                    if (!fkNames.contains(index.getName())) {
                        indices.add(index);
                    } else {
                        for (IndexElement indexElt : index.getElements()) {
                            indexElt.getColumn().getIndexElements().remove(indexElt);
                        }
                    }
                }
                table.getIndexes().clear();
                table.getIndexes().addAll(indices);
            }
        }
    }
}
Also used : AbstractTable(org.obeonetwork.dsl.database.AbstractTable) Table(org.obeonetwork.dsl.database.Table) AbstractTable(org.obeonetwork.dsl.database.AbstractTable) ArrayList(java.util.ArrayList) Index(org.obeonetwork.dsl.database.Index) ForeignKey(org.obeonetwork.dsl.database.ForeignKey) HashSet(java.util.HashSet) IndexElement(org.obeonetwork.dsl.database.IndexElement)

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