Modified tags in metadata dialog and moved column right to name
This commit is contained in:
parent
f21230804b
commit
b16941777e
@ -139,6 +139,7 @@ public abstract class ProjectManager {
|
||||
_projectsMetadata.put(project.id, projectMetadata);
|
||||
if (_projectsTags == null) {
|
||||
_projectsTags = new HashMap<String, Integer>();
|
||||
<<<<<<< Upstream, based on origin/master
|
||||
}
|
||||
String[] tags = projectMetadata.getTags();
|
||||
if (tags != null) {
|
||||
@ -148,6 +149,16 @@ public abstract class ProjectManager {
|
||||
} else {
|
||||
_projectsTags.put(tag, 1);
|
||||
}
|
||||
=======
|
||||
String[] tags = projectMetadata.getTags();
|
||||
if (tags != null) {
|
||||
for (String tag : tags) {
|
||||
if (_projectsTags.containsKey(tag)) {
|
||||
_projectsTags.put(tag, _projectsTags.get(tag) + 1);
|
||||
} else {
|
||||
_projectsTags.put(tag, 1);
|
||||
}
|
||||
>>>>>>> 529b6bd Modified tags in metadata dialog and moved column right to name
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -57,6 +57,7 @@ import com.google.refine.util.JSONUtilities;
|
||||
import com.google.refine.util.ParsingUtilities;
|
||||
|
||||
public class ProjectMetadata implements Jsonizable {
|
||||
|
||||
private final Date _created;
|
||||
private Date _modified;
|
||||
private Date written = null;
|
||||
@ -106,29 +107,37 @@ public class ProjectMetadata implements Jsonizable {
|
||||
throws JSONException {
|
||||
|
||||
writer.object();
|
||||
writer.key("name"); writer.value(_name);
|
||||
writer.key("created"); writer.value(ParsingUtilities.dateToString(_created));
|
||||
writer.key("modified"); writer.value(ParsingUtilities.dateToString(_modified));
|
||||
writer.key("creator"); writer.value(_creator);
|
||||
writer.key("contributors"); writer.value(_contributors);
|
||||
writer.key("subject"); writer.value(_subject);
|
||||
writer.key("description"); writer.value(_description);
|
||||
writer.key("rowCount"); writer.value(_rowCount);
|
||||
|
||||
writer.key("customMetadata"); writer.object();
|
||||
for (String key : _customMetadata.keySet()) {
|
||||
Serializable value = _customMetadata.get(key);
|
||||
writer.key(key);
|
||||
writer.value(value);
|
||||
}
|
||||
writer.endObject();
|
||||
|
||||
writer.key("name");
|
||||
writer.value(_name);
|
||||
writer.key("tags");
|
||||
writer.array();
|
||||
for (String tag : _tags) {
|
||||
writer.value(tag);
|
||||
}
|
||||
writer.endArray();
|
||||
writer.key("created");
|
||||
writer.value(ParsingUtilities.dateToString(_created));
|
||||
writer.key("modified");
|
||||
writer.value(ParsingUtilities.dateToString(_modified));
|
||||
writer.key("creator");
|
||||
writer.value(_creator);
|
||||
writer.key("contributors");
|
||||
writer.value(_contributors);
|
||||
writer.key("subject");
|
||||
writer.value(_subject);
|
||||
writer.key("description");
|
||||
writer.value(_description);
|
||||
writer.key("rowCount");
|
||||
writer.value(_rowCount);
|
||||
|
||||
writer.key("customMetadata");
|
||||
writer.object();
|
||||
for (String key : _customMetadata.keySet()) {
|
||||
Serializable value = _customMetadata.get(key);
|
||||
writer.key(key);
|
||||
writer.value(value);
|
||||
}
|
||||
writer.endObject();
|
||||
|
||||
// write JSONArray directly
|
||||
if (_importOptionMetadata.length() > 0) {
|
||||
@ -143,12 +152,16 @@ public class ProjectMetadata implements Jsonizable {
|
||||
}
|
||||
|
||||
if (isSaveMode(options)) {
|
||||
writer.key("password"); writer.value(_password);
|
||||
writer.key("password");
|
||||
writer.value(_password);
|
||||
|
||||
writer.key("encoding"); writer.value(_encoding);
|
||||
writer.key("encodingConfidence"); writer.value(_encodingConfidence);
|
||||
writer.key("encoding");
|
||||
writer.value(_encoding);
|
||||
writer.key("encodingConfidence");
|
||||
writer.value(_encodingConfidence);
|
||||
|
||||
writer.key("preferences"); _preferenceStore.write(writer, options);
|
||||
writer.key("preferences");
|
||||
_preferenceStore.write(writer, options);
|
||||
}
|
||||
|
||||
writer.endObject();
|
||||
@ -160,8 +173,7 @@ public class ProjectMetadata implements Jsonizable {
|
||||
|
||||
public void writeWithoutOption(JSONWriter writer)
|
||||
throws JSONException {
|
||||
write(writer,
|
||||
new Properties());
|
||||
write(writer, new Properties());
|
||||
}
|
||||
|
||||
private boolean isSaveMode(Properties options) {
|
||||
@ -172,16 +184,20 @@ public class ProjectMetadata implements Jsonizable {
|
||||
return written == null || _modified.after(written);
|
||||
}
|
||||
|
||||
public void write(JSONWriter jsonWriter) throws JSONException {
|
||||
public void write(JSONWriter jsonWriter)
|
||||
throws JSONException {
|
||||
write(jsonWriter, false);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param jsonWriter writer to save metadatea to
|
||||
* @param onlyIfDirty true to not write unchanged metadata
|
||||
* @param jsonWriter
|
||||
* writer to save metadatea to
|
||||
* @param onlyIfDirty
|
||||
* true to not write unchanged metadata
|
||||
* @throws JSONException
|
||||
*/
|
||||
public void write(JSONWriter jsonWriter, boolean onlyIfDirty) throws JSONException {
|
||||
public void write(JSONWriter jsonWriter, boolean onlyIfDirty)
|
||||
throws JSONException {
|
||||
if (!onlyIfDirty || isDirty()) {
|
||||
Properties options = new Properties();
|
||||
options.setProperty("mode", "save");
|
||||
@ -219,8 +235,7 @@ public class ProjectMetadata implements Jsonizable {
|
||||
|
||||
if (obj.has("expressions") && !obj.isNull("expressions")) { // backward compatibility
|
||||
try {
|
||||
((TopList) pm._preferenceStore.get("scripting.expressions"))
|
||||
.load(obj.getJSONArray("expressions"));
|
||||
((TopList) pm._preferenceStore.get("scripting.expressions")).load(obj.getJSONArray("expressions"));
|
||||
} catch (JSONException e) {
|
||||
logger.error(ExceptionUtils.getFullStackTrace(e));
|
||||
}
|
||||
@ -330,8 +345,7 @@ public class ProjectMetadata implements Jsonizable {
|
||||
}
|
||||
|
||||
public String[] getTags() {
|
||||
if (_tags == null)
|
||||
this._tags = new String[0];
|
||||
if (_tags == null) this._tags = new String[0];
|
||||
return _tags;
|
||||
}
|
||||
|
||||
@ -383,67 +397,55 @@ public class ProjectMetadata implements Jsonizable {
|
||||
updateModified();
|
||||
}
|
||||
|
||||
|
||||
public String getCreator() {
|
||||
return _creator;
|
||||
}
|
||||
|
||||
|
||||
public void setCreator(String creator) {
|
||||
this._creator = creator;
|
||||
updateModified();
|
||||
}
|
||||
|
||||
|
||||
public String getContributors() {
|
||||
return _contributors;
|
||||
}
|
||||
|
||||
|
||||
public void setContributors(String contributors) {
|
||||
this._contributors = contributors;
|
||||
updateModified();
|
||||
}
|
||||
|
||||
|
||||
public String getSubject() {
|
||||
return _subject;
|
||||
}
|
||||
|
||||
|
||||
public void setSubject(String subject) {
|
||||
this._subject = subject;
|
||||
updateModified();
|
||||
}
|
||||
|
||||
|
||||
public String getDescription() {
|
||||
return _description;
|
||||
}
|
||||
|
||||
|
||||
public void setDescription(String description) {
|
||||
this._description = description;
|
||||
updateModified();
|
||||
}
|
||||
|
||||
|
||||
public int getRowCount() {
|
||||
return _rowCount;
|
||||
}
|
||||
|
||||
|
||||
public void setRowCount(int rowCount) {
|
||||
this._rowCount = rowCount;
|
||||
updateModified();
|
||||
}
|
||||
|
||||
|
||||
public JSONArray getUserMetadata() {
|
||||
return _userMetadata;
|
||||
}
|
||||
|
||||
|
||||
public void setUserMetadata(JSONArray userMetadata) {
|
||||
this._userMetadata = userMetadata;
|
||||
}
|
||||
@ -465,8 +467,11 @@ public class ProjectMetadata implements Jsonizable {
|
||||
Class<? extends ProjectMetadata> metaClass = this.getClass();
|
||||
try {
|
||||
Field metaField = metaClass.getDeclaredField("_" + metaName);
|
||||
|
||||
if (metaName.equals("tags")) {
|
||||
metaField.set(this, valueString.split(","));
|
||||
} else {
|
||||
metaField.set(this, valueString);
|
||||
}
|
||||
} catch (NoSuchFieldException e) {
|
||||
updateUserMetadata(metaName, valueString);
|
||||
} catch (SecurityException | IllegalArgumentException | IllegalAccessException e) {
|
||||
|
@ -94,9 +94,15 @@ public class ProjectManagerTests extends RefineTest {
|
||||
|
||||
SUT.registerProject(project, metadata);
|
||||
|
||||
<<<<<<< Upstream, based on origin/master
|
||||
AssertProjectRegistered();
|
||||
verify(metadata, times(1)).getTags();
|
||||
|
||||
=======
|
||||
AssertProjectRegistered();
|
||||
verify(metadata, times(1)).getTags();
|
||||
|
||||
>>>>>>> 529b6bd Modified tags in metadata dialog and moved column right to name
|
||||
verifyNoMoreInteractions(project);
|
||||
verifyNoMoreInteractions(metadata);
|
||||
}
|
||||
@ -121,7 +127,11 @@ public class ProjectManagerTests extends RefineTest {
|
||||
this.verifySaveTimeCompared(1);
|
||||
verify(SUT, times(1)).saveProject(project);
|
||||
verify(metadata, times(1)).getTags();
|
||||
<<<<<<< Upstream, based on origin/master
|
||||
|
||||
=======
|
||||
|
||||
>>>>>>> 529b6bd Modified tags in metadata dialog and moved column right to name
|
||||
//ensure end
|
||||
verifyNoMoreInteractions(project);
|
||||
verifyNoMoreInteractions(metadata);
|
||||
|
@ -31,7 +31,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
*/
|
||||
|
||||
package com.google.refine.tests.model;
|
||||
package com.google.refine.tests.browsing.facets;
|
||||
|
||||
import static org.mockito.Mockito.mock;
|
||||
|
||||
|
@ -31,7 +31,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
*/
|
||||
|
||||
package com.google.refine.tests.model;
|
||||
package com.google.refine.tests.operations.cell;
|
||||
|
||||
import static org.mockito.Mockito.mock;
|
||||
|
||||
|
@ -351,7 +351,14 @@ Refine.TagsManager._getAllProjectTags = function() {
|
||||
});
|
||||
|
||||
array.map(function(item){
|
||||
<<<<<<< Upstream, based on origin/master
|
||||
self.allProjectTags.push(item);
|
||||
=======
|
||||
self.allProjectTags.push(item);
|
||||
});
|
||||
},
|
||||
async : false
|
||||
>>>>>>> 529b6bd Modified tags in metadata dialog and moved column right to name
|
||||
});
|
||||
},
|
||||
async : false
|
||||
|
@ -21,11 +21,38 @@ function EditMetadataDialog(metaData, targetRowElem) {
|
||||
|
||||
var td2 = tr.insertCell(2);
|
||||
|
||||
if(key==="tags"){
|
||||
$('<button class="button">').text($.i18n._('core-index')["edit"]).appendTo(td2).click(function() {
|
||||
var oldTags = $(td1).text().replace("\"","").replace("[","").replace("]","");
|
||||
oldTags = replaceAll(oldTags,"\"","");
|
||||
var newTags = window.prompt($.i18n._('core-index')["change-metadata-value"]+" " + key, value);
|
||||
newTags = newTags.replace("\"","").replace("[","").replace("]","");
|
||||
newTags = replaceAll(newTags,"\"","");
|
||||
if (newTags !== null) {
|
||||
$(td1).text(newTags);
|
||||
metaData[key] = newTags;
|
||||
$.ajax({
|
||||
type : "POST",
|
||||
url : "command/core/set-project-tags",
|
||||
data : {
|
||||
"project" : project,
|
||||
"old" : oldTags,
|
||||
"new" : newTags
|
||||
},
|
||||
dataType : "json",
|
||||
});
|
||||
}
|
||||
|
||||
Refine.OpenProjectUI.refreshProject(targetRowElem, metaData);
|
||||
});
|
||||
}
|
||||
|
||||
if (key !== "created" &&
|
||||
key !== "modified" &&
|
||||
key !== "rowCount" &&
|
||||
key !== "importOptionMetadata" &&
|
||||
key !== "id") {
|
||||
key !== "id" &&
|
||||
key !== "tags") {
|
||||
$('<button class="button">').text($.i18n._('core-index')["edit"]).appendTo(td2).click(function() {
|
||||
var newValue = window.prompt($.i18n._('core-index')["change-metadata-value"]+" " + key, value);
|
||||
if (newValue !== null) {
|
||||
@ -63,7 +90,7 @@ EditMetadataDialog.prototype._createDialog = function() {
|
||||
|
||||
this._level = DialogSystem.showDialog(frame);
|
||||
this._elmts.closeButton.html($.i18n._('core-buttons')["close"]);
|
||||
this._elmts.closeButton.click(function() { self._dismiss(); });
|
||||
this._elmts.closeButton.click(function() { self._dismiss();Refine.OpenProjectUI.prototype._addTagFilter()});
|
||||
|
||||
var body = $("#metadata-body");
|
||||
|
||||
@ -111,3 +138,11 @@ EditMetadataDialog.prototype._dismiss = function() {
|
||||
DialogSystem.dismissUntil(this._level - 1);
|
||||
};
|
||||
|
||||
function escapeRegExp(str) {
|
||||
return str.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, "\\$1");
|
||||
}
|
||||
|
||||
function replaceAll(str, find, replace) {
|
||||
return str.replace(new RegExp(escapeRegExp(find), 'g'), replace);
|
||||
}
|
||||
|
||||
|
@ -192,11 +192,11 @@ Refine.OpenProjectUI.prototype._renderProjects = function(data) {
|
||||
'<th></th>' +
|
||||
'<th>'+$.i18n._('core-index-open')["last-mod"]+'</th>' +
|
||||
'<th>'+$.i18n._('core-index-open')["name"]+'</th>' +
|
||||
'<th>'+$.i18n._('core-index-open')["tags"]+'</th>' +
|
||||
'<th>'+$.i18n._('core-index-open')["creator"]+'</th>' +
|
||||
'<th>'+$.i18n._('core-index-open')["subject"]+'</th>' +
|
||||
'<th>'+$.i18n._('core-index-open')["description"]+'</th>' +
|
||||
'<th>'+$.i18n._('core-index-open')["row-count"]+'</th>' +
|
||||
'<th>'+$.i18n._('core-index-open')["tags"]+'</th>' +
|
||||
(function() {
|
||||
var htmlDisplay = "";
|
||||
for (var n in data.customMetadataColumns) {
|
||||
@ -261,36 +261,18 @@ Refine.OpenProjectUI.prototype._renderProjects = function(data) {
|
||||
.attr("href", "project?project=" + project.id)
|
||||
.appendTo($(tr.insertCell(tr.cells.length)));
|
||||
|
||||
var appendMetaField = function(data) {
|
||||
$('<div></div>')
|
||||
.html(data)
|
||||
.appendTo($(tr.insertCell(tr.cells.length)));
|
||||
};
|
||||
|
||||
appendMetaField(project.creator);
|
||||
appendMetaField(project.subject);
|
||||
appendMetaField(project.description, '20%');
|
||||
appendMetaField(project.rowCount);
|
||||
|
||||
var data = project.userMetadata;
|
||||
for(var i in data)
|
||||
{
|
||||
if (data[i].display === true) {
|
||||
appendMetaField(data[i].value);
|
||||
}
|
||||
}
|
||||
|
||||
$(tr.insertCell(tr.cells.length));
|
||||
var tagsCell = $(tr.insertCell(tr.cells.length));
|
||||
var tags = project.tags;
|
||||
for (var index = 0; index < tags.length; index++) {
|
||||
var tag = tags[index];
|
||||
tags.map(function(tag){
|
||||
$("<span/>")
|
||||
.addClass("project-tag")
|
||||
.text(tag)
|
||||
.attr("title", $.i18n._('core-index-open')["edit-tags"])
|
||||
.appendTo($(tr.cells[tr.cells.length - 1]));
|
||||
.appendTo(tagsCell);
|
||||
$(tr).addClass(tag);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
var editTagsLink = $('<a></a>')
|
||||
@ -326,7 +308,26 @@ Refine.OpenProjectUI.prototype._renderProjects = function(data) {
|
||||
}
|
||||
});
|
||||
return false;
|
||||
}).appendTo($(tr.cells[tr.cells.length - 1]));
|
||||
}).appendTo(tagsCell);
|
||||
|
||||
var appendMetaField = function(data) {
|
||||
$('<div></div>')
|
||||
.html(data)
|
||||
.appendTo($(tr.insertCell(tr.cells.length)));
|
||||
};
|
||||
|
||||
appendMetaField(project.creator);
|
||||
appendMetaField(project.subject);
|
||||
appendMetaField(project.description, '20%');
|
||||
appendMetaField(project.rowCount);
|
||||
|
||||
var data = project.userMetadata;
|
||||
for(var i in data)
|
||||
{
|
||||
if (data[i].display === true) {
|
||||
appendMetaField(data[i].value);
|
||||
}
|
||||
}
|
||||
|
||||
$(tr).mouseenter(function() {
|
||||
editTagsLink.css("visibility", "visible");
|
||||
@ -388,18 +389,113 @@ Refine.OpenProjectUI.prototype._onClickUploadFileButton = function(evt) {
|
||||
};
|
||||
|
||||
Refine.OpenProjectUI.refreshProject = function(tr, metaData) {
|
||||
|
||||
var refreshMetaField = function(data, index) {
|
||||
if (index === 3) {
|
||||
$('a', $('td', tr).eq(index))
|
||||
.text(data);
|
||||
} else {
|
||||
$('td', tr).eq(index)
|
||||
$('td', tr).eq(index).find('div')
|
||||
.text(data);
|
||||
}
|
||||
};
|
||||
|
||||
var refreshMetaTags = function(data, index) {
|
||||
var tagCol = $('td', tr).eq(index).empty();
|
||||
if(data.constructor === Array){
|
||||
data.map(function(tag){
|
||||
var tagsCell = $("<span/>")
|
||||
.addClass("project-tag")
|
||||
.text(tag)
|
||||
.attr("title", $.i18n._('core-index-open')["edit-tags"])
|
||||
.appendTo(tagCol);
|
||||
|
||||
var editTagsLink = $('<a></a>')
|
||||
.text($.i18n._('core-index-open')["rename"])
|
||||
.addClass("secondary")
|
||||
.addClass("edit-project-tags")
|
||||
.css("visibility", "hidden")
|
||||
.attr("href", "")
|
||||
.attr("title", $.i18n._('core-index-open')["edit-tags"])
|
||||
.html('<img src="images/edit.png" />')
|
||||
.click(function() {
|
||||
var oldTags = project.tags.join(",");
|
||||
var newTags = window.prompt($.i18n._('core-index-open')["edit-tags-desc"],oldTags);
|
||||
if (newTags === null || newTags === oldTags) {
|
||||
return false;
|
||||
}
|
||||
$.ajax({
|
||||
type : "POST",
|
||||
url : "command/core/set-project-tags",
|
||||
data : {
|
||||
"project" : project.id,
|
||||
"old" : oldTags,
|
||||
"new" : newTags
|
||||
},
|
||||
dataType : "json",
|
||||
success : function(data) {
|
||||
if (data && typeof data.code != 'undefined' && data.code == "ok") {
|
||||
Refine.TagsManager.allProjectTags = [];
|
||||
self._buildTagsAndFetchProjects();
|
||||
} else {
|
||||
alert($.i18n._('core-index-open')["warning-tags-update"]+ " "+ data.message);
|
||||
}
|
||||
}
|
||||
});
|
||||
return false;
|
||||
}).appendTo(tagCol);
|
||||
tagCol.parent().addClass(tag);
|
||||
});
|
||||
} else{
|
||||
data.split(",").map(function(tag){
|
||||
var tagsCell = $("<span/>")
|
||||
.addClass("project-tag")
|
||||
.text(tag)
|
||||
.attr("title", $.i18n._('core-index-open')["edit-tags"])
|
||||
.appendTo(tagCol);
|
||||
|
||||
var editTagsLink = $('<a></a>')
|
||||
.text($.i18n._('core-index-open')["rename"])
|
||||
.addClass("secondary")
|
||||
.addClass("edit-project-tags")
|
||||
.css("visibility", "hidden")
|
||||
.attr("href", "")
|
||||
.attr("title", $.i18n._('core-index-open')["edit-tags"])
|
||||
.html('<img src="images/edit.png" />')
|
||||
.click(function() {
|
||||
var oldTags = project.tags.join(",");
|
||||
var newTags = window.prompt($.i18n._('core-index-open')["edit-tags-desc"],oldTags);
|
||||
if (newTags === null || newTags === oldTags) {
|
||||
return false;
|
||||
}
|
||||
$.ajax({
|
||||
type : "POST",
|
||||
url : "command/core/set-project-tags",
|
||||
data : {
|
||||
"project" : project.id,
|
||||
"old" : oldTags,
|
||||
"new" : newTags
|
||||
},
|
||||
dataType : "json",
|
||||
success : function(data) {
|
||||
if (data && typeof data.code != 'undefined' && data.code == "ok") {
|
||||
Refine.TagsManager.allProjectTags = [];
|
||||
self._buildTagsAndFetchProjects();
|
||||
} else {
|
||||
alert($.i18n._('core-index-open')["warning-tags-update"]+ " "+ data.message);
|
||||
}
|
||||
}
|
||||
});
|
||||
return false;
|
||||
}).appendTo(tagCol);
|
||||
tagCol.parent().addClass(tag);
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
var index = 3;
|
||||
refreshMetaField(metaData.name, index); index++;
|
||||
refreshMetaTags(metaData.tags, index); index++;
|
||||
refreshMetaField(metaData.creator, index); index++;
|
||||
refreshMetaField(metaData.subject,index); index++;
|
||||
refreshMetaField(metaData.description,index); index++;
|
||||
@ -428,6 +524,20 @@ Refine.OpenProjectUI.refreshProject = function(tr, metaData) {
|
||||
}
|
||||
}
|
||||
|
||||
Refine.TagsManager.allProjectTags = [];
|
||||
var self = this;
|
||||
var list = $("#tagsUl").empty();
|
||||
self._allTags = Refine.TagsManager._getAllProjectTags();
|
||||
|
||||
var li = $('<li/>').addClass("active").appendTo(list);
|
||||
$('<a/>').attr('href',
|
||||
'#all').addClass("current").text('All').appendTo(li);
|
||||
|
||||
$.each(self._allTags, function(i) {
|
||||
var li = $('<li/>').appendTo(list);
|
||||
$('<a/>').attr('href', '#' + self._allTags[i]).text(self._allTags[i])
|
||||
.appendTo(li);
|
||||
});
|
||||
};
|
||||
|
||||
Refine.actionAreas.push({
|
||||
|
Loading…
Reference in New Issue
Block a user