use of org.apache.cayenne.dbsync.naming.DefaultObjectNameGenerator in project cayenne by apache.
the class DefaultDbImportActionTest method testImportWithFieldChanged.
@Test
public void testImportWithFieldChanged() throws Exception {
DbImportConfiguration config = mock(DbImportConfiguration.class);
when(config.getTargetDataMap()).thenReturn(FILE_STUB);
when(config.createMergeDelegate()).thenReturn(new DefaultModelMergeDelegate());
when(config.getDbLoaderConfig()).thenReturn(new DbLoaderConfiguration());
when(config.createNameGenerator()).thenReturn(new DefaultObjectNameGenerator(NoStemStemmer.getInstance()));
when(config.createMeaningfulPKFilter()).thenReturn(NamePatternMatcher.EXCLUDE_ALL);
DbLoader dbLoader = new DbLoader(mockAdapter, mockConnection, config.getDbLoaderConfig(), mockDelegate, mockNameGenerator) {
@Override
public DataMap load() throws SQLException {
DataMap dataMap = new DataMap();
new DataMapBuilder(dataMap).with(dbEntity("ARTGROUP").attributes(dbAttr("GROUP_ID").typeInt().primaryKey(), dbAttr("NAME").typeVarchar(100).mandatory(), dbAttr("NAME_01").typeVarchar(100).mandatory(), dbAttr("PARENT_GROUP_ID").typeInt())).with(objEntity("org.apache.cayenne.testdo.testmap", "ArtGroup", "ARTGROUP").attributes(objAttr("name").type(String.class).dbPath("NAME")));
return dataMap;
}
};
final boolean[] haveWeTriedToSave = { false };
DefaultDbImportAction action = buildDbImportAction(new FileProjectSaver(Collections.<ProjectExtension>emptyList()) {
@Override
public void save(Project project) {
haveWeTriedToSave[0] = true;
// Validation phase
DataMap rootNode = (DataMap) project.getRootNode();
assertEquals(1, rootNode.getObjEntities().size());
assertEquals(1, rootNode.getDbEntityMap().size());
DbEntity entity = rootNode.getDbEntity("ARTGROUP");
assertNotNull(entity);
assertEquals(4, entity.getAttributes().size());
assertNotNull(entity.getAttribute("NAME_01"));
}
}, new DataMapLoader() {
@Override
public DataMap load(Resource configurationResource) throws CayenneRuntimeException {
return new DataMapBuilder().with(dbEntity("ARTGROUP").attributes(dbAttr("GROUP_ID").typeInt().primaryKey(), dbAttr("NAME").typeVarchar(100).mandatory(), dbAttr("PARENT_GROUP_ID").typeInt())).with(objEntity("org.apache.cayenne.testdo.testmap", "ArtGroup", "ARTGROUP").attributes(objAttr("name").type(String.class).dbPath("NAME"))).build();
}
}, dbLoader);
action.execute(config);
assertTrue("We should try to save.", haveWeTriedToSave[0]);
}
use of org.apache.cayenne.dbsync.naming.DefaultObjectNameGenerator in project cayenne by apache.
the class ManyToManyCandidateEntityTest method testOptimisationForManyToManyEntity.
@Test
public void testOptimisationForManyToManyEntity() {
ObjEntity manyToManyEntity = map.getObjEntity("Table1Table2");
ManyToManyCandidateEntity.build(manyToManyEntity).optimizeRelationships(new DefaultObjectNameGenerator(NoStemStemmer.getInstance()));
ObjEntity table1Entity = map.getObjEntity("Table1");
ObjEntity table2Entity = map.getObjEntity("Table2");
assertEquals(1, table1Entity.getRelationships().size());
assertEquals(table2Entity, new ArrayList<Relationship>(table1Entity.getRelationships()).get(0).getTargetEntity());
assertEquals(1, table2Entity.getRelationships().size());
assertEquals(table1Entity, new ArrayList<Relationship>(table2Entity.getRelationships()).get(0).getTargetEntity());
}
use of org.apache.cayenne.dbsync.naming.DefaultObjectNameGenerator in project cayenne by apache.
the class MergerOptions method prepareMigrator.
/**
* check database and create the {@link List} of {@link MergerToken}s
*/
protected void prepareMigrator() {
try {
adapter = connectionInfo.makeAdapter(getApplication().getClassLoadingService());
MergerTokenFactory mergerTokenFactory = mergerTokenFactoryProvider.get(adapter);
tokens.setMergerTokenFactory(mergerTokenFactory);
FiltersConfig filters = FiltersConfig.create(defaultCatalog, defaultSchema, TableFilter.everything(), PatternFilter.INCLUDE_NOTHING);
DataMapMerger merger = DataMapMerger.builder(mergerTokenFactory).filters(filters).build();
DbLoaderConfiguration config = new DbLoaderConfiguration();
config.setFiltersConfig(filters);
DataSource dataSource = connectionInfo.makeDataSource(getApplication().getClassLoadingService());
DataMap dbImport;
try (Connection conn = dataSource.getConnection()) {
dbImport = new DbLoader(adapter, conn, config, new LoggingDbLoaderDelegate(LoggerFactory.getLogger(DbLoader.class)), new DefaultObjectNameGenerator(NoStemStemmer.getInstance())).load();
} catch (SQLException e) {
throw new CayenneRuntimeException("Can't doLoad dataMap from db.", e);
}
tokens.setTokens(merger.createMergeTokens(dataMap, dbImport));
} catch (Exception ex) {
reportError("Error loading adapter", ex);
}
}
use of org.apache.cayenne.dbsync.naming.DefaultObjectNameGenerator in project cayenne by apache.
the class DefaultDbImportActionTest method testNewDataMapImport.
@Test
public void testNewDataMapImport() throws Exception {
DbImportConfiguration config = mock(DbImportConfiguration.class);
when(config.createMergeDelegate()).thenReturn(new DefaultModelMergeDelegate());
when(config.getDbLoaderConfig()).thenReturn(new DbLoaderConfiguration());
when(config.getTargetDataMap()).thenReturn(new File("xyz.map.xml"));
when(config.createNameGenerator()).thenReturn(new DefaultObjectNameGenerator(NoStemStemmer.getInstance()));
when(config.createMeaningfulPKFilter()).thenReturn(NamePatternMatcher.EXCLUDE_ALL);
DbLoader dbLoader = new DbLoader(mockAdapter, mockConnection, config.getDbLoaderConfig(), mockDelegate, mockNameGenerator) {
@Override
public DataMap load() throws SQLException {
DataMap map = new DataMap();
new DataMapBuilder(map).withDbEntities(2).build();
return map;
}
};
final boolean[] haveWeTriedToSave = { false };
DefaultDbImportAction action = buildDbImportAction(new FileProjectSaver(Collections.emptyList()) {
@Override
public void save(Project project) {
haveWeTriedToSave[0] = true;
// Validation phase
assertTrue(project.getRootNode() instanceof DataMap);
}
}, null, dbLoader);
action.execute(config);
assertTrue("We should try to save.", haveWeTriedToSave[0]);
}
use of org.apache.cayenne.dbsync.naming.DefaultObjectNameGenerator in project cayenne by apache.
the class RelationshipsLoaderIT method testRelationshipLoad.
@Test
public void testRelationshipLoad() throws Exception {
boolean supportsFK = accessStackAdapter.supportsFKConstraints();
if (!supportsFK) {
return;
}
DatabaseMetaData metaData = connection.getMetaData();
DbLoaderDelegate delegate = new DefaultDbLoaderDelegate();
// We need all data to check relationships, so simply load it all
EntityLoader entityLoader = new EntityLoader(adapter, EMPTY_CONFIG, delegate);
AttributeLoader attributeLoader = new AttributeLoader(adapter, EMPTY_CONFIG, delegate);
PrimaryKeyLoader primaryKeyLoader = new PrimaryKeyLoader(EMPTY_CONFIG, delegate);
ExportedKeyLoader exportedKeyLoader = new ExportedKeyLoader(EMPTY_CONFIG, delegate);
entityLoader.load(metaData, store);
attributeLoader.load(metaData, store);
primaryKeyLoader.load(metaData, store);
exportedKeyLoader.load(metaData, store);
// *** TESTING THIS ***
RelationshipLoader relationshipLoader = new RelationshipLoader(EMPTY_CONFIG, delegate, new DefaultObjectNameGenerator());
relationshipLoader.load(metaData, store);
Collection<DbRelationship> rels = getDbEntity("ARTIST").getRelationships();
assertNotNull(rels);
assertTrue(!rels.isEmpty());
// test one-to-one
rels = getDbEntity("PAINTING").getRelationships();
assertNotNull(rels);
// find relationship to PAINTING_INFO
DbRelationship oneToOne = null;
for (DbRelationship rel : rels) {
if ("PAINTING_INFO".equalsIgnoreCase(rel.getTargetEntityName())) {
oneToOne = rel;
break;
}
}
assertNotNull("No relationship to PAINTING_INFO", oneToOne);
assertFalse("Relationship to PAINTING_INFO must be to-one", oneToOne.isToMany());
assertTrue("Relationship to PAINTING_INFO must be to-one", oneToOne.isToDependentPK());
}
Aggregations