diff --git a/src/main/java/com/metaweb/gridworks/history/HistoryEntry.java b/src/main/java/com/metaweb/gridworks/history/HistoryEntry.java index 90d374f67..ba1f30aba 100644 --- a/src/main/java/com/metaweb/gridworks/history/HistoryEntry.java +++ b/src/main/java/com/metaweb/gridworks/history/HistoryEntry.java @@ -38,8 +38,6 @@ public class HistoryEntry implements Serializable, Jsonizable { this.time = new Date(); _change = change; - - saveChange(); } public void write(JSONWriter writer, Properties options) @@ -59,6 +57,11 @@ public class HistoryEntry implements Serializable, Jsonizable { loadChange(); } _change.apply(project); + + // When a change is applied, it can hang on to old data (in order to be able + // to revert later). Hence, we need to save the change out. + + saveChange(); } public void revert(Project project) { diff --git a/src/main/webapp/scripts/project/schema-alignment.js b/src/main/webapp/scripts/project/schema-alignment.js index b25672333..f216ee081 100644 --- a/src/main/webapp/scripts/project/schema-alignment.js +++ b/src/main/webapp/scripts/project/schema-alignment.js @@ -5,20 +5,87 @@ SchemaAlignment.autoAlign = function() { var columns = theProject.columnModel.columns; - var typedColumns = []; + var typedCandidates = []; var candidates = []; for (var c = 0; c < columns.length; c++) { var column = columns[c]; - if ("reconConfig" in column && column.reconConfig != null) { - typedColumns.push(column); - } - candidates.push({ + var typed = "reconConfig" in column && column.reconConfig != null; + var candidate = { status: "unbound", + typed: typed, index: c, column: column - }) + }; + + candidates.push(candidate); + if (typed) { + typedCandidates.push(candidate); + } } + if (typedCandidates.length > 0) { + + } else { + var queries = {}; + for (var i = 0; i < candidates.length; i++) { + var candidate = candidates[i]; + var name = SchemaAlignment._cleanName(candidate.column.headerLabel); + var key = "t" + i + ":search"; + queries[key] = { + "query" : name, + "limit" : 10, + "type" : "/type/type,/type/property", + "type_strict" : "any" + }; + } + + SchemaAlignment._batchSearch(queries, function(result) { + console.log(result); + }); + } +}; + +SchemaAlignment._batchSearch = function(queries, onDone) { + var keys = []; + for (var n in queries) { + if (queries.hasOwnProperty(n)) { + keys.push(n); + } + } -}; \ No newline at end of file + var result = {}; + var args = []; + var makeBatch = function(keyBatch) { + var batch = {}; + for (var k = 0; k < keyBatch.length; k++) { + var key = keyBatch[k]; + batch[key] = queries[key]; + } + + args.push("http://api.freebase.com/api/service/search?" + + $.param({ "queries" : JSON.stringify(batch) }) + "&callback=?"); + + args.push(null); // no data + args.push(function(data) { + for (var k = 0; k < keyBatch.length; k++) { + var key = keyBatch[k]; + result[key] = data[key]; + } + }); + }; + + for (var i = 0; i < keys.length; i += 10) { + makeBatch(keys.slice(i, i + 10)); + } + + args.push(function() { + onDone(result); + }) + + Ajax.chainGetJSON.apply(null, args); +}; + +SchemaAlignment._cleanName = function(s) { + return s.replace(/\W/g, " ").replace(/\s+/g, " ").toLowerCase(); +} \ No newline at end of file