use of org.apache.cayenne.dbsync.merge.context.MergerContext in project cayenne by apache.
the class TokensToModelExecutionTest method testCreateAndDropTable.
@Test
public void testCreateAndDropTable() throws Exception {
DbEntity entity = dbEntity().build();
DataMap dataMap = dataMap().build();
assertTrue(dataMap.getDbEntityMap().isEmpty());
assertTrue(dataMap.getObjEntityMap().isEmpty());
MergerContext context = MergerContext.builder(dataMap).dataNode(new DataNode()).build();
new DefaultMergerTokenFactory().createCreateTableToModel(entity).execute(context);
assertEquals(1, dataMap.getDbEntityMap().size());
assertEquals(1, dataMap.getObjEntities().size());
assertEquals(entity, dataMap.getDbEntity(entity.getName()));
new DefaultMergerTokenFactory().createDropTableToModel(entity).execute(context);
assertTrue(dataMap.getDbEntityMap().isEmpty());
assertTrue(dataMap.getObjEntityMap().isEmpty());
}
use of org.apache.cayenne.dbsync.merge.context.MergerContext in project cayenne by apache.
the class MergerOptions method generateSchemaAction.
/**
* Performs configured schema operations via DbGenerator.
*/
public void generateSchemaAction() {
refreshGeneratorAction();
// sanity check...
List<MergerToken> tokensToMigrate = tokens.getSelectedTokens();
if (tokensToMigrate.isEmpty()) {
JOptionPane.showMessageDialog(getView(), "Nothing to migrate.");
return;
}
DataSource dataSource;
try {
dataSource = connectionInfo.makeDataSource(getApplication().getClassLoadingService());
} catch (SQLException ex) {
reportError("Migration Error", ex);
return;
}
final Collection<ObjEntity> loadedObjEntities = new LinkedList<>();
MergerContext mergerContext = MergerContext.builder(dataMap).syntheticDataNode(dataSource, adapter).delegate(createDelegate(loadedObjEntities)).build();
boolean modelChanged = applyTokens(tokensToMigrate, mergerContext);
DefaultDbImportAction.flattenManyToManyRelationships(dataMap, loadedObjEntities, mergerContext.getNameGenerator());
notifyProjectModified(modelChanged);
reportFailures(mergerContext);
if (tokens.isReverse()) {
getApplication().getUndoManager().discardAllEdits();
}
}
use of org.apache.cayenne.dbsync.merge.context.MergerContext in project cayenne by apache.
the class DefaultDbImportAction method applyTokens.
private boolean applyTokens(DataMap targetDataMap, Collection<MergerToken> tokens, DbImportConfiguration config) {
if (tokens.isEmpty()) {
logger.info("");
logger.info("Detected changes: No changes to import.");
return false;
}
final Collection<ObjEntity> loadedObjEntities = new LinkedList<>();
ModelMergeDelegate mergeDelegate = new ProxyModelMergeDelegate(config.createMergeDelegate()) {
@Override
public void objEntityAdded(ObjEntity ent) {
loadedObjEntities.add(ent);
super.objEntityAdded(ent);
}
};
ObjectNameGenerator nameGenerator = config.createNameGenerator();
MergerContext mergerContext = MergerContext.builder(targetDataMap).delegate(mergeDelegate).nameGenerator(nameGenerator).usingPrimitives(config.isUsePrimitives()).usingJava7Types(config.isUseJava7Types()).meaningfulPKFilter(config.createMeaningfulPKFilter()).build();
for (MergerToken token : tokens) {
try {
token.execute(mergerContext);
} catch (Throwable th) {
String message = "Migration Error. Can't apply changes from token: " + token.getTokenName() + " (" + token.getTokenValue() + ")";
logger.error(message, th);
mergerContext.getValidationResult().addFailure(new SimpleValidationFailure(th, message));
}
}
ValidationResult failures = mergerContext.getValidationResult();
if (failures.hasFailures()) {
logger.info("Migration Complete.");
logger.warn("Migration finished. The following problem(s) were encountered and ignored.");
for (ValidationFailure failure : failures.getFailures()) {
logger.warn(failure.toString());
}
} else {
logger.info("Migration Complete Successfully.");
}
flattenManyToManyRelationships(targetDataMap, loadedObjEntities, nameGenerator);
relationshipsSanity(targetDataMap);
return true;
}
use of org.apache.cayenne.dbsync.merge.context.MergerContext in project cayenne by apache.
the class MergeCase method execute.
protected void execute(MergerToken token) throws Exception {
MergerContext mergerContext = MergerContext.builder(map).dataNode(node).build();
token.execute(mergerContext);
}
use of org.apache.cayenne.dbsync.merge.context.MergerContext in project cayenne by apache.
the class TokensToModelExecutionTest method testCreateAndDropColumn.
@Test
public void testCreateAndDropColumn() throws Exception {
DbAttribute attr = dbAttr("attr").build();
DbEntity entity = dbEntity().build();
DataMap dataMap = dataMap().with(entity).build();
assertEquals(1, dataMap.getDbEntityMap().size());
assertTrue(dataMap.getObjEntityMap().isEmpty());
MergerContext context = MergerContext.builder(dataMap).dataNode(new DataNode()).build();
new DefaultMergerTokenFactory().createAddColumnToModel(entity, attr).execute(context);
assertEquals(1, dataMap.getDbEntityMap().size());
assertEquals(1, entity.getAttributes().size());
assertEquals(attr, entity.getAttribute(attr.getName()));
new DefaultMergerTokenFactory().createDropColumnToModel(entity, attr).execute(context);
assertEquals(1, dataMap.getDbEntityMap().size());
assertTrue(entity.getAttributes().isEmpty());
assertTrue(dataMap.getObjEntityMap().isEmpty());
}
Aggregations