enhancements on changing permission

git-svn-id: http://svn.d4science-ii.research-infrastructures.eu/gcube/trunk/portlets/user/workspace-tree-widget@91619 82a268e6-3cf1-43bd-a215-b396298e98cf
This commit is contained in:
Francesco Mangiacrapa 2014-02-14 14:28:35 +00:00
parent 2cd7f839b7
commit 42fbe82dfc
10 changed files with 221 additions and 187 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.3 KiB

After

Width:  |  Height:  |  Size: 831 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

After

Width:  |  Height:  |  Size: 989 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 953 B

View File

@ -201,4 +201,6 @@ public interface GWTWorkspaceService extends RemoteService{
String getMyLogin(); String getMyLogin();
void setACLForVRE(String folderId, String aclType) throws Exception;
} }

View File

@ -179,4 +179,7 @@ public interface GWTWorkspaceServiceAsync {
void getMyLogin(AsyncCallback<String> callback); void getMyLogin(AsyncCallback<String> callback);
void setACLForVRE(String folderId, String aclType,
AsyncCallback<Void> callback);
} }

View File

@ -1,157 +0,0 @@
package org.gcube.portlets.user.workspace.client.view.sharing;
import java.util.ArrayList;
import java.util.List;
import org.gcube.portlets.user.workspace.client.AppControllerExplorer;
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.multisuggest.MultiValuePanel;
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.layout.FormLayout;
import com.google.gwt.event.shared.HandlerManager;
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 UserStore userStore = new UserStore();
private MultiValuePanel suggestPanel = new MultiValuePanel(userStore);
private PanelPermission panelPermission;
private DialogPermission INSTANCE = this;
private List<InfoContactModel> listAlreadyShared = new ArrayList<InfoContactModel>(){
/**
*
*/
private static final long serialVersionUID = 1L;
/**
* Compare Login
*/
@Override
public boolean contains(Object o) {
if(o==null)
return false;
InfoContactModel contact = (InfoContactModel) o;
for (int i = 0; i < listAlreadyShared.size(); i++){
if (contact.getName().compareTo(listAlreadyShared.get(i).getName())==0)
return true;
}
return false;
};
};
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 create a new shared folder
*/
public DialogPermission(String folderParentName, HandlerManager eventBus) {
AppControllerExplorer.rpcWorkspaceService.getACLs(new AsyncCallback<List<WorkspaceACL>>() {
@Override
public void onSuccess(List<WorkspaceACL> result) {
panelPermission = new PanelPermission(result);
INSTANCE.layout(true);
}
@Override
public void onFailure(Throwable caught) {
INSTANCE.add(new Label("Error on recovering ACLs"));
}
});
initLayout(folderParentName);
this.setIcon(Resources.getIconSharedFolder());
setHeading("Set permission to folder: "+folderParentName);
setWidth(widthDialog);
setButtons(Dialog.OKCANCEL);
add(panelPermission);
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) {
if(isValidForm(false))
hide();
}
});
}
/**
*
* @param displayAlert
* @return
*/
public boolean isValidForm(boolean displayAlert){
/*
if(getSharedListUsers().size()==0){
if(displayAlert)
new MessageBoxAlert("Attention", "You must pick at least one user with which share the folder", null);
suggestPanel.boxSetFocus();
return false;
}*/
return true;
}
}

View File

