enhancements on changing permissions

git-svn-id: http://svn.d4science-ii.research-infrastructures.eu/gcube/trunk/portlets/user/workspace@91620 82a268e6-3cf1-43bd-a215-b396298e98cf
This commit is contained in:
Francesco Mangiacrapa 2014-02-14 14:29:04 +00:00
parent 3f83870f01
commit 60426d513d
6 changed files with 314 additions and 0 deletions

View File

@ -71,6 +71,8 @@ import org.gcube.portlets.user.workspace.client.event.SearchTextEvent;
import org.gcube.portlets.user.workspace.client.event.SearchTextEventHandler;
import org.gcube.portlets.user.workspace.client.event.SendMessageEvent;
import org.gcube.portlets.user.workspace.client.event.SendMessageEventHandler;
import org.gcube.portlets.user.workspace.client.event.SettingPermissionEvent;
import org.gcube.portlets.user.workspace.client.event.SettingPermissionEventHandler;
import org.gcube.portlets.user.workspace.client.event.TrashEvent;
import org.gcube.portlets.user.workspace.client.event.TrashEvent.TRASHOPERATION;
import org.gcube.portlets.user.workspace.client.event.TrashEventHandler;
@ -83,6 +85,7 @@ import org.gcube.portlets.user.workspace.client.model.FileModel;
import org.gcube.portlets.user.workspace.client.model.FolderModel;
import org.gcube.portlets.user.workspace.client.model.ScopeModel;
import org.gcube.portlets.user.workspace.client.view.WorskpacePortlet;
import org.gcube.portlets.user.workspace.client.view.dialog.DialogPermission;
import org.gcube.portlets.user.workspace.client.view.panels.GxtBorderLayoutPanel;
import org.gcube.portlets.user.workspace.client.view.panels.GxtItemsPanel;
import org.gcube.portlets.user.workspace.client.view.trash.WindowTrash;
@ -920,6 +923,36 @@ public class AppController implements SubscriberInterface {
loadBreadcrumbByFileModel(loadBreadcrumbEvent.getFileModel(), true);
}
});
eventBus.addHandler(SettingPermissionEvent.TYPE, new SettingPermissionEventHandler() {
@Override
public void onPermissionSetting(SettingPermissionEvent settingPermissionEvent) {
final DialogPermission dialog = settingPermissionEvent.getDialogPermission();
FileModel folder = settingPermissionEvent.getSourceFile();
dialog.mask("Changing permissions");
if(dialog!=null && folder!=null && dialog.getSelectedACL().getId()!=null){
AppControllerExplorer.rpcWorkspaceService.setACLForVRE(folder.getIdentifier(), dialog.getSelectedACL().getId(), new AsyncCallback<Void>() {
@Override
public void onFailure(Throwable caught) {
dialog.hide();
new MessageBoxAlert("Error", "Sorry, an error occurred on setting permission",null);
}
@Override
public void onSuccess(Void result) {
dialog.unmask();
dialog.hide();
new InfoDisplay("Permission updated", "The permissions have been changed correctly");
}
});
}
}
});
}
private void accountingSetItemAsRead(boolean read) {

View File

@ -17,6 +17,7 @@ public class ConstantsPortlet {
public static final String UPLOADFILE = "Upload";
public static final String DOWNLOADITEM = "Download";
public static final String UPLOADARCHIVE = "Upload Archive";
public static final String CHANGEPERMISSION = "Change Permission";
//USED IN HTTP GET AS PARAMETERS
public static final String GET_SEARCH_PARAMETER ="search";

View File

@ -0,0 +1,49 @@
package org.gcube.portlets.user.workspace.client.event;
import org.gcube.portlets.user.workspace.client.model.FileGridModel;
import org.gcube.portlets.user.workspace.client.model.FileModel;
import org.gcube.portlets.user.workspace.client.view.dialog.DialogPermission;
import com.google.gwt.event.shared.GwtEvent;
/**
*
* @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it
*
*/
public class SettingPermissionEvent extends GwtEvent<SettingPermissionEventHandler> {
public static Type<SettingPermissionEventHandler> TYPE = new Type<SettingPermissionEventHandler>();
private FileModel targetFile = null;
private DialogPermission dialogPermission;
public SettingPermissionEvent(FileModel target, DialogPermission dialog) {
this.targetFile = (FileGridModel) target;
this.dialogPermission = dialog;
}
@Override
public Type<SettingPermissionEventHandler> getAssociatedType() {
return TYPE;
}
@Override
protected void dispatch(SettingPermissionEventHandler handler) {
handler.onPermissionSetting(this);
}
public FileModel getSourceFile() {
return targetFile;
}
public DialogPermission getDialogPermission() {
return dialogPermission;
}
public void setDialogPermission(DialogPermission dialogPermission) {
this.dialogPermission = dialogPermission;
}
}

View File

@ -0,0 +1,12 @@
package org.gcube.portlets.user.workspace.client.event;
import com.google.gwt.event.shared.EventHandler;
/**
*
* @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it
*
*/
public interface SettingPermissionEventHandler extends EventHandler {
void onPermissionSetting(SettingPermissionEvent settingPermissionEvent);
}

View File

@ -0,0 +1,188 @@
package org.gcube.portlets.user.workspace.client.view.dialog;
import java.util.List;
import org.gcube.portlets.user.workspace.client.AppController;
import org.gcube.portlets.user.workspace.client.AppControllerExplorer;
import org.gcube.portlets.user.workspace.client.event.SettingPermissionEvent;
import org.gcube.portlets.user.workspace.client.model.FileModel;
import org.gcube.portlets.user.workspace.client.model.InfoContactModel;
import org.gcube.portlets.user.workspace.client.resources.Resources;
import org.gcube.portlets.user.workspace.client.view.sharing.PanelTogglePermission;
import org.gcube.portlets.user.workspace.client.view.windows.MessageBoxAlert;
import org.gcube.portlets.user.workspace.shared.WorkspaceACL;
import com.extjs.gxt.ui.client.Style.HorizontalAlignment;
import com.extjs.gxt.ui.client.Style.Scroll;
import com.extjs.gxt.ui.client.event.ButtonEvent;
import com.extjs.gxt.ui.client.event.SelectionListener;
import com.extjs.gxt.ui.client.widget.Dialog;
import com.extjs.gxt.ui.client.widget.HorizontalPanel;
import com.extjs.gxt.ui.client.widget.layout.FormLayout;
import com.google.gwt.core.shared.GWT;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Label;
/**
* @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it
*
*/
public class DialogPermission extends Dialog {
private int widthDialog = 530;
private FileModel parentFolder = null;
private PanelTogglePermission permission;
private HorizontalPanel hpPermission = null;
private FileModel folder;
private DialogPermission INSTANCE = this;
public FileModel getParentFolder() {
return parentFolder;
}
public void initLayout(String folderParentName) {
FormLayout layout = new FormLayout();
layout.setLabelWidth(90);
layout.setDefaultWidth(380);
setLayout(layout);
setModal(true);
setScrollMode(Scroll.AUTOY);
setBodyStyle("padding: 9px; background: none");
setWidth(widthDialog);
setHeight(200);
setResizable(true);
setButtonAlign(HorizontalAlignment.CENTER);
setWidth(widthDialog);
setButtons(Dialog.OKCANCEL);
}
/**
* Use to set permission to VRE Folder
*/
public DialogPermission(FileModel folder) {
this.folder = folder;
Label labelProperty = new Label("Permissions");
hpPermission.add(labelProperty);
hpPermission.mask("Permission Control");
AsyncCallback<InfoContactModel> callcack = new AsyncCallback<InfoContactModel>() {
@Override
public void onFailure(Throwable caught) {
new MessageBoxAlert("Alert", "Sorry, an error occurred on recovering ACLs",null);
hpPermission.unmask();
}
@Override
public void onSuccess(InfoContactModel result) {
permissionControl(result.getLogin(), true);
hpPermission.unmask();
}
};
getOwner(folder.getIdentifier(), callcack);
AppControllerExplorer.rpcWorkspaceService.getACLs(new AsyncCallback<List<WorkspaceACL>>() {
@Override
public void onSuccess(List<WorkspaceACL> result) {
permission = new PanelTogglePermission(result);
hpPermission.add(permission);
hpPermission.layout();
layout();
}
@Override
public void onFailure(Throwable caught) {
new MessageBoxAlert("Alert", "Sorry, an error occurred on recovering ACLs",null);
}
});
initLayout(folder.getName());
this.setIcon(Resources.getIconSharedFolder());
setHeading("Set permissions to folder: " + folder.getName());
setWidth(widthDialog);
setButtons(Dialog.OKCANCEL);
add(hpPermission);
addListners();
}
public void addListners() {
this.getButtonById(Dialog.CANCEL).addSelectionListener(
new SelectionListener<ButtonEvent>() {
@Override
public void componentSelected(ButtonEvent ce) {
hide();
}
});
this.getButtonById(Dialog.OK).addSelectionListener(
new SelectionListener<ButtonEvent>() {
@Override
public void componentSelected(ButtonEvent ce) {
AppController.getEventBus().fireEvent(new SettingPermissionEvent(folder, INSTANCE));
// hide();
}
});
}
private void permissionControl(String owner, boolean showAlert){
GWT.log("DialogPermission control compare between owner: "+owner +" and my login: "+AppControllerExplorer.myLogin);
if(AppControllerExplorer.myLogin.compareToIgnoreCase(owner)!=0){
enableFormDialog(false);
if(showAlert)
new MessageBoxAlert("Permission denied", "You have no permissions to change sharing. You are not owner of \""+folder.getName()+"\"", null);
}else{
enableFormDialog(true);
}
}
private void enableFormDialog(boolean bool){
getButtonById(Dialog.OK).setEnabled(bool);
if(permission!=null)
permission.setEnabled(bool);
}
public void getOwner(final String sharedFolderId,final AsyncCallback<InfoContactModel> callback) {
AppControllerExplorer.rpcWorkspaceService.getOwnerByItemId(sharedFolderId, new AsyncCallback<InfoContactModel>() {
@Override
public void onFailure(Throwable caught) {
GWT.log("an error occured in get Owner by Id "+sharedFolderId + " "+caught.getMessage());
new MessageBoxAlert("Alert", "Sorry, an error occurred on owner property",null);
}
@Override
public void onSuccess(InfoContactModel result) {
callback.onSuccess(result);
}
});
}
public WorkspaceACL getSelectedACL(){
if(permission!=null)
return permission.getSelectedACL();
return null;
}
}

View File

@ -25,6 +25,7 @@ import org.gcube.portlets.user.workspace.client.interfaces.GXTFolderItemTypeEnum
import org.gcube.portlets.user.workspace.client.model.FileGridModel;
import org.gcube.portlets.user.workspace.client.model.FileModel;
import org.gcube.portlets.user.workspace.client.resources.Resources;
import org.gcube.portlets.user.workspace.client.view.dialog.DialogPermission;
import org.gcube.portlets.user.workspace.client.view.grids.GxtGridFilterGroupPanel;
import org.gcube.portlets.user.workspace.client.view.tree.CutCopyAndPaste;
import org.gcube.portlets.user.workspace.client.view.tree.CutCopyAndPaste.OperationType;
@ -68,6 +69,7 @@ public class GxtToolBarItemFunctionality {
private Button btnCopyItem;
private Button btnPasteItem;
private Button btnCutItem;
private Button btnSetPermission;
public GxtToolBarItemFunctionality() {
initToolBar();
@ -220,6 +222,14 @@ public class GxtToolBarItemFunctionality {
// toolBar.add(new SeparatorToolItem());
// toolBar.add(new SeparatorToolItem());
btnSetPermission= new Button(ConstantsPortlet.CHANGEPERMISSION,
Resources.getIconWriteAll());
btnSetPermission.setScale(ButtonScale.SMALL);
btnSetPermission.setIconAlign(IconAlign.TOP);
btnSetPermission.setArrowAlign(ButtonArrowAlign.BOTTOM);
toolBar.add(btnSetPermission);
//TODO OLD CODE
toggleGroup = new ToggleButton();
@ -447,6 +457,22 @@ public class GxtToolBarItemFunctionality {
AppController.getEventBus().fireEvent(new FileUploadEvent(null, UploadType.ARCHIVE));
}
});
btnSetPermission.addSelectionListener(new SelectionListener<ButtonEvent>() {
@Override
public void componentSelected(ButtonEvent ce) {
final FileGridModel fileGridModel = gridGroupViewContainer.getSelectedItem();
if(fileGridModel!=null && fileGridModel.isVreFolder()){
DialogPermission dialog = new DialogPermission(fileGridModel);
dialog.show();
}
}
});
btnDownloadFile.addSelectionListener(new SelectionListener<ButtonEvent>() {
@ -578,6 +604,7 @@ public class GxtToolBarItemFunctionality {
this.btnPublicLink.disable();
this.btnGetSharedLink.disable();
this.btnOpen.enable();
this.btnSetPermission.disable();
if(target!=null){
@ -642,6 +669,7 @@ public class GxtToolBarItemFunctionality {
if(target!=null && target.isVreFolder()){
this.btnRemoveItem.disable();
this.btnRenameItem.disable();
this.btnSetPermission.enable();
}
}
@ -656,6 +684,7 @@ public class GxtToolBarItemFunctionality {
this.btnOpen.disable();
this.btnCopyItem.disable();
this.btnCutItem.disable();
this.btnSetPermission.disable();
// this.btnGetInfo.disable();
// this.btnGetSharedLink.disable();
} else {
@ -665,6 +694,7 @@ public class GxtToolBarItemFunctionality {
this.btnOpen.enable();
this.btnCopyItem.enable();
this.btnCutItem.enable();
this.btnSetPermission.enable();
// this.btnGetInfo.enable();
}
@ -693,6 +723,7 @@ public class GxtToolBarItemFunctionality {
this.btnOpen.setEnabled(!active);
this.btnGetSharedLink.setEnabled(!active);
this.btnPublicLink.setEnabled(!active);
this.btnSetPermission.setEnabled(!active);
//ONLY ENABLED
this.btnRemoveItem.setEnabled(active);