When transposing data to triple loader output, pass row indices and cell indices deep down so later we can generate more context information for recon.
git-svn-id: http://google-refine.googlecode.com/svn/trunk@1051 7d457c2a-affb-35e4-300a-418c747d4874
This commit is contained in:
parent
7a914f01e8
commit
2e3984d54a
@ -41,7 +41,7 @@ public class PreviewProtographCommand extends Command {
|
|||||||
|
|
||||||
{
|
{
|
||||||
StringWriter stringWriter = new StringWriter();
|
StringWriter stringWriter = new StringWriter();
|
||||||
TripleLoaderTransposedNodeFactory nodeFactory = new TripleLoaderTransposedNodeFactory(stringWriter);
|
TripleLoaderTransposedNodeFactory nodeFactory = new TripleLoaderTransposedNodeFactory(project, stringWriter);
|
||||||
|
|
||||||
Transposer.transpose(project, filteredRows, protograph, protograph.getRootNode(0), nodeFactory);
|
Transposer.transpose(project, filteredRows, protograph, protograph.getRootNode(0), nodeFactory);
|
||||||
nodeFactory.flush();
|
nodeFactory.flush();
|
||||||
|
@ -39,7 +39,7 @@ abstract public class ProtographTransposeExporter implements Exporter {
|
|||||||
if (project.protograph != null) {
|
if (project.protograph != null) {
|
||||||
Protograph protograph = project.protograph;
|
Protograph protograph = project.protograph;
|
||||||
|
|
||||||
TransposedNodeFactory nodeFactory = createNodeFactory(writer);
|
TransposedNodeFactory nodeFactory = createNodeFactory(project, writer);
|
||||||
|
|
||||||
Transposer.transpose(project, engine.getAllFilteredRows(), protograph, protograph.getRootNode(0), nodeFactory, -1);
|
Transposer.transpose(project, engine.getAllFilteredRows(), protograph, protograph.getRootNode(0), nodeFactory, -1);
|
||||||
|
|
||||||
@ -47,7 +47,7 @@ abstract public class ProtographTransposeExporter implements Exporter {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract protected TransposedNodeFactory createNodeFactory(Writer writer);
|
abstract protected TransposedNodeFactory createNodeFactory(Project project, Writer writer);
|
||||||
|
|
||||||
static public class TripleLoaderExporter extends ProtographTransposeExporter {
|
static public class TripleLoaderExporter extends ProtographTransposeExporter {
|
||||||
public TripleLoaderExporter() {
|
public TripleLoaderExporter() {
|
||||||
@ -55,8 +55,8 @@ abstract public class ProtographTransposeExporter implements Exporter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected TransposedNodeFactory createNodeFactory(Writer writer) {
|
protected TransposedNodeFactory createNodeFactory(Project project, Writer writer) {
|
||||||
return new TripleLoaderTransposedNodeFactory(writer);
|
return new TripleLoaderTransposedNodeFactory(project, writer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -66,7 +66,7 @@ abstract public class ProtographTransposeExporter implements Exporter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected TransposedNodeFactory createNodeFactory(Writer writer) {
|
protected TransposedNodeFactory createNodeFactory(Project project, Writer writer) {
|
||||||
return new MqlwriteLikeTransposedNodeFactory(writer);
|
return new MqlwriteLikeTransposedNodeFactory(writer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -247,7 +247,7 @@ public class MqlwriteLikeTransposedNodeFactory implements TransposedNodeFactory
|
|||||||
public TransposedNode transposeAnonymousNode(
|
public TransposedNode transposeAnonymousNode(
|
||||||
TransposedNode parentNode,
|
TransposedNode parentNode,
|
||||||
FreebaseProperty property,
|
FreebaseProperty property,
|
||||||
AnonymousNode node) {
|
AnonymousNode node, int rowIndex) {
|
||||||
|
|
||||||
return new AnonymousTransposedNode(
|
return new AnonymousTransposedNode(
|
||||||
parentNode instanceof JsonObjectTransposedNode ? (JsonObjectTransposedNode) parentNode : null,
|
parentNode instanceof JsonObjectTransposedNode ? (JsonObjectTransposedNode) parentNode : null,
|
||||||
@ -260,7 +260,7 @@ public class MqlwriteLikeTransposedNodeFactory implements TransposedNodeFactory
|
|||||||
TransposedNode parentNode,
|
TransposedNode parentNode,
|
||||||
FreebaseProperty property,
|
FreebaseProperty property,
|
||||||
CellNode node,
|
CellNode node,
|
||||||
Cell cell) {
|
int rowIndex, Cell cell) {
|
||||||
|
|
||||||
JsonTransposedNode tnode = null;
|
JsonTransposedNode tnode = null;
|
||||||
if (node instanceof CellTopicNode) {
|
if (node instanceof CellTopicNode) {
|
||||||
@ -280,7 +280,7 @@ public class MqlwriteLikeTransposedNodeFactory implements TransposedNodeFactory
|
|||||||
public TransposedNode transposeTopicNode(
|
public TransposedNode transposeTopicNode(
|
||||||
TransposedNode parentNode,
|
TransposedNode parentNode,
|
||||||
FreebaseProperty property,
|
FreebaseProperty property,
|
||||||
FreebaseTopicNode node) {
|
FreebaseTopicNode node, int rowIndex) {
|
||||||
|
|
||||||
JsonTransposedNode tnode = new TopicTransposedNode(node);
|
JsonTransposedNode tnode = new TopicTransposedNode(node);
|
||||||
|
|
||||||
@ -292,7 +292,7 @@ public class MqlwriteLikeTransposedNodeFactory implements TransposedNodeFactory
|
|||||||
public TransposedNode transposeValueNode(
|
public TransposedNode transposeValueNode(
|
||||||
TransposedNode parentNode,
|
TransposedNode parentNode,
|
||||||
FreebaseProperty property,
|
FreebaseProperty property,
|
||||||
ValueNode node) {
|
ValueNode node, int rowIndex) {
|
||||||
|
|
||||||
JsonTransposedNode tnode = new ValueTransposedNode(node);
|
JsonTransposedNode tnode = new ValueTransposedNode(node);
|
||||||
|
|
||||||
|
@ -13,26 +13,29 @@ public interface TransposedNodeFactory {
|
|||||||
public TransposedNode transposeAnonymousNode(
|
public TransposedNode transposeAnonymousNode(
|
||||||
TransposedNode parentNode,
|
TransposedNode parentNode,
|
||||||
FreebaseProperty property,
|
FreebaseProperty property,
|
||||||
AnonymousNode node
|
AnonymousNode node, int rowIndex
|
||||||
);
|
);
|
||||||
|
|
||||||
public TransposedNode transposeCellNode(
|
public TransposedNode transposeCellNode(
|
||||||
TransposedNode parentNode,
|
TransposedNode parentNode,
|
||||||
FreebaseProperty property,
|
FreebaseProperty property,
|
||||||
CellNode node,
|
CellNode node,
|
||||||
|
int rowIndex,
|
||||||
Cell cell
|
Cell cell
|
||||||
);
|
);
|
||||||
|
|
||||||
public TransposedNode transposeValueNode(
|
public TransposedNode transposeValueNode(
|
||||||
TransposedNode parentNode,
|
TransposedNode parentNode,
|
||||||
FreebaseProperty property,
|
FreebaseProperty property,
|
||||||
ValueNode node
|
ValueNode node,
|
||||||
|
int rowIndex
|
||||||
);
|
);
|
||||||
|
|
||||||
public TransposedNode transposeTopicNode(
|
public TransposedNode transposeTopicNode(
|
||||||
TransposedNode parentNode,
|
TransposedNode parentNode,
|
||||||
FreebaseProperty property,
|
FreebaseProperty property,
|
||||||
FreebaseTopicNode node
|
FreebaseTopicNode node,
|
||||||
|
int rowIndex
|
||||||
);
|
);
|
||||||
|
|
||||||
public void flush() throws IOException;
|
public void flush() throws IOException;
|
||||||
|
@ -25,7 +25,7 @@ import com.metaweb.gridworks.protograph.ValueNode;
|
|||||||
public class Transposer {
|
public class Transposer {
|
||||||
static public void transpose(
|
static public void transpose(
|
||||||
Project project,
|
Project project,
|
||||||
FilteredRows filteredRows,
|
FilteredRows filteredRows,
|
||||||
Protograph protograph,
|
Protograph protograph,
|
||||||
Node rootNode,
|
Node rootNode,
|
||||||
TransposedNodeFactory nodeFactory
|
TransposedNodeFactory nodeFactory
|
||||||
@ -35,7 +35,7 @@ public class Transposer {
|
|||||||
|
|
||||||
static public void transpose(
|
static public void transpose(
|
||||||
Project project,
|
Project project,
|
||||||
FilteredRows filteredRows,
|
FilteredRows filteredRows,
|
||||||
Protograph protograph,
|
Protograph protograph,
|
||||||
Node rootNode,
|
Node rootNode,
|
||||||
TransposedNodeFactory nodeFactory,
|
TransposedNodeFactory nodeFactory,
|
||||||
@ -43,56 +43,57 @@ public class Transposer {
|
|||||||
) {
|
) {
|
||||||
Context rootContext = new Context(rootNode, null, null, limit);
|
Context rootContext = new Context(rootNode, null, null, limit);
|
||||||
|
|
||||||
filteredRows.accept(project, new RowVisitor() {
|
filteredRows.accept(project, new RowVisitor() {
|
||||||
Context rootContext;
|
Context rootContext;
|
||||||
Protograph protograph;
|
Protograph protograph;
|
||||||
Node rootNode;
|
Node rootNode;
|
||||||
TransposedNodeFactory nodeFactory;
|
TransposedNodeFactory nodeFactory;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean visit(Project project, int rowIndex, Row row) {
|
public boolean visit(Project project, int rowIndex, Row row) {
|
||||||
if (rootContext.limit <= 0 || rootContext.count < rootContext.limit) {
|
if (rootContext.limit <= 0 || rootContext.count < rootContext.limit) {
|
||||||
descend(project, protograph, nodeFactory, row, rootNode, rootContext);
|
descend(project, protograph, nodeFactory, rowIndex, row, rootNode, rootContext);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (rootContext.limit > 0 && rootContext.count > rootContext.limit) {
|
if (rootContext.limit > 0 && rootContext.count > rootContext.limit) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void start(Project project) {
|
public void start(Project project) {
|
||||||
// TODO Auto-generated method stub
|
// TODO Auto-generated method stub
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void end(Project project) {
|
public void end(Project project) {
|
||||||
// TODO Auto-generated method stub
|
// TODO Auto-generated method stub
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public RowVisitor init(
|
public RowVisitor init(
|
||||||
Context rootContext,
|
Context rootContext,
|
||||||
Protograph protograph,
|
Protograph protograph,
|
||||||
Node rootNode,
|
Node rootNode,
|
||||||
TransposedNodeFactory nodeFactory
|
TransposedNodeFactory nodeFactory
|
||||||
) {
|
) {
|
||||||
this.rootContext = rootContext;
|
this.rootContext = rootContext;
|
||||||
this.protograph = protograph;
|
this.protograph = protograph;
|
||||||
this.rootNode = rootNode;
|
this.rootNode = rootNode;
|
||||||
this.nodeFactory = nodeFactory;
|
this.nodeFactory = nodeFactory;
|
||||||
|
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
}.init(rootContext, protograph, rootNode, nodeFactory));
|
}.init(rootContext, protograph, rootNode, nodeFactory));
|
||||||
}
|
}
|
||||||
|
|
||||||
static protected void descend(
|
static protected void descend(
|
||||||
Project project,
|
Project project,
|
||||||
Protograph protograph,
|
Protograph protograph,
|
||||||
TransposedNodeFactory nodeFactory,
|
TransposedNodeFactory nodeFactory,
|
||||||
|
int rowIndex,
|
||||||
Row row,
|
Row row,
|
||||||
Node node,
|
Node node,
|
||||||
Context context
|
Context context
|
||||||
@ -122,6 +123,7 @@ public class Transposer {
|
|||||||
parentNode,
|
parentNode,
|
||||||
property,
|
property,
|
||||||
node2,
|
node2,
|
||||||
|
rowIndex,
|
||||||
cell
|
cell
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -130,19 +132,22 @@ public class Transposer {
|
|||||||
tnode = nodeFactory.transposeAnonymousNode(
|
tnode = nodeFactory.transposeAnonymousNode(
|
||||||
parentNode,
|
parentNode,
|
||||||
property,
|
property,
|
||||||
(AnonymousNode) node
|
(AnonymousNode) node,
|
||||||
|
rowIndex
|
||||||
);
|
);
|
||||||
} else if (node instanceof FreebaseTopicNode) {
|
} else if (node instanceof FreebaseTopicNode) {
|
||||||
tnode = nodeFactory.transposeTopicNode(
|
tnode = nodeFactory.transposeTopicNode(
|
||||||
parentNode,
|
parentNode,
|
||||||
property,
|
property,
|
||||||
(FreebaseTopicNode) node
|
(FreebaseTopicNode) node,
|
||||||
|
rowIndex
|
||||||
);
|
);
|
||||||
} else if (node instanceof ValueNode) {
|
} else if (node instanceof ValueNode) {
|
||||||
tnode = nodeFactory.transposeValueNode(
|
tnode = nodeFactory.transposeValueNode(
|
||||||
parentNode,
|
parentNode,
|
||||||
property,
|
property,
|
||||||
(ValueNode) node
|
(ValueNode) node,
|
||||||
|
rowIndex
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -164,7 +169,8 @@ public class Transposer {
|
|||||||
descend(
|
descend(
|
||||||
project,
|
project,
|
||||||
protograph,
|
protograph,
|
||||||
nodeFactory,
|
nodeFactory,
|
||||||
|
rowIndex,
|
||||||
row,
|
row,
|
||||||
node2.getLink(i).getTarget(),
|
node2.getLink(i).getTarget(),
|
||||||
context.subContexts.get(i)
|
context.subContexts.get(i)
|
||||||
|
@ -11,9 +11,14 @@ import java.util.Set;
|
|||||||
|
|
||||||
import org.json.JSONObject;
|
import org.json.JSONObject;
|
||||||
|
|
||||||
|
import com.metaweb.gridworks.expr.ExpressionUtils;
|
||||||
import com.metaweb.gridworks.model.Cell;
|
import com.metaweb.gridworks.model.Cell;
|
||||||
|
import com.metaweb.gridworks.model.Column;
|
||||||
|
import com.metaweb.gridworks.model.Project;
|
||||||
import com.metaweb.gridworks.model.Recon;
|
import com.metaweb.gridworks.model.Recon;
|
||||||
|
import com.metaweb.gridworks.model.Row;
|
||||||
import com.metaweb.gridworks.model.Recon.Judgment;
|
import com.metaweb.gridworks.model.Recon.Judgment;
|
||||||
|
import com.metaweb.gridworks.model.RecordModel.RowDependency;
|
||||||
import com.metaweb.gridworks.protograph.AnonymousNode;
|
import com.metaweb.gridworks.protograph.AnonymousNode;
|
||||||
import com.metaweb.gridworks.protograph.CellKeyNode;
|
import com.metaweb.gridworks.protograph.CellKeyNode;
|
||||||
import com.metaweb.gridworks.protograph.CellNode;
|
import com.metaweb.gridworks.protograph.CellNode;
|
||||||
@ -24,6 +29,8 @@ import com.metaweb.gridworks.protograph.FreebaseTopicNode;
|
|||||||
import com.metaweb.gridworks.protograph.ValueNode;
|
import com.metaweb.gridworks.protograph.ValueNode;
|
||||||
|
|
||||||
public class TripleLoaderTransposedNodeFactory implements TransposedNodeFactory {
|
public class TripleLoaderTransposedNodeFactory implements TransposedNodeFactory {
|
||||||
|
protected Project project;
|
||||||
|
|
||||||
protected boolean start = true;
|
protected boolean start = true;
|
||||||
protected Writer writer;
|
protected Writer writer;
|
||||||
protected WritingTransposedNode lastRootNode;
|
protected WritingTransposedNode lastRootNode;
|
||||||
@ -31,14 +38,15 @@ public class TripleLoaderTransposedNodeFactory implements TransposedNodeFactory
|
|||||||
protected Map<Long, String> newTopicVars = new HashMap<Long, String>();
|
protected Map<Long, String> newTopicVars = new HashMap<Long, String>();
|
||||||
protected Set<Long> serializedRecons = new HashSet<Long>();
|
protected Set<Long> serializedRecons = new HashSet<Long>();
|
||||||
|
|
||||||
public TripleLoaderTransposedNodeFactory(Writer writer) {
|
public TripleLoaderTransposedNodeFactory(Project project, Writer writer) {
|
||||||
|
this.project = project;
|
||||||
this.writer = writer;
|
this.writer = writer;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void flush() throws IOException {
|
public void flush() throws IOException {
|
||||||
if (lastRootNode != null) {
|
if (lastRootNode != null) {
|
||||||
lastRootNode.write(null, null, null);
|
lastRootNode.write(null, null, project, -1, -1, null);
|
||||||
lastRootNode = null;
|
lastRootNode = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -56,28 +64,81 @@ public class TripleLoaderTransposedNodeFactory implements TransposedNodeFactory
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void writeRecon(StringBuffer sb, Cell cell) {
|
protected void writeRecon(StringBuffer sb, Project project, int rowIndex, int cellIndex, Cell cell) {
|
||||||
Recon recon = cell.recon;
|
Recon recon = cell.recon;
|
||||||
if (serializedRecons.contains(recon.id)) {
|
Column column = project.columnModel.getColumnByCellIndex(cellIndex);
|
||||||
sb.append(Long.toString(recon.id));
|
|
||||||
} else {
|
sb.append("{ ");
|
||||||
|
sb.append("\"id\" : "); sb.append(Long.toString(recon.id));
|
||||||
|
|
||||||
|
if (!serializedRecons.contains(recon.id)) {
|
||||||
serializedRecons.add(recon.id);
|
serializedRecons.add(recon.id);
|
||||||
|
|
||||||
String s = cell.value instanceof String ? (String) cell.value : cell.value.toString();
|
String s = cell.value instanceof String ? (String) cell.value : cell.value.toString();
|
||||||
|
|
||||||
sb.append("{ ");
|
|
||||||
sb.append("\"id\" : "); sb.append(Long.toString(recon.id));
|
|
||||||
sb.append(", \"history_entry\" : "); sb.append(Long.toString(recon.judgmentHistoryEntry));
|
sb.append(", \"history_entry\" : "); sb.append(Long.toString(recon.judgmentHistoryEntry));
|
||||||
sb.append(", \"text\" : "); sb.append(JSONObject.quote(s));
|
sb.append(", \"text\" : "); sb.append(JSONObject.quote(s));
|
||||||
|
sb.append(", \"column\" : "); sb.append(JSONObject.quote(column.getName()));
|
||||||
sb.append(", \"service\" : "); sb.append(JSONObject.quote(recon.service));
|
sb.append(", \"service\" : "); sb.append(JSONObject.quote(recon.service));
|
||||||
sb.append(", \"action\" : "); sb.append(JSONObject.quote(recon.judgmentAction));
|
sb.append(", \"action\" : "); sb.append(JSONObject.quote(recon.judgmentAction));
|
||||||
sb.append(", \"batch\" : "); sb.append(Integer.toString(recon.judgmentBatchSize));
|
sb.append(", \"batch\" : "); sb.append(Integer.toString(recon.judgmentBatchSize));
|
||||||
sb.append(", \"matchRank\" : "); sb.append(Integer.toString(recon.matchRank));
|
sb.append(", \"matchRank\" : "); sb.append(Integer.toString(recon.matchRank));
|
||||||
sb.append(" }");
|
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
|
sb.append(", \"row\" : [");
|
||||||
|
{
|
||||||
|
boolean first = true;
|
||||||
|
Row row = project.rows.get(rowIndex);
|
||||||
|
RowDependency rowDependency = project.recordModel.getRowDependency(rowIndex);
|
||||||
|
List<Integer> contextRows = rowDependency.contextRows;
|
||||||
|
|
||||||
|
int maxColumns = project.columnModel.columns.size();
|
||||||
|
for (int c = 0; c < maxColumns; c++) {
|
||||||
|
Column column2 = project.columnModel.columns.get(c);
|
||||||
|
int cellIndex2 = column2.getCellIndex();
|
||||||
|
|
||||||
|
if (cellIndex2 != cellIndex) {
|
||||||
|
Object value = row.getCellValue(cellIndex2);
|
||||||
|
if (!ExpressionUtils.isNonBlankData(value) && contextRows != null) {
|
||||||
|
for (int i = contextRows.size() - 1; i >= 0; i--) {
|
||||||
|
int rowIndex2 = contextRows.get(i);
|
||||||
|
Row row2 = project.rows.get(rowIndex2);
|
||||||
|
|
||||||
|
value = row2.getCellValue(cellIndex2);
|
||||||
|
if (ExpressionUtils.isNonBlankData(value)) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ExpressionUtils.isNonBlankData(value)) {
|
||||||
|
if (first) {
|
||||||
|
first = false;
|
||||||
|
} else {
|
||||||
|
sb.append(",");
|
||||||
|
}
|
||||||
|
|
||||||
|
String s2 = value instanceof String ? (String) value : value.toString();
|
||||||
|
|
||||||
|
sb.append("{\"c\":"); sb.append(JSONObject.quote(column2.getName()));
|
||||||
|
sb.append(",\"v\":"); sb.append(JSONObject.quote(s2));
|
||||||
|
sb.append("}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
sb.append("]");
|
||||||
|
*/
|
||||||
|
|
||||||
|
sb.append(" }");
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void writeLine(String subject, String predicate, Object object, Cell subjectCell, Cell objectCell) {
|
protected void writeLine(
|
||||||
|
String subject, String predicate, Object object,
|
||||||
|
Project project,
|
||||||
|
int subjectRowIndex, int subjectCellIndex, Cell subjectCell,
|
||||||
|
int objectRowIndex, int objectCellIndex, Cell objectCell
|
||||||
|
) {
|
||||||
if (subject != null && object != null) {
|
if (subject != null && object != null) {
|
||||||
String s = object instanceof String ?
|
String s = object instanceof String ?
|
||||||
JSONObject.quote((String) object) : object.toString();
|
JSONObject.quote((String) object) : object.toString();
|
||||||
@ -91,14 +152,14 @@ public class TripleLoaderTransposedNodeFactory implements TransposedNodeFactory
|
|||||||
|
|
||||||
if (subjectCell != null) {
|
if (subjectCell != null) {
|
||||||
sb.append("\"srecon\" : ");
|
sb.append("\"srecon\" : ");
|
||||||
writeRecon(sb, subjectCell);
|
writeRecon(sb, project, subjectRowIndex, subjectCellIndex, subjectCell);
|
||||||
}
|
}
|
||||||
if (objectCell != null) {
|
if (objectCell != null) {
|
||||||
if (subjectCell != null) {
|
if (subjectCell != null) {
|
||||||
sb.append(", ");
|
sb.append(", ");
|
||||||
}
|
}
|
||||||
sb.append("\"orecon\" : ");
|
sb.append("\"orecon\" : ");
|
||||||
writeRecon(sb, objectCell);
|
writeRecon(sb, project, objectRowIndex, objectCellIndex, objectCell);
|
||||||
}
|
}
|
||||||
|
|
||||||
sb.append(" }");
|
sb.append(" }");
|
||||||
@ -109,7 +170,10 @@ public class TripleLoaderTransposedNodeFactory implements TransposedNodeFactory
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void writeLine(String subject, String predicate, Object object, String lang, Cell subjectCell) {
|
protected void writeLine(
|
||||||
|
String subject, String predicate, Object object, String lang,
|
||||||
|
Project project, int subjectRowIndex, int subjectCellIndex, Cell subjectCell
|
||||||
|
) {
|
||||||
if (subject != null && object != null) {
|
if (subject != null && object != null) {
|
||||||
String s = object instanceof String ?
|
String s = object instanceof String ?
|
||||||
JSONObject.quote((String) object) : object.toString();
|
JSONObject.quote((String) object) : object.toString();
|
||||||
@ -123,7 +187,7 @@ public class TripleLoaderTransposedNodeFactory implements TransposedNodeFactory
|
|||||||
if (subjectCell != null) {
|
if (subjectCell != null) {
|
||||||
sb.append(", \"meta\" : { ");
|
sb.append(", \"meta\" : { ");
|
||||||
sb.append("\"srecon\" : ");
|
sb.append("\"srecon\" : ");
|
||||||
writeRecon(sb, subjectCell);
|
writeRecon(sb, project, subjectRowIndex, subjectCellIndex, subjectCell);
|
||||||
sb.append(" }");
|
sb.append(" }");
|
||||||
}
|
}
|
||||||
sb.append(" }");
|
sb.append(" }");
|
||||||
@ -133,19 +197,19 @@ public class TripleLoaderTransposedNodeFactory implements TransposedNodeFactory
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected interface WritingTransposedNode extends TransposedNode {
|
protected interface WritingTransposedNode extends TransposedNode {
|
||||||
public Object write(String subject, String predicate, Cell subjectCell);
|
public Object write(String subject, String predicate, Project project, int subjectRowIndex, int subjectCellIndex, Cell subjectCell);
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract protected class TransposedNodeWithChildren implements WritingTransposedNode {
|
abstract protected class TransposedNodeWithChildren implements WritingTransposedNode {
|
||||||
public List<FreebaseProperty> properties = new LinkedList<FreebaseProperty>();
|
public List<FreebaseProperty> properties = new LinkedList<FreebaseProperty>();
|
||||||
public List<WritingTransposedNode> children = new LinkedList<WritingTransposedNode>();
|
public List<WritingTransposedNode> children = new LinkedList<WritingTransposedNode>();
|
||||||
|
|
||||||
protected void writeChildren(String subject, Cell subjectCell) {
|
protected void writeChildren(String subject, Project project, int subjectRowIndex, int subjectCellIndex, Cell subjectCell) {
|
||||||
for (int i = 0; i < children.size(); i++) {
|
for (int i = 0; i < children.size(); i++) {
|
||||||
WritingTransposedNode child = children.get(i);
|
WritingTransposedNode child = children.get(i);
|
||||||
String predicate = properties.get(i).id;
|
String predicate = properties.get(i).id;
|
||||||
|
|
||||||
child.write(subject, predicate, subjectCell);
|
child.write(subject, predicate, project, subjectRowIndex, subjectCellIndex, subjectCell);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -154,7 +218,7 @@ public class TripleLoaderTransposedNodeFactory implements TransposedNodeFactory
|
|||||||
|
|
||||||
//protected AnonymousTransposedNode(AnonymousNode node) { }
|
//protected AnonymousTransposedNode(AnonymousNode node) { }
|
||||||
|
|
||||||
public Object write(String subject, String predicate, Cell subjectCell) {
|
public Object write(String subject, String predicate, Project project, int subjectRowIndex, int subjectCellIndex, Cell subjectCell) {
|
||||||
if (children.size() == 0 || subject == null) {
|
if (children.size() == 0 || subject == null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@ -164,7 +228,7 @@ public class TripleLoaderTransposedNodeFactory implements TransposedNodeFactory
|
|||||||
|
|
||||||
boolean first = true;
|
boolean first = true;
|
||||||
for (int i = 0; i < children.size(); i++) {
|
for (int i = 0; i < children.size(); i++) {
|
||||||
Object c = children.get(i).write(null, null, null);
|
Object c = children.get(i).write(null, null, project, subjectRowIndex, subjectCellIndex, null);
|
||||||
if (c != null) {
|
if (c != null) {
|
||||||
if (first) {
|
if (first) {
|
||||||
first = false;
|
first = false;
|
||||||
@ -177,7 +241,7 @@ public class TripleLoaderTransposedNodeFactory implements TransposedNodeFactory
|
|||||||
}
|
}
|
||||||
sb.append(" }");
|
sb.append(" }");
|
||||||
|
|
||||||
writeLine(subject, predicate, sb, subjectCell, null);
|
writeLine(subject, predicate, sb, project, subjectRowIndex, subjectCellIndex, subjectCell, -1, -1, null);
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@ -185,21 +249,29 @@ public class TripleLoaderTransposedNodeFactory implements TransposedNodeFactory
|
|||||||
|
|
||||||
protected class CellTopicTransposedNode extends TransposedNodeWithChildren {
|
protected class CellTopicTransposedNode extends TransposedNodeWithChildren {
|
||||||
protected CellTopicNode node;
|
protected CellTopicNode node;
|
||||||
|
protected int rowIndex;
|
||||||
|
protected int cellIndex;
|
||||||
protected Cell cell;
|
protected Cell cell;
|
||||||
|
|
||||||
public CellTopicTransposedNode(CellTopicNode node, Cell cell) {
|
public CellTopicTransposedNode(CellTopicNode node, int rowIndex, int cellIndex, Cell cell) {
|
||||||
this.node = node;
|
this.node = node;
|
||||||
|
this.rowIndex = rowIndex;
|
||||||
|
this.cellIndex = cellIndex;
|
||||||
this.cell = cell;
|
this.cell = cell;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Object write(String subject, String predicate, Cell subjectCell) {
|
public Object write(String subject, String predicate, Project project, int subjectRowIndex, int subjectCellIndex, Cell subjectCell) {
|
||||||
String id = null;
|
String id = null;
|
||||||
|
int objectRowIndex = -1;
|
||||||
|
int objectCellIndex = -1;
|
||||||
Cell objectCell = null;
|
Cell objectCell = null;
|
||||||
|
|
||||||
if (cell.recon != null &&
|
if (cell.recon != null &&
|
||||||
cell.recon.judgment == Recon.Judgment.Matched &&
|
cell.recon.judgment == Recon.Judgment.Matched &&
|
||||||
cell.recon.match != null) {
|
cell.recon.match != null) {
|
||||||
|
|
||||||
|
objectRowIndex = rowIndex;
|
||||||
|
objectCellIndex = cellIndex;
|
||||||
objectCell = cell;
|
objectCell = cell;
|
||||||
id = cell.recon.match.id;
|
id = cell.recon.match.id;
|
||||||
} else if (node.createForNoReconMatch ||
|
} else if (node.createForNoReconMatch ||
|
||||||
@ -215,8 +287,8 @@ public class TripleLoaderTransposedNodeFactory implements TransposedNodeFactory
|
|||||||
|
|
||||||
id = "$" + node.columnName.replaceAll("\\W+", "_") + "_" + var;
|
id = "$" + node.columnName.replaceAll("\\W+", "_") + "_" + var;
|
||||||
|
|
||||||
writeLine(id, "type", node.type.id, (Cell) null, (Cell) null);
|
writeLine(id, "type", node.type.id, project, -1, -1, (Cell) null, -1, -1, (Cell) null);
|
||||||
writeLine(id, "name", cell.value, (Cell) null, (Cell) null);
|
writeLine(id, "name", cell.value, project, -1, -1, (Cell) null, -1, -1, (Cell) null);
|
||||||
|
|
||||||
if (cell.recon != null) {
|
if (cell.recon != null) {
|
||||||
newTopicVars.put(cell.recon.id, id);
|
newTopicVars.put(cell.recon.id, id);
|
||||||
@ -227,10 +299,12 @@ public class TripleLoaderTransposedNodeFactory implements TransposedNodeFactory
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (subject != null) {
|
if (subject != null) {
|
||||||
writeLine(subject, predicate, id, subjectCell, objectCell);
|
writeLine(subject, predicate, id, project,
|
||||||
|
subjectRowIndex, subjectCellIndex, subjectCell,
|
||||||
|
objectRowIndex, objectCellIndex, objectCell);
|
||||||
}
|
}
|
||||||
|
|
||||||
writeChildren(id, objectCell);
|
writeChildren(id, project, objectRowIndex, objectCellIndex, objectCell);
|
||||||
|
|
||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
@ -239,19 +313,26 @@ public class TripleLoaderTransposedNodeFactory implements TransposedNodeFactory
|
|||||||
protected class CellValueTransposedNode implements WritingTransposedNode {
|
protected class CellValueTransposedNode implements WritingTransposedNode {
|
||||||
protected JSONObject obj;
|
protected JSONObject obj;
|
||||||
protected CellValueNode node;
|
protected CellValueNode node;
|
||||||
|
protected int rowIndex;
|
||||||
|
protected int cellIndex;
|
||||||
protected Cell cell;
|
protected Cell cell;
|
||||||
|
|
||||||
public CellValueTransposedNode(CellValueNode node, Cell cell) {
|
public CellValueTransposedNode(CellValueNode node, int rowIndex, int cellIndex, Cell cell) {
|
||||||
this.node = node;
|
this.node = node;
|
||||||
|
this.rowIndex = rowIndex;
|
||||||
|
this.cellIndex = cellIndex;
|
||||||
this.cell = cell;
|
this.cell = cell;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Object write(String subject, String predicate, Cell subjectCell) {
|
public Object write(String subject, String predicate, Project project, int subjectRowIndex, int subjectCellIndex, Cell subjectCell) {
|
||||||
if (subject != null) {
|
if (subject != null) {
|
||||||
if ("/type/text".equals(node.lang)) {
|
if ("/type/text".equals(node.lang)) {
|
||||||
writeLine(subject, predicate, cell.value, node.lang, subjectCell);
|
writeLine(subject, predicate, cell.value, node.lang, project,
|
||||||
|
subjectRowIndex, subjectCellIndex, subjectCell);
|
||||||
} else {
|
} else {
|
||||||
writeLine(subject, predicate, cell.value, subjectCell, null);
|
writeLine(subject, predicate, cell.value, project,
|
||||||
|
subjectRowIndex, subjectCellIndex, subjectCell,
|
||||||
|
-1, -1, null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -261,15 +342,21 @@ public class TripleLoaderTransposedNodeFactory implements TransposedNodeFactory
|
|||||||
|
|
||||||
protected class CellKeyTransposedNode implements WritingTransposedNode {
|
protected class CellKeyTransposedNode implements WritingTransposedNode {
|
||||||
protected CellKeyNode node;
|
protected CellKeyNode node;
|
||||||
|
protected int rowIndex;
|
||||||
|
protected int cellIndex;
|
||||||
protected Cell cell;
|
protected Cell cell;
|
||||||
|
|
||||||
public CellKeyTransposedNode(CellKeyNode node, Cell cell) {
|
public CellKeyTransposedNode(CellKeyNode node, int rowIndex, int cellIndex, Cell cell) {
|
||||||
this.node = node;
|
this.node = node;
|
||||||
|
this.rowIndex = rowIndex;
|
||||||
|
this.cellIndex = cellIndex;
|
||||||
this.cell = cell;
|
this.cell = cell;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Object write(String subject, String predicate, Cell subjectCell) {
|
public Object write(String subject, String predicate, Project project, int subjectRowIndex, int subjectCellIndex, Cell subjectCell) {
|
||||||
writeLine(subject, "key", node.namespace.id + "/" + cell.value, subjectCell, null);
|
writeLine(subject, "key", node.namespace.id + "/" + cell.value, project,
|
||||||
|
subjectRowIndex, subjectCellIndex, subjectCell,
|
||||||
|
-1, -1, null);
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@ -282,9 +369,12 @@ public class TripleLoaderTransposedNodeFactory implements TransposedNodeFactory
|
|||||||
this.node = node;
|
this.node = node;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Object write(String subject, String predicate, Cell subjectCell) {
|
public Object write(String subject, String predicate, Project project, int subjectRowIndex, int subjectCellIndex, Cell subjectCell) {
|
||||||
writeLine(subject, predicate, node.topic.id, subjectCell, null);
|
writeLine(subject, predicate, node.topic.id, project,
|
||||||
writeChildren(node.topic.id, null);
|
subjectRowIndex, subjectCellIndex, subjectCell,
|
||||||
|
-1, -1, null);
|
||||||
|
|
||||||
|
writeChildren(node.topic.id, project, -1, -1, null);
|
||||||
|
|
||||||
return node.topic.id;
|
return node.topic.id;
|
||||||
}
|
}
|
||||||
@ -297,11 +387,14 @@ public class TripleLoaderTransposedNodeFactory implements TransposedNodeFactory
|
|||||||
this.node = node;
|
this.node = node;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Object write(String subject, String predicate, Cell subjectCell) {
|
public Object write(String subject, String predicate, Project project, int subjectRowIndex, int subjectCellIndex, Cell subjectCell) {
|
||||||
if ("/type/text".equals(node.lang)) {
|
if ("/type/text".equals(node.lang)) {
|
||||||
writeLine(subject, predicate, node.value, node.lang, subjectCell);
|
writeLine(subject, predicate, node.value, node.lang, project,
|
||||||
|
subjectRowIndex, subjectCellIndex, subjectCell);
|
||||||
} else {
|
} else {
|
||||||
writeLine(subject, predicate, node.value, subjectCell, null);
|
writeLine(subject, predicate, node.value, project,
|
||||||
|
subjectRowIndex, subjectCellIndex, subjectCell,
|
||||||
|
-1, -1, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
return node.value;
|
return node.value;
|
||||||
@ -311,7 +404,7 @@ public class TripleLoaderTransposedNodeFactory implements TransposedNodeFactory
|
|||||||
public TransposedNode transposeAnonymousNode(
|
public TransposedNode transposeAnonymousNode(
|
||||||
TransposedNode parentNode,
|
TransposedNode parentNode,
|
||||||
FreebaseProperty property,
|
FreebaseProperty property,
|
||||||
AnonymousNode node) {
|
AnonymousNode node, int rowIndex) {
|
||||||
|
|
||||||
WritingTransposedNode tnode = new AnonymousTransposedNode();
|
WritingTransposedNode tnode = new AnonymousTransposedNode();
|
||||||
|
|
||||||
@ -324,15 +417,19 @@ public class TripleLoaderTransposedNodeFactory implements TransposedNodeFactory
|
|||||||
TransposedNode parentNode,
|
TransposedNode parentNode,
|
||||||
FreebaseProperty property,
|
FreebaseProperty property,
|
||||||
CellNode node,
|
CellNode node,
|
||||||
|
int rowIndex,
|
||||||
Cell cell) {
|
Cell cell) {
|
||||||
|
|
||||||
|
Column column = project.columnModel.getColumnByName(node.columnName);
|
||||||
|
int cellIndex = column != null ? column.getCellIndex() : -1;
|
||||||
|
|
||||||
WritingTransposedNode tnode = null;
|
WritingTransposedNode tnode = null;
|
||||||
if (node instanceof CellTopicNode) {
|
if (node instanceof CellTopicNode) {
|
||||||
tnode = new CellTopicTransposedNode((CellTopicNode) node, cell);
|
tnode = new CellTopicTransposedNode((CellTopicNode) node, rowIndex, cellIndex, cell);
|
||||||
} else if (node instanceof CellValueNode) {
|
} else if (node instanceof CellValueNode) {
|
||||||
tnode = new CellValueTransposedNode((CellValueNode) node, cell);
|
tnode = new CellValueTransposedNode((CellValueNode) node, rowIndex, cellIndex, cell);
|
||||||
} else if (node instanceof CellKeyNode) {
|
} else if (node instanceof CellKeyNode) {
|
||||||
tnode = new CellKeyTransposedNode((CellKeyNode) node, cell);
|
tnode = new CellKeyTransposedNode((CellKeyNode) node, rowIndex, cellIndex, cell);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tnode != null) {
|
if (tnode != null) {
|
||||||
@ -344,7 +441,7 @@ public class TripleLoaderTransposedNodeFactory implements TransposedNodeFactory
|
|||||||
public TransposedNode transposeTopicNode(
|
public TransposedNode transposeTopicNode(
|
||||||
TransposedNode parentNode,
|
TransposedNode parentNode,
|
||||||
FreebaseProperty property,
|
FreebaseProperty property,
|
||||||
FreebaseTopicNode node) {
|
FreebaseTopicNode node, int rowIndex) {
|
||||||
|
|
||||||
WritingTransposedNode tnode = new TopicTransposedNode(node);
|
WritingTransposedNode tnode = new TopicTransposedNode(node);
|
||||||
|
|
||||||
@ -356,7 +453,7 @@ public class TripleLoaderTransposedNodeFactory implements TransposedNodeFactory
|
|||||||
public TransposedNode transposeValueNode(
|
public TransposedNode transposeValueNode(
|
||||||
TransposedNode parentNode,
|
TransposedNode parentNode,
|
||||||
FreebaseProperty property,
|
FreebaseProperty property,
|
||||||
ValueNode node) {
|
ValueNode node, int rowIndex) {
|
||||||
|
|
||||||
WritingTransposedNode tnode = new ValueTransposedNode(node);
|
WritingTransposedNode tnode = new ValueTransposedNode(node);
|
||||||
|
|
||||||
@ -383,7 +480,7 @@ public class TripleLoaderTransposedNodeFactory implements TransposedNodeFactory
|
|||||||
|
|
||||||
protected void addRootNode(WritingTransposedNode tnode) {
|
protected void addRootNode(WritingTransposedNode tnode) {
|
||||||
if (lastRootNode != null) {
|
if (lastRootNode != null) {
|
||||||
lastRootNode.write(null, null, null);
|
lastRootNode.write(null, null, project, -1, -1, null);
|
||||||
}
|
}
|
||||||
lastRootNode = tnode;
|
lastRootNode = tnode;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user