Fixed bug in protograph transposer in which cells in subsequent rows of a tree-shaped record (with blank context cells) are not processed. This bug was introduced when we started to allow a protograph node to correspond to more than one column.

git-svn-id: http://google-refine.googlecode.com/svn/trunk@1621 7d457c2a-affb-35e4-300a-418c747d4874
This commit is contained in:
David Huynh 2010-10-22 21:05:06 +00:00
parent 460d01230b
commit d85ae8c28c

View File

@ -132,7 +132,6 @@ public class Transposer {
) { ) {
List<TransposedNode> tnodes = new LinkedList<TransposedNode>(); List<TransposedNode> tnodes = new LinkedList<TransposedNode>();
TransposedNode parentNode = context.parent == null ? null : context.parent.transposedNode;
Link link = context.parent == null ? null : context.link; Link link = context.parent == null ? null : context.link;
if (node instanceof CellNode) { if (node instanceof CellNode) {
@ -144,6 +143,7 @@ public class Transposer {
Cell cell = row.getCell(cellIndex); Cell cell = row.getCell(cellIndex);
if (cell != null && ExpressionUtils.isNonBlankData(cell.value)) { if (cell != null && ExpressionUtils.isNonBlankData(cell.value)) {
System.err.println("row " + rowIndex + " non-blank column " + columnName);
if (node2 instanceof CellTopicNode && if (node2 instanceof CellTopicNode &&
(cell.recon == null || cell.recon.judgment == Judgment.None)) { (cell.recon == null || cell.recon.judgment == Judgment.None)) {
return; return;
@ -154,6 +154,17 @@ public class Transposer {
return; return;
} }
if (context.parent == null) {
tnodes.add(nodeFactory.transposeCellNode(
null,
link,
node2,
rowIndex,
cellIndex,
cell
));
} else {
for (TransposedNode parentNode : context.parent.transposedNodes) {
tnodes.add(nodeFactory.transposeCellNode( tnodes.add(nodeFactory.transposeCellNode(
parentNode, parentNode,
link, link,
@ -164,23 +175,58 @@ public class Transposer {
)); ));
} }
} }
} else {
System.err.println("row " + rowIndex + " blank column " + columnName);
}
}
} }
} else { } else {
if (node instanceof AnonymousNode) { if (node instanceof AnonymousNode) {
if (context.parent == null) {
tnodes.add(nodeFactory.transposeAnonymousNode(
null,
link,
(AnonymousNode) node,
rowIndex
));
} else {
for (TransposedNode parentNode : context.parent.transposedNodes) {
tnodes.add(nodeFactory.transposeAnonymousNode( tnodes.add(nodeFactory.transposeAnonymousNode(
parentNode, parentNode,
link, link,
(AnonymousNode) node, (AnonymousNode) node,
rowIndex rowIndex
)); ));
}
}
} else if (node instanceof FreebaseTopicNode) { } else if (node instanceof FreebaseTopicNode) {
if (context.parent == null) {
tnodes.add(nodeFactory.transposeTopicNode(
null,
link,
(FreebaseTopicNode) node,
rowIndex
));
} else {
for (TransposedNode parentNode : context.parent.transposedNodes) {
tnodes.add(nodeFactory.transposeTopicNode( tnodes.add(nodeFactory.transposeTopicNode(
parentNode, parentNode,
link, link,
(FreebaseTopicNode) node, (FreebaseTopicNode) node,
rowIndex rowIndex
)); ));
}
}
} else if (node instanceof ValueNode) { } else if (node instanceof ValueNode) {
if (context.parent == null) {
tnodes.add(nodeFactory.transposeValueNode(
null,
link,
(ValueNode) node,
rowIndex
));
} else {
for (TransposedNode parentNode : context.parent.transposedNodes) {
tnodes.add(nodeFactory.transposeValueNode( tnodes.add(nodeFactory.transposeValueNode(
parentNode, parentNode,
link, link,
@ -189,6 +235,13 @@ public class Transposer {
)); ));
} }
} }
}
}
if (tnodes.size() > 0) {
context.transposedNodes.clear();
context.transposedNodes.addAll(tnodes);
}
if (node instanceof NodeWithLinks) { if (node instanceof NodeWithLinks) {
NodeWithLinks node2 = (NodeWithLinks) node; NodeWithLinks node2 = (NodeWithLinks) node;
@ -197,10 +250,7 @@ public class Transposer {
for (int i = 0; i < linkCount; i++) { for (int i = 0; i < linkCount; i++) {
Link link2 = node2.getLink(i); Link link2 = node2.getLink(i);
if (link2.condition == null || link2.condition.test(project, rowIndex, row)) { if (link2.condition == null || link2.condition.test(project, rowIndex, row)) {
for (TransposedNode tnode : tnodes) { System.err.println(" row " + rowIndex + " descend " + link2.property.id);
context.transposedNode = tnode;
context.nullifySubContextNodes();
descend( descend(
project, project,
protograph, protograph,
@ -214,10 +264,9 @@ public class Transposer {
} }
} }
} }
}
static class Context { static class Context {
TransposedNode transposedNode; List<TransposedNode> transposedNodes = new LinkedList<TransposedNode>();
List<Context> subContexts; List<Context> subContexts;
Context parent; Context parent;
Link link; Link link;
@ -246,7 +295,7 @@ public class Transposer {
public void nullifySubContextNodes() { public void nullifySubContextNodes() {
if (subContexts != null) { if (subContexts != null) {
for (Context context : subContexts) { for (Context context : subContexts) {
context.transposedNode = null; context.transposedNodes.clear();
context.nullifySubContextNodes(); context.nullifySubContextNodes();
} }
} }