X-Git-Url: https://code.grnet.gr/git/pithos-web-client/blobdiff_plain/1e1441bf2aa18ac0dca804a9ce779c134bbda9de..c963be61420007d2177be3feb9fa6b9d568e40ca:/src/gr/grnet/pithos/web/client/PermissionsAddDialog.java diff --git a/src/gr/grnet/pithos/web/client/PermissionsAddDialog.java b/src/gr/grnet/pithos/web/client/PermissionsAddDialog.java index 43914fe..e43b159 100644 --- a/src/gr/grnet/pithos/web/client/PermissionsAddDialog.java +++ b/src/gr/grnet/pithos/web/client/PermissionsAddDialog.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,83 +34,77 @@ */ package gr.grnet.pithos.web.client; -import gr.grnet.pithos.web.client.grouptree.Group; - -import java.util.List; - 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.KeyCodes; import com.google.gwt.regexp.shared.RegExp; 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.CheckBox; -import com.google.gwt.user.client.ui.DialogBox; -import com.google.gwt.user.client.ui.FlexTable; -import com.google.gwt.user.client.ui.HasHorizontalAlignment; -import com.google.gwt.user.client.ui.ListBox; -import com.google.gwt.user.client.ui.RadioButton; -import com.google.gwt.user.client.ui.TextBox; -import com.google.gwt.user.client.ui.VerticalPanel; +import com.google.gwt.user.client.ui.*; +import gr.grnet.pithos.web.client.catalog.UpdateUserCatalogs; +import gr.grnet.pithos.web.client.catalog.UserCatalogs; +import gr.grnet.pithos.web.client.grouptree.Group; + +import java.util.List; public class PermissionsAddDialog extends DialogBox { + final static RegExp EmailValidator = RegExp.compile("^[A-Z0-9._%+-]+@[A-Z0-9.-]+[.][A-Z]{2,4}$", "i"); - private TextBox userBox = new TextBox(); + private TextBox userBox = new TextBox(); - private ListBox groupBox = new ListBox(); + private ListBox groupBox = new ListBox(); - private RadioButton read = new RadioButton("permissions"); + private RadioButton read = new RadioButton("permissions"); - private RadioButton write = new RadioButton("permissions"); + private RadioButton write = new RadioButton("permissions"); - private PermissionsList permList; + private final PermissionsList permList; - boolean userAdd; + private final boolean isUser; - private Pithos app; + private final Pithos app; - public PermissionsAddDialog(Pithos _app, List _groups, PermissionsList _permList, boolean _userAdd) { - app = _app; - userAdd = _userAdd; - permList = _permList; + public PermissionsAddDialog(Pithos app, List groups, PermissionsList permList, boolean isUser) { + this.app = app; + this.isUser = isUser; + this.permList = permList; - Anchor close = new Anchor("close"); - close.addStyleName("close"); - close.addClickHandler(new ClickHandler() { - - @Override - public void onClick(ClickEvent event) { - hide(); - } - }); - setText("Add permission"); - setStyleName("pithos-DialogBox"); + Anchor close = new Anchor("close"); + close.addStyleName("close"); + close.addClickHandler(new ClickHandler() { + @Override + public void onClick(ClickEvent event) { + hide(); + } + }); + final String dialogText = isUser ? Const.TXT_ADD_USER : Const.TXT_ADD_GROUP; + setText(dialogText); + setStyleName("pithos-DialogBox"); final VerticalPanel panel = new VerticalPanel(); panel.add(close); VerticalPanel inner = new VerticalPanel(); - inner.addStyleName("inner"); + inner.addStyleName("inner"); final FlexTable permTable = new FlexTable(); - permTable.setText(0, 0, "Users/Groups"); + permTable.setText(0, 0, isUser ? Const.TXT_USER : Const.TXT_USER); permTable.setText(0, 1, "Read Only"); permTable.setText(0, 2, "Read/Write"); permTable.getFlexCellFormatter().setStyleName(0, 0, "props-toplabels"); permTable.getFlexCellFormatter().setStyleName(0, 1, "props-toplabels"); permTable.getFlexCellFormatter().setStyleName(0, 2, "props-toplabels"); - if (userAdd) { + if(this.isUser) { permTable.setWidget(1, 0, userBox); } else { - for (Group group : _groups) + for(Group group : groups) { groupBox.addItem(group.getName(), group.getName()); + } permTable.setWidget(1, 0, groupBox); } - + read.setValue(true); permTable.setWidget(1, 1, read); permTable.setWidget(1, 2, write); @@ -133,61 +127,98 @@ public class PermissionsAddDialog extends DialogBox { panel.add(inner); panel.setCellHorizontalAlignment(inner, HasHorizontalAlignment.ALIGN_CENTER); - + setWidget(panel); - } + } + + protected void addPermission() { + final boolean readValue = read.getValue(); + final boolean writeValue = write.getValue(); - protected void addPermission() { String selected = null; - if (userAdd) { - selected = userBox.getText().trim(); - RegExp emailValidator = RegExp.compile("^[A-Z0-9._%+-]+@[A-Z0-9.-]+.[A-Z]{2,4}$", "i"); - if (!emailValidator.test(selected)) { - app.displayWarning("Username must be a valid email address"); - return; - } - } else if (groupBox.getSelectedIndex() > -1) { - String groupName = groupBox.getValue(groupBox.getSelectedIndex()); - selected = app.getUsername() + ":" + groupName; - } - if (permList.getPermissions().get(selected) != null) { + if(isUser) { + final String userDisplayName = userBox.getText().trim(); + addUserPermission(userDisplayName, readValue, writeValue); + return; + } + else if(groupBox.getSelectedIndex() > -1) { + String groupName = groupBox.getValue(groupBox.getSelectedIndex()); + selected = app.getUserID() + ":" + groupName; + } + if(permList.getPermissions().get(selected) != null) { return; } - if (selected == null || selected.length() == 0 || selected.equals(app.getUsername() + ":")) { - app.displayWarning("You have to select a username or group"); - return; + if(selected == null || selected.length() == 0 || selected.equals(app.getUserID() + ":")) { + app.displayWarning("You have to select a username or group"); + return; } - boolean readValue = read.getValue(); - boolean writeValue = write.getValue(); - - permList.addPermission(selected, readValue, writeValue); - } - - @Override - protected void onPreviewNativeEvent(NativePreviewEvent preview) { - super.onPreviewNativeEvent(preview); - - NativeEvent evt = preview.getNativeEvent(); - if (evt.getType().equals("keydown")) - // 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: - addPermission(); - hide(); - break; - case KeyCodes.KEY_ESCAPE: - hide(); - break; - } - } - - - @Override - public void center() { - super.center(); - if (userAdd) - userBox.setFocus(true); - } + permList.addPermission(selected, readValue, writeValue); + } + + private boolean alreadyHasPermission(String selected) { + return permList.getPermissions().get(selected) != null; + } + + private void addUserPermission(final String userDisplayName, final boolean readValue, final boolean writeValue) { + if(!EmailValidator.test(userDisplayName)) { + app.displayWarning("Username must be a valid email address"); + return; + } + + // Now get the userID + final String userID = app.getIDForUserDisplayName(userDisplayName); + if(userID != null) { + // Check if already have the permission + if(!alreadyHasPermission(userID)) { + permList.addPermission(userID, readValue, writeValue); + } + } + else { + // Must call server to obtain userID + new UpdateUserCatalogs(app, null, Helpers.toList(userDisplayName)) { + @Override + public void onSuccess(UserCatalogs requestedUserCatalogs, UserCatalogs updatedUserCatalogs) { + final String userID = updatedUserCatalogs.getID(userDisplayName); + if(userID == null) { + Pithos.LOG("PermissionsDialog::addUserPermission(), UpdateUserCatalogs() => Unknown user ", userDisplayName); + app.displayWarning("Unknown user " + userDisplayName); + } + else if(!alreadyHasPermission(userID)) { + permList.addPermission(userID, readValue, writeValue); + } + } + }.scheduleDeferred(); + } + } + + @Override + protected void onPreviewNativeEvent(NativePreviewEvent preview) { + super.onPreviewNativeEvent(preview); + + NativeEvent evt = preview.getNativeEvent(); + if(evt.getType().equals("keydown")) + // 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: + addPermission(); + hide(); + break; + case KeyCodes.KEY_ESCAPE: + hide(); + break; + } + } + } + + + @Override + public void center() { + super.center(); + if(isUser) { + userBox.setFocus(true); + } + } }