@ -15,10 +15,13 @@ import org.gcube.portlets.user.workspace.shared.WorkspaceACL;
import com.extjs.gxt.ui.client.Style.HorizontalAlignment; import com.extjs.gxt.ui.client.Style.HorizontalAlignment;
import com.extjs.gxt.ui.client.Style.Scroll; import com.extjs.gxt.ui.client.Style.Scroll;
import com.extjs.gxt.ui.client.Style.VerticalAlignment;
import com.extjs.gxt.ui.client.event.ButtonEvent; import com.extjs.gxt.ui.client.event.ButtonEvent;
import com.extjs.gxt.ui.client.event.SelectionListener; import com.extjs.gxt.ui.client.event.SelectionListener;
import com.extjs.gxt.ui.client.widget.Dialog; import com.extjs.gxt.ui.client.widget.Dialog;
import com.extjs.gxt.ui.client.widget.HorizontalPanel;
import com.extjs.gxt.ui.client.widget.LayoutContainer; import com.extjs.gxt.ui.client.widget.LayoutContainer;
import com.extjs.gxt.ui.client.widget.VerticalPanel;
import com.extjs.gxt.ui.client.widget.form.TextArea; import com.extjs.gxt.ui.client.widget.form.TextArea;
import com.extjs.gxt.ui.client.widget.form.TextField; import com.extjs.gxt.ui.client.widget.form.TextField;
import com.extjs.gxt.ui.client.widget.layout.FormLayout; import com.extjs.gxt.ui.client.widget.layout.FormLayout;
@ -46,7 +49,8 @@ public class DialogShareFolder extends Dialog {
private MultiValuePanel suggestPanel = new MultiValuePanel(userStore); private MultiValuePanel suggestPanel = new MultiValuePanel(userStore);
private Button buttonMultiDrag = new Button("Choose Contacts"); private Button buttonMultiDrag = new Button("Choose Contacts");
private TextField<String> txtOwner; private TextField<String> txtOwner;
private PanelPermission permission; private PanelTogglePermission permission;
private HorizontalPanel vpPermission = null;
private List<InfoContactModel> listAlreadyShared = new ArrayList<InfoContactModel>(){ private List<InfoContactModel> listAlreadyShared = new ArrayList<InfoContactModel>(){
@ -140,31 +144,42 @@ public class DialogShareFolder extends Dialog {
if(!folder.isShared()){ //SETTABLE PERMISSION ONLY IF FOLDER IS NOT ALREADY SHARED if(!folder.isShared()){ //SETTABLE PERMISSION ONLY IF FOLDER IS NOT ALREADY SHARED
vpPermission = new HorizontalPanel();
vpPermission.setVerticalAlign(VerticalAlignment.MIDDLE);
Label labelProperty = new Label("Permissions"); Label labelProperty = new Label("Permissions");
// final ToggleButton togglePermission = new ToggleButton("Set Permissions"); // final ToggleButton togglePermission = new ToggleButton("Set Permissions");
flexTable.setWidget(3, 0, labelProperty); // flexTable.setWidget(3, 0, labelProperty);
flexTable.setWidget(3, 1, Resources.getIconLoading().createImage()); // flexTable.setWidget(3, 1, Resources.getIconLoading().createImage());
vpPermission.add(labelProperty);
AppControllerExplorer.rpcWorkspaceService.getACLs(new AsyncCallback<List<WorkspaceACL>>() { AppControllerExplorer.rpcWorkspaceService.getACLs(new AsyncCallback<List<WorkspaceACL>>() {
@Override @Override
public void onSuccess(List<WorkspaceACL> result) { public void onSuccess(List<WorkspaceACL> result) {
permission = new PanelPermission(result); permission = new PanelTogglePermission(result);
flexTable.setWidget(3, 1, permission); // flexTable.setWidget(3, 1, permission);
lc.layout(); // lc.layout();
vpPermission.add(permission);
vpPermission.layout();
layout();
} }
@Override @Override
public void onFailure(Throwable caught) { public void onFailure(Throwable caught) {
flexTable.setWidget(3, 1, new Label("Error on recovering ACLs")); // flexTable.setWidget(3, 1, new Label("Error on recovering ACLs"));
vpPermission.add(new Label("Error on recovering ACLs"));
vpPermission.layout();
layout();
} }
}); });
} }
lc.add(flexTable); lc.add(flexTable);
if(vpPermission!=null)
lc.add(vpPermission);
lc.mask(); lc.mask();
userStore.getListSharedUserByFolderId(folder.getIdentifier(), new AsyncCallback<List<InfoContactModel>>() { userStore.getListSharedUserByFolderId(folder.getIdentifier(), new AsyncCallback<List<InfoContactModel>>() {
@ -301,25 +316,35 @@ public class DialogShareFolder extends Dialog {
flexTable.setWidget(2, 1, textAreaDescription); flexTable.setWidget(2, 1, textAreaDescription);
vpPermission = new HorizontalPanel();
vpPermission.setVerticalAlign(VerticalAlignment.MIDDLE);
Label labelProperty = new Label("Permissions"); Label labelProperty = new Label("Permissions");
// final ToggleButton togglePermission = new ToggleButton("Set Permissions"); // final ToggleButton togglePermission = new ToggleButton("Set Permissions");
flexTable.setWidget(3, 0, labelProperty); // flexTable.setWidget(3, 0, labelProperty);
flexTable.setWidget(3, 1, Resources.getIconLoading().createImage()); // flexTable.setWidget(3, 1, Resources.getIconLoading().createImage());
vpPermission.add(labelProperty);
AppControllerExplorer.rpcWorkspaceService.getACLs(new AsyncCallback<List<WorkspaceACL>>() { AppControllerExplorer.rpcWorkspaceService.getACLs(new AsyncCallback<List<WorkspaceACL>>() {
@Override @Override
public void onSuccess(List<WorkspaceACL> result) { public void onSuccess(List<WorkspaceACL> result) {
permission = new PanelPermission(result); permission = new PanelTogglePermission(result);
flexTable.setWidget(3, 1, permission); // flexTable.setWidget(3, 1, permission);
lc.layout(); // lc.layout();
vpPermission.add(permission);
vpPermission.layout();
layout();
} }
@Override @Override
public void onFailure(Throwable caught) { public void onFailure(Throwable caught) {
flexTable.setWidget(3, 1, new Label("Error on recovering ACLs")); // flexTable.setWidget(3, 1, new Label("Error on recovering ACLs"));
vpPermission.add(new Label("Error on recovering ACLs"));
vpPermission.layout();
layout();
} }
}); });
@ -329,6 +354,7 @@ public class DialogShareFolder extends Dialog {
setFocusWidget(txtName); setFocusWidget(txtName);
add(txtName); add(txtName);
add(lc); add(lc);
addListners(); addListners();
this.show(); this.show();

View File

@ -1,5 +1,6 @@
package org.gcube.portlets.user.workspace.client.view.sharing; package org.gcube.portlets.user.workspace.client.view.sharing;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import org.gcube.portlets.user.workspace.client.resources.Resources; import org.gcube.portlets.user.workspace.client.resources.Resources;
@ -8,6 +9,7 @@ import org.gcube.portlets.user.workspace.shared.WorkspaceACL.USER_TYPE;
import com.extjs.gxt.ui.client.Style.ButtonScale; import com.extjs.gxt.ui.client.Style.ButtonScale;
import com.extjs.gxt.ui.client.Style.IconAlign; import com.extjs.gxt.ui.client.Style.IconAlign;
import com.extjs.gxt.ui.client.Style.VerticalAlignment;
import com.extjs.gxt.ui.client.event.ButtonEvent; import com.extjs.gxt.ui.client.event.ButtonEvent;
import com.extjs.gxt.ui.client.event.SelectionListener; import com.extjs.gxt.ui.client.event.SelectionListener;
import com.extjs.gxt.ui.client.widget.HorizontalPanel; import com.extjs.gxt.ui.client.widget.HorizontalPanel;
@ -27,38 +29,38 @@ public class PanelTogglePermission extends LayoutContainer {
public PanelTogglePermission(List<WorkspaceACL> acls) { public PanelTogglePermission(List<WorkspaceACL> acls) {
setStyleAttribute("margin-top", "10px"); // setStyleAttribute("margin-top", "10px");
setStyleAttribute("margin-bottom", "10px"); setStyleAttribute("margin-bottom", "15px");
setSize(350, 30); setSize(350, 40);
// buttonGroup = new ButtonGroup(acls.size());
// buttonGroup.mask("Loading ACLs");
hp.mask("Loading ACLs"); hp.mask("Loading ACLs");
hp.setVerticalAlign(VerticalAlignment.MIDDLE);
hp.setStyleAttribute("padding-left", "35px");
for (WorkspaceACL acl : acls) { for (WorkspaceACL acl : acls) {
if(acl.getUserType().equals(USER_TYPE.OTHER)){ if(acl.getUserType().equals(USER_TYPE.OTHER)){
ToggleButton toggle = createToggle(acl); ToggleButton toggle = createToggle(acl);
toggle.setToggleGroup(WORKSPACEACLGROUP); toggle.setToggleGroup(WORKSPACEACLGROUP);
toggle.setStyleAttribute("margin-right", "5px"); toggle.setStyleAttribute("margin-right", "10px");
// buttonGroup.add(toggle); // buttonGroup.add(toggle);
// listToogle.add(toggle);
// add(toggle);
hp.add(toggle); hp.add(toggle);
} }
} }
hp.unmask(); hp.unmask();
// buttonGroup.unmask();
add(hp); add(hp);
layout();
} }
private ToggleButton createToggle(final WorkspaceACL acl) { private ToggleButton createToggle(final WorkspaceACL acl) {
final ToggleButton bToggle = new ToggleButton(acl.getLabel()); final ToggleButton bToggle = new ToggleButton(acl.getLabel());
bToggle.setScale(ButtonScale.LARGE); bToggle.setScale(ButtonScale.MEDIUM);
bToggle.setId(acl.getId()); bToggle.setId(acl.getId());
bToggle.toggle(acl.getDefaultValue()); bToggle.toggle(acl.getDefaultValue());
bToggle.setIconAlign(IconAlign.BOTTOM); bToggle.setIconAlign(IconAlign.TOP);
bToggle.addSelectionListener(new SelectionListener<ButtonEvent>() { bToggle.addSelectionListener(new SelectionListener<ButtonEvent>() {
@Override @Override

View File

@ -0,0 +1,121 @@
package org.gcube.portlets.user.workspace.client.view.sharing;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.Panel;
import com.google.gwt.user.client.ui.ToggleButton;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;
/**
*
* @author francesco
*
*/
public class ToggleButtonPanel extends Composite implements HasWidgets, HasClickHandlers {
private List<ClickHandler> handlers = new ArrayList<ClickHandler>();
private final Panel panel;
public ToggleButtonPanel() {
this(new VerticalPanel());
}
public ToggleButtonPanel(Panel panel) {
this.panel = panel;
initWidget(panel);
}
@Override
public void add(Widget w) {
if (w instanceof ToggleButton) {
ToggleButton button = (ToggleButton) w;
button.addClickHandler(handler);
}
panel.add(w);
}
@Override
public void clear() {
panel.clear();
}
@Override
public Iterator<Widget> iterator() {
return panel.iterator();
}
@Override
public boolean remove(Widget w) {
return panel.remove(w);
}
@Override
public void setWidth(String width) {
panel.setWidth(width);
};
@Override
public void setHeight(String height) {
panel.setHeight(height);
}
private ClickHandler handler = new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
Iterator<Widget> itr = panel.iterator();
while (itr.hasNext()) {
Widget w = itr.next();
if (w instanceof ToggleButton) {
ToggleButton button = (ToggleButton) w;
button.setDown(false);
if (event.getSource().equals(button)) {
button.setDown(true);
}
}
}
for (ClickHandler h : handlers) {
h.onClick(event);
}
}
};
@Override
public HandlerRegistration addClickHandler(final ClickHandler handler) {
handlers.add(handler);
return new HandlerRegistration() {
@Override
public void removeHandler() {
handlers.remove(handler);
}
};
}
public ToggleButton getDown(){
Iterator<Widget> it = iterator();
while (it!=null && it.hasNext()) {
Widget w = (Widget) it.next();
if (w instanceof ToggleButton) {
ToggleButton t = (ToggleButton) w;
if(t.isDown())
return t;
}
}
return null;
}
}

View File

@ -2553,4 +2553,41 @@ public class GWTWorkspaceServiceImpl extends RemoteServiceServlet implements GWT
ASLSession asl = WsUtil.getAslSession(this.getThreadLocalRequest().getSession()); ASLSession asl = WsUtil.getAslSession(this.getThreadLocalRequest().getSession());
return asl.getUsername(); return asl.getUsername();
} }
/**
*
* @param folderId
* @param listUserIds
* @param aclType
* @throws Exception
*/
@Override
public void setACLForVRE(String folderId, String aclType) throws Exception{
try {
if(folderId == null)
throw new Exception("Folder id is null");
List<String> listLogins = new ArrayList<String>();
listLogins.add(getMyLogin());
workspaceLogger.trace("Setting ACL for VRE FOLDER id: "+folderId);
workspaceLogger.trace("ACL type is: "+aclType);
Workspace workspace = getWorkspace();
WorkspaceItem wsItem = workspace.getItem(folderId);
if(wsItem.isShared() && (wsItem.getType().equals(WorkspaceItemType.SHARED_FOLDER))){
WorkspaceSharedFolder ite = (WorkspaceSharedFolder) workspace.getItemByPath(wsItem.getPath());
ite.setACL(listLogins, ACLType.valueOf(aclType));
}else
throw new Exception("Source item is not shared or shared folder");
workspaceLogger.trace("Setting ACL completed, retuning");
} catch (Exception e) {
workspaceLogger.error("Error in set ACLs", e);
String error = ConstantsExplorer.SERVER_ERROR +" setting permissions. "+e.getMessage();
throw new Exception(error);
}
}
} }