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);
}
}
}
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);
}
}
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);
}
}
}
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);
}
}
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);
}
}
}
}
Aggregations