View Javadoc

1   package org.jumpmind.symmetric.ext;
2   
3   import java.util.ArrayList;
4   import java.util.HashSet;
5   import java.util.List;
6   
7   import org.jumpmind.symmetric.load.DataLoaderContext;
8   import org.jumpmind.symmetric.load.IDataLoaderContext;
9   import org.jumpmind.symmetric.load.TableTemplate;
10  import org.jumpmind.symmetric.load.csv.CsvLoader;
11  import org.jumpmind.symmetric.test.AbstractDatabaseTest;
12  import org.junit.Assert;
13  import org.junit.Before;
14  import org.junit.Test;
15  
16  public class XmlPublisherFilterTest extends AbstractDatabaseTest {
17  
18      private static final String TABLE_TEST = "TEST_XML_PUBLISHER";
19      
20      private static final String TEST_SIMPLE_TRANSFORM_RESULTS = "<batch xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" id=\"12\" nodeid=\"54321\" time=\"test\"><row entity=\"TEST_XML_PUBLISHER\" dml=\"I\"><data key=\"ID1\">1</data><data key=\"ID2\">2</data><data key=\"DATA1\">test embedding an &amp;</data><data key=\"DATA2\">3</data><data key=\"DATA3\" xsi:nil=\"true\" /></row></batch>";
21  
22      private DataLoaderContext ctx;
23  
24      public XmlPublisherFilterTest() throws Exception {
25          super();
26      }
27  
28      public XmlPublisherFilterTest(String dbName) {
29          super(dbName);
30      }
31  
32      @Before
33      public void setUp() {
34          ctx = new DataLoaderContext();
35          ctx.setNodeId("54321");
36          ctx.setTableName(TABLE_TEST);
37          ctx.setTableTemplate(new TableTemplate(getJdbcTemplate(), getDbDialect(), TABLE_TEST, null, false));
38          ctx.setColumnNames(new String[] { "ID1", "ID2", "DATA1", "DATA2", "DATA3" });
39  
40      }
41  
42      @Test
43      public void testSimpleTransform() {
44          XmlPublisherFilter filter = new XmlPublisherFilter();
45          filter.setTimeStringGenerator(new XmlPublisherFilter.ITimeGenerator() {
46              public String getTime() {
47                  return "test";
48              }
49          });
50          HashSet<String> tableNames = new HashSet<String>();
51          tableNames.add(TABLE_TEST);
52          filter.setTableNamesToPublishAsGroup(tableNames);
53          List<String> columns = new ArrayList<String>();
54          columns.add("ID1");
55          columns.add("ID2");
56          filter.setGroupByColumnNames(columns);
57          Output output = new Output();
58          filter.setPublisher(output);
59  
60          String[][] data = { { "1", "1", "The Angry Brown", "3", "2008-10-24 00:00:00.0" },
61                  { "1", "2", "test embedding an &", "3", null } };
62          for (String[] strings : data) {
63              filter.filterInsert(ctx, strings);
64              filter.batchComplete(new CsvLoader() {
65                  @Override
66                  public IDataLoaderContext getContext() {
67                      return ctx;
68                  }
69              }, null);
70          }
71  
72          Assert.assertEquals(TEST_SIMPLE_TRANSFORM_RESULTS.trim(), output.toString().trim());
73  
74      }
75  
76      class Output implements IPublisher {
77          private String output;
78  
79          public void publish(IDataLoaderContext context, String text) {
80              this.output = text;
81          }
82  
83          @Override
84          public String toString() {
85              return output;
86          }
87      }
88  }