X-Git-Url: https://code.grnet.gr/git/pithos-web-client/blobdiff_plain/b3c3954bc4fe72695164df18152f316765828838..c963be61420007d2177be3feb9fa6b9d568e40ca:/src/gr/grnet/pithos/web/client/FolderPermissionsDialog.java
diff --git a/src/gr/grnet/pithos/web/client/FolderPermissionsDialog.java b/src/gr/grnet/pithos/web/client/FolderPermissionsDialog.java
index 007f865..ecb5765 100644
--- a/src/gr/grnet/pithos/web/client/FolderPermissionsDialog.java
+++ b/src/gr/grnet/pithos/web/client/FolderPermissionsDialog.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2011-2012 GRNET S.A. All rights reserved.
+ * Copyright 2011-2013 GRNET S.A. All rights reserved.
*
* Redistribution and use in source and binary forms, with or
* without modification, are permitted provided that the following
@@ -34,16 +34,6 @@
*/
package gr.grnet.pithos.web.client;
-import gr.grnet.pithos.web.client.foldertree.File;
-import gr.grnet.pithos.web.client.foldertree.Folder;
-import gr.grnet.pithos.web.client.foldertree.Resource;
-import gr.grnet.pithos.web.client.rest.PostRequest;
-import gr.grnet.pithos.web.client.rest.PutRequest;
-import gr.grnet.pithos.web.client.rest.RestException;
-
-import java.util.Iterator;
-import java.util.Map;
-
import com.google.gwt.core.client.GWT;
import com.google.gwt.core.client.Scheduler;
import com.google.gwt.dom.client.NativeEvent;
@@ -55,13 +45,13 @@ import com.google.gwt.http.client.Response;
import com.google.gwt.http.client.URL;
import com.google.gwt.user.client.Command;
import com.google.gwt.user.client.Event.NativePreviewEvent;
-import com.google.gwt.user.client.ui.Anchor;
-import com.google.gwt.user.client.ui.Button;
-import com.google.gwt.user.client.ui.DialogBox;
-import com.google.gwt.user.client.ui.HasHorizontalAlignment;
-import com.google.gwt.user.client.ui.HorizontalPanel;
-import com.google.gwt.user.client.ui.Label;
-import com.google.gwt.user.client.ui.VerticalPanel;
+import com.google.gwt.user.client.ui.*;
+import gr.grnet.pithos.web.client.foldertree.Folder;
+import gr.grnet.pithos.web.client.rest.PostRequest;
+import gr.grnet.pithos.web.client.rest.PutRequest;
+import gr.grnet.pithos.web.client.rest.RestException;
+
+import java.util.Map;
/**
* The 'Folder properties' dialog box implementation.
@@ -70,80 +60,99 @@ public class FolderPermissionsDialog extends DialogBox {
protected Pithos app;
- /**
- * The widget that holds the folderName of the folder.
- */
- Label folderName = new Label();
+ /**
+ * The widget that holds the folderName of the folder.
+ */
+ Label folderName = new Label();
- protected PermissionsList permList;
+ protected PermissionsList permList;
- final Folder folder;
+ final Folder folder;
- final VerticalPanel inner;
+ final VerticalPanel inner;
- /**
- * The widget's constructor.
- */
- public FolderPermissionsDialog(final Pithos app, Folder selected) {
+ /**
+ * The widget's constructor.
+ */
+ public FolderPermissionsDialog(final Pithos app, Folder selected) {
this.app = app;
- Anchor close = new Anchor();
- close.addStyleName("close");
- close.addClickHandler(new ClickHandler() {
-
- @Override
- public void onClick(ClickEvent event) {
- hide();
- }
- });
+ Anchor close = new Anchor("close");
+ close.addStyleName("close");
+ close.addClickHandler(new ClickHandler() {
+
+ @Override
+ public void onClick(ClickEvent event) {
+ hide();
+ }
+ });
- setAnimationEnabled(true);
- setGlassEnabled(true);
- setStyleName("pithos-DialogBox");
+ setGlassEnabled(true);
+ setStyleName("pithos-DialogBox");
- // Enable IE selection for the dialog (must disable it upon closing it)
- Pithos.enableIESelection();
+ // Enable IE selection for the dialog (must disable it upon closing it)
+ Pithos.enableIESelection();
- folder = selected;
+ folder = selected;
- setText("Folder permissions");
+ setText(Const.TXT_SHARE_FOLDER);
- // Outer contains inner and buttons
- VerticalPanel outer = new VerticalPanel();
- outer.add(close);
- // Inner contains generalPanel and permPanel
- inner = new VerticalPanel();
- inner.addStyleName("inner");
+ // Outer contains inner and buttons
+ VerticalPanel outer = new VerticalPanel();
+ outer.add(close);
+ // Inner contains generalPanel and permPanel
+ inner = new VerticalPanel();
+ inner.addStyleName("inner");
+ folderName.setText(folder.getName());
- folderName.setText(folder.getName());
+ final HorizontalPanel privateInfoPanel = new HorizontalPanel();
+ privateInfoPanel.setSpacing(8);
+ final Label privateInfoTitle = new InlineHTML("Private sharing");
+ final Label privateInfoText = new Label("Only people explicitly granted permission can access. Sign-in required.", true);
+ privateInfoPanel.add(privateInfoTitle);
+ privateInfoPanel.add(privateInfoText);
+ inner.add(privateInfoPanel);
VerticalPanel permPanel = new VerticalPanel();
- FilePermissionsDialog.Images images = GWT.create(FilePermissionsDialog.Images.class);
- permList = new PermissionsList(images, folder.getPermissions(), folder.getOwner(), false);
- permPanel.add(permList);
+ FileShareDialog.PrivateSharingImages images = GWT.create(FileShareDialog.PrivateSharingImages.class);
- HorizontalPanel permButtons = new HorizontalPanel();
- Button add = new Button("Add Group", new ClickHandler() {
+ permList = new PermissionsList(app, images, folder.getPermissions(), folder.getOwnerID(), false, new Command() {
@Override
- public void onClick(ClickEvent event) {
- PermissionsAddDialog dlg = new PermissionsAddDialog(app, app.getAccount().getGroups(), permList, false);
- dlg.center();
+ public void execute() {
+ updateMetadataForPrivateSharing();
}
});
- add.addStyleName("button");
- permButtons.add(add);
- permButtons.setCellHorizontalAlignment(add, HasHorizontalAlignment.ALIGN_CENTER);
+ permPanel.add(permList);
+
+ HorizontalPanel permButtons = new HorizontalPanel();
Button addUser = new Button("Add User", new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
PermissionsAddDialog dlg = new PermissionsAddDialog(app, app.getAccount().getGroups(), permList, true);
dlg.center();
+ permList.updatePermissionTable();
}
});
addUser.addStyleName("button");
permButtons.add(addUser);
permButtons.setCellHorizontalAlignment(addUser, HasHorizontalAlignment.ALIGN_CENTER);
+
+ final boolean haveGroups = app.getAccount().getGroups().size() > 0;
+ if(haveGroups) {
+ Button addGroup = new Button("Add Group", new ClickHandler() {
+ @Override
+ public void onClick(ClickEvent event) {
+ PermissionsAddDialog dlg = new PermissionsAddDialog(app, app.getAccount().getGroups(), permList, false);
+ dlg.center();
+ permList.updatePermissionTable();
+ }
+ });
+ addGroup.addStyleName("button");
+ permButtons.add(addGroup);
+ permButtons.setCellHorizontalAlignment(addGroup, HasHorizontalAlignment.ALIGN_CENTER);
+ }
+
permButtons.setSpacing(8);
permPanel.add(permButtons);
@@ -151,199 +160,163 @@ public class FolderPermissionsDialog extends DialogBox {
outer.add(inner);
- // Create the 'Create/Update' button, along with a listener that hides the dialog
- // when the button is clicked and quits the application.
- String okLabel = "Update";
- final Button ok = new Button(okLabel, new ClickHandler() {
- @Override
- public void onClick(ClickEvent event) {
- updateFolder();
- closeDialog();
- }
- });
- ok.addStyleName("button");
- outer.add(ok);
+ final Button ok = new Button("OK", new ClickHandler() {
+ @Override
+ public void onClick(ClickEvent event) {
+ closeDialog();
+ }
+ });
+ ok.addStyleName("button");
+
+ outer.add(ok);
outer.setCellHorizontalAlignment(inner, HasHorizontalAlignment.ALIGN_CENTER);
setWidget(outer);
- }
-
- @Override
- protected void onPreviewNativeEvent(NativePreviewEvent preview) {
- super.onPreviewNativeEvent(preview);
-
- NativeEvent evt = preview.getNativeEvent();
- if (evt.getType().equals(KeyDownEvent.getType().getName()))
- // Use the popup's key preview hooks to close the dialog when either
- // enter or escape is pressed.
- switch (evt.getKeyCode()) {
- case KeyCodes.KEY_ENTER:
- updateFolder();
+ }
+
+ @Override
+ protected void onPreviewNativeEvent(NativePreviewEvent preview) {
+ super.onPreviewNativeEvent(preview);
+
+ NativeEvent evt = preview.getNativeEvent();
+ if(evt.getType().equals(KeyDownEvent.getType().getName()))
+ // Use the popup's key preview hooks to close the dialog when either
+ // enter or escape is pressed.
+ {
+ switch(evt.getKeyCode()) {
+ case KeyCodes.KEY_ENTER:
+ updateMetadataForPrivateSharing();
closeDialog();
- break;
- case KeyCodes.KEY_ESCAPE:
- closeDialog();
- break;
- }
- }
-
-
- /**
- * Enables IE selection prevention and hides the dialog
- * (we disable the prevention on creation of the dialog)
- */
- public void closeDialog() {
- Pithos.preventIESelection();
- hide();
- }
-
- void updateFolder() {
- final Map perms = (permList.hasChanges() ? permList.getPermissions() : null);
- final String newName = folderName.getText().trim();
- if (!folder.isContainer() && !folder.getName().equals(newName)) {
- final String path = folder.getParent().getUri() + "/" + newName;
- PutRequest newFolder = new PutRequest(app.getApiPath(), folder.getParent().getOwner(), path) {
- @Override
- public void onSuccess(Resource result) {
- Iterator iter = folder.getFiles().iterator();
- app.copyFiles(iter, folder.getParent().getOwner(), folder.getParent().getUri() + "/" + newName, new Command() {
- @Override
- public void execute() {
- Iterator iterf = folder.getSubfolders().iterator();
- app.copySubfolders(iterf, folder.getParent().getOwner(), folder.getParent().getUri() + "/" + newName, new Command() {
- @Override
- public void execute() {
- app.deleteFolder(folder);
- updateMetadata(path + "?update=", perms);
- }
- });
- }
- });
- }
+ break;
+ case KeyCodes.KEY_ESCAPE:
+ closeDialog();
+ break;
+ }
+ }
+ }
- @Override
- public void onError(Throwable t) {
- GWT.log("", t);
- app.setError(t);
- if(t instanceof RestException){
- app.displayError("Unable to update folder: " + ((RestException) t).getHttpStatusText());
- }
- else
- app.displayError("System error modifying folder: " + t.getMessage());
- }
+ /**
+ * Enables IE selection prevention and hides the dialog
+ * (we disable the prevention on creation of the dialog)
+ */
+ public void closeDialog() {
+ Pithos.preventIESelection();
+ hide();
+ }
- @Override
- protected void onUnauthorized(Response response) {
- app.sessionExpired();
- }
- };
- newFolder.setHeader("X-Auth-Token", app.getToken());
- newFolder.setHeader("Content-Type", "application/folder");
- newFolder.setHeader("Accept", "*/*");
- newFolder.setHeader("Content-Length", "0");
- Scheduler.get().scheduleDeferred(newFolder);
- }
- else
- updateMetadata(folder.getUri() + "?update=", perms);
- }
+ private void updateMetadataForPrivateSharing() {
+ final Map perms = (permList.hasChanges() ? permList.getPermissions() : null);
+ updateMetadataForPrivateSharing(
+ folder.getUri() + Const.QUESTION_MARK_UPDATE_EQ,
+ perms
+ );
+ }
- protected void updateMetadata(final String path, final Map newPermissions) {
- if (newPermissions != null) {
- PostRequest updateFolder = new PostRequest(app.getApiPath(), folder.getOwner(), path) {
+ private void updateMetadataForPrivateSharing(final String path, final Map newPermissions) {
+ if(newPermissions != null) {
+ PostRequest updateFolder = new PostRequest(app.getApiPath(), folder.getOwnerID(), path) {
@Override
public void onSuccess(Resource result) {
app.updateFolder(folder.getParent(), false, new Command() {
-
- @Override
- public void execute() {
- app.updateMySharedRoot();
- }
- });
+ @Override
+ public void execute() {
+ app.updateMySharedRoot();
+ }
+ }, true);
}
@Override
public void onError(Throwable t) {
- GWT.log("", t);
- app.setError(t);
- if (t instanceof RestException) {
- if (((RestException) t).getHttpStatusCode() == Response.SC_NOT_FOUND) { //Probably a virtual folder
+ app.setError(t);
+ if(t instanceof RestException) {
+ if(((RestException) t).getHttpStatusCode() == Response.SC_NOT_FOUND) { //Probably a virtual folder
final String path1 = folder.getUri();
- PutRequest newFolder = new PutRequest(app.getApiPath(), folder.getOwner(), path1) {
+ PutRequest newFolder = new PutRequest(app.getApiPath(), folder.getOwnerID(), path1) {
@Override
public void onSuccess(Resource result) {
- updateMetadata(path, newPermissions);
+ updateMetadataForPrivateSharing(path, newPermissions);
}
@Override
public void onError(Throwable _t) {
- GWT.log("", _t);
- app.setError(_t);
- if(_t instanceof RestException){
+ app.setError(_t);
+ if(_t instanceof RestException) {
app.displayError("Unable to update folder: " + ((RestException) _t).getHttpStatusText());
}
- else
+ else {
app.displayError("System error modifying folder: " + _t.getMessage());
+ }
}
- @Override
- protected void onUnauthorized(Response response) {
- app.sessionExpired();
- }
+ @Override
+ protected void onUnauthorized(Response response) {
+ app.sessionExpired();
+ }
};
- newFolder.setHeader("X-Auth-Token", app.getToken());
+ newFolder.setHeader("X-Auth-Token", app.getUserToken());
newFolder.setHeader("Content-Type", "application/folder");
newFolder.setHeader("Accept", "*/*");
newFolder.setHeader("Content-Length", "0");
Scheduler.get().scheduleDeferred(newFolder);
- }
- else if (((RestException) t).getHttpStatusCode() == Response.SC_CONFLICT) {
- app.displayError("Cannot set permissions. Probably subfolders or files already have permissions set");
- }
- else
- app.displayError("Îrror modifying folder: " + t.getMessage());
+ }
+ else if(((RestException) t).getHttpStatusCode() == Response.SC_CONFLICT) {
+ app.displayError("Cannot set permissions. Probably subfolders or files already have permissions set");
+ }
+ else {
+ app.displayError("Îrror modifying folder: " + t.getMessage());
+ }
+ }
+ else {
+ app.displayError("System error modifying folder: " + t.getMessage());
}
- else
- app.displayError("System error modifying folder: " + t.getMessage());
}
- @Override
- protected void onUnauthorized(Response response) {
- app.sessionExpired();
- }
+ @Override
+ protected void onUnauthorized(Response response) {
+ app.sessionExpired();
+ }
};
- updateFolder.setHeader("X-Auth-Token", app.getToken());
+ updateFolder.setHeader("X-Auth-Token", app.getUserToken());
String readPermHeader = "read=";
String writePermHeader = "write=";
- for (String u : newPermissions.keySet()) {
+ for(String u : newPermissions.keySet()) {
Boolean[] p = newPermissions.get(u);
- if (p[0] != null && p[0])
+ if(p[0] != null && p[0]) {
readPermHeader += u + ",";
- if (p[1] != null && p[1])
+ }
+ if(p[1] != null && p[1]) {
writePermHeader += u + ",";
+ }
}
- if (readPermHeader.endsWith("="))
+ if(readPermHeader.endsWith("=")) {
readPermHeader = "";
- else if (readPermHeader.endsWith(","))
+ }
+ else if(readPermHeader.endsWith(",")) {
readPermHeader = readPermHeader.substring(0, readPermHeader.length() - 1);
- if (writePermHeader.endsWith("="))
+ }
+ if(writePermHeader.endsWith("=")) {
writePermHeader = "";
- else if (writePermHeader.endsWith(","))
+ }
+ else if(writePermHeader.endsWith(",")) {
writePermHeader = writePermHeader.substring(0, writePermHeader.length() - 1);
- String permHeader = readPermHeader + ((readPermHeader.length() > 0 && writePermHeader.length() > 0) ? ";" : "") + writePermHeader;
- if (permHeader.length() == 0)
+ }
+ String permHeader = readPermHeader + ((readPermHeader.length() > 0 && writePermHeader.length() > 0) ? ";" : "") + writePermHeader;
+ if(permHeader.length() == 0) {
permHeader = "~";
- else
- permHeader = URL.encodePathSegment(permHeader);
+ }
+ else {
+ permHeader = URL.encodePathSegment(permHeader);
+ }
updateFolder.setHeader("X-Object-Sharing", permHeader);
Scheduler.get().scheduleDeferred(updateFolder);
}
- else
+ else {
app.updateFolder(folder.getParent(), false, new Command() {
-
- @Override
- public void execute() {
- app.updateMySharedRoot();
- }
- });
+ @Override
+ public void execute() {
+ app.updateMySharedRoot();
+ }
+ }, true);
+ }
}
}