diff --git a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/MultiDragContactsEditPermissions.java b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/MultiDragContactsEditPermissions.java new file mode 100644 index 0000000..d2517ea --- /dev/null +++ b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/MultiDragContactsEditPermissions.java @@ -0,0 +1,117 @@ +/** + * + */ +package org.gcube.portlets.widgets.workspacesharingwidget.client; + +import java.util.List; + +import org.gcube.portlets.widgets.workspacesharingwidget.client.permissions.MessageBoxAlert; +import org.gcube.portlets.widgets.workspacesharingwidget.client.permissions.PanelTogglePermission; +import org.gcube.portlets.widgets.workspacesharingwidget.shared.InfoContactModel; +import org.gcube.portlets.widgets.workspacesharingwidget.shared.WorkspaceACL; + +import com.extjs.gxt.ui.client.widget.Dialog; +import com.extjs.gxt.ui.client.widget.HorizontalPanel; +import com.google.gwt.user.client.rpc.AsyncCallback; + + +/** + * + * A dialog to drag and edit permissions of a workspace folder + * + * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it + * @Jan 27, 2015 + * + */ +public class MultiDragContactsEditPermissions extends SimpleMultiDragWorkspaceContact{ + + private PanelTogglePermission permission; + private HorizontalPanel hpPermission = new HorizontalPanel(); + private Dialog dialog; + /** + * @param load + * @param workspaceItemId + * @param readGroupsFromHL + * @param readGroupsFromPortal + * @param hiddenMySelf + */ + public MultiDragContactsEditPermissions(LOAD_CONTACTS_AS load, String workspaceItemId, boolean readGroupsFromHL, boolean readGroupsFromPortal, boolean hiddenMySelf) { + super(load, workspaceItemId, readGroupsFromHL, readGroupsFromPortal,hiddenMySelf); + + dialog = super.getMultiDragContact(); + dialog.setHeight(dialog.getHeight()+100); + dialog.mask("Loading"); + //TODO GET ACL FOR USER + WorkspaceSharingController.rpcWorkspaceSharingService.getACLs(new AsyncCallback>() { + + @Override + public void onSuccess(List result) { + permission = new PanelTogglePermission(result); + hpPermission.add(permission); + hpPermission.layout(); + dialog.unmask(); + } + + @Override + public void onFailure(Throwable caught) { + new MessageBoxAlert("Alert", "Sorry, an error occurred on recovering ACLs",null); +// dialog.unmask(); + } + }); + + dialog.add(permission); + } + + public Dialog getDialog() { + return dialog; + } + + /* (non-Javadoc) + * @see org.gcube.portlets.widgets.workspacesharingwidget.client.SimpleMultiDragWorkspaceContact#show() + */ + @Override + public void show() { + dialog.show(); + } + + /** + * The HL ID of the selected ACL + * @return + */ + public String getSelectedAclId(){ + if(permission.getSelectedACL()!=null) + return permission.getSelectedACL().getId(); + + return null; + + } + + /** + * The selected ACL + * @return + */ + public WorkspaceACL getSelectedAcl(){ + if(permission.getSelectedACL()!=null) + return permission.getSelectedACL(); + + return null; + + } + + /** + * + * @return + */ + public List getTargetContacts() { + return super.getTargetContacts(); + } + + /** + * + * @return + */ + public List getTargetContactsWithMyLogin() { + return super.getTargetContactsWithMyLogin(); + } + +} diff --git a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/SimpleMultiDragWorkspaceContact.java b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/SimpleMultiDragWorkspaceContact.java index 22c87c2..3591850 100644 --- a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/SimpleMultiDragWorkspaceContact.java +++ b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/SimpleMultiDragWorkspaceContact.java @@ -200,6 +200,10 @@ public class SimpleMultiDragWorkspaceContact { } }; + /** + * + * @return the multi drag Dialog + */ public Dialog getMultiDragContact() { return multiDragContact; } diff --git a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/permissions/MessageBoxAlert.java b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/permissions/MessageBoxAlert.java new file mode 100644 index 0000000..34b8840 --- /dev/null +++ b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/permissions/MessageBoxAlert.java @@ -0,0 +1,34 @@ +package org.gcube.portlets.widgets.workspacesharingwidget.client.permissions; + +import com.extjs.gxt.ui.client.event.Listener; +import com.extjs.gxt.ui.client.event.MessageBoxEvent; +import com.extjs.gxt.ui.client.widget.MessageBox; + +/** + * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it + * + */ +public class MessageBoxAlert { + + private MessageBox box = null; + + public MessageBoxAlert(String headerTitle, String msg, Listener listener){ + + if(listener==null) + listener = new Listener() { + + @Override + public void handleEvent(MessageBoxEvent be) { + } + }; + + box = MessageBox.alert(headerTitle, msg, listener); + box.show(); + + } + + public MessageBox getMessageBoxInsert() { + return box; + } + +} diff --git a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/permissions/PanelTogglePermission.java b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/permissions/PanelTogglePermission.java new file mode 100644 index 0000000..60af20c --- /dev/null +++ b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/permissions/PanelTogglePermission.java @@ -0,0 +1,106 @@ +package org.gcube.portlets.widgets.workspacesharingwidget.client.permissions; + +import java.util.ArrayList; +import java.util.List; + +import org.gcube.portlets.widgets.workspacesharingwidget.client.resources.GetPermissionIconByACL; +import org.gcube.portlets.widgets.workspacesharingwidget.shared.WorkspaceACL; +import org.gcube.portlets.widgets.workspacesharingwidget.shared.WorkspaceACL.USER_TYPE; + +import com.extjs.gxt.ui.client.Style.ButtonScale; +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.SelectionListener; +import com.extjs.gxt.ui.client.widget.HorizontalPanel; +import com.extjs.gxt.ui.client.widget.LayoutContainer; +import com.extjs.gxt.ui.client.widget.button.ToggleButton; +import com.extjs.gxt.ui.client.widget.tips.ToolTipConfig; +import com.google.gwt.core.shared.GWT; +import com.google.gwt.user.client.ui.AbstractImagePrototype; + +public class PanelTogglePermission extends LayoutContainer { + + protected static final String WORKSPACEACLGROUP = "WORKSPACEACLGROUP"; + + private HorizontalPanel hp = new HorizontalPanel(); + + private WorkspaceACL selectedAcl = null; + + private List toggles; + + public PanelTogglePermission(List acls) { + +// setStyleAttribute("margin-top", "10px"); + setStyleAttribute("margin-bottom", "15px"); + setSize(350, 40); + + hp.mask("Loading ACLs"); + hp.setVerticalAlign(VerticalAlignment.MIDDLE); + hp.setStyleAttribute("padding-left", "35px"); + toggles = new ArrayList(acls.size()); + + for (WorkspaceACL acl : acls) { + if(acl.getUserType().equals(USER_TYPE.OTHER)){ + ToggleButton toggle = createToggle(acl); + toggle.setToggleGroup(WORKSPACEACLGROUP); + toggle.setStyleAttribute("margin-right", "10px"); + toggles.add(toggle); + hp.add(toggle); + } + } + + hp.unmask(); + add(hp); + layout(); + } + + private ToggleButton createToggle(final WorkspaceACL acl) { + + final ToggleButton bToggle = new ToggleButton(acl.getLabel()); + bToggle.setScale(ButtonScale.MEDIUM); + bToggle.setId(acl.getId()); + bToggle.setAllowDepress(false); + bToggle.toggle(acl.getDefaultValue()); + + if(acl.getDefaultValue()) + selectedAcl = acl; + + bToggle.setIconAlign(IconAlign.TOP); + bToggle.addSelectionListener(new SelectionListener() { + + @Override + public void componentSelected(ButtonEvent ce) { + if(bToggle.isPressed()){ + selectedAcl = acl; + } + + } + }); + bToggle.setToolTip(new ToolTipConfig(acl.getDescription())); + AbstractImagePrototype img = GetPermissionIconByACL.getImage(acl); + + if(img!=null) + bToggle.setIcon(img); + + return bToggle; + } + + + public WorkspaceACL getSelectedACL() { + GWT.log("Selected ACL is: "+selectedAcl); + return selectedAcl; + } + + public void selectACL(WorkspaceACL acl){ + for (ToggleButton toogle : toggles) { + GWT.log("Comparing toogle.getId(): "+toogle.getId() +" and acl.getId(): "+acl.getId()); + if(toogle.getId().compareTo(acl.getId())==0){ + GWT.log("Toogle: "+acl); + toogle.toggle(true); + selectedAcl = acl; + return; + } + } + } +} diff --git a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/server/GWTWorkspaceSharingBuilder.java b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/server/GWTWorkspaceSharingBuilder.java index 35dd8ee..93b119a 100644 --- a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/server/GWTWorkspaceSharingBuilder.java +++ b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/server/GWTWorkspaceSharingBuilder.java @@ -316,50 +316,6 @@ public class GWTWorkspaceSharingBuilder { return new InfoContactModel(); } - public List getWorkspaceACLFromACLs(List types) - throws Exception { - - List acls = new ArrayList(); - - for (ACLType acl : types) { - - switch (acl) { - - case ADMINISTRATOR: - // acls.add(new WorkspaceACL(acl.toString(), - // ACL_TYPE.ADMINISTRATOR, "Admin", false, - // USER_TYPE.ADMINISTRATOR, "")); - break; - case READ_ONLY: - acls.add(new WorkspaceACL(acl.toString(), ACL_TYPE.READ_ONLY, - "Read Only", false, USER_TYPE.OTHER, - "Users can read any file but cannot update/delete")); - break; - case WRITE_OWNER: - acls.add(new WorkspaceACL(acl.toString(), ACL_TYPE.WRITE_OWNER, - "Write Own", true, USER_TYPE.OTHER, - "Users can update/delete only their files")); - break; - - case WRITE_ALL: - acls.add(new WorkspaceACL(acl.toString(), ACL_TYPE.WRITE_ANY, - "Write Any", false, USER_TYPE.OTHER, - "Any user can update/delete any file")); - break; - - default: - acls.add(new WorkspaceACL(acl.toString(), ACL_TYPE.WRITE_OWNER, - acl.toString(), false, USER_TYPE.OTHER, "")); - break; - } - } - - if (acls.size() == 0) - throw new Exception("No ACLs rules found!"); - - return acls; - } - protected FileModel buildGXTFileModelItem(WorkspaceItem item, FileModel parentFolderModel) throws Exception { FileModel fileModel = null; @@ -495,4 +451,48 @@ public class GWTWorkspaceSharingBuilder { return fileModel; } + public List getWorkspaceACLFromACLs(List types) + throws Exception { + + List acls = new ArrayList(); + + for (ACLType acl : types) { + + switch (acl) { + + case ADMINISTRATOR: + // acls.add(new WorkspaceACL(acl.toString(), + // ACL_TYPE.ADMINISTRATOR, "Admin", false, + // USER_TYPE.ADMINISTRATOR, "")); + break; + case READ_ONLY: + acls.add(new WorkspaceACL(acl.toString(), ACL_TYPE.READ_ONLY, + "Read Only", false, USER_TYPE.OTHER, + "Users can read any file but cannot update/delete")); + break; + case WRITE_OWNER: + acls.add(new WorkspaceACL(acl.toString(), ACL_TYPE.WRITE_OWNER, + "Write Own", true, USER_TYPE.OTHER, + "Users can update/delete only their files")); + break; + + case WRITE_ALL: + acls.add(new WorkspaceACL(acl.toString(), ACL_TYPE.WRITE_ANY, + "Write Any", false, USER_TYPE.OTHER, + "Any user can update/delete any file")); + break; + + default: +// acls.add(new WorkspaceACL(acl.toString(), ACL_TYPE.WRITE_OWNER, +// acl.toString(), false, USER_TYPE.OTHER, "")); + break; + } + } + + if (acls.size() == 0) + throw new Exception("No ACLs rules found!"); + + return acls; + } + } diff --git a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/server/WorkspaceSharingServiceImpl.java b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/server/WorkspaceSharingServiceImpl.java index 64711af..71aeff0 100644 --- a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/server/WorkspaceSharingServiceImpl.java +++ b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/server/WorkspaceSharingServiceImpl.java @@ -75,7 +75,7 @@ public class WorkspaceSharingServiceImpl extends RemoteServiceServlet implements } protected boolean isTestMode(){ - return WsUtil.withoutPortal; + return !WsUtil.isWithinPortal(); //IS NOT INTO PORTAL } @Override @@ -546,11 +546,6 @@ public class WorkspaceSharingServiceImpl extends RemoteServiceServlet implements return listContactsModel; } - - - - - public static void main(String[] args) { WorkspaceSharingServiceImpl impl = new WorkspaceSharingServiceImpl(); @@ -583,6 +578,8 @@ public class WorkspaceSharingServiceImpl extends RemoteServiceServlet implements e.printStackTrace(); } } + + } diff --git a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/server/util/UserUtil.java b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/server/util/UserUtil.java index a5b546c..ac7cca4 100644 --- a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/server/util/UserUtil.java +++ b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/server/util/UserUtil.java @@ -35,8 +35,8 @@ public class UserUtil { return ""; logger.info("Get user full name for: "+portalLogin); - logger.info("Into portal: "+!WsUtil.withoutPortal); - if (portalLogin.compareTo(WsUtil.TEST_USER) != 0 && !WsUtil.withoutPortal) { //skip test.user + logger.info("Into portal: "+!WsUtil.isWithinPortal()); + if ((portalLogin.compareTo(WsUtil.TEST_USER) != 0) && (WsUtil.isWithinPortal())) { //skip test.user UserModel curr = null; diff --git a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/server/util/WsUtil.java b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/server/util/WsUtil.java index 8e89ade..978a921 100644 --- a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/server/util/WsUtil.java +++ b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/server/util/WsUtil.java @@ -28,6 +28,8 @@ import org.gcube.portlets.widgets.workspacesharingwidget.shared.system.VRE; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.liferay.portal.service.UserLocalServiceUtil; + /** * @@ -62,7 +64,22 @@ public class WsUtil { protected static Logger logger = LoggerFactory.getLogger(WsUtil.class); - public static boolean withoutPortal = false; +// public static boolean withoutPortal = false; + + /** + * + * @return true if you're running into the portal, false if in development + */ + public static boolean isWithinPortal() { + try { + UserLocalServiceUtil.getService(); + return true; + } + catch (Exception ex) { + logger.info("Development Mode ON"); + return false; + } + } public static ASLSession getAslSession(HttpSession httpSession) { @@ -95,13 +112,13 @@ public class WsUtil { //SET HTTP SESSION ATTRIBUTE httpSession.setAttribute(USERNAME_ATTRIBUTE, user); - withoutPortal = true; +// withoutPortal = true; return session; }else if(user.compareToIgnoreCase(TEST_USER)==0){ - withoutPortal = true; +// withoutPortal = true; //COMMENT THIS IN PRODUCTION ENVIROMENT // }else if(user.compareToIgnoreCase("francesco.mangiacrapa")==0){ @@ -110,7 +127,7 @@ public class WsUtil { // END UNCOMMENT }else{ - withoutPortal = false; +// withoutPortal = false; } return SessionManager.getInstance().getASLSession(sessionID, user); diff --git a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/shared/WorkspaceACL.java b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/shared/WorkspaceACL.java index e58acc0..edbb45e 100644 --- a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/shared/WorkspaceACL.java +++ b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/shared/WorkspaceACL.java @@ -31,7 +31,15 @@ public class WorkspaceACL implements Serializable{ public enum USER_TYPE{ADMINISTRATOR, GROUP, OWNER, OTHER}; - + /** + * + * @param serverId + * @param aclType + * @param label + * @param defaultValue + * @param userType + * @param description + */ public WorkspaceACL(String serverId, ACL_TYPE aclType, String label, boolean defaultValue, USER_TYPE userType, String description) { super(); this.id = serverId;