package gr.grnet.pithos.web.client;\r
\r
import com.google.gwt.core.client.Scheduler;\r
+import com.google.gwt.json.client.JSONArray;\r
+import com.google.gwt.json.client.JSONString;\r
+import com.google.gwt.user.client.ui.Anchor;\r
+import com.google.gwt.user.client.ui.Label;\r
import gr.grnet.pithos.web.client.foldertree.File;\r
import gr.grnet.pithos.web.client.foldertree.Resource;\r
import gr.grnet.pithos.web.client.rest.PostCommand;\r
+import gr.grnet.pithos.web.client.rest.PostRequest;\r
import gr.grnet.pithos.web.client.rest.PutRequest;\r
import gr.grnet.pithos.web.client.rest.RestException;\r
\r
import com.google.gwt.user.client.ui.HorizontalPanel;\r
import com.google.gwt.user.client.ui.TextBox;\r
import com.google.gwt.user.client.ui.VerticalPanel;\r
+import gr.grnet.pithos.web.client.tagtree.Tag;\r
+import java.util.Iterator;\r
\r
/**\r
* The 'File properties' dialog box implementation.\r
\r
focusPanel.setFocus(true);\r
setWidget(outer);\r
-\r
- // Asynchronously retrieve the tags defined by this user.\r
- DeferredCommand.addCommand(new Command() {\r
-\r
- @Override\r
- public void execute() {\r
-// updateTags();\r
- }\r
- });\r
}\r
\r
private VerticalPanel createGeneralPanel() {\r
generalTable.setText(1, 0, "Folder");\r
generalTable.setText(2, 0, "Owner");\r
generalTable.setText(3, 0, "Last modified");\r
-// generalTable.setText(4, 0, "Tags");\r
+ generalTable.setText(4, 0, "Tags");\r
\r
name.setWidth("100%");\r
name.setText(file.getName());\r
final DateTimeFormat formatter = DateTimeFormat.getFormat("d/M/yyyy h:mm a");\r
generalTable.setText(3, 1, formatter.format(file.getLastModified()));\r
\r
- // Get the tags.\r
-// StringBuffer tagsBuffer = new StringBuffer();\r
-// Iterator i = file.getTags().iterator();\r
-// while (i.hasNext()) {\r
-// String tag = (String) i.next();\r
-// tagsBuffer.append(tag).append(", ");\r
-// }\r
-// if (tagsBuffer.length() > 1)\r
-// tagsBuffer.delete(tagsBuffer.length() - 2, tagsBuffer.length() - 1);\r
-// initialTagText = tagsBuffer.toString();\r
-// tags.setWidth("100%");\r
-// tags.getElement().setId("filePropertiesDialog.textBox.tags");\r
-// tags.setText(initialTagText);\r
-// generalTable.setWidget(4, 1, tags);\r
+ StringBuffer tagsBuffer = new StringBuffer();\r
+ for (String t : file.getTags())\r
+ tagsBuffer.append(t).append(", ");\r
+ if (tagsBuffer.length() > 1)\r
+ tagsBuffer.delete(tagsBuffer.length() - 2, tagsBuffer.length() - 1);\r
+ initialTagText = tagsBuffer.toString();\r
+ tags.setWidth("100%");\r
+ tags.setText(initialTagText);\r
+ generalTable.setWidget(4, 1, tags);\r
\r
generalTable.getFlexCellFormatter().setStyleName(0, 0, "props-labels");\r
generalTable.getFlexCellFormatter().setStyleName(1, 0, "props-labels");\r
generalTable.getFlexCellFormatter().setStyleName(2, 0, "props-labels");\r
generalTable.getFlexCellFormatter().setStyleName(3, 0, "props-labels");\r
-// generalTable.getFlexCellFormatter().setStyleName(4, 0, "props-labels");\r
+ generalTable.getFlexCellFormatter().setStyleName(4, 0, "props-labels");\r
generalTable.getFlexCellFormatter().setStyleName(0, 1, "props-values");\r
generalTable.getFlexCellFormatter().setStyleName(1, 1, "props-values");\r
generalTable.getFlexCellFormatter().setStyleName(2, 1, "props-values");\r
generalTable.getFlexCellFormatter().setStyleName(3, 1, "props-values");\r
-// generalTable.getFlexCellFormatter().setStyleName(4, 1, "props-values");\r
+ generalTable.getFlexCellFormatter().setStyleName(4, 1, "props-values");\r
generalTable.setCellSpacing(4);\r
\r
generalPanel.add(generalTable);\r
DisclosurePanel allTags = new DisclosurePanel("All tags");\r
allTagsContent = new FlowPanel();\r
allTagsContent.setWidth("100%");\r
+ for (Tag t : app.getAllTags()) {\r
+ final Anchor tagAnchor = new Anchor(t.getName(), false);\r
+ tagAnchor.addStyleName("pithos-tag");\r
+ allTagsContent.add(tagAnchor);\r
+ Label separator = new Label(", ");\r
+ separator.addStyleName("pithos-tag");\r
+ allTagsContent.add(separator);\r
+ tagAnchor.addClickHandler(new ClickHandler() {\r
+\r
+ @Override\r
+ public void onClick(ClickEvent event) {\r
+ String existing = tags.getText().trim();\r
+ if (MULTIPLE_VALUES_TEXT.equals(existing))\r
+ existing = "";\r
+ String newTag = tagAnchor.getText().trim();\r
+ // insert the new tag only if it is not in the list\r
+ // already\r
+ if (existing.indexOf(newTag) == -1)\r
+ tags.setText(existing + (existing.length() > 0 ? ", " : "") + newTag);\r
+ }\r
+ });\r
+ }\r
allTags.setContent(allTagsContent);\r
generalPanel.add(allTags);\r
generalPanel.setSpacing(4);\r
// permList.updatePermissionsAccordingToInput();\r
// Set<PermissionHolder> perms = permList.getPermissions();\r
// JSONObject json = new JSONObject();\r
- if (!name.getText().equals(file.getName())) {\r
- newFilename = name.getText();\r
+ if (!name.getText().trim().equals(file.getName())) {\r
+ newFilename = name.getText().trim();\r
// json.put("name", new JSONString(newFilename));\r
}\r
// if (versioned.getValue() != file.isVersioned())\r
// }\r
// json.put("permissions", perma);\r
// }\r
-// JSONArray taga = new JSONArray();\r
-// i = 0;\r
-// if (!tags.getText().equals(initialTagText)) {\r
-// String[] tagset = tags.getText().split(",");\r
-// for (String t : tagset) {\r
-// JSONString to = new JSONString(t);\r
-// taga.set(i, to);\r
-// i++;\r
-// }\r
-// json.put("tags", taga);\r
-// }\r
+ String[] tagset = null;\r
+ if (!tags.getText().equals(initialTagText))\r
+ tagset = tags.getText().split(",");\r
// String jsonString = json.toString();\r
// if(jsonString.equals("{}")){\r
// GWT.log("NO CHANGES", null);\r
// return;\r
// }\r
- final String newFilenameFinal = newFilename;\r
+ final String[] newTags = tagset;\r
+\r
+ if (newFilename != null) {\r
+ final String path = app.getApiPath() + app.getUsername() + file.getParent().getUri() + "/" + newFilename;\r
+ PutRequest updateFile = new PutRequest(path) {\r
+ @Override\r
+ public void onSuccess(Resource result) {\r
+ if (newTags != null)\r
+ updateMetaData(path + "?update=", newTags);\r
+ else\r
+ app.updateFolder(file.getParent());\r
+ }\r
+\r
+ @Override\r
+ public void onError(Throwable t) {\r
+ GWT.log("", t);\r
+ app.displayError("System error modifying file:" + t.getMessage());\r
+ }\r
+ };\r
+ updateFile.setHeader("X-Auth-Token", app.getToken());\r
+ updateFile.setHeader("X-Move-From", file.getUri());\r
+ updateFile.setHeader("Content-Type", file.getContentType());\r
+ Scheduler.get().scheduleDeferred(updateFile);\r
+ }\r
+ else if (newTags != null)\r
+ updateMetaData(app.getApiPath() + app.getUsername() + file.getUri() + "?update=", newTags);\r
+ }\r
\r
- if (newFilename == null)\r
- return;\r
- String path = app.getApiPath() + app.getUsername() + file.getParent().getUri() + "/" + newFilename;\r
- PutRequest updateFile = new PutRequest(path) {\r
+ private void updateMetaData(String path, String[] newTags) {\r
+ PostRequest updateFile = new PostRequest(path) {\r
@Override\r
public void onSuccess(Resource result) {\r
app.updateFolder(file.getParent());\r
}\r
};\r
updateFile.setHeader("X-Auth-Token", app.getToken());\r
- updateFile.setHeader("X-Move-From", file.getUri());\r
- updateFile.setHeader("Content-Type", file.getContentType());\r
+ for (String t : newTags)\r
+ updateFile.setHeader("X-Object-Meta-" + t.trim(), "true");\r
Scheduler.get().scheduleDeferred(updateFile);\r
- }\r
+ }\r
\r
private void removeAllOldVersions() {\r
JSONObject json = new JSONObject();\r