added multi drag edit permissions

updated pom version 

git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/portlets/widgets/workspace-sharing-widget@111495 82a268e6-3cf1-43bd-a215-b396298e98cf
This commit is contained in:
Francesco Mangiacrapa 2015-01-27 14:07:25 +00:00
parent d24ad689a5
commit 87bb5e589d
9 changed files with 340 additions and 57 deletions

View File

@ -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<List<WorkspaceACL>>() {
@Override
public void onSuccess(List<WorkspaceACL> 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<InfoContactModel> getTargetContacts() {
return super.getTargetContacts();
}
/**
*
* @return
*/
public List<InfoContactModel> getTargetContactsWithMyLogin() {
return super.getTargetContactsWithMyLogin();
}
}

View File

@ -200,6 +200,10 @@ public class SimpleMultiDragWorkspaceContact {
}
};
/**
*
* @return the multi drag Dialog
*/
public Dialog getMultiDragContact() {
return multiDragContact;
}

View File

@ -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<MessageBoxEvent> listener){
if(listener==null)
listener = new Listener<MessageBoxEvent>() {
@Override
public void handleEvent(MessageBoxEvent be) {
}
};
box = MessageBox.alert(headerTitle, msg, listener);
box.show();
}
public MessageBox getMessageBoxInsert() {
return box;
}
}

View File

@ -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<ToggleButton> toggles;
public PanelTogglePermission(List<WorkspaceACL> 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<ToggleButton>(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<ButtonEvent>() {
@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;
}
}
}
}

View File

@ -316,50 +316,6 @@ public class GWTWorkspaceSharingBuilder {
return new InfoContactModel();
}
public List<WorkspaceACL> getWorkspaceACLFromACLs(List<ACLType> types)
throws Exception {
List<WorkspaceACL> acls = new ArrayList<WorkspaceACL>();
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<WorkspaceACL> getWorkspaceACLFromACLs(List<ACLType> types)
throws Exception {
List<WorkspaceACL> acls = new ArrayList<WorkspaceACL>();
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;
}
}

View File

@ -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();
}
}
}

View File

@ -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;

View File

@ -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);

View File

@ -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;