1 package org.kuali.common.impex.data.service.impl;
2
3 import java.sql.Connection;
4 import java.util.List;
5
6 import javax.sql.DataSource;
7
8 import org.kuali.common.impex.data.service.DumpDataContext;
9 import org.kuali.common.impex.data.service.DumpDataService;
10 import org.kuali.common.jdbc.JdbcUtils;
11 import org.kuali.common.threads.ElementHandler;
12 import org.kuali.common.threads.ListIteratorContext;
13 import org.slf4j.Logger;
14 import org.slf4j.LoggerFactory;
15 import org.springframework.jdbc.datasource.DataSourceUtils;
16
17 public class DumpTableBucketHandler implements ElementHandler<DumpTableBucket> {
18
19 private static final Logger logger = LoggerFactory.getLogger(DumpTableBucketHandler.class);
20
21 @Override
22 public void handleElement(ListIteratorContext<DumpTableBucket> context, int index, DumpTableBucket element) {
23 DataSource dataSource = null;
24 Connection conn = null;
25 try {
26 List<DumpTableContext> tables = element.getTables();
27 DumpDataService service = element.getService();
28 DumpDataContext impex = element.getContext();
29 dataSource = impex.getDataSource();
30 List<DumpTableResult> results = element.getResults();
31 conn = DataSourceUtils.getConnection(dataSource);
32 for (DumpTableContext tableContext : tables) {
33 logger.debug("Dumping {}", tableContext.getTable().getName());
34 DumpTableResult result = service.dumpTable(impex, tableContext, conn);
35 synchronized (results) {
36 results.add(result);
37 }
38 }
39 } catch (Exception e) {
40 throw new IllegalStateException(e);
41 } finally {
42 JdbcUtils.closeQuietly(dataSource, conn);
43 }
44 }
45 }