diff --git a/main/src/com/google/refine/io/FileProjectManager.java b/main/src/com/google/refine/io/FileProjectManager.java index beccf4c5a..e56c0f97f 100644 --- a/main/src/com/google/refine/io/FileProjectManager.java +++ b/main/src/com/google/refine/io/FileProjectManager.java @@ -430,6 +430,11 @@ public class FileProjectManager extends ProjectManager { try { boolean found = false; JSONObject placeHolderJsonObj = userMetadataPreference.getJSONObject(index); + + if (!isValidUserMetaDataDefinition(placeHolderJsonObj)) { + logger.warn("Skipped invalid user metadata definition" + placeHolderJsonObj.toString()); + continue; + } for (int i = 0; i < jsonObjArray.length(); i++) { JSONObject jsonObj = jsonObjArray.getJSONObject(i); @@ -452,6 +457,17 @@ public class FileProjectManager extends ProjectManager { } } } + + /** + * A valid user meta data definition should have name and display property + * @param placeHolderJsonObj + * @return + */ + private boolean isValidUserMetaDataDefinition(JSONObject placeHolderJsonObj) { + return (placeHolderJsonObj != null && + placeHolderJsonObj.has("name") && + placeHolderJsonObj.has("display")); + } protected void recover() { boolean recovered = false; diff --git a/main/webapp/modules/core/scripts/index/open-project-ui.js b/main/webapp/modules/core/scripts/index/open-project-ui.js index 8bb616bdc..c14a3a313 100644 --- a/main/webapp/modules/core/scripts/index/open-project-ui.js +++ b/main/webapp/modules/core/scripts/index/open-project-ui.js @@ -264,11 +264,21 @@ Refine.OpenProjectUI.prototype._renderProjects = function(data) { renderProject(projects[i]); } + $.tablesorter.addParser({ + id: "isoDateParser", + is: function(s) { + return (/^\d{4}[\/\-]\d{1,2}[\/\-]\d{1,2}T\d{2}:\d{2}:\d{2}[\+,\-\.]\d{3}/).test(s); + }, + format: function(s, table) { + return $.tablesorter.formatFloat((s !== "") ? (new Date(s).getTime() || "") : "", table); + }, + type: "numeric" + }); $(table).tablesorter({ headers : { 3 : { - sorter : "time" + sorter : "isoDateParser" } } });