From d7f7d50e16e4c307447f9ab8d31e947b1f735b46 Mon Sep 17 00:00:00 2001 From: David Huynh Date: Mon, 24 May 2010 23:01:34 +0000 Subject: [PATCH] Fixed Issue 14: Limiting Freebase load to starred records git-svn-id: http://google-refine.googlecode.com/svn/trunk@853 7d457c2a-affb-35e4-300a-418c747d4874 --- CHANGES.txt | 4 +- .../freebase/PreviewProtographCommand.java | 8 ++- .../exporters/TripleloaderExporter.java | 2 +- .../protograph/transpose/Transposer.java | 56 ++++++++++++++++--- .../dialogs/freebase-loading-dialog.js | 3 +- .../scripts/protograph/schema-alignment.js | 2 +- 6 files changed, 62 insertions(+), 13 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index f3c076f34..d94dc888c 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -15,8 +15,10 @@ Fixes: - Issue 46: "Array literals in GEL" - Issue 55: "Use stable sorting for text facets sorted by count" - Issue 53: "Moving the cursor inside the Text Filter box by clicking" -- Issue 58: "Meta facet" +- Issue 58: "Meta facet" Supported by the function facetCount() +- Issue 14: "Limiting Freebase load to starred records" + We load whatever rows that are filtered through, not particularly starred rows. Features: - Row/record sorting (Issue 32) diff --git a/src/main/java/com/metaweb/gridworks/commands/freebase/PreviewProtographCommand.java b/src/main/java/com/metaweb/gridworks/commands/freebase/PreviewProtographCommand.java index 05ad4b9b3..a09a2ca4e 100644 --- a/src/main/java/com/metaweb/gridworks/commands/freebase/PreviewProtographCommand.java +++ b/src/main/java/com/metaweb/gridworks/commands/freebase/PreviewProtographCommand.java @@ -10,6 +10,8 @@ import javax.servlet.http.HttpServletResponse; import org.json.JSONArray; import org.json.JSONObject; +import com.metaweb.gridworks.browsing.Engine; +import com.metaweb.gridworks.browsing.FilteredRows; import com.metaweb.gridworks.commands.Command; import com.metaweb.gridworks.model.Project; import com.metaweb.gridworks.protograph.Protograph; @@ -25,6 +27,8 @@ public class PreviewProtographCommand extends Command { try { Project project = getProject(request); + Engine engine = getEngine(request, project); + FilteredRows filteredRows = engine.getAllFilteredRows(); response.setCharacterEncoding("UTF-8"); response.setHeader("Content-Type", "application/json"); @@ -40,7 +44,7 @@ public class PreviewProtographCommand extends Command { StringWriter stringWriter = new StringWriter(); TripleLoaderTransposedNodeFactory nodeFactory = new TripleLoaderTransposedNodeFactory(stringWriter); - Transposer.transpose(project, protograph, protograph.getRootNode(0), nodeFactory); + Transposer.transpose(project, filteredRows, protograph, protograph.getRootNode(0), nodeFactory); nodeFactory.flush(); sb.append("\"tripleloader\" : "); @@ -50,7 +54,7 @@ public class PreviewProtographCommand extends Command { { MqlreadLikeTransposedNodeFactory nodeFactory = new MqlreadLikeTransposedNodeFactory(); - Transposer.transpose(project, protograph, protograph.getRootNode(0), nodeFactory); + Transposer.transpose(project, filteredRows, protograph, protograph.getRootNode(0), nodeFactory); JSONArray results = nodeFactory.getJSON(); diff --git a/src/main/java/com/metaweb/gridworks/exporters/TripleloaderExporter.java b/src/main/java/com/metaweb/gridworks/exporters/TripleloaderExporter.java index 57f556047..8e6762b69 100644 --- a/src/main/java/com/metaweb/gridworks/exporters/TripleloaderExporter.java +++ b/src/main/java/com/metaweb/gridworks/exporters/TripleloaderExporter.java @@ -33,7 +33,7 @@ public class TripleloaderExporter implements Exporter { TripleLoaderTransposedNodeFactory nodeFactory = new TripleLoaderTransposedNodeFactory(writer); - Transposer.transpose(project, protograph, protograph.getRootNode(0), nodeFactory, -1); + Transposer.transpose(project, engine.getAllFilteredRows(), protograph, protograph.getRootNode(0), nodeFactory, -1); nodeFactory.flush(); } } diff --git a/src/main/java/com/metaweb/gridworks/protograph/transpose/Transposer.java b/src/main/java/com/metaweb/gridworks/protograph/transpose/Transposer.java index e3a6f1c69..1ee67144d 100644 --- a/src/main/java/com/metaweb/gridworks/protograph/transpose/Transposer.java +++ b/src/main/java/com/metaweb/gridworks/protograph/transpose/Transposer.java @@ -3,6 +3,8 @@ package com.metaweb.gridworks.protograph.transpose; import java.util.LinkedList; import java.util.List; +import com.metaweb.gridworks.browsing.FilteredRows; +import com.metaweb.gridworks.browsing.RowVisitor; import com.metaweb.gridworks.expr.ExpressionUtils; import com.metaweb.gridworks.model.Cell; import com.metaweb.gridworks.model.Column; @@ -23,15 +25,17 @@ import com.metaweb.gridworks.protograph.ValueNode; public class Transposer { static public void transpose( Project project, + FilteredRows filteredRows, Protograph protograph, Node rootNode, TransposedNodeFactory nodeFactory ) { - transpose(project, protograph, rootNode, nodeFactory, 20); + transpose(project, filteredRows, protograph, rootNode, nodeFactory, 20); } static public void transpose( Project project, + FilteredRows filteredRows, Protograph protograph, Node rootNode, TransposedNodeFactory nodeFactory, @@ -39,12 +43,50 @@ public class Transposer { ) { Context rootContext = new Context(rootNode, null, null, limit); - for (Row row : project.rows) { - descend(project, protograph, nodeFactory, row, rootNode, rootContext); - if (rootContext.limit > 0 && rootContext.count > rootContext.limit) { - break; - } - } + filteredRows.accept(project, new RowVisitor() { + Context rootContext; + Protograph protograph; + Node rootNode; + TransposedNodeFactory nodeFactory; + + @Override + public boolean visit(Project project, int rowIndex, Row row) { + if (rootContext.limit <= 0 || rootContext.count < rootContext.limit) { + descend(project, protograph, nodeFactory, row, rootNode, rootContext); + } + + if (rootContext.limit > 0 && rootContext.count > rootContext.limit) { + return true; + } + return false; + } + + @Override + public void start(Project project) { + // TODO Auto-generated method stub + + } + + @Override + public void end(Project project) { + // TODO Auto-generated method stub + + } + + public RowVisitor init( + Context rootContext, + Protograph protograph, + Node rootNode, + TransposedNodeFactory nodeFactory + ) { + this.rootContext = rootContext; + this.protograph = protograph; + this.rootNode = rootNode; + this.nodeFactory = nodeFactory; + + return this; + } + }.init(rootContext, protograph, rootNode, nodeFactory)); } static protected void descend( diff --git a/src/main/webapp/scripts/dialogs/freebase-loading-dialog.js b/src/main/webapp/scripts/dialogs/freebase-loading-dialog.js index c489fa302..1e1fead74 100644 --- a/src/main/webapp/scripts/dialogs/freebase-loading-dialog.js +++ b/src/main/webapp/scripts/dialogs/freebase-loading-dialog.js @@ -118,7 +118,7 @@ FreebaseLoadingDialog.prototype._createDialog = function() { var show_triples = function(cont) { $.post( "/command/preview-protograph?" + $.param({ project: theProject.id }), - { protograph: JSON.stringify(theProject.protograph) }, + { protograph: JSON.stringify(theProject.protograph), engine: JSON.stringify(ui.browsingEngine.getJSON()) }, function(data) { if ("tripleloader" in data) { body.html( @@ -192,6 +192,7 @@ FreebaseLoadingDialog.prototype._load = function() { { project: theProject.id, "graph" : (freebase) ? "otg" : "sandbox", + "engine" : JSON.stringify(ui.browsingEngine.getJSON()), "source_name" : self._elmts.source_name.val(), "source_id" : self._elmts.source_id.val() }, diff --git a/src/main/webapp/scripts/protograph/schema-alignment.js b/src/main/webapp/scripts/protograph/schema-alignment.js index 3250b8e09..f2e5ebfde 100644 --- a/src/main/webapp/scripts/protograph/schema-alignment.js +++ b/src/main/webapp/scripts/protograph/schema-alignment.js @@ -257,7 +257,7 @@ SchemaAlignmentDialog.prototype.preview = function() { var protograph = this.getJSON(); $.post( "/command/preview-protograph?" + $.param({ project: theProject.id }), - { protograph: JSON.stringify(protograph) }, + { protograph: JSON.stringify(protograph), engine: JSON.stringify(ui.browsingEngine.getJSON()) }, function(data) { if ("mqllike" in data) { $(self._previewPanes[0]).text(JSON.stringify(data.mqllike, null, 2));