* @param config
* @param consumer
* @throws Exception
*/
public static void run(ExportConfiguration config, IDataSetConsumer consumer) throws Exception {
IDatabaseConnection connection = DbUnitUtil.getConnection(config.getSettings());
try {
Map<Entity, String> entityQueries = getEntityQueries(config);
Map<Class<?>, Set<ColumnValues>> pksToLoad = new HashMap<Class<?>, Set<ColumnValues>>();
for (Map.Entry<Entity, String> entry : entityQueries.entrySet()) {
Entity entity = entry.getKey();
String query = entry.getValue();
String tableName = MappingTranslator.getTableName(config.getClassForEntity(entity));
Set<ColumnValues> pks = getPksFromQuery(connection, tableName, query);
pksToLoad.put(config.getClassForEntity(entity), pks);
}
IDataSet data = null;
if (pksToLoad.isEmpty()) {
data = connection.createDataSet();
} else {
EntityRelationshipFilter filter = new EntityRelationshipFilter(connection, pksToLoad, new ConfigurableDependencyInclusionResolver(config));
data = new FilteredDataSet(filter, connection.createDataSet());
}
ReplacementDataSet nullReplacingData = new ReplacementDataSet(data);
nullReplacingData.addReplacementObject(null, Settings.NULL_REPLACEMENT);
DataSetProducerAdapter producer = new DataSetProducerAdapter(nullReplacingData);
producer.setConsumer(consumer);
producer.produce();
} finally {
connection.close();
}
}