use of org.jumpmind.symmetric.io.data.CsvData in project symmetric-ds by JumpMind.
the class SymXmlDataReader method readNext.
protected Object readNext() {
try {
Map<String, String> rowData = new LinkedHashMap<String, String>();
String columnName = null;
Table lastTable = this.table;
int eventType = parser.next();
while (eventType != XmlPullParser.END_DOCUMENT) {
switch(eventType) {
case XmlPullParser.TEXT:
if (columnName != null) {
rowData.put(columnName, parser.getText());
columnName = null;
}
break;
case XmlPullParser.START_TAG:
String name = parser.getName();
if ("row".equalsIgnoreCase(name)) {
table = new Table();
data = new CsvData();
for (int i = 0; i < parser.getAttributeCount(); i++) {
String attributeName = parser.getAttributeName(i);
String attributeValue = parser.getAttributeValue(i);
if (attributeName.equalsIgnoreCase("entity")) {
table.setName(attributeValue);
} else if (attributeName.equalsIgnoreCase("catalog")) {
table.setCatalog(attributeValue);
} else if (attributeName.equalsIgnoreCase("schema")) {
table.setSchema(attributeValue);
} else if (attributeName.equalsIgnoreCase("dml")) {
if (attributeValue.equals("I")) {
data.setDataEventType(DataEventType.INSERT);
} else if (attributeValue.equals("U")) {
data.setDataEventType(DataEventType.UPDATE);
} else if (attributeValue.equals("D")) {
data.setDataEventType(DataEventType.DELETE);
} else if (attributeValue.equals("C")) {
data.setDataEventType(DataEventType.CREATE);
} else if (attributeValue.equals("S")) {
data.setDataEventType(DataEventType.SQL);
} else if (attributeValue.equals("B")) {
data.setDataEventType(DataEventType.BSH);
} else if (attributeValue.equals("R")) {
data.setDataEventType(DataEventType.RELOAD);
}
}
}
} else if ("data".equalsIgnoreCase(name)) {
boolean nullValue = false;
for (int i = 0; i < parser.getAttributeCount(); i++) {
String attributeName = parser.getAttributeName(i);
String attributeValue = parser.getAttributeValue(i);
if ("key".equalsIgnoreCase(attributeName)) {
columnName = attributeValue;
} else if ("xsi:nil".equalsIgnoreCase(attributeName)) {
nullValue = true;
}
}
if (nullValue) {
rowData.put(columnName, null);
columnName = null;
}
} else if ("batch".equalsIgnoreCase(name)) {
batch = new Batch();
for (int i = 0; i < parser.getAttributeCount(); i++) {
String attributeName = parser.getAttributeName(i);
String attributeValue = parser.getAttributeValue(i);
if ("binary".equalsIgnoreCase(attributeName)) {
batch.setBinaryEncoding(BinaryEncoding.valueOf(attributeValue));
} else if ("nodeid".equalsIgnoreCase(attributeName)) {
batch.setSourceNodeId(attributeValue);
}
}
return batch;
}
break;
case XmlPullParser.END_TAG:
name = parser.getName();
if ("row".equalsIgnoreCase(name)) {
String[] columnNames = rowData.keySet().toArray(new String[rowData.keySet().size()]);
for (String colName : columnNames) {
table.addColumn(new Column(colName));
}
String[] columnValues = rowData.values().toArray(new String[rowData.values().size()]);
data.putParsedData(CsvData.ROW_DATA, columnValues);
rowData = new LinkedHashMap<String, String>();
if (lastTable == null || !lastTable.equals(table)) {
return table;
} else {
return data;
}
} else if ("data".equalsIgnoreCase(name)) {
columnName = null;
}
break;
}
eventType = parser.next();
}
return null;
} catch (IOException ex) {
throw new IoException(ex);
} catch (XmlPullParserException ex) {
throw new RuntimeException(ex);
}
}
use of org.jumpmind.symmetric.io.data.CsvData in project symmetric-ds by JumpMind.
the class SymXmlDataReader method nextData.
public CsvData nextData() {
if (next instanceof CsvData) {
CsvData data = (CsvData) next;
next = null;
return data;
} else {
next = readNext();
if (next instanceof CsvData) {
CsvData data = (CsvData) next;
next = null;
return data;
}
}
return null;
}
Aggregations