\r
private String userFullName;\r
\r
+ Images images = GWT.create(Images.class);\r
\r
/**\r
* The widget's constructor.\r
// Set the dialog's caption.\r
setText("File properties");\r
\r
-\r
-// permList = new PermissionsList(images, file.getPermissions(), file.getOwner());\r
-\r
// Outer contains inner and buttons.\r
final VerticalPanel outer = new VerticalPanel();\r
final FocusPanel focusPanel = new FocusPanel(outer);\r
\r
private VerticalPanel createSharingPanel() {\r
VerticalPanel permPanel = new VerticalPanel();\r
-//\r
-// permList = new PermissionsList(images, file.getPermissions(), file.getOwner());\r
-// permPanel.add(permList);\r
-//\r
-// HorizontalPanel permButtons = new HorizontalPanel();\r
-// Button add = new Button("Add Group", new ClickHandler() {\r
-// @Override\r
-// public void onClick(ClickEvent event) {\r
-// PermissionsAddDialog dlg = new PermissionsAddDialog(groups, permList, false);\r
-// dlg.center();\r
-// }\r
-// });\r
-// permButtons.add(add);\r
-// permButtons.setCellHorizontalAlignment(add, HasHorizontalAlignment.ALIGN_CENTER);\r
-//\r
-// final Button addUser = new Button("Add User", new ClickHandler() {\r
-// @Override\r
-// public void onClick(ClickEvent event) {\r
-// PermissionsAddDialog dlg = new PermissionsAddDialog(groups, permList, true);\r
-// dlg.center();\r
-// }\r
-// });\r
-// permButtons.add(addUser);\r
-// permButtons.setCellHorizontalAlignment(addUser, HasHorizontalAlignment.ALIGN_CENTER);\r
-//\r
-// permButtons.setSpacing(8);\r
-// permButtons.addStyleName("pithos-TabPanelBottom");\r
-// permPanel.add(permButtons);\r
-//\r
+\r
+ permList = new PermissionsList(app, images, file.getPermissions(), file.getOwner());\r
+ permPanel.add(permList);\r
+\r
+ HorizontalPanel permButtons = new HorizontalPanel();\r
+ Button add = new Button("Add Group", new ClickHandler() {\r
+ @Override\r
+ public void onClick(ClickEvent event) {\r
+ PermissionsAddDialog dlg = new PermissionsAddDialog(app, app.getAccount().getGroups(), permList, false);\r
+ dlg.center();\r
+ permList.updatePermissionTable();\r
+ }\r
+ });\r
+ permButtons.add(add);\r
+ permButtons.setCellHorizontalAlignment(add, HasHorizontalAlignment.ALIGN_CENTER);\r
+\r
+ final Button addUser = new Button("Add User", new ClickHandler() {\r
+ @Override\r
+ public void onClick(ClickEvent event) {\r
+ PermissionsAddDialog dlg = new PermissionsAddDialog(app, app.getAccount().getGroups(), permList, true);\r
+ dlg.center();\r
+ permList.updatePermissionTable();\r
+ }\r
+ });\r
+ permButtons.add(addUser);\r
+ permButtons.setCellHorizontalAlignment(addUser, HasHorizontalAlignment.ALIGN_CENTER);\r
+\r
+ permButtons.setSpacing(8);\r
+ permButtons.addStyleName("pithos-TabPanelBottom");\r
+ permPanel.add(permButtons);\r
+\r
final Label readForAllNote = new Label("When this option is enabled, the file will be readable" +\r
" by everyone. By checking this option, you are certifying that you have the right to " +\r
"distribute this file and that it does not violate the Terms of Use.", true);\r
*/
package gr.grnet.pithos.web.client;
-import gr.grnet.pithos.web.client.rest.GetCommand;
-import gr.grnet.pithos.web.client.rest.RestException;
-import gr.grnet.pithos.web.client.rest.resource.GroupResource;
-import gr.grnet.pithos.web.client.rest.resource.PermissionHolder;
-import gr.grnet.pithos.web.client.rest.resource.UserResource;
-import gr.grnet.pithos.web.client.rest.resource.UserSearchResource;
+import com.google.gwt.user.client.ui.TextBox;
+import gr.grnet.pithos.web.client.foldertree.Group;
import java.util.List;
-import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.NativeEvent;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
-import com.google.gwt.event.dom.client.FocusEvent;
-import com.google.gwt.event.dom.client.FocusHandler;
import com.google.gwt.event.dom.client.KeyCodes;
-import com.google.gwt.event.dom.client.KeyUpEvent;
-import com.google.gwt.event.dom.client.KeyUpHandler;
-import com.google.gwt.http.client.URL;
-import com.google.gwt.user.client.DeferredCommand;
import com.google.gwt.user.client.Event.NativePreviewEvent;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.CheckBox;
import com.google.gwt.user.client.ui.HasHorizontalAlignment;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.ListBox;
-import com.google.gwt.user.client.ui.MultiWordSuggestOracle;
-import com.google.gwt.user.client.ui.SuggestBox;
import com.google.gwt.user.client.ui.VerticalPanel;
public class PermissionsAddDialog extends DialogBox {
- private MultiWordSuggestOracle oracle = new MultiWordSuggestOracle();
- private SuggestBox suggestBox = new SuggestBox(oracle);
-
- private String selectedUser = null;
-
- private List<GroupResource> groups;
+ private TextBox userBox = new TextBox();
private ListBox groupBox = new ListBox();
private CheckBox write = new CheckBox();
- private CheckBox modifyACL = new CheckBox();
-
- private final PermissionsList permList;
+ private PermissionsList permList;
boolean userAdd;
private Pithos app;
- public PermissionsAddDialog(Pithos _app, List<GroupResource> _groups, PermissionsList _permList, boolean _userAdd) {
+ public PermissionsAddDialog(Pithos _app, List<Group> _groups, PermissionsList _permList, boolean _userAdd) {
app = _app;
- groups = _groups;
userAdd = _userAdd;
permList = _permList;
-
- groupBox.getElement().setId("addPermission.dropDown");
-
- suggestBox.getElement().setId("addPermission.textBox");
-
- read.getElement().setId("addPermission.read");
-
- write.getElement().setId("addPermission.write");
-
- modifyACL.getElement().setId("addpermission.modify");
-
- for (GroupResource group : _groups)
- groupBox.addItem(group.getName(), group.getName());
- final VerticalPanel panel = new VerticalPanel();
- final HorizontalPanel buttons = new HorizontalPanel();
- setWidget(panel);
- final FlexTable permTable = new FlexTable();
- permTable.setText(0, 0, "Users/Groups");
- permTable.setText(0, 1, "Read");
- permTable.setText(0, 2, "Write");
- permTable.setText(0, 3, "Modify Access");
- permTable.getFlexCellFormatter().setStyleName(0, 0, "props-toplabels");
- permTable.getFlexCellFormatter().setStyleName(0, 1, "props-toplabels");
- permTable.getFlexCellFormatter().setStyleName(0, 2, "props-toplabels");
- permTable.getFlexCellFormatter().setStyleName(0, 3, "props-toplabels");
- if (userAdd) {
- suggestBox.getTextBox().addFocusHandler(new FocusHandler() {
-
- @Override
- public void onFocus(FocusEvent event) {
- if (selectedUser != null && selectedUser.endsWith("@"))
- updateSuggestions();
- }
- });
-
- suggestBox.addKeyUpHandler(new KeyUpHandler() {
-
- @Override
- public void onKeyUp(KeyUpEvent event) {
- // Ignore the arrow keys.
- int keyCode = event.getNativeKeyCode();
- if (keyCode == KeyCodes.KEY_UP ||
- keyCode == KeyCodes.KEY_DOWN ||
- keyCode == KeyCodes.KEY_LEFT ||
- keyCode == KeyCodes.KEY_RIGHT)
- return;
- if (keyCode==KeyCodes.KEY_ESCAPE) {
- suggestBox.hideSuggestionList();
- return;
- }
- String text = suggestBox.getText().trim();
- // Avoid useless queries for keystrokes that do not modify
- // the text.
- if (text.equals(selectedUser))
- return;
- selectedUser = text;
- // Go to the server only if the user typed the @ character.
- if (selectedUser.endsWith("@"))
- updateSuggestions();
- }
- });
- permTable.setWidget(1, 0, suggestBox);
- } else
- permTable.setWidget(1, 0, groupBox);
- permTable.setWidget(1, 1, read);
- permTable.setWidget(1, 2, write);
- permTable.setWidget(1, 3, modifyACL);
-
- permTable.getFlexCellFormatter().setStyleName(1, 0, "props-labels");
- permTable.getFlexCellFormatter().setHorizontalAlignment(1, 1, HasHorizontalAlignment.ALIGN_CENTER);
- permTable.getFlexCellFormatter().setHorizontalAlignment(1, 2, HasHorizontalAlignment.ALIGN_CENTER);
- permTable.getFlexCellFormatter().setHorizontalAlignment(1, 3, HasHorizontalAlignment.ALIGN_CENTER);
- panel.add(permTable);
-
- final Button ok = new Button("OK", new ClickHandler() {
- @Override
- public void onClick(ClickEvent event) {
- addPermission();
- hide();
- }
- });
- ok.getElement().setId("addPermission.button.ok");
- buttons.add(ok);
- buttons.setCellHorizontalAlignment(ok, HasHorizontalAlignment.ALIGN_CENTER);
- // Create the 'Cancel' button, along with a listener that hides the
- // dialog
- // when the button is clicked.
- final Button cancel = new Button("Cancel", new ClickHandler() {
- @Override
- public void onClick(ClickEvent event) {
- hide();
- }
- });
- cancel.getElement().setId("addPermission.button.cancel");
- buttons.add(cancel);
- buttons.setCellHorizontalAlignment(cancel, HasHorizontalAlignment.ALIGN_CENTER);
- buttons.setSpacing(8);
- buttons.addStyleName("pithos-TabPanelBottom");
- panel.add(buttons);
- panel.addStyleName("pithos-TabPanelBottom");
+ final VerticalPanel panel = new VerticalPanel();
+
+ final FlexTable permTable = new FlexTable();
+ permTable.setText(0, 0, "Users/Groups");
+ permTable.setText(0, 1, "Read");
+ permTable.setText(0, 2, "Write");
+ permTable.getFlexCellFormatter().setStyleName(0, 0, "props-toplabels");
+ permTable.getFlexCellFormatter().setStyleName(0, 1, "props-toplabels");
+ permTable.getFlexCellFormatter().setStyleName(0, 2, "props-toplabels");
+
+ if (userAdd) {
+ permTable.setWidget(1, 0, userBox);
+ }
+ else {
+ for (Group group : _groups)
+ groupBox.addItem(group.getName(), group.getName());
+ permTable.setWidget(1, 0, groupBox);
+ }
+
+ permTable.setWidget(1, 1, read);
+ permTable.setWidget(1, 2, write);
+
+ permTable.getFlexCellFormatter().setStyleName(1, 0, "props-labels");
+ permTable.getFlexCellFormatter().setHorizontalAlignment(1, 1, HasHorizontalAlignment.ALIGN_CENTER);
+ permTable.getFlexCellFormatter().setHorizontalAlignment(1, 2, HasHorizontalAlignment.ALIGN_CENTER);
+ panel.add(permTable);
+
+ final HorizontalPanel buttons = new HorizontalPanel();
+ final Button ok = new Button("OK", new ClickHandler() {
+ @Override
+ public void onClick(ClickEvent event) {
+ addPermission();
+ hide();
+ }
+ });
+ buttons.add(ok);
+ buttons.setCellHorizontalAlignment(ok, HasHorizontalAlignment.ALIGN_CENTER);
+ // Create the 'Cancel' button, along with a listener that hides the
+ // dialog
+ // when the button is clicked.
+ final Button cancel = new Button("Cancel", new ClickHandler() {
+ @Override
+ public void onClick(ClickEvent event) {
+ hide();
+ }
+ });
+ buttons.add(cancel);
+ buttons.setCellHorizontalAlignment(cancel, HasHorizontalAlignment.ALIGN_CENTER);
+ buttons.setSpacing(8);
+ buttons.addStyleName("pithos-TabPanelBottom");
+
+ panel.add(buttons);
+ panel.addStyleName("pithos-TabPanelBottom");
+
+ setWidget(panel);
}
private void addPermission() {
- PermissionHolder perm = new PermissionHolder();
+ String selected = null;
if (userAdd) {
- selectedUser = suggestBox.getText();
- for(PermissionHolder p : permList.permissions)
- if (selectedUser.equals(p.getUser())){
- app.displayError("User already has access to the resource");
- return;
- }
- perm.setUser(selectedUser);
+ selected = userBox.getText();
} else {
- String groupId = groupBox.getValue(groupBox.getSelectedIndex());
- GroupResource selected = null;
- for (GroupResource g : groups)
- if (g.getName().equals(groupId))
- selected = g;
- if (selected == null)
- return;
- for(PermissionHolder p : permList.permissions)
- if (selected.getName().equals(p.getGroup())){
- app.displayError("Group already has access to the resource");
- return;
- }
- perm.setGroup(selected.getName());
+ String groupName = groupBox.getValue(groupBox.getSelectedIndex());
+ selected = app.getUsername() + ":" + groupName;
}
+ if (permList.getPermissions().get(selected) != null) {
+ app.displayError((userAdd ? "User " : "Group ") + "already has access to the resource");
+ return;
+ }
boolean readValue = read.getValue();
boolean writeValue = write.getValue();
- boolean modifyValue = modifyACL.getValue();
- perm.setRead(readValue);
- perm.setWrite(writeValue);
- perm.setModifyACL(modifyValue);
- permList.addPermission(perm);
- permList.updateTable();
+ permList.addPermission(selected, readValue, writeValue);
}
@Override
public void center() {
super.center();
if (userAdd)
- suggestBox.setFocus(true);
- }
-
- /**
- * Update the list of suggestions.
- */
- protected void updateSuggestions() {
- String query = selectedUser.substring(0, selectedUser.length()-1);
- GWT.log("Searching for " + query, null);
-
- GetCommand<UserSearchResource> eg = new GetCommand<UserSearchResource>(app, UserSearchResource.class,
- app.getApiPath() + "users/" + URL.encodeComponent(query), false, null) {
-
- @Override
- public void onComplete() {
- suggestBox.hideSuggestionList();
- oracle.clear();
- UserSearchResource s = getResult();
- for (UserResource user : s.getUsers()) {
- GWT.log("Found " + user.getUsername(), null);
- oracle.add(user.getUsername());
- }
- suggestBox.showSuggestionList();
- }
-
- @Override
- public void onError(Throwable t) {
- if(t instanceof RestException)
- app.displayError("Unable to perform search: "+((RestException)t).getHttpStatusText());
- else
- app.displayError("System error while searching for users: "+t.getMessage());
- GWT.log("", t);
- DisplayHelper.log(t.getMessage());
- }
-
- };
- DeferredCommand.addCommand(eg);
+ userBox.setFocus(true);
}
}
import gr.grnet.pithos.web.client.rest.resource.UserResource;
import gr.grnet.pithos.web.client.rest.resource.UserSearchResource;
+import java.util.HashMap;
import java.util.HashSet;
+import java.util.Map;
import java.util.Set;
import com.google.gwt.event.dom.client.ClickEvent;
int permissionCount = -1;
- Set<PermissionHolder> permissions = null;
+ Map<String, Boolean[]> permissions = null;
final Images images;
final String owner;
- PermissionHolder toRemove = null;
-
private boolean hasChanges = false;
private boolean hasAddition = false;
private Pithos app;
- public PermissionsList(Pithos _app, final Images theImages, Set<PermissionHolder> thePermissions, String anOwner){
+ public PermissionsList(Pithos _app, final Images theImages, Map<String, Boolean[]> thePermissions, String anOwner){
app = _app;
images = theImages;
owner = anOwner;
- permissions = new HashSet<PermissionHolder>();
- permissions.addAll(thePermissions);
+ permissions = new HashMap<String, Boolean[]>(thePermissions);
permTable.setText(0, 0, "Users/Groups");
permTable.setText(0, 1, "Read");
permTable.setText(0, 2, "Write");
- permTable.setText(0, 3, "Modify Access");
- permTable.setText(0, 4, "");
+ permTable.setText(0, 3, "");
permTable.getFlexCellFormatter().setStyleName(0, 0, "props-toplabels");
permTable.getFlexCellFormatter().setStyleName(0, 1, "props-toplabels");
permTable.getFlexCellFormatter().setStyleName(0, 2, "props-toplabels");
permPanel.add(permTable);
permPanel.addStyleName("pithos-TabPanelBottom");
initWidget(permPanel);
- updateTable();
+ updatePermissionTable();
}
public boolean hasChanges(){
return hasChanges || hasAddition;
}
-
- public void updateTable(){
- copySetAndContinue(permissions);
- }
-
public void updatePermissionsAccordingToInput(){
- int i=1;
- for(PermissionHolder dto : permissions){
- /*if(dto.getId() == null)
- hasChanges =true;*/
- CheckBox r = (CheckBox) permTable.getWidget(i, 1);
- CheckBox w = (CheckBox) permTable.getWidget(i, 2);
- CheckBox m = (CheckBox) permTable.getWidget(i, 3);
-
- r.getElement().setId("permissionList.read");
- w.getElement().setId("permissionList.write");
- m.getElement().setId("permissionList.modify");
-
- if(dto.isRead() != r.getValue() || dto.isWrite() != w.getValue() || dto.isModifyACL() != m.getValue())
- hasChanges = true;
- dto.setRead(r.getValue());
- dto.setWrite(w.getValue());
- dto.setModifyACL(m.getValue());
- i++;
- }
+// int i=1;
+// for(PermissionHolder dto : permissions){
+// /*if(dto.getId() == null)
+// hasChanges =true;*/
+// CheckBox r = (CheckBox) permTable.getWidget(i, 1);
+// CheckBox w = (CheckBox) permTable.getWidget(i, 2);
+//
+//
+// if(dto.isRead() != r.getValue() || dto.isWrite() != w.getValue() || dto.isModifyACL() != m.getValue())
+// hasChanges = true;
+// dto.setRead(r.getValue());
+// dto.setWrite(w.getValue());
+// dto.setModifyACL(m.getValue());
+// i++;
+// }
}
/**
*
* @return the permissions
*/
- public Set<PermissionHolder> getPermissions() {
+ public Map<String, Boolean[]> getPermissions() {
return permissions;
}
- public void addPermission(PermissionHolder permission){
- permissions.add(permission);
+ public void addPermission(String user, boolean read, boolean write){
+ permissions.put(user, new Boolean[] {Boolean.valueOf(read), Boolean.valueOf(write)});
hasAddition = true;
+ updatePermissionTable();
}
- /**
- * Copies the input Set to a new Set
- * @param input
- */
- private void copySetAndContinue(Set<PermissionHolder> input){
- Set<PermissionHolder> copiedInput = new HashSet<PermissionHolder>();
- for(PermissionHolder dto : input) {
- copiedInput.add(dto);
- }
- handleFullNames(copiedInput);
- }
-
- /**
- * Examines whether or not the user's full name exists in the
- * userFullNameMap in the Pithos.java for every element of the input list.
- * If the user's full name does not exist in the map then a request is being made
- * for the specific username.
- *
- */
- private void handleFullNames(Set<PermissionHolder> aPermissions){
- if(aPermissions.isEmpty()){
- showPermissionTable();
- return;
- }
-
- final PermissionHolder dto = aPermissions.iterator().next();
- if(dto.getGroup() != null){
- if(aPermissions.size() >= 1){
- aPermissions.remove(dto);
- handleFullNames(aPermissions);
- }
- }else if(app.findUserFullName(dto.getUser()) != null){
- if(aPermissions.size() >= 1){
- aPermissions.remove(dto);
- handleFullNames(aPermissions);
- }
- }else{
- findFullNameAndUpdate(aPermissions);
- }
- }
-
+
/**
* Shows the permission table
*
*/
- private void showPermissionTable(){
+ void updatePermissionTable(){
int i = 1;
- if(toRemove != null){
- permissions.remove(toRemove);
- toRemove = null;
- }
- for(final PermissionHolder dto : permissions){
+ for (int j=1; j<permTable.getRowCount(); j++)
+ permTable.removeRow(j);
+ for(final String user : permissions.keySet()) {
PushButton removeButton = new PushButton(AbstractImagePrototype.create(images.delete()).createImage(), new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
- toRemove = dto;
- updateTable();
+ permissions.remove(user);
+ updatePermissionTable();
hasChanges = true;
}
});
-
- if(dto.getUser() != null){
- if(dto.getUser() != null && dto.getUser().equals(owner)){
- permTable.setHTML(i, 0, "<span id=permissionList.Owner>" + AbstractImagePrototype.create(images.permUser()).getHTML() + " Owner</span>");
- removeButton.setVisible(false);
- }else{
- permTable.setHTML(i, 0, "<span id=permissionList."+ app.findUserFullName(dto.getUser())+">"+ AbstractImagePrototype.create(images.permUser()).getHTML() + " "+ app.findUserFullName(dto.getUser()) + "</span>");
- }
- }else if(dto.getGroup() != null){
- permTable.setHTML(i, 0, "<span id=permissionList."+dto.getGroup()+">" + AbstractImagePrototype.create(images.permGroup()).getHTML() + " "+ dto.getGroup() + "</span>");
- }
-
+ if (user.equals(owner)) {
+ permTable.setHTML(i, 0, "<span>" + AbstractImagePrototype.create(images.permUser()).getHTML() + " Owner</span>");
+ removeButton.setVisible(false);
+ }
+ else if (!user.contains(":")) //not a group
+ permTable.setHTML(i, 0, "<span>" + AbstractImagePrototype.create(images.permUser()).getHTML() + " " + user + "</span>");
+ else
+ permTable.setHTML(i, 0, "<span>" + AbstractImagePrototype.create(images.permGroup()).getHTML() + " " + user.split(":")[1].trim() + "</span>");
+
+ Boolean[] userPerms = permissions.get(user);
+ Boolean readP = userPerms[0];
+ Boolean writeP = userPerms[1];
+
CheckBox read = new CheckBox();
- read.setValue(dto.isRead());
- read.getElement().setId("permissionList.read");
-
+ read.setValue(readP != null ? readP : false);
+
CheckBox write = new CheckBox();
- write.setValue(dto.isWrite());
- write.getElement().setId("permissionList.write");
-
- CheckBox modify = new CheckBox();
- modify.setValue(dto.isModifyACL());
- modify.getElement().setId("permissionList.modify");
-
- if (dto.getUser()!=null && dto.getUser().equals(owner)) {
- read.setEnabled(false);
- write.setEnabled(false);
- modify.setEnabled(false);
- }
-
+ write.setValue(writeP != null ? writeP : false);
+
permTable.setWidget(i, 1, read);
permTable.setWidget(i, 2, write);
- permTable.setWidget(i, 3, modify);
- permTable.setWidget(i, 4, removeButton);
+ permTable.setWidget(i, 3, removeButton);
permTable.getFlexCellFormatter().setStyleName(i, 0, "props-labels");
permTable.getFlexCellFormatter().setHorizontalAlignment(i, 1, HasHorizontalAlignment.ALIGN_CENTER);
permTable.getFlexCellFormatter().setHorizontalAlignment(i, 2, HasHorizontalAlignment.ALIGN_CENTER);
permTable.getFlexCellFormatter().setHorizontalAlignment(i, 3, HasHorizontalAlignment.ALIGN_CENTER);
- i++;
+ i++;
}
- for(; i<permTable.getRowCount(); i++)
- permTable.removeRow(i);
hasChanges = false;
}
-
- /**
- * Makes a request to search for full name from a given username
- * and continues checking the next element of the Set.
- *
- */
-
- private void findFullNameAndUpdate(final Set<PermissionHolder> aPermissions){
- final PermissionHolder dto = aPermissions.iterator().next();
- String path = app.getApiPath() + "users/" + dto.getUser();
-
- GetCommand<UserSearchResource> gg = new GetCommand<UserSearchResource>(app, UserSearchResource.class, path, false,null) {
- @Override
- public void onComplete() {
- final UserSearchResource result = getResult();
- for (UserResource user : result.getUsers()){
- String username = user.getUsername();
- String userFullName = user.getName();
- app.putUserToMap(username, userFullName);
- if(aPermissions.size() >= 1){
- aPermissions.remove(dto);
- if(aPermissions.isEmpty()){
- showPermissionTable();
- return;
- }
- handleFullNames(aPermissions);
- }
- }
- }
- @Override
- public void onError(Throwable t) {
- app.displayError("Unable to fetch user's full name from the given username " + dto.getUser());
- if(aPermissions.size() >= 1){
- aPermissions.remove(dto);
- if(aPermissions.isEmpty()){
- showPermissionTable();
- return;
- }
- handleFullNames(aPermissions);
- }
- }
- };
- DeferredCommand.addCommand(gg);
-
- }
-
}
private Date currentLogin = null;
+ private List<Group> groups = new ArrayList<Group>();
+
public long getBytesRemaining() {
return bytesRemaining;
}
}
public void populate(String owner, Response response) {
- String header = response.getHeader("X-Account-Container-Count");
- if (header != null)
- numberOfContainers = Long.valueOf(header);
-
- header = response.getHeader("X-Account-Object-Count");
- if (header != null)
- numberOfObjects = Long.valueOf(header);
-
- header = response.getHeader("X-Account-Bytes-Used");
- if (header != null)
- bytesUsed = Long.valueOf(header);
-
- header = response.getHeader("X-Account-Bytes-Remaining");
- if (header != null)
- bytesRemaining = Long.valueOf(header);
-
DateTimeFormat df = DateTimeFormat.getFormat(PredefinedFormat.RFC_2822);
- header = response.getHeader("X-Account-Last-Login");
- if (header != null)
- lastLogin = df.parse(header);
-
- header = response.getHeader("Last-Modified");
- if (header != null)
- lastModified = df.parse(header);
+ for (Header h : response.getHeaders()) {
+ String name = h.getName();
+ if (name.startsWith("X-Account-Group-")) {
+ String groupName = name.substring("X-Account-Group-".length()).trim().toLowerCase();
+ Group g = new Group(groupName);
+ String[] members = h.getValue().split(",");
+ for (String s : members)
+ g.addMember(s.trim());
+ groups.add(g);
+ }
+ else if (name.equals("X-Account-Container-Count")) {
+ numberOfContainers = Long.valueOf(h.getValue());
+ }
+ else if (name.equals("X-Account-Object-Count")) {
+ numberOfObjects = Long.valueOf(h.getValue());
+ }
+ else if (name.equals("X-Account-Bytes-Used")) {
+ bytesUsed = Long.valueOf(h.getValue());
+ }
+ else if (name.equals("X-Account-Bytes-Remaining")) {
+ bytesRemaining = Long.valueOf(h.getValue());
+ }
+ else if (name.equals("X-Account-Last-Login")) {
+ lastLogin = df.parse(h.getValue());
+ }
+ else if (name.equals("Last-Modified")) {
+ lastModified = df.parse(h.getValue());
+ }
+ }
JSONValue json = JSONParser.parseStrict(response.getText());
JSONArray array = json.isArray();
return getSize(bytesRemaining,(1024D * 1024D)) + " MB";
return getSize(bytesRemaining , (1024D * 1024D * 1024D)) + " GB";
}
+
+ public List<Group> getGroups() {
+ return groups;
+ }
}
import com.google.gwt.http.client.Header;
import com.google.gwt.http.client.Response;
-import com.google.gwt.i18n.client.DateTimeFormat;
-import com.google.gwt.i18n.client.DateTimeFormat.PredefinedFormat;
import com.google.gwt.i18n.client.NumberFormat;
import com.google.gwt.json.client.JSONObject;
-import com.google.gwt.json.client.JSONParser;
-import com.google.gwt.json.client.JSONValue;
-import java.io.StringWriter;
-import java.security.Key;
import java.util.Date;
+import java.util.HashMap;
import java.util.HashSet;
+import java.util.Map;
import java.util.Set;
public class File extends Resource {
private String publicUri;
+ private Map<String, Boolean[]> permissions = new HashMap<String, Boolean[]>();
+
+ private String inheritedPermissionsFrom;
+
public String getContentType() {
return contentType;
}
publicUri = unmarshallString(o, "x_object_public");
this.container = container;
+ inheritedPermissionsFrom = unmarshallString(o, "x_object_shared_by");
+ String rawPermissions = unmarshallString(o, "x_object_sharing");
+ if (rawPermissions != null)
+ parsePermissions(rawPermissions);
+
for (String key : o.keySet())
if (key.startsWith("x_object_meta_") && !key.equals("x_object_meta_trash"))
tags.add(key.substring("x_object_meta_".length()).trim().toLowerCase());
}
+ private void parsePermissions(String rawPermissions) {
+ String[] readwrite = rawPermissions.split(";");
+ for (String s : readwrite) {
+ String[] part = s.split("=");
+ String perm = part[0].trim();
+ String[] users = part[1].split(",");
+ for (String u : users) {
+ String user = u.trim();
+ Boolean[] userPerm = permissions.get(u);
+ if (userPerm == null) {
+ userPerm = new Boolean[2];
+ permissions.put(user, userPerm);
+ }
+ if (perm.equals("read")) {
+ userPerm[0] = Boolean.TRUE;
+ }
+ else if (perm.equals("write")) {
+ userPerm[1] = Boolean.TRUE;
+ }
+ }
+ }
+ }
+
public boolean equals(Object other) {
if (other instanceof File) {
File o = (File) other;
String header = h.getName();
if (header.startsWith("X-Object-Meta-") && !header.equals("X-Object-Meta-Trash"))
tags.add(header.substring("X-Object-Meta-".length()).trim().toLowerCase());
-
+ else if (header.equals("X-Object-Sharing")) {
+ String rawPermissions = h.getValue();
+ parsePermissions(rawPermissions);
+ }
+ else if (header.equals("X-Object-Shared-By")) {
+ inheritedPermissionsFrom = h.getValue().trim();
+ }
}
String header = response.getHeader("X-Object-Meta-Trash");
if (header != null)
public String getPublicUri() {
return publicUri;
}
+
+ public Map<String, Boolean[]> getPermissions() {
+ return permissions;
+ }
}
import com.google.gwt.json.client.JSONValue;
import java.util.ArrayList;
import java.util.Date;
+import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.List;
+import java.util.Map;
import java.util.Set;
import java.util.StringTokenizer;
private String owner;
+ private Map<String, Boolean[]> permissions = new HashMap<String, Boolean[]>();
+
+ private String inheritedPermissionsFrom;
+
public Folder() {};
public Folder(String name) {
this.prefix = prefix;
}
+ private void parsePermissions(String rawPermissions) {
+ String[] readwrite = rawPermissions.split(";");
+ for (String s : readwrite) {
+ String[] part = s.split("=");
+ String perm = part[0].trim();
+ String[] users = part[1].split(",");
+ for (String u : users) {
+ String user = u.trim();
+ Boolean[] userPerm = permissions.get(u);
+ if (userPerm == null) {
+ userPerm = new Boolean[2];
+ permissions.put(user, userPerm);
+ }
+ if (perm.equals("read")) {
+ userPerm[0] = Boolean.TRUE;
+ }
+ else if (perm.equals("write")) {
+ userPerm[1] = Boolean.TRUE;
+ }
+ }
+ }
+ }
+
public void populate(String owner, Response response) {
this.owner = owner;
String header = response.getHeader("Last-Modified");
}
}
+ inheritedPermissionsFrom = response.getHeader("X-Object-Shared-By");
+ String rawPermissions = response.getHeader("X-Object-Sharing");
+ if (rawPermissions != null)
+ parsePermissions(rawPermissions);
+
subfolders.clear(); //This is necessary in case we update a pre-existing Folder so that stale subfolders won't show up
files.clear();
JSONValue json = JSONParser.parseStrict(response.getText());
this.owner = owner;
if (o.containsKey("x_object_meta_trash") && o.get("x_object_meta_trash").isString().stringValue().equals("true"))
inTrash = true;
+
+ inheritedPermissionsFrom = unmarshallString(o, "x_object_shared_by");
+ String rawPermissions = unmarshallString(o, "x_object_sharing");
+ if (rawPermissions != null)
+ parsePermissions(rawPermissions);
}
public static Folder createFromResponse(String owner, Response response, Folder result) {
--- /dev/null
+/*
+ * Copyright 2011 GRNET S.A. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or
+ * without modification, are permitted provided that the following
+ * conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials
+ * provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * The views and conclusions contained in the software and
+ * documentation are those of the authors and should not be
+ * interpreted as representing official policies, either expressed
+ * or implied, of GRNET S.A.
+ */
+
+package gr.grnet.pithos.web.client.foldertree;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class Group {
+ private String name;
+
+ private List<String> members = new ArrayList<String>();
+
+ public Group(String _name) {
+ name = _name;
+ }
+
+ public List<String> getMembers() {
+ return members;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void addMember(String user) {
+ members.add(user);
+ }
+}