}
private void unfoldNestedLevel(Worksheet oldws, HTable ht, String keyHNodeid, String valueHNodeid, RepFactory factory) {
ArrayList<HNode> topHNodes = new ArrayList<HNode>(ht.getHNodes());
SuperSelection selection = getSuperSelection(oldws);
HTable parentHT = ht.getParentHNode().getHTable(factory);
List<Table> parentTables = new ArrayList<Table>();
CloneTableUtils.getDatatable(oldws.getDataTable(), parentHT,parentTables, selection);
ArrayList<Row> parentRows = new ArrayList<Row>();
for (Table tmp : parentTables) {
for (Row row : tmp.getRows(0, tmp.getNumRows(), selection)) {
parentRows.add(row);
}
}
//ArrayList<Row> parentRows = parentTable.getRows(0, parentTable.getNumRows());
HNode newNode = parentHT.addHNode("Unfold: " + ht.getHNode(keyHNodeid).getColumnName(), HNodeType.Transformation, oldws, factory);
outputColumns.add(newNode.getId());
this.newHNodeId = newNode.getId();
HTable newHT = newNode.addNestedTable("Unfold: " + ht.getHNode(keyHNodeid).getColumnName(), oldws, factory);
HNode key = ht.getHNode(keyHNodeid);
HNode value = ht.getHNode(valueHNodeid);
List<HNode> hnodes = new ArrayList<HNode>();
List<String> hnodeIds = new ArrayList<String>();
if (!notOtherColumn) {
for (HNode h : topHNodes) {
if (h.getId().compareTo(value.getId()) != 0 && h.getId().compareTo(key.getId()) != 0) {
hnodes.add(h);
hnodeIds.add(h.getId());
}
}
}
for (Entry<String, String> entry : CloneTableUtils.cloneHTable(ht, newHT, oldws, factory, hnodes, selection).entrySet()) {
outputColumns.add(entry.getValue());
}
List<Row> resultRows = new ArrayList<Row>();
for (Row parentRow: parentRows) {
Table t = null;
for (Node node : parentRow.getNodes()) {
if (node.hasNestedTable() && node.getNestedTable().getHTableId().compareTo(ht.getId()) == 0) {
t = node.getNestedTable();
break;
}
}
Map<String, String> keyMapping = new HashMap<String, String>();
Map<String, String> HNodeidMapping = new HashMap<String, String>();
ArrayList<Row> rows = t.getRows(0, t.getNumRows(), selection);
for (Row row : rows) {
Node n = row.getNode(key.getId());
keyMapping.put(HashValueManager.getHashValue(oldws, n.getId(), factory), n.getValue().asString());
}
for (String mapkey : keyMapping.keySet()) {
HNode hn = newHT.getHNodeFromColumnName(keyMapping.get(mapkey).toLowerCase().replace('/', '_'));
if (hn == null) {
HNode n = newHT.addHNode(keyMapping.get(mapkey).toLowerCase().replace('/', '_'), HNodeType.Transformation, oldws, factory);
outputColumns.add(n.getId());
HTable htt = n.addNestedTable("values", oldws, factory);
outputColumns.add(htt.addHNode("Values", HNodeType.Transformation, oldws, factory).getId());
HNodeidMapping.put(keyMapping.get(mapkey), n.getId());
}
else
HNodeidMapping.put(keyMapping.get(mapkey), hn.getId());
}