From 9641f28fe01173d35241ce7f578661c45072c222 Mon Sep 17 00:00:00 2001 From: David Huynh Date: Sun, 2 May 2010 22:27:17 +0000 Subject: [PATCH] Made extend data from freebase command available on columns not officially reconciled, since some columns might contain reconciled data copied from other columns. More error checking in the extend data utility. git-svn-id: http://google-refine.googlecode.com/svn/trunk@583 7d457c2a-affb-35e4-300a-418c747d4874 --- .../util/PreviewExtendDataCommand.java | 15 ++++++- .../util/FreebaseDataExtensionJob.java | 24 +++++----- .../dialogs/extend-data-preview-dialog.js | 11 +++-- .../views/data-table-column-header-ui.js | 44 +++++++++---------- 4 files changed, 54 insertions(+), 40 deletions(-) diff --git a/src/main/java/com/metaweb/gridworks/commands/util/PreviewExtendDataCommand.java b/src/main/java/com/metaweb/gridworks/commands/util/PreviewExtendDataCommand.java index 300971ccf..69423ced0 100644 --- a/src/main/java/com/metaweb/gridworks/commands/util/PreviewExtendDataCommand.java +++ b/src/main/java/com/metaweb/gridworks/commands/util/PreviewExtendDataCommand.java @@ -61,6 +61,10 @@ public class PreviewExtendDataCommand extends Command { topicNames.add(cell.recon.match.topicName); topicGuids.add(cell.recon.match.topicGUID); guids.add(cell.recon.match.topicGUID); + } else { + topicNames.add(null); + topicGuids.add(null); + guids.add(null); } } } @@ -101,7 +105,7 @@ public class PreviewExtendDataCommand extends Command { String guid = topicGuids.get(r); String topicName = topicNames.get(r); - if (map.containsKey(guid)) { + if (guid != null && map.containsKey(guid)) { DataExtension ext = map.get(guid); boolean first = true; @@ -134,7 +138,14 @@ public class PreviewExtendDataCommand extends Command { } writer.array(); - writer.value(topicName); + if (guid != null) { + writer.object(); + writer.key("id"); writer.value("/guid/" + guid.substring(1)); + writer.key("name"); writer.value(topicName); + writer.endObject(); + } else { + writer.value(""); + } writer.endArray(); } writer.endArray(); diff --git a/src/main/java/com/metaweb/gridworks/util/FreebaseDataExtensionJob.java b/src/main/java/com/metaweb/gridworks/util/FreebaseDataExtensionJob.java index 7db623583..4c3bdac79 100644 --- a/src/main/java/com/metaweb/gridworks/util/FreebaseDataExtensionJob.java +++ b/src/main/java/com/metaweb/gridworks/util/FreebaseDataExtensionJob.java @@ -70,16 +70,18 @@ public class FreebaseDataExtensionJob { JSONObject o = ParsingUtilities.evaluateJsonStringToObject(s); Map map = new HashMap(); - JSONArray a = o.getJSONArray("result"); - int l = a.length(); - - for (int i = 0; i < l; i++) { - JSONObject o2 = a.getJSONObject(i); - String guid = o2.getString("guid"); - FreebaseDataExtensionJob.DataExtension ext = collectResult(o2, reconCandidateMap); + if (o.has("result")) { + JSONArray a = o.getJSONArray("result"); + int l = a.length(); - if (ext != null) { - map.put(guid, ext); + for (int i = 0; i < l; i++) { + JSONObject o2 = a.getJSONObject(i); + String guid = o2.getString("guid"); + FreebaseDataExtensionJob.DataExtension ext = collectResult(o2, reconCandidateMap); + + if (ext != null) { + map.put(guid, ext); + } } } @@ -284,7 +286,9 @@ public class FreebaseDataExtensionJob { jsonWriter.key("guid|="); jsonWriter.array(); for (String guid : guids) { - jsonWriter.value(guid); + if (guid != null) { + jsonWriter.value(guid); + } } jsonWriter.endArray(); diff --git a/src/main/webapp/scripts/dialogs/extend-data-preview-dialog.js b/src/main/webapp/scripts/dialogs/extend-data-preview-dialog.js index d417e9c81..f143105d3 100644 --- a/src/main/webapp/scripts/dialogs/extend-data-preview-dialog.js +++ b/src/main/webapp/scripts/dialogs/extend-data-preview-dialog.js @@ -53,8 +53,9 @@ function ExtendDataPreviewDialog(column, columnIndex, rowIndices, onDone) { }).appendTo(footer); var dismissBusy = DialogSystem.showBusy(); + var type = "reconConfig" in column && "type" in column.reconConfig ? column.reconConfig.type.id : "/common/topic"; - ExtendDataPreviewDialog.getAllProperties(column.reconConfig.type.id, function(properties) { + ExtendDataPreviewDialog.getAllProperties(type, function(properties) { dismissBusy(); self._show(properties); }); @@ -131,12 +132,14 @@ ExtendDataPreviewDialog.prototype._show = function(properties) { } var suggestConfig = { - type: '/type/property', - schema: this._column.reconConfig.type.id + type: '/type/property' }; + if ("reconConfig" in this._column && "type" in this._column.reconConfig) { + suggestConfig.schema = this._column.reconConfig.type.id + } this._elmts.addPropertyInput.suggestP(suggestConfig).bind("fb-select", function(evt, data) { - var expected = data["/type/property/expected_type"]; + var expected = data["expected_type"]; self._addProperty({ id : data.id, name: data.name, diff --git a/src/main/webapp/scripts/views/data-table-column-header-ui.js b/src/main/webapp/scripts/views/data-table-column-header-ui.js index 8fbcc6832..879fad532 100644 --- a/src/main/webapp/scripts/views/data-table-column-header-ui.js +++ b/src/main/webapp/scripts/views/data-table-column-header-ui.js @@ -866,30 +866,26 @@ DataTableColumnHeaderUI.prototype._doAddColumn = function(initialExpression) { }; DataTableColumnHeaderUI.prototype._doAddColumnFromFreebase = function() { - if ("reconConfig" in this._column && "type" in this._column.reconConfig) { - var o = DataTableView.sampleVisibleRows(this._column); - var self = this; - new ExtendDataPreviewDialog( - this._column, - this._columnIndex, - o.rowIndices, - function(extension) { - Gridworks.postProcess( - "extend-data", - { - baseColumnName: self._column.name, - columnInsertIndex: self._columnIndex + 1 - }, - { - extension: JSON.stringify(extension) - }, - { rowsChanged: true, modelsChanged: true } - ); - } - ); - } else { - alert("This column has not been reconciled yet."); - } + var o = DataTableView.sampleVisibleRows(this._column); + var self = this; + new ExtendDataPreviewDialog( + this._column, + this._columnIndex, + o.rowIndices, + function(extension) { + Gridworks.postProcess( + "extend-data", + { + baseColumnName: self._column.name, + columnInsertIndex: self._columnIndex + 1 + }, + { + extension: JSON.stringify(extension) + }, + { rowsChanged: true, modelsChanged: true } + ); + } + ); }; DataTableColumnHeaderUI.prototype._doRemoveColumn = function() {