From b9d5ac96220f1535e8dc21bc3d8cab00598f7e31 Mon Sep 17 00:00:00 2001 From: Giancarlo Panichi Date: Fri, 22 Feb 2019 10:14:22 +0000 Subject: [PATCH] ref 13226:StorageHub - Update workspace-sharing-widget to SH https://support.d4science.org/issues/13226 Updated to StorageHub git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/portlets/widgets/workspace-sharing-widget@177215 82a268e6-3cf1-43bd-a215-b396298e98cf --- .classpath | 8 +- .settings/org.eclipse.jdt.core.prefs | 2 +- distro/changelog.xml | 16 +- pom.xml | 19 +- .../client/ConstantsSharing.java | 16 +- .../client/MultiDragConstants.java | 9 +- .../MultiDragContactsEditPermissions.java | 293 ++- .../client/ShowPermissionsDialog.java | 96 + .../SimpleMultiDragWorkspaceContact.java | 208 +- .../client/SmartConstants.java | 13 +- .../client/WorkspaceSharingController.java | 212 +- .../WorkspaceSharingWidgetEntryPoint.java | 145 +- .../WorkspaceSmartSharingController.java | 75 +- .../client/permissions/MessageBoxAlert.java | 2 +- .../resources/GetPermissionIconByACL.java | 4 +- .../client/resources/Icons.java | 18 - .../client/resources/Resources.java | 12 +- .../client/rpc/WorkspaceSharingService.java | 81 +- .../rpc/WorkspaceSharingServiceAsync.java | 85 +- .../client/view/sharing/ContactFetcher.java | 5 +- .../client/view/sharing/DialogShareWItem.java | 356 ++- .../view/sharing/SmartDialogInterface.java | 4 +- .../client/view/sharing/SmartShare.java | 4 +- .../client/view/sharing/UserStore.java | 4 +- .../view/sharing/multisuggest/BulletList.java | 2 +- .../multisuggest/DialogMultiDragContact.java | 28 +- .../view/sharing/multisuggest/ListItem.java | 2 +- .../multisuggest/MultiDragContact.java | 20 +- .../sharing/multisuggest/MultiValuePanel.java | 4 +- .../server/GWTWorkspaceSharingBuilder.java | 618 ++--- .../server/WorkspaceSharingServiceImpl.java | 1980 +++++++++++------ .../notifications/NotificationsProducer.java | 897 ++++---- .../notifications/NotificationsUtil.java | 298 +-- .../notifications/SocialItemFactory.java | 26 + .../server/util/AccessTypeComparator.java | 104 + .../DiffereceBeetweenInfoContactModel.java | 114 +- .../server/util/LoginServiceUtil.java | 69 +- .../server/util/PortalContextInfo.java | 2 +- .../server/util/UserUtil.java | 2 +- .../server/util/WsUtil.java | 63 +- .../shared/ACL_TYPE.java | 4 +- .../shared/AllowAccess.java | 123 + .../shared/CredentialModel.java | 2 +- .../shared/ExtendedWorkspaceACL.java | 69 + .../shared/FileModel.java | 61 +- .../shared/FolderModel.java | 10 +- .../shared/GXTFolderItemTypeEnum.java | 2 +- .../shared/InfoContactModel.java | 2 +- .../shared/ReportAssignmentACL.java | 88 + .../shared/SessionExpiredException.java | 4 +- .../shared/WorkspaceACL.java | 13 +- .../shared/system/VO.java | 25 +- .../shared/system/VRE.java | 12 - .../client/ItemRetrieving.java | 4 +- 54 files changed, 3784 insertions(+), 2551 deletions(-) create mode 100644 src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/ShowPermissionsDialog.java create mode 100644 src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/server/notifications/SocialItemFactory.java create mode 100644 src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/server/util/AccessTypeComparator.java create mode 100644 src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/shared/AllowAccess.java create mode 100644 src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/shared/ExtendedWorkspaceACL.java create mode 100644 src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/shared/ReportAssignmentACL.java diff --git a/.classpath b/.classpath index 642f7b5..46f0ffe 100644 --- a/.classpath +++ b/.classpath @@ -13,13 +13,17 @@ - + + + + + - + diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs index 443e085..b257af7 100644 --- a/.settings/org.eclipse.jdt.core.prefs +++ b/.settings/org.eclipse.jdt.core.prefs @@ -1,6 +1,6 @@ eclipse.preferences.version=1 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 org.eclipse.jdt.core.compiler.compliance=1.7 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error org.eclipse.jdt.core.compiler.problem.enumIdentifier=error diff --git a/distro/changelog.xml b/distro/changelog.xml index fe82dfc..b7119c6 100644 --- a/distro/changelog.xml +++ b/distro/changelog.xml @@ -1,18 +1,19 @@ + + Updated to StorageHub [ticket: #13226] + - [Task 3236] Stylesheet fix - + [Task 3236] Stylesheet fix - Removed ASL Session dependency - + Removed ASL Session dependency - Feature #4128: Migration to Liferay 6.2 - + Feature #4128: Migration to Liferay 6.2 @@ -21,8 +22,7 @@ - Removed portal-framework dependecy from Etics - + Removed portal-framework dependecy from Etics diff --git a/pom.xml b/pom.xml index e0f8339..01ac7fb 100644 --- a/pom.xml +++ b/pom.xml @@ -14,7 +14,7 @@ org.gcube.portlets.widgets workspace-sharing-widget jar - 1.8.3-SNAPSHOT + 1.9.0-SNAPSHOT gCube Workspace Sharing Widget gCube Workspace Sharing Widget allows users to share gCube Workspace items @@ -33,7 +33,7 @@ distro 1.7 - 1.7 + 1.8 UTF-8 UTF-8 @@ -115,17 +115,28 @@ provided + + + org.gcube.common + storagehub-client-library + compile + + + org.gcube.common home-library-jcr - [2.0.0-SNAPSHOT, 3.0.0-SNAPSHOT) provided org.gcube.common home-library - [2.0.0-SNAPSHOT, 3.0.0-SNAPSHOT) + provided + + + org.gcube.common + home-library-model provided diff --git a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/ConstantsSharing.java b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/ConstantsSharing.java index 3b8041f..6895c8d 100644 --- a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/ConstantsSharing.java +++ b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/ConstantsSharing.java @@ -4,21 +4,21 @@ package org.gcube.portlets.widgets.workspacesharingwidget.client; /** - * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it - * @Feb 25, 2014 + * @author Francesco Mangiacrapa Feb 25, 2014 * */ public interface ConstantsSharing { - + public static final String LOADINGSTYLE = "x-mask-loading"; public static final String SERVER_ERROR = "Sorry, an error has occurred on the server when"; public static final String TRY_AGAIN = "Try again"; - - + public static int WIDTH_DIALOG = 530; public static int HEIGHT_DIALOG = 430; - + public static final String PATH_SEPARATOR = "/"; - - public static enum LOAD_CONTACTS_AS{SHARED_USER, ADMINISTRATOR} + + public static enum LOAD_CONTACTS_AS { + SHARED_USER, ADMINISTRATOR + } } diff --git a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/MultiDragConstants.java b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/MultiDragConstants.java index 395c999..25ff144 100644 --- a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/MultiDragConstants.java +++ b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/MultiDragConstants.java @@ -5,15 +5,14 @@ package org.gcube.portlets.widgets.workspacesharingwidget.client; /** * - * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it - * @Sep 22, 2014 + * @author Francesco Mangiacrapa Sep 22, 2014 * - * Defines customizable labels used by MultiDrag Dialog + * Defines customizable labels used by MultiDrag Dialog * - * Sets following parameters to display custom labels into Dialog + * Sets following parameters to display custom labels into Dialog */ public abstract class MultiDragConstants { - + public static String HEADING_DIALOG = "Group dragging contacts"; public static String ALL_CONTACTS_LEFT_LIST = "All Contacts"; public static String SHARE_WITH_RIGHT_LIST = "Share with..."; 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 index a10a24c..1ebbd56 100644 --- a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/MultiDragContactsEditPermissions.java +++ b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/MultiDragContactsEditPermissions.java @@ -27,13 +27,11 @@ import com.extjs.gxt.ui.client.widget.MessageBox; import com.google.gwt.core.shared.GWT; 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 + * @author Francesco Mangiacrapa Jan 27, 2015 * */ public class MultiDragContactsEditPermissions { @@ -41,66 +39,64 @@ public class MultiDragContactsEditPermissions { private PanelTogglePermission permission; private HorizontalPanel hpPermission = new HorizontalPanel(); private Html htmlCurrentPermissions = new Html(); - + private UserStore userStore = new UserStore(); private ConstantsSharing.LOAD_CONTACTS_AS loadContactAs; - private DialogMultiDragContact dialogMultiDragContact = new DialogMultiDragContact(MultiDragConstants.HEADING_DIALOG, MultiDragConstants.ALL_CONTACTS_LEFT_LIST, MultiDragConstants.SHARE_WITH_RIGHT_LIST,false, false); + private DialogMultiDragContact dialogMultiDragContact = new DialogMultiDragContact( + MultiDragConstants.HEADING_DIALOG, MultiDragConstants.ALL_CONTACTS_LEFT_LIST, + MultiDragConstants.SHARE_WITH_RIGHT_LIST, false, false); private List sources = new ArrayList(); private boolean hiddenMySelf; private String workspaceItemId; private String myLogin; private InfoContactModel myContact; + - /** - * - * @param load - * @param workspaceItemId - * @param hiddenMySelf - */ - public MultiDragContactsEditPermissions(ConstantsSharing.LOAD_CONTACTS_AS load, final String workspaceItemId, boolean hiddenMySelf) { + public MultiDragContactsEditPermissions(ConstantsSharing.LOAD_CONTACTS_AS load, final String workspaceItemId, + boolean hiddenMySelf) { initMultiDrag(load, workspaceItemId, hiddenMySelf); - -// dialog = super.getDialogMultiDragContact(); + + // dialog = super.getDialogMultiDragContact(); dialogMultiDragContact.setScrollMode(Scroll.AUTOY); - -// htmlCurrentPermissions.setReadOnly(true); + + // htmlCurrentPermissions.setReadOnly(true); LayoutContainer lcCurrentPermissions = new LayoutContainer(); htmlCurrentPermissions.setWidth(MultiDragContact.WIDTH_CP); - htmlCurrentPermissions.setStyleAttribute("padding", MultiDragContact.PADDING+"px"); + htmlCurrentPermissions.setStyleAttribute("padding", MultiDragContact.PADDING + "px"); lcCurrentPermissions.setScrollMode(Scroll.AUTOY); lcCurrentPermissions.setHeight(50); lcCurrentPermissions.add(htmlCurrentPermissions); lcCurrentPermissions.add(lcCurrentPermissions); - dialogMultiDragContact.getLcTop().add(lcCurrentPermissions); -// dialog.setHeight(dialog.getHeight()+100); + // dialog.setHeight(dialog.getHeight()+100); - WorkspaceSharingController.rpcWorkspaceSharingService.getACLsDescriptionForSharedFolderId(workspaceItemId, new AsyncCallback() { + WorkspaceSharingController.rpcWorkspaceSharingService.getACLsDescriptionForSharedFolderId(workspaceItemId, + new AsyncCallback() { - @Override - public void onFailure(Throwable caught) { - GWT.log("error getACLsDescriptionForSharedFolderId: " +caught.getMessage()); - - } + @Override + public void onFailure(Throwable caught) { + GWT.log("error getACLsDescriptionForSharedFolderId: " + caught.getMessage()); + + } + + @Override + public void onSuccess(String result) { + String msg = "#Current Permissions:
"; + msg += result; + htmlCurrentPermissions.setHtml(msg); + + } + }); - @Override - public void onSuccess(String result) { - String msg = "#Current Permissions:
"; - msg+=result; - htmlCurrentPermissions.setHtml(msg); - - } - }); - enableSubmit(false); -// hpPermission.setStyleAttribute("margin-top", "20px"); + // hpPermission.setStyleAttribute("margin-top", "20px"); hpPermission.setStyleAttribute("margin-left", "165px"); -// Html html = new Html("With Permission : "); -// html.setStyleAttribute("margin-left", "10px"); -// hpPermission.add(html); - - //TODO GET ACL FOR USER + // Html html = new Html("With Permission : "); + // html.setStyleAttribute("margin-left", "10px"); + // hpPermission.add(html); + + // TODO GET ACL FOR USER WorkspaceSharingController.rpcWorkspaceSharingService.getACLs(new AsyncCallback>() { @Override @@ -108,86 +104,93 @@ public class MultiDragContactsEditPermissions { permission = new PanelTogglePermission(result); hpPermission.add(permission); hpPermission.layout(); -// selectAclForFolder(workspaceItemId); + // selectAclForFolder(workspaceItemId); enableSubmit(true); - -// dialog.unmask(); + + // dialog.unmask(); } @Override public void onFailure(Throwable caught) { - new MessageBoxAlert("Alert", "Sorry, an error occurred on recovering ACLs",null); -// dialog.unmask(); + new MessageBoxAlert("Alert", "Sorry, an error occurred on recovering ACLs", null); + // dialog.unmask(); } }); - + dialogMultiDragContact.getLcBottom().add(hpPermission); - + dialogMultiDragContact.addListener(Events.Render, new Listener() { @Override public void handleEvent(BaseEvent be) { - dialogMultiDragContact.setHeight(dialogMultiDragContact.getHeight()+100); + dialogMultiDragContact.setHeight(dialogMultiDragContact.getHeight() + 100); } }); } - public void enableSubmit(boolean bool){ + public void enableSubmit(boolean bool) { dialogMultiDragContact.getButtonById(Dialog.OK).setEnabled(bool); } - + public DialogMultiDragContact getDialog() { return dialogMultiDragContact; - } - + } + /** * The HL ID of the selected ACL - * @return + * + * @return ACL ID */ - public String getSelectedAclID(){ - if(permission.getSelectedACL()!=null) + public String getSelectedAclID() { + if (permission.getSelectedACL() != null) return permission.getSelectedACL().getId(); - + return null; - + } - + /** * The selected ACL - * @return + * + * @return Workspace ACL */ - public WorkspaceACL getSelectedAcl(){ - if(permission.getSelectedACL()!=null) + public WorkspaceACL getSelectedAcl() { + if (permission.getSelectedACL() != null) return permission.getSelectedACL(); - + return null; - + } - + /** * Load administrators or shared users to workspace item id - * @param load - * if LOAD_CONTACTS_AS.SHARED_USER loads source users from Shared Users - * if LOAD_CONTACTS_AS.ADMINISTRATOR loads source users from Administrators + * + * @param load + * if LOAD_CONTACTS_AS.SHARED_USER loads source users from Shared + * Users if LOAD_CONTACTS_AS.ADMINISTRATOR loads source users + * from Administrators * * @param workspaceItemId - * @param hiddenMySelf if true the login read from ASL is hidden (so it's not removable to target users), the login returned anyway among the target users + * @param hiddenMySelf + * if true the login read from ASL is hidden (so it's not + * removable to target users), the login returned anyway among + * the target users */ - private void initMultiDrag(ConstantsSharing.LOAD_CONTACTS_AS load, String workspaceItemId, final boolean hiddenMySelf) { + private void initMultiDrag(ConstantsSharing.LOAD_CONTACTS_AS load, String workspaceItemId, + final boolean hiddenMySelf) { this.loadContactAs = load; this.hiddenMySelf = hiddenMySelf; this.workspaceItemId = workspaceItemId; - - if(hiddenMySelf) + + if (hiddenMySelf) loadMyLogin(true); else loadSharedContacts(); } - - - private void loadMyLogin(final boolean loadContacts){ - - WorkspaceSharingServiceAsync.Util.getInstance().getMyLogin(new AsyncCallback() { + + private void loadMyLogin(final boolean loadContacts) { + + WorkspaceSharingServiceAsync.INSTANCE.getMyLogin(new AsyncCallback() { @Override public void onFailure(Throwable caught) { @@ -198,26 +201,26 @@ public class MultiDragContactsEditPermissions { @Override public void onSuccess(String result) { - GWT.log("My login is: "+result); - myLogin = result; - - if(loadContacts) + GWT.log("My login is: " + result); + myLogin = result; + + if (loadContacts) loadSharedContacts(); } }); } - + /** * Load the target contacts */ - private void loadSharedContacts(){ - + private void loadSharedContacts() { + switch (loadContactAs) { - + case ADMINISTRATOR: - - //LOADING LIST OF ALREADY SHARED USER - userStore.getAdministratorsByFolderId(workspaceItemId, new AsyncCallback>() { + + // LOADING LIST OF ALREADY SHARED USER + userStore.getAdministratorsByFolderId(workspaceItemId, new AsyncCallback>() { @Override public void onFailure(Throwable caught) { @@ -227,96 +230,86 @@ public class MultiDragContactsEditPermissions { @Override public void onSuccess(List result) { - GWT.log("Returned "+result.size()+" admin/s"); + GWT.log("Returned " + result.size() + " admin/s"); fillMultiDrag(result); - + } }); - + break; case SHARED_USER: - //LOADING LIST OF ALREADY SHARED USER - userStore.getListSharedUserByFolderId(workspaceItemId, new AsyncCallback>() { - - @Override - public void onSuccess(List result) { - GWT.log("Returned "+result.size()+" contact/s"); - fillMultiDrag(result); - - } - - @Override - public void onFailure(Throwable caught) { - GWT.log("Error on loading shared contacts"); - MessageBox.alert("Error on shared contacts", caught.getMessage(), null); - - } - }); - + // LOADING LIST OF ALREADY SHARED USER + userStore.getListSharedUserByFolderId(workspaceItemId, new AsyncCallback>() { + + @Override + public void onSuccess(List result) { + GWT.log("Returned " + result.size() + " contact/s"); + fillMultiDrag(result); + + } + + @Override + public void onFailure(Throwable caught) { + GWT.log("Error on loading shared contacts"); + MessageBox.alert("Error on shared contacts", caught.getMessage(), null); + + } + }); + break; default: - + break; } } - - public void addTargetContact(List listContacts){ - if(listContacts!=null){ + + public void addTargetContact(List listContacts) { + if (listContacts != null) { for (InfoContactModel infoContactModel : listContacts) { dialogMultiDragContact.getMultiDrag().addTargetContact(infoContactModel); } } - + } - - /** - * - * @param result - */ - private void fillMultiDrag(List result){ - + + private void fillMultiDrag(List result) { + GWT.log("Filling multi-drag.."); - GWT.log("Hidden my self: "+hiddenMySelf); - + GWT.log("Hidden my self: " + hiddenMySelf); + for (InfoContactModel infoContactModel : result) { - if(infoContactModel.getLogin()!=null){ - if(hiddenMySelf && (infoContactModel.getLogin().compareTo(myLogin)==0)){ - myContact = infoContactModel; - GWT.log("Skipping myLogin as: "+myContact); - }else{ - dialogMultiDragContact.getMultiDrag().addSourceContact(infoContactModel); - sources.add(infoContactModel); - } + if (infoContactModel.getLogin() != null) { + if (hiddenMySelf && (infoContactModel.getLogin().compareTo(myLogin) == 0)) { + myContact = infoContactModel; + GWT.log("Skipping myLogin as: " + myContact); + } else { + dialogMultiDragContact.getMultiDrag().addSourceContact(infoContactModel); + sources.add(infoContactModel); } + } } } - - public void show(){ + + public void show() { dialogMultiDragContact.show(); } - /** - * - * @return - */ - public List getTargetContacts() { + + + public List getTargetContacts() { return dialogMultiDragContact.getMultiDrag().getTargetListContact(); - } - - /** - * - * @return - */ - public List getTargetContactsWithMyLogin() { + } + + public List getTargetContactsWithMyLogin() { List contacts = getTargetContacts(); - - if(myContact == null){ + + if (myContact == null) { GWT.log("TargetContactsWithMyLogin my Contact is null, skipping!"); - }else + } else contacts.add(myContact); - + return contacts; - } - + } + } diff --git a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/ShowPermissionsDialog.java b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/ShowPermissionsDialog.java new file mode 100644 index 0000000..1b88bf9 --- /dev/null +++ b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/ShowPermissionsDialog.java @@ -0,0 +1,96 @@ +package org.gcube.portlets.widgets.workspacesharingwidget.client; + +import org.gcube.portlets.widgets.workspacesharingwidget.client.resources.Resources; +import org.gcube.portlets.widgets.workspacesharingwidget.client.view.sharing.multisuggest.MultiDragContact; + +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.Html; +import com.extjs.gxt.ui.client.widget.LayoutContainer; +import com.google.gwt.core.shared.GWT; +import com.google.gwt.user.client.Random; +import com.google.gwt.user.client.rpc.AsyncCallback; + +public class ShowPermissionsDialog extends Dialog { + + private static final int HEIGHT_DIALOG = 300; + private static final int WIDTH_DIALOG = 600; + private String headTitle; + private String itemId; + private Html htmlCurrentPermissions; + + public ShowPermissionsDialog(String headTitle, String itemId) { + this.headTitle = headTitle; + this.itemId = itemId; + init(); + } + + private void init() { + setId(ShowPermissionsDialog.class.getName() + Random.nextInt()); + setSize(WIDTH_DIALOG, HEIGHT_DIALOG); + setResizable(false); + setMaximizable(false); + setIcon(Resources.getIconUsers()); + setModal(true); + setHeading(headTitle); + + setButtonAlign(HorizontalAlignment.CENTER); + setButtons(Dialog.OKCANCEL); + + this.getButtonById(Dialog.CANCEL).addSelectionListener(new SelectionListener() { + + @Override + public void componentSelected(ButtonEvent ce) { + hide(); + } + }); + + this.getButtonById(Dialog.OK).addSelectionListener(new SelectionListener() { + + @Override + public void componentSelected(ButtonEvent ce) { + hide(); + } + }); + + createCurrentPermissionPanel(); + + } + + void createCurrentPermissionPanel() { + htmlCurrentPermissions = new Html(); + + LayoutContainer lcCurrentPermissions = new LayoutContainer(); + htmlCurrentPermissions.setWidth(MultiDragContact.WIDTH_CP); + htmlCurrentPermissions.setStyleAttribute("padding", MultiDragContact.PADDING + "px"); + lcCurrentPermissions.setScrollMode(Scroll.AUTOY); + lcCurrentPermissions.setHeight(50); + lcCurrentPermissions.add(htmlCurrentPermissions); + + WorkspaceSharingController.rpcWorkspaceSharingService.getACLsDescriptionForSharedFolderId(itemId, + new AsyncCallback() { + + @Override + public void onFailure(Throwable caught) { + GWT.log("error getACLsDescriptionForSharedFolderId: " + caught.getMessage(), caught); + } + + @Override + public void onSuccess(String result) { + String msg = "#Current Permissions:
"; + msg += result; + htmlCurrentPermissions.setHtml(msg); + } + }); + add(lcCurrentPermissions); + + } + + public String getHeadTitle() { + return headTitle; + } + +} \ No newline at end of file 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 def3ba6..49c08d0 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 @@ -16,16 +16,18 @@ import com.google.gwt.core.client.GWT; import com.google.gwt.user.client.rpc.AsyncCallback; /** - * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it - * @Jul 30, 2014 + * @author Francesco Mangiacrapa Jul 30, 2014 * - * A simple multi drag dialog to manage users (shared or administrators) of a workspace item + * A simple multi drag dialog to manage users (shared or administrators) + * of a workspace item */ public class SimpleMultiDragWorkspaceContact { - + private UserStore userStore = new UserStore(); - private ConstantsSharing.LOAD_CONTACTS_AS loadContactAs; - private DialogMultiDragContact dialogMultiDragContact = new DialogMultiDragContact(MultiDragConstants.HEADING_DIALOG, MultiDragConstants.ALL_CONTACTS_LEFT_LIST, MultiDragConstants.SHARE_WITH_RIGHT_LIST,false, false); + private ConstantsSharing.LOAD_CONTACTS_AS loadContactAs; + private DialogMultiDragContact dialogMultiDragContact = new DialogMultiDragContact( + MultiDragConstants.HEADING_DIALOG, MultiDragConstants.ALL_CONTACTS_LEFT_LIST, + MultiDragConstants.SHARE_WITH_RIGHT_LIST, false, false); private List targets = new ArrayList(); private boolean readGroupsFromPortal; private boolean readGroupsFromHL; @@ -33,35 +35,43 @@ public class SimpleMultiDragWorkspaceContact { private String workspaceItemId; private String myLogin; private InfoContactModel myContact; - + /** * Load administrators or shared users to workspace item id - * @param load - * if LOAD_CONTACTS_AS.SHARED_USER loads target users from Shared Users - * if LOAD_CONTACTS_AS.ADMINISTRATOR loads target users from Administrators + * + * @param load + * if LOAD_CONTACTS_AS.SHARED_USER loads target users from Shared + * Users if LOAD_CONTACTS_AS.ADMINISTRATOR loads target users + * from Administrators * * @param workspaceItemId + * Item id * @param readGroupsFromHL + * Groups * @param readGroupsFromPortal - * @param hiddenMySelf if true the login read from ASL is hidden (so it's not removable to target users), the login returned anyway among the target users + * Portal + * @param hiddenMySelf + * if true the login read from ASL is hidden (so it's not + * removable to target users), the login returned anyway among + * the target users */ - public SimpleMultiDragWorkspaceContact(ConstantsSharing.LOAD_CONTACTS_AS load, String workspaceItemId, final boolean readGroupsFromHL, final boolean readGroupsFromPortal, final boolean hiddenMySelf) { + public SimpleMultiDragWorkspaceContact(ConstantsSharing.LOAD_CONTACTS_AS load, String workspaceItemId, + final boolean readGroupsFromHL, final boolean readGroupsFromPortal, final boolean hiddenMySelf) { this.loadContactAs = load; this.readGroupsFromHL = readGroupsFromHL; this.readGroupsFromPortal = readGroupsFromPortal; this.hiddenMySelf = hiddenMySelf; this.workspaceItemId = workspaceItemId; - - if(hiddenMySelf) + + if (hiddenMySelf) loadMyLogin(true); else loadSharedContacts(); } - - - private void loadMyLogin(final boolean loadContacts){ - - WorkspaceSharingServiceAsync.Util.getInstance().getMyLogin(new AsyncCallback() { + + private void loadMyLogin(final boolean loadContacts) { + + WorkspaceSharingServiceAsync.INSTANCE.getMyLogin(new AsyncCallback() { @Override public void onFailure(Throwable caught) { @@ -72,26 +82,26 @@ public class SimpleMultiDragWorkspaceContact { @Override public void onSuccess(String result) { - GWT.log("My login is: "+result); - myLogin = result; - - if(loadContacts) + GWT.log("My login is: " + result); + myLogin = result; + + if (loadContacts) loadSharedContacts(); } }); } - + /** * Load the target contacts */ - private void loadSharedContacts(){ - + private void loadSharedContacts() { + switch (loadContactAs) { - + case ADMINISTRATOR: - - //LOADING LIST OF ALREADY SHARED USER - userStore.getAdministratorsByFolderId(workspaceItemId, new AsyncCallback>() { + + // LOADING LIST OF ALREADY SHARED USER + userStore.getAdministratorsByFolderId(workspaceItemId, new AsyncCallback>() { @Override public void onFailure(Throwable caught) { @@ -101,83 +111,78 @@ public class SimpleMultiDragWorkspaceContact { @Override public void onSuccess(List result) { - GWT.log("Returned "+result.size()+" admin/s"); + GWT.log("Returned " + result.size() + " admin/s"); fillMultiDrag(result); - loadAllContacts(readGroupsFromHL, readGroupsFromPortal); - + loadAllContacts(readGroupsFromHL, readGroupsFromPortal); + } }); - + break; case SHARED_USER: - //LOADING LIST OF ALREADY SHARED USER - userStore.getListSharedUserByFolderId(workspaceItemId, new AsyncCallback>() { - - @Override - public void onSuccess(List result) { - GWT.log("Returned "+result.size()+" contact/s"); - fillMultiDrag(result); - loadAllContacts(readGroupsFromHL, readGroupsFromPortal); - } - - @Override - public void onFailure(Throwable caught) { - GWT.log("Error on loading shared contacts"); - MessageBox.alert("Error on shared contacts", caught.getMessage(), null); - - } - }); - + // LOADING LIST OF ALREADY SHARED USER + userStore.getListSharedUserByFolderId(workspaceItemId, new AsyncCallback>() { + + @Override + public void onSuccess(List result) { + GWT.log("Returned " + result.size() + " contact/s"); + fillMultiDrag(result); + loadAllContacts(readGroupsFromHL, readGroupsFromPortal); + } + + @Override + public void onFailure(Throwable caught) { + GWT.log("Error on loading shared contacts"); + MessageBox.alert("Error on shared contacts", caught.getMessage(), null); + + } + }); + break; default: - + loadAllContacts(readGroupsFromHL, readGroupsFromPortal); break; } } - - public void addTargetContact(List listContacts){ - if(listContacts!=null){ + + public void addTargetContact(List listContacts) { + if (listContacts != null) { for (InfoContactModel infoContactModel : listContacts) { dialogMultiDragContact.getMultiDrag().addTargetContact(infoContactModel); } } - + } + - /** - * - * @param result - */ - private void fillMultiDrag(List result){ - + private void fillMultiDrag(List result) { + GWT.log("Filling multi-drag.."); - GWT.log("Hidden my self: "+hiddenMySelf); - + GWT.log("Hidden my self: " + hiddenMySelf); + for (InfoContactModel infoContactModel : result) { - if(infoContactModel.getLogin()!=null){ - if(hiddenMySelf && (infoContactModel.getLogin().compareTo(myLogin)==0)){ - myContact = infoContactModel; - GWT.log("Skipping myLogin as: "+myContact); - }else{ - dialogMultiDragContact.getMultiDrag().addTargetContact(infoContactModel); - targets.add(infoContactModel); - } + if (infoContactModel.getLogin() != null) { + if (hiddenMySelf && (infoContactModel.getLogin().compareTo(myLogin) == 0)) { + myContact = infoContactModel; + GWT.log("Skipping myLogin as: " + myContact); + } else { + dialogMultiDragContact.getMultiDrag().addTargetContact(infoContactModel); + targets.add(infoContactModel); } + } } } - + /** * Load all contacts - * @param readGroupsFromHL - * @param readGroupsFromPortal */ - private void loadAllContacts(boolean readGroupsFromHL, boolean readGroupsFromPortal){ + private void loadAllContacts(boolean readGroupsFromHL, boolean readGroupsFromPortal) { userStore.getListContact(addSourceContacts, false, readGroupsFromHL, readGroupsFromPortal); } - + private AsyncCallback> addSourceContacts = new AsyncCallback>() { @Override @@ -188,51 +193,44 @@ public class SimpleMultiDragWorkspaceContact { @Override public void onSuccess(List result) { - - List contactTargets = new ArrayList(targets.size()+1); + + List contactTargets = new ArrayList(targets.size() + 1); contactTargets.addAll(targets); - if(result!=null && result.size()>0){ - if(hiddenMySelf) + if (result != null && result.size() > 0) { + if (hiddenMySelf) contactTargets.add(myContact); - + List exclusiveContacts = userStore.getExclusiveContactsFromAllContact(contactTargets); dialogMultiDragContact.getMultiDrag().addSourceContacts(exclusiveContacts); } } }; - + /** * * @return the multi drag DialogMultiDragContact */ public DialogMultiDragContact getDialogMultiDragContact() { return dialogMultiDragContact; - } - - - public void show(){ + } + + public void show() { dialogMultiDragContact.show(); } - /** - * - * @return - */ - public List getTargetContacts() { - return dialogMultiDragContact.getMultiDrag().getTargetListContact(); - } + - /** - * - * @return - */ - public List getTargetContactsWithMyLogin() { + public List getTargetContacts() { + return dialogMultiDragContact.getMultiDrag().getTargetListContact(); + } + + public List getTargetContactsWithMyLogin() { List contacts = getTargetContacts(); - - if(myContact == null){ + + if (myContact == null) { GWT.log("TargetContactsWithMyLogin my Contact is null, skipping!"); - }else + } else contacts.add(myContact); - + return contacts; - } + } } diff --git a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/SmartConstants.java b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/SmartConstants.java index c8df49e..8b7ac74 100644 --- a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/SmartConstants.java +++ b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/SmartConstants.java @@ -4,18 +4,19 @@ package org.gcube.portlets.widgets.workspacesharingwidget.client; /** - * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it - * @Jul 8, 2014 + * @author Francesco Mangiacrapa Jul 8, 2014 * - * Defines customizable labels used by Smart Sharing Dialog + * Defines customizable labels used by Smart Sharing Dialog * - * Sets following parameters to display custom labels into Smart Panel + * Sets following parameters to display custom labels into Smart Panel */ public abstract class SmartConstants { - + public static String ITEM_NAME = "Item Name"; public static String SHARE_WITH_USERS = "Share with users"; - public static String HEADER_TITLE = null; //if null sets the header title for the panel as "Share [Folder Name]" + public static String HEADER_TITLE = null; // if null sets the header title + // for the panel as "Share + // [Folder Name]" public static String ADD_MORE = "Add More"; public static String ERROR_NO_USER_SELECTED = "You must pick at least one user with which share the folder"; diff --git a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/WorkspaceSharingController.java b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/WorkspaceSharingController.java index 04567c4..4649d30 100644 --- a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/WorkspaceSharingController.java +++ b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/WorkspaceSharingController.java @@ -18,13 +18,13 @@ import com.google.gwt.core.client.GWT; import com.google.gwt.user.client.rpc.AsyncCallback; /** - * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it - * @Feb 25, 2014 + * @author Francesco Mangiacrapa Feb 25, 2014 * */ public class WorkspaceSharingController { - public static final WorkspaceSharingServiceAsync rpcWorkspaceSharingService = (WorkspaceSharingServiceAsync) GWT.create(WorkspaceSharingService.class); + public static final WorkspaceSharingServiceAsync rpcWorkspaceSharingService = (WorkspaceSharingServiceAsync) GWT + .create(WorkspaceSharingService.class); private static String myLogin; @@ -33,64 +33,75 @@ public class WorkspaceSharingController { private boolean shareOnlyOwner; private ACL_TYPE defaultPermission; - + private DialogShareWItem sharingDialog = null; - private boolean readGroupsFromHL; - - private boolean readGroupsFromPortal; + // private boolean readGroupsFromHL; + // private boolean readGroupsFromPortal; /** * This controller instancing sharing dialog - * @param itemId workspace item id - * @param if true, only owner can share, otherwise an alert with an error message is displayed - * @param defaultPermission ACL_TYPE default permission, if is null default ACL_TYPE is loaded from server * - * base constructor by default does not retrieve the groups + * @param itemId + * workspace item id + * @param shareOnlyOwner + * true if only owner can share, otherwise an alert with an error + * message is displayed + * @param defaultPermission + * ACL_TYPE default permission, if is null default ACL_TYPE is + * loaded from server + * + * base constructor by default does not retrieve the groups */ public WorkspaceSharingController(String itemId, boolean shareOnlyOwner, ACL_TYPE defaultPermission) { this(itemId, shareOnlyOwner, defaultPermission, false, false); } - + /** * This controller instancing sharing dialog - * @param itemId workspace item id - * @param if true, only owner can share, otherwise an alert with an error message is displayed - * @param defaultPermission ACL_TYPE default permission, if is null default ACL_TYPE is loaded from server - * @param readGroupsFromHL - if true, read group names from HL - * @param readGroupsFromPortal - if true, read group names from Portal (as VRE) + * + * @param itemId + * workspace item id + * @param shareOnlyOwner + * true if only owner can share, otherwise an alert with an error + * message is displayed + * @param defaultPermission + * ACL_TYPE default permission, if is null default ACL_TYPE is + * loaded from server + * @param readGroupsFromHL + * true if read group names from HL + * @param readGroupsFromPortal + * true if read group names from Portal (as VRE) */ - public WorkspaceSharingController(String itemId, boolean shareOnlyOwner, ACL_TYPE defaultPermission, boolean readGroupsFromHL, boolean readGroupsFromPortal) { + public WorkspaceSharingController(String itemId, boolean shareOnlyOwner, ACL_TYPE defaultPermission, + boolean readGroupsFromHL, boolean readGroupsFromPortal) { this.workspaceItemId = itemId; this.shareOnlyOwner = shareOnlyOwner; this.defaultPermission = defaultPermission; - this.readGroupsFromHL = readGroupsFromHL; - this.readGroupsFromPortal = readGroupsFromPortal; - - - if(workspaceItemId==null || workspaceItemId.isEmpty()){ + // this.readGroupsFromHL = readGroupsFromHL; + // this.readGroupsFromPortal = readGroupsFromPortal; + + if (workspaceItemId == null || workspaceItemId.isEmpty()) { MessageBox.alert("Error", "Item id is null or empty", null); return; } - + sharingDialog = new DialogShareWItem(readGroupsFromHL, readGroupsFromPortal); - sharingDialog.setSize(ConstantsSharing.WIDTH_DIALOG+20, ConstantsSharing.HEIGHT_DIALOG+20); + sharingDialog.setSize(ConstantsSharing.WIDTH_DIALOG + 20, ConstantsSharing.HEIGHT_DIALOG + 20); sharingDialog.mask("Loading item information from Workspace", ConstantsSharing.LOADINGSTYLE); - - - - if(shareOnlyOwner){ + + if (shareOnlyOwner) { loadMyLogin(true, true); - }else{ + } else { loadFileModel(true); } - + addListenersSharingDialog(); } - - private void loadFileModel(final boolean showSharingDialog){ - + + private void loadFileModel(final boolean showSharingDialog) { + rpcWorkspaceSharingService.getFileModelByWorkpaceItemId(workspaceItemId, new AsyncCallback() { @Override @@ -102,95 +113,93 @@ public class WorkspaceSharingController { @Override public void onSuccess(FileModel result) { - - if(showSharingDialog) + + if (showSharingDialog) updateSharingDialog(result); } }); } - - - private void addListenersSharingDialog(){ - - - + + private void addListenersSharingDialog() { + sharingDialog.getButtonById(Dialog.OK).addSelectionListener(new SelectionListener() { - + @Override public void componentSelected(ButtonEvent ce) { - - if(sharingDialog.isValidForm(true)){ - + + if (sharingDialog.isValidForm(true)) { + FileModel fileModel = sharingDialog.getFileToShare(); - //create a lowest object to send to server - fileModel = new FileModel(fileModel.getIdentifier(), fileModel.getName(), fileModel.getParentFileModel(), fileModel.isDirectory(), fileModel.isShared()); - + // create a lowest object to send to server + fileModel = new FileModel(fileModel.getIdentifier(), fileModel.getName(), + fileModel.getDescription(), fileModel.getParentFileModel(), fileModel.isDirectory(), + fileModel.isShared()); + fileModel.setDescription(sharingDialog.getDescription()); - //DEBUG + // DEBUG /* - System.out.println("FileModel id "+fileModel.getIdentifier() + " name: "+fileModel.getName() + " parent " + fileModel.getParentFileModel()); - for(InfoContactModel contact:finalDialog.getSharedListUsers() ){ - System.out.println("Share with Contact "+contact) ; - - }*/ + * System.out.println("FileModel id "+fileModel. + * getIdentifier() + " name: "+fileModel.getName() + + * " parent " + fileModel.getParentFileModel()); + * for(InfoContactModel + * contact:finalDialog.getSharedListUsers() ){ + * System.out.println("Share with Contact "+contact) ; + * + * } + */ + + GWT.log("ACL selected is " + sharingDialog.getSelectedACL()); - GWT.log("ACL selected is "+sharingDialog.getSelectedACL()); - - final String itemName = fileModel.getName(); sharingDialog.mask("Sharing and setting permissions", ConstantsSharing.LOADINGSTYLE); - - rpcWorkspaceSharingService.shareFolder(fileModel, sharingDialog.getSharedListUsers(), false, sharingDialog.getSelectedACL(), new AsyncCallback() { - @Override - public void onFailure(Throwable caught) { + rpcWorkspaceSharingService.shareFolder(fileModel.getIdentifier(), fileModel.getName(), + fileModel.getDescription(), + fileModel.getParentFileModel() != null ? fileModel.getParentFileModel().getIdentifier() + : null, + sharingDialog.getSharedListUsers(), false, sharingDialog.getSelectedACL(), + new AsyncCallback() { - if(caught instanceof SessionExpiredException){ - GWT.log("Session expired"); - sharingDialog.hide(); - MessageBox.alert("Alert", "Server session expired", null); - return; - }else - MessageBox.alert("Error", caught.getMessage(), null); - - sharingDialog.unmask(); - } + @Override + public void onFailure(Throwable caught) { - @Override - public void onSuccess(Boolean result) { - if(result){ - MessageBox.info("Info", "The item: "+itemName+" correctly shared", null); - sharingDialog.hide(); - } - sharingDialog.unmask(); - } - }); + if (caught instanceof SessionExpiredException) { + GWT.log("Session expired"); + sharingDialog.hide(); + MessageBox.alert("Alert", "Server session expired", null); + return; + } else + MessageBox.alert("Error", caught.getMessage(), null); + + sharingDialog.unmask(); + } + + @Override + public void onSuccess(Boolean result) { + if (result) { + MessageBox.info("Info", "The item: " + itemName + " correctly shared", null); + sharingDialog.hide(); + } + sharingDialog.unmask(); + } + }); } } - + }); } - - /** - * - * @param fileModel - */ - private void updateSharingDialog(FileModel fileModel){ + + private void updateSharingDialog(FileModel fileModel) { sharingDialog.updateSharingDialog(fileModel, shareOnlyOwner, defaultPermission); sharingDialog.unmask(); -// dialogShareItem.show(); - + // dialogShareItem.show(); + sharingDialog.layout(); } - - /** - * - * @param loadFileModel - * @param showSharingDialog - */ + private void loadMyLogin(final boolean loadFileModel, final boolean showSharingDialog) { rpcWorkspaceSharingService.getMyLogin(new AsyncCallback() { @@ -206,8 +215,8 @@ public class WorkspaceSharingController { public void onSuccess(String result) { GWT.log("My login is: " + result); myLogin = result; - - if(loadFileModel) + + if (loadFileModel) loadFileModel(showSharingDialog); } }); @@ -221,21 +230,14 @@ public class WorkspaceSharingController { return workspaceItemId; } - public boolean isShareOnlyOwner() { return shareOnlyOwner; } - public ACL_TYPE getDefaultPermission() { return defaultPermission; } - - /** - * - * @return gxt 2.2.5 Dialog - */ public Dialog getSharingDialog() { return sharingDialog; } diff --git a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/WorkspaceSharingWidgetEntryPoint.java b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/WorkspaceSharingWidgetEntryPoint.java index 9bd3939..b0548ec 100644 --- a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/WorkspaceSharingWidgetEntryPoint.java +++ b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/WorkspaceSharingWidgetEntryPoint.java @@ -19,88 +19,85 @@ public class WorkspaceSharingWidgetEntryPoint implements EntryPoint { public void onModuleLoad() { try { - - - /*WorkspaceSharingController controller = new WorkspaceSharingController(ITEMID, true, ACL_TYPE.READ_ONLY); - - final Window sharingWindow = controller.getSharingDialog(); - - Button openSharingWindow = new Button("Show Sharing Window", - new ClickHandler() { - public void onClick(ClickEvent event) { - - sharingWindow.show(); - } - }); - - RootPanel.get("workpacesharingwidget").add(openSharingWindow); - - */ - - /*FileModel file = new FileModel("123", "test", false); - WorkspaceSmartSharingController controller = new WorkspaceSmartSharingController(file, null, false, false); - - SmartConstants.HEADER_TITLE = "puppa"; - SmartConstants.ITEM_NAME = "aa"; - - final SmartShare sharingWindow = controller.getSharingDialog(); - Button openSharingWindow = new Button("Show Smart Share Window", - new ClickHandler() { - public void onClick(ClickEvent event) { - - sharingWindow.show(); - } - }); - - RootPanel.get("workpacesharingwidget").add(openSharingWindow); - - sharingWindow.getButtonById(Dialog.OK).addListener(Events.Select, new Listener() { - - @Override - public void handleEvent(BaseEvent be) { - - if(sharingWindow.isValidForm(true)){ - //THAT'S OK - - sharingWindow.getSharedListUsers(); //@return the selected contacts (as InfoContactModel) - - sharingWindow.getSharedListUsersCredential(); //@return the selected contacts (as CredentialModel) - - for (InfoContactModel contact : sharingWindow.getSharedListUsers()) { - System.out.println(contact); - } - - for (CredentialModel credential : sharingWindow.getSharedListUsersCredential()) { - System.out.println(credential); - } - - } - - } - }); + /* + * WorkspaceSharingController controller = new + * WorkspaceSharingController(ITEMID, true, ACL_TYPE.READ_ONLY); + * + * final Window sharingWindow = controller.getSharingDialog(); + * + * Button openSharingWindow = new Button("Show Sharing Window", new + * ClickHandler() { public void onClick(ClickEvent event) { + * + * sharingWindow.show(); } }); + * + * RootPanel.get("workpacesharingwidget").add(openSharingWindow); + * */ - + + /* + * FileModel file = new FileModel("123", "test", false); + * WorkspaceSmartSharingController controller = new + * WorkspaceSmartSharingController(file, null, false, false); + * + * SmartConstants.HEADER_TITLE = "puppa"; SmartConstants.ITEM_NAME = + * "aa"; + * + * final SmartShare sharingWindow = controller.getSharingDialog(); + * Button openSharingWindow = new Button("Show Smart Share Window", + * new ClickHandler() { public void onClick(ClickEvent event) { + * + * sharingWindow.show(); } }); + * + * RootPanel.get("workpacesharingwidget").add(openSharingWindow); + * + * sharingWindow.getButtonById(Dialog.OK).addListener(Events.Select, + * new Listener() { + * + * @Override public void handleEvent(BaseEvent be) { + * + * if(sharingWindow.isValidForm(true)){ //THAT'S OK + * + * sharingWindow.getSharedListUsers(); //@return the selected + * contacts (as InfoContactModel) + * + * sharingWindow.getSharedListUsersCredential(); //@return the + * selected contacts (as CredentialModel) + * + * for (InfoContactModel contact : + * sharingWindow.getSharedListUsers()) { + * System.out.println(contact); } + * + * for (CredentialModel credential : + * sharingWindow.getSharedListUsersCredential()) { + * System.out.println(credential); } + * + * } + * + * } }); + * + */ + showSimpleMultiDrag(); - + } catch (Exception e) { e.printStackTrace(); } } - - private void showSimpleMultiDrag(){ - - final SimpleMultiDragWorkspaceContact multiDragContact = new SimpleMultiDragWorkspaceContact(ConstantsSharing.LOAD_CONTACTS_AS.SHARED_USER, ITEMID, true, false, true); - - Button openSharingWindow = new Button("Show Simple Multi Drag", - new ClickHandler() { - public void onClick(ClickEvent event) { - multiDragContact.getDialogMultiDragContact().show(); - - } - }); - + private void showSimpleMultiDrag() { + + final SimpleMultiDragWorkspaceContact multiDragContact = new SimpleMultiDragWorkspaceContact( + ConstantsSharing.LOAD_CONTACTS_AS.SHARED_USER, ITEMID, true, false, true); + + Button openSharingWindow = new Button("Show Simple Multi Drag", new ClickHandler() { + public void onClick(ClickEvent event) { + + multiDragContact.getDialogMultiDragContact().show(); + + } + }); + RootPanel.get("workpacesharingwidget").add(openSharingWindow); } diff --git a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/WorkspaceSmartSharingController.java b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/WorkspaceSmartSharingController.java index 2378215..a47b9f8 100644 --- a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/WorkspaceSmartSharingController.java +++ b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/WorkspaceSmartSharingController.java @@ -18,13 +18,13 @@ import com.extjs.gxt.ui.client.widget.Dialog; import com.google.gwt.core.client.GWT; /** - * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it - * @Feb 25, 2014 + * @author Francesco Mangiacrapa Feb 25, 2014 * */ public class WorkspaceSmartSharingController { - public static final WorkspaceSharingServiceAsync rpcWorkspaceSharingService = (WorkspaceSharingServiceAsync) GWT.create(WorkspaceSharingService.class); + public static final WorkspaceSharingServiceAsync rpcWorkspaceSharingService = (WorkspaceSharingServiceAsync) GWT + .create(WorkspaceSharingService.class); private SmartShare smartShare = null; @@ -36,13 +36,15 @@ public class WorkspaceSmartSharingController { private boolean readGroupsFromPortal; - /** * - * @param file - a fake file to display the field name ("filename") into dialog - * @param listAlreadySharedContact - list of already shared contacts to show into dialog + * @param file + * - a fake file to display the field name ("filename") into + * dialog + * @param listAlreadySharedContact + * - list of already shared contacts to show into dialog * - * base constructor by default does not retrieve the groups + * base constructor by default does not retrieve the groups * */ public WorkspaceSmartSharingController(FileModel file, List listAlreadySharedContact) { @@ -51,50 +53,59 @@ public class WorkspaceSmartSharingController { /** * - * @param file - a fake file to display the field name ("filename") into dialog - * @param listAlreadySharedContact - list of already shared contacts to show into dialog - * @param readGroupsFromHL - if true, read group names from HL - * @param readGroupsFromPortal - if true, read group names from Portal (as VRE) + * @param file + * - a fake file to display the field name ("filename") into + * dialog + * @param listAlreadySharedContact + * - list of already shared contacts to show into dialog + * @param readGroupsFromHL + * - if true, read group names from HL + * @param readGroupsFromPortal + * - if true, read group names from Portal (as VRE) * */ - public WorkspaceSmartSharingController(FileModel file, List listAlreadySharedContact, boolean readGroupsFromHL, boolean readGroupsFromPortal) { + public WorkspaceSmartSharingController(FileModel file, List listAlreadySharedContact, + boolean readGroupsFromHL, boolean readGroupsFromPortal) { this.listAlreadySharedContact = listAlreadySharedContact; this.fileModel = file; this.readGroupsFromHL = readGroupsFromHL; this.readGroupsFromPortal = readGroupsFromPortal; this.smartShare = new SmartShare(readGroupsFromHL, readGroupsFromPortal); - this.smartShare.setSize(ConstantsSharing.WIDTH_DIALOG+20, ConstantsSharing.HEIGHT_DIALOG-170); + this.smartShare.setSize(ConstantsSharing.WIDTH_DIALOG + 20, ConstantsSharing.HEIGHT_DIALOG - 170); updateSharingDialog(); addListenersSharingDialog(); } - /** * Example of listeners */ - private void addListenersSharingDialog(){ + private void addListenersSharingDialog() { smartShare.getButtonById(Dialog.OK).addListener(Events.Select, new Listener() { @Override public void handleEvent(BaseEvent be) { -// if(smartShare.isValidForm(true)){ -// //THAT'S OK -// -// smartShare.getSharedListUsers(); //@return the selected contacts (as InfoContactModel) -// -// smartShare.getSharedListUsersCredential(); //@return tthe selected contacts (as CredentialModel) -// -// for (InfoContactModel contact : smartShare.getSharedListUsers()) { -// System.out.println(contact); -// } -// -// for (CredentialModel credential : smartShare.getSharedListUsersCredential()) { -// System.out.println(credential); -// } -// -// } + // if(smartShare.isValidForm(true)){ + // //THAT'S OK + // + // smartShare.getSharedListUsers(); //@return the selected + // contacts (as InfoContactModel) + // + // smartShare.getSharedListUsersCredential(); //@return tthe + // selected contacts (as CredentialModel) + // + // for (InfoContactModel contact : + // smartShare.getSharedListUsers()) { + // System.out.println(contact); + // } + // + // for (CredentialModel credential : + // smartShare.getSharedListUsersCredential()) { + // System.out.println(credential); + // } + // + // } } }); @@ -104,7 +115,7 @@ public class WorkspaceSmartSharingController { * * @param fileModel */ - private void updateSharingDialog(){ + private void updateSharingDialog() { smartShare.unmask(); smartShare.updateSharingDialog(fileModel, listAlreadySharedContact); smartShare.layout(); 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 index 34b8840..3a3ff6f 100644 --- 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 @@ -5,7 +5,7 @@ import com.extjs.gxt.ui.client.event.MessageBoxEvent; import com.extjs.gxt.ui.client.widget.MessageBox; /** - * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it + * @author Francesco Mangiacrapa * */ public class MessageBoxAlert { diff --git a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/resources/GetPermissionIconByACL.java b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/resources/GetPermissionIconByACL.java index 5b47932..7e83c6e 100644 --- a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/resources/GetPermissionIconByACL.java +++ b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/resources/GetPermissionIconByACL.java @@ -9,8 +9,8 @@ import com.google.gwt.user.client.ui.AbstractImagePrototype; /** * - * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it - * @Feb 25, 2014 + * @author Francesco Mangiacrapa + * Feb 25, 2014 * */ public class GetPermissionIconByACL { diff --git a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/resources/Icons.java b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/resources/Icons.java index 9e3dc7a..d205227 100644 --- a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/resources/Icons.java +++ b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/resources/Icons.java @@ -26,39 +26,21 @@ public interface Icons extends ClientBundle { @Source("share.png") ImageResource share(); - /** - * @return - */ @Source("shareuser.png") ImageResource user(); - /** - * @return - */ @Source("sharegroup.png") ImageResource group(); - /** - * @return - */ @Source("aoneleft.png") ImageResource selectedLeft(); - /** - * @return - */ @Source("aoneright.png") ImageResource selectedRight(); - /** - * @return - */ @Source("amoreleft.png") ImageResource allLeft(); - /** - * @return - */ @Source("amoreright.png") ImageResource allRight(); } diff --git a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/resources/Resources.java b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/resources/Resources.java index 57006fd..a02fa75 100644 --- a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/resources/Resources.java +++ b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/resources/Resources.java @@ -5,8 +5,7 @@ import com.google.gwt.user.client.ui.AbstractImagePrototype; /** * - * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it - * @Feb 25, 2014 + * @author Francesco Mangiacrapa Feb 25, 2014 * */ public class Resources { @@ -39,23 +38,14 @@ public class Resources { return AbstractImagePrototype.create(ICONS.info()); } - /** - * @return - */ public static AbstractImagePrototype getIconShare() { return AbstractImagePrototype.create(ICONS.share()); } - /** - * @return - */ public static AbstractImagePrototype getIconUser() { return AbstractImagePrototype.create(ICONS.user()); } - /** - * @return - */ public static AbstractImagePrototype getIconGroup() { return AbstractImagePrototype.create(ICONS.group()); } diff --git a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/rpc/WorkspaceSharingService.java b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/rpc/WorkspaceSharingService.java index 733e337..a4150e1 100644 --- a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/rpc/WorkspaceSharingService.java +++ b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/rpc/WorkspaceSharingService.java @@ -2,9 +2,12 @@ package org.gcube.portlets.widgets.workspacesharingwidget.client.rpc; import java.util.List; +import org.gcube.portlets.widgets.workspacesharingwidget.shared.AllowAccess; import org.gcube.portlets.widgets.workspacesharingwidget.shared.CredentialModel; +import org.gcube.portlets.widgets.workspacesharingwidget.shared.ExtendedWorkspaceACL; import org.gcube.portlets.widgets.workspacesharingwidget.shared.FileModel; import org.gcube.portlets.widgets.workspacesharingwidget.shared.InfoContactModel; +import org.gcube.portlets.widgets.workspacesharingwidget.shared.ReportAssignmentACL; import org.gcube.portlets.widgets.workspacesharingwidget.shared.WorkspaceACL; import com.google.gwt.user.client.rpc.RemoteService; @@ -16,76 +19,46 @@ import com.google.gwt.user.client.rpc.RemoteServiceRelativePath; @RemoteServiceRelativePath("workspacesharing") public interface WorkspaceSharingService extends RemoteService { - List getAllContacts(boolean readGroupsFromHL, - boolean readGroupsFromPortal) throws Exception; + AllowAccess accessToFolderLink(String itemId) throws Exception; - /** - * @param folderSharedId - * @return - * @throws Exception - */ - List getListUserSharedByFolderSharedId( - String folderSharedId) throws Exception; + List getAllContacts() throws Exception; + + List getListUserSharedByFolderSharedId(String folderSharedId) throws Exception; - /** - * @param itemId - * @return - * @throws Exception - */ InfoContactModel getOwnerByItemId(String itemId) throws Exception; - /** - * @return - * @throws Exception - */ List getACLs() throws Exception; - /** - * @return - */ - String getMyLogin(); + String getMyLogin() throws Exception; - /** - * @param itemId - * @return - * @throws Exception - */ FileModel getFileModelByWorkpaceItemId(String itemId) throws Exception; - /** - * @return - * @throws Exception - */ boolean isSessionExpired() throws Exception; - /** - * @param folder - * @param listContacts - * @param isNewFolder - * @param acl - * @return - * @throws Exception - */ - boolean shareFolder(FileModel folder, List listContacts, - boolean isNewFolder, WorkspaceACL acl) throws Exception; + boolean shareFolder(String id, String name, String description, String parentId, + List listContacts, boolean isNewFolder, WorkspaceACL acl) throws Exception; - /** - * @param listAlreadySharedContact - * @return - * @throws Exception - */ - List getInfoContactModelsFromCredential(List listAlreadySharedContact) throws Exception; + List getInfoContactModelsFromCredential(List listAlreadySharedContact) + throws Exception; List getAdministratorsByFolderId(String sharedFolderId) throws Exception; WorkspaceACL getACLsForSharedFolderId(String itemID) throws Exception; - /** - * @param folderId - * @return - * @throws Exception - */ - String getACLsDescriptionForSharedFolderId(String folderId) - throws Exception; + String getACLsDescriptionForSharedFolderId(String folderId) throws Exception; + + boolean unSharedFolderByFolderSharedId(String folderId) throws Exception; + + List getUserACLForFolderId(String folderId) throws Exception; + + String getACLsDescriptionForWorkspaceItemById(String workspaceItemId) throws Exception; + + void setACLs(String folderId, List listLogins, String aclType) throws Exception; + + void updateACLForVREbyGroupName(String folderId, String aclType) throws Exception; + + ReportAssignmentACL validateACLToUser(String folderId, List listLogins, String aclType) throws Exception; + + boolean addAdministratorsByFolderId(String itemId, List listContactLogins) throws Exception; } diff --git a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/rpc/WorkspaceSharingServiceAsync.java b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/rpc/WorkspaceSharingServiceAsync.java index c0edf89..a47186a 100644 --- a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/rpc/WorkspaceSharingServiceAsync.java +++ b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/rpc/WorkspaceSharingServiceAsync.java @@ -2,90 +2,63 @@ package org.gcube.portlets.widgets.workspacesharingwidget.client.rpc; import java.util.List; +import org.gcube.portlets.widgets.workspacesharingwidget.shared.AllowAccess; import org.gcube.portlets.widgets.workspacesharingwidget.shared.CredentialModel; +import org.gcube.portlets.widgets.workspacesharingwidget.shared.ExtendedWorkspaceACL; import org.gcube.portlets.widgets.workspacesharingwidget.shared.FileModel; import org.gcube.portlets.widgets.workspacesharingwidget.shared.InfoContactModel; +import org.gcube.portlets.widgets.workspacesharingwidget.shared.ReportAssignmentACL; import org.gcube.portlets.widgets.workspacesharingwidget.shared.WorkspaceACL; import com.google.gwt.core.client.GWT; import com.google.gwt.user.client.rpc.AsyncCallback; -public interface WorkspaceSharingServiceAsync -{ +public interface WorkspaceSharingServiceAsync { - /** - * Utility class to get the RPC Async interface from client-side code - */ - public static final class Util - { - private static WorkspaceSharingServiceAsync instance; + public static WorkspaceSharingServiceAsync INSTANCE = (WorkspaceSharingServiceAsync) GWT + .create(WorkspaceSharingService.class); - public static final WorkspaceSharingServiceAsync getInstance() - { - if ( instance == null ) - { - instance = (WorkspaceSharingServiceAsync) GWT.create( WorkspaceSharingService.class ); - } - return instance; - } + void getAllContacts(AsyncCallback> callback); - private Util() - { - // Utility class should not be instanciated - } - } - - - void getAllContacts(boolean readGroupsFromHL, boolean readGroupsFromPortal, AsyncCallback> callback); - - - void getListUserSharedByFolderSharedId(String folderSharedId, - AsyncCallback> callback); - - - void getOwnerByItemId(String itemId, - AsyncCallback callback); + void getListUserSharedByFolderSharedId(String folderSharedId, AsyncCallback> callback); + void getOwnerByItemId(String itemId, AsyncCallback callback); void getACLs(AsyncCallback> callback); - void getMyLogin(AsyncCallback callback); - - void getFileModelByWorkpaceItemId(String itemId, - AsyncCallback callback); - + void getFileModelByWorkpaceItemId(String itemId, AsyncCallback callback); void isSessionExpired(AsyncCallback callback); + void shareFolder(String id, String name, String description, String parentId, List listContacts, + boolean isNewFolder, WorkspaceACL acl, AsyncCallback callback); - void shareFolder(FileModel folder, List listContacts, - boolean isNewFolder, WorkspaceACL acl, - AsyncCallback callback); - - - void getInfoContactModelsFromCredential( - List listAlreadySharedContact, + void getInfoContactModelsFromCredential(List listAlreadySharedContact, AsyncCallback> callback); - - /** - * @param sharedFolderId - */ void getAdministratorsByFolderId(String sharedFolderId, AsyncCallback> callback); + void getACLsForSharedFolderId(String itemID, AsyncCallback asyncCallback); - /** - * @param itemID - * @param asyncCallback - */ - void getACLsForSharedFolderId(String itemID, - AsyncCallback asyncCallback); + void getACLsDescriptionForSharedFolderId(String folderId, AsyncCallback callback); + void unSharedFolderByFolderSharedId(String folderId, AsyncCallback asyncCallback); - void getACLsDescriptionForSharedFolderId(String folderId, - AsyncCallback callback); + void getUserACLForFolderId(String folderId, AsyncCallback> callback); + void getACLsDescriptionForWorkspaceItemById(String workspaceItemId, AsyncCallback callback); + + void accessToFolderLink(String itemId, AsyncCallback callback); + + void setACLs(String folderId, List listLogins, String aclType, AsyncCallback callback); + + void updateACLForVREbyGroupName(String folderId, String aclType, AsyncCallback callback); + + void validateACLToUser(String folderId, List listLogins, String aclType, + AsyncCallback callback); + + void addAdministratorsByFolderId(String itemId, List listContactLogins, AsyncCallback callback); } diff --git a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/view/sharing/ContactFetcher.java b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/view/sharing/ContactFetcher.java index ddd8c3c..6160ce4 100644 --- a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/view/sharing/ContactFetcher.java +++ b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/view/sharing/ContactFetcher.java @@ -14,10 +14,7 @@ public interface ContactFetcher { public List getExclusiveContactsFromAllContact(List listSharedUser); public void getOwner(String sharedFolderId, AsyncCallback callback); - /** - * @param listAlreadySharedContact - * @param callback - */ + public void getInfoContactModelsFromCredential( List listAlreadySharedContact, AsyncCallback> callback); diff --git a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/view/sharing/DialogShareWItem.java b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/view/sharing/DialogShareWItem.java index 34513e3..4b13133 100644 --- a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/view/sharing/DialogShareWItem.java +++ b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/view/sharing/DialogShareWItem.java @@ -36,13 +36,11 @@ import com.google.gwt.user.client.ui.Label; /** * - * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it - * @Feb 27, 2014 + * @author Francesco Mangiacrapa Feb 27, 2014 * */ public class DialogShareWItem extends Dialog { - private int heightTextArea = 100; private TextField txtName; private TextArea textAreaDescription = new TextArea(); @@ -52,23 +50,18 @@ public class DialogShareWItem extends Dialog { private Button buttonMultiDrag = new Button("Choose Contacts"); private TextField txtOwner; private PanelTogglePermission permission; - private HorizontalPanel hpPermission = null; - private boolean showError = false; + private HorizontalPanel hpPermission = null; + private boolean showError = false; private boolean readGroupsFromHL; private boolean readGroupsFromPortal; - /** - * By DEFAULT DOESN'T READ GROUPS FROM SERVER - */ + /** + * By DEFAULT DOESN'T READ GROUPS FROM SERVER + */ public DialogShareWItem() { this(false, false); } - /** - * - * @param readGroupsFromHL - * @param readGroupsFromPortal - */ public DialogShareWItem(boolean readGroupsFromHL, boolean readGroupsFromPortal) { this.readGroupsFromHL = readGroupsFromHL; this.readGroupsFromPortal = readGroupsFromPortal; @@ -76,108 +69,100 @@ public class DialogShareWItem extends Dialog { initLayout(); } + private List listAlreadyShared = new ArrayList() { - private List listAlreadyShared = new ArrayList(){ - - /** - * - */ private static final long serialVersionUID = 1L; - /** - * Compare Login - */ @Override public boolean contains(Object o) { - if(o==null) + 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; - } + for (int i = 0; i < listAlreadyShared.size(); i++) { + if (contact.getName().compareTo(listAlreadyShared.get(i).getName()) == 0) + return true; + } return false; }; - }; - - /** * Use to modify a shared folder or share an existing folder + * * @param fileModel - * @param type + * FileModel + * @param shareOnlyOwner + * Share only owner + * @param defaultACL + * Default ACL */ - - public void updateSharingDialog(FileModel fileModel, final boolean shareOnlyOwner, final ACL_TYPE defaultACL){ + public void updateSharingDialog(FileModel fileModel, final boolean shareOnlyOwner, final ACL_TYPE defaultACL) { this.fileToShare = fileModel; - String heading = "Share workspace"; - if(fileModel.isDirectory()) - heading+=" folder: "; - else - heading+= " item: "; + String heading = "Share workspace"; + if (fileModel.isDirectory()) + heading += " folder: "; + else + heading += " item: "; - setHeading(heading+fileModel.getName()); + setHeading(heading + fileModel.getName()); - txtName = new TextField(); - txtName.setAllowBlank(false); - txtName.setValue(fileModel.getName()); - txtName.setReadOnly(true); - txtName.setAutoValidate(true); - txtName.setFieldLabel("Folder Name"); + txtName = new TextField(); + txtName.setAllowBlank(false); + txtName.setValue(fileModel.getName()); + txtName.setReadOnly(true); + txtName.setAutoValidate(true); + txtName.setFieldLabel("Folder Name"); - txtOwner = new TextField(); - txtOwner.setAllowBlank(true); - txtOwner.setValue(""); - txtOwner.setReadOnly(true); - txtOwner.setAutoValidate(false); - txtOwner.setFieldLabel("Owner"); + txtOwner = new TextField(); + txtOwner.setAllowBlank(true); + txtOwner.setValue(""); + txtOwner.setReadOnly(true); + txtOwner.setAutoValidate(false); + txtOwner.setFieldLabel("Owner"); - textAreaDescription.setFieldLabel("Description"); - textAreaDescription.setHeight(heightTextArea); - textAreaDescription.setWidth(380); + textAreaDescription.setFieldLabel("Description"); + textAreaDescription.setHeight(heightTextArea); + textAreaDescription.setWidth(380); - textAreaDescription.setValue(fileModel.getDescription()); + textAreaDescription.setValue(fileModel.getDescription()); - final LayoutContainer lc = new LayoutContainer(); - lc.setStyleAttribute("margin-top", "10px"); - lc.setStyleAttribute("margin-bottom", "10px"); - lc.setSize(480, 50); + final LayoutContainer lc = new LayoutContainer(); + lc.setStyleAttribute("margin-top", "10px"); + lc.setStyleAttribute("margin-bottom", "10px"); + lc.setSize(480, 50); - final FlexTable flexTable = new FlexTable(); - flexTable.setStyleName("userssuggest"); - Label labelShareWith = new Label("Share with users"); - flexTable.setWidget(0, 0, labelShareWith); - flexTable.setWidget(0, 1, suggestPanel); + final FlexTable flexTable = new FlexTable(); + flexTable.setStyleName("userssuggest"); + Label labelShareWith = new Label("Share with users"); + flexTable.setWidget(0, 0, labelShareWith); + flexTable.setWidget(0, 1, suggestPanel); - buttonMultiDrag.setStyleName("wizardButton"); + buttonMultiDrag.setStyleName("wizardButton"); + flexTable.setWidget(1, 0, new Label("Add more")); + flexTable.setWidget(1, 1, buttonMultiDrag); - flexTable.setWidget(1, 0, new Label("Add more")); - flexTable.setWidget(1, 1, buttonMultiDrag); + Label labelDescription = new Label("Description"); + flexTable.setWidget(2, 0, labelDescription); + flexTable.setWidget(2, 1, textAreaDescription); - Label labelDescription = new Label("Description"); - flexTable.setWidget(2, 0, labelDescription); - flexTable.setWidget(2, 1, textAreaDescription); - - - hpPermission = new HorizontalPanel(); - hpPermission.setVerticalAlign(VerticalAlignment.MIDDLE); - Label labelProperty = new Label("Permissions"); - hpPermission.add(labelProperty); + hpPermission = new HorizontalPanel(); + hpPermission.setVerticalAlign(VerticalAlignment.MIDDLE); + Label labelProperty = new Label("Permissions"); + hpPermission.add(labelProperty); WorkspaceSharingController.rpcWorkspaceSharingService.getACLs(new AsyncCallback>() { @Override public void onSuccess(List result) { - permission = new PanelTogglePermission(result,defaultACL); + permission = new PanelTogglePermission(result, defaultACL); hpPermission.add(permission); hpPermission.layout(); layout(); @@ -191,134 +176,136 @@ public class DialogShareWItem extends Dialog { } }); + lc.add(flexTable); + if (hpPermission != null) + lc.add(hpPermission); + lc.mask(); - lc.add(flexTable); - if(hpPermission!=null) - lc.add(hpPermission); - lc.mask(); + userStore.getListSharedUserByFolderId(fileModel.getIdentifier(), new AsyncCallback>() { - userStore.getListSharedUserByFolderId(fileModel.getIdentifier(), new AsyncCallback>() { + @Override + public void onSuccess(List result) { - @Override - public void onSuccess(List result) { + for (InfoContactModel infoContactModel : result) { + if (infoContactModel.getName() != null) { + listAlreadyShared.add(infoContactModel); + suggestPanel.addRecipient(infoContactModel.getName(), false); + } + } - for (InfoContactModel infoContactModel : result) { - if(infoContactModel.getName()!=null){ - listAlreadyShared.add(infoContactModel); - suggestPanel.addRecipient(infoContactModel.getName(),false); - } - } - - lc.unmask(); - } - - @Override - public void onFailure(Throwable caught) { - lc.unmask(); - - } - }); - - - userStore.getOwner(fileModel.getIdentifier(), new AsyncCallback() { + lc.unmask(); + } @Override public void onFailure(Throwable caught) { - txtOwner.setValue("Error on retrieving Owner"); + lc.unmask(); + + } + }); + + userStore.getOwner(fileModel.getIdentifier(), new AsyncCallback() { + + @Override + public void onFailure(Throwable caught) { + txtOwner.setValue("Error on retrieving Owner"); } @Override public void onSuccess(InfoContactModel result) { - txtOwner.setValue(result.getName()); + txtOwner.setValue(result.getName()); - if(shareOnlyOwner){ - permissionControl(result.getLogin(), true); - } + if (shareOnlyOwner) { + permissionControl(result.getLogin(), true); + } } }); - setFocusWidget(suggestPanel.getBox()); - add(txtName); - add(txtOwner); + setFocusWidget(suggestPanel.getBox()); + add(txtName); + add(txtOwner); add(lc); addListners(); - if(shareOnlyOwner) - enableFormDialog(false); //FORM IS DISABLED BY DEFAULT + if (shareOnlyOwner) + enableFormDialog(false); // FORM IS DISABLED BY DEFAULT } - private void permissionControl(String owner, boolean showAlert){ - GWT.log("Permission control compare between owner: "+owner +" and my login: "+WorkspaceSharingController.getMyLogin()); + private void permissionControl(String owner, boolean showAlert) { + GWT.log("Permission control compare between owner: " + owner + " and my login: " + + WorkspaceSharingController.getMyLogin()); - if(WorkspaceSharingController.getMyLogin().compareToIgnoreCase(owner)!=0){ + if (WorkspaceSharingController.getMyLogin().compareToIgnoreCase(owner) != 0) { enableFormDialog(false); - if(showAlert){ + if (showAlert) { showError = true; } - }else{ + } else { enableFormDialog(true); } } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see com.extjs.gxt.ui.client.widget.Window#afterShow() */ @Override protected void afterShow() { super.afterShow(); - if(showError){ - MessageBox.alert("Permission denied", "You have no permissions to change sharing. You are not owner of \""+txtName.getValue()+"\"", null); + if (showError) { + MessageBox.alert("Permission denied", + "You have no permissions to change sharing. You are not owner of \"" + txtName.getValue() + "\"", + null); } } - private void enableFormDialog(boolean bool){ - getButtonById(Dialog.OK).setEnabled(bool); - buttonMultiDrag.setEnabled(bool); - textAreaDescription.setEnabled(bool); - if(permission!=null) - permission.setEnabled(bool); + private void enableFormDialog(boolean bool) { + getButtonById(Dialog.OK).setEnabled(bool); + buttonMultiDrag.setEnabled(bool); + textAreaDescription.setEnabled(bool); + if (permission != null) + permission.setEnabled(bool); } - public void setAsError(String message){ + public void setAsError(String message) { enableFormDialog(false); - this.add(new Html("

"+message+"

")); + this.add(new Html( + "

" + message + "

")); this.layout(); } /** * - * @return + * @return File Model */ public FileModel getFileToShare() { return fileToShare; } - public void initLayout(){ + public void initLayout() { FormLayout layout = new FormLayout(); - layout.setLabelWidth(90); - layout.setDefaultWidth(380); - setLayout(layout); - setModal(true); - setScrollMode(Scroll.AUTOY); - setBodyStyle("padding: 9px; background: none"); - setWidth(ConstantsSharing.WIDTH_DIALOG); - setHeight(ConstantsSharing.HEIGHT_DIALOG); - setResizable(true); - setButtonAlign(HorizontalAlignment.CENTER); - setButtons(Dialog.OKCANCEL); + layout.setLabelWidth(90); + layout.setDefaultWidth(380); + setLayout(layout); + setModal(true); + setScrollMode(Scroll.AUTOY); + setBodyStyle("padding: 9px; background: none"); + setWidth(ConstantsSharing.WIDTH_DIALOG); + setHeight(ConstantsSharing.HEIGHT_DIALOG); + setResizable(true); + setButtonAlign(HorizontalAlignment.CENTER); + setButtons(Dialog.OKCANCEL); } - public List getSharedListUsers() { -// printSelectedUser(); + // printSelectedUser(); return suggestPanel.getSelectedUser(); } + public void addListners() { - public void addListners(){ - - this.getButtonById(Dialog.CANCEL).addSelectionListener(new SelectionListener() { + this.getButtonById(Dialog.CANCEL).addSelectionListener(new SelectionListener() { @Override public void componentSelected(ButtonEvent ce) { @@ -326,30 +313,28 @@ public class DialogShareWItem extends Dialog { } }); + /* + * this.getButtonById(Dialog.OK).addSelectionListener(new + * SelectionListener() { + * + * @Override public void componentSelected(ButtonEvent ce) { + * if(isValidForm(true)) hide(); } }); + */ - /*this.getButtonById(Dialog.OK).addSelectionListener(new SelectionListener() { - - @Override - public void componentSelected(ButtonEvent ce) { - if(isValidForm(true)) - hide(); - } - }); - */ - - buttonMultiDrag.addClickHandler(new ClickHandler() { + buttonMultiDrag.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { - final DialogMultiDragContact dialog = new DialogMultiDragContact(true,true); + final DialogMultiDragContact dialog = new DialogMultiDragContact(true, true); final MultiDragContact multiDrag = dialog.getMultiDrag(); dialog.show(); - List exclusiveContacts = userStore.getExclusiveContactsFromAllContact(suggestPanel.getSelectedUser()); + List exclusiveContacts = userStore + .getExclusiveContactsFromAllContact(suggestPanel.getSelectedUser()); multiDrag.addSourceContacts(exclusiveContacts); for (InfoContactModel infoContactModel : suggestPanel.getSelectedUser()) { - if(!listAlreadyShared.contains(infoContactModel)) + if (!listAlreadyShared.contains(infoContactModel)) multiDrag.addTargetContact(infoContactModel); } @@ -362,32 +347,33 @@ public class DialogShareWItem extends Dialog { initSuggestContacts(); for (InfoContactModel infoContactModel : multiDrag.getTargetListContact()) { - suggestPanel.addRecipient(infoContactModel.getName(),true); - } + suggestPanel.addRecipient(infoContactModel.getName(), true); + } -// for (InfoContactModel infoContactModel : multiDrag.getTargetListContact()) { -// -// if(!listAlreadySharedContains(infoContactModel)) -// suggestPanel.addRecipient(infoContactModel.getName(),true); -// } + // for (InfoContactModel infoContactModel : + // multiDrag.getTargetListContact()) { + // + // if(!listAlreadySharedContains(infoContactModel)) + // suggestPanel.addRecipient(infoContactModel.getName(),true); + // } suggestPanel.boxSetFocus(); -// printSelectedUser(); + // printSelectedUser(); } }); } }); } - private boolean listAlreadySharedContains(InfoContactModel contact){ + private boolean listAlreadySharedContains(InfoContactModel contact) { - if(contact==null) + if (contact == null) return false; for (InfoContactModel ct : listAlreadyShared) { - if(ct.getLogin().compareTo(contact.getLogin())==0){ + if (ct.getLogin().compareTo(contact.getLogin()) == 0) { return true; } @@ -398,15 +384,15 @@ public class DialogShareWItem extends Dialog { } - //DEBUG - private void printSelectedUser(){ + // DEBUG + private void printSelectedUser() { System.out.println("SELETECTED USERS: "); for (InfoContactModel contact : suggestPanel.getSelectedUser()) System.out.println(contact); } - private void initSuggestContacts(){ + private void initSuggestContacts() { suggestPanel.resetItemSelected(); @@ -414,7 +400,6 @@ public class DialogShareWItem extends Dialog { suggestPanel.addRecipient(contact.getName(), false); } - } public String getName() { @@ -422,28 +407,23 @@ public class DialogShareWItem extends Dialog { } public String getDescription() { - if(textAreaDescription.getValue()==null) + if (textAreaDescription.getValue() == null) return ""; return textAreaDescription.getValue(); } - /** - * - * @param displayAlert - * @return - */ - public boolean isValidForm(boolean displayAlert){ + public boolean isValidForm(boolean displayAlert) { - if(!txtName.isValid()){ - if(displayAlert) + if (!txtName.isValid()) { + if (displayAlert) MessageBox.alert("Attention", "Name must not be empty", null); txtName.focus(); return false; } - if(getSharedListUsers().size()==0){ - if(displayAlert) + if (getSharedListUsers().size() == 0) { + if (displayAlert) MessageBox.alert("Attention", "You must pick at least one user with which share the folder", null); suggestPanel.boxSetFocus(); return false; @@ -453,8 +433,8 @@ public class DialogShareWItem extends Dialog { } - public WorkspaceACL getSelectedACL(){ - if(permission!=null) + public WorkspaceACL getSelectedACL() { + if (permission != null) return permission.getSelectedACL(); return null; } diff --git a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/view/sharing/SmartDialogInterface.java b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/view/sharing/SmartDialogInterface.java index 430c667..d620efe 100644 --- a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/view/sharing/SmartDialogInterface.java +++ b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/view/sharing/SmartDialogInterface.java @@ -9,8 +9,8 @@ import org.gcube.portlets.widgets.workspacesharingwidget.shared.CredentialModel; import org.gcube.portlets.widgets.workspacesharingwidget.shared.InfoContactModel; /** - * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it - * @Mar 4, 2014 + * @author Francesco Mangiacrapa + * Mar 4, 2014 * */ public interface SmartDialogInterface { diff --git a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/view/sharing/SmartShare.java b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/view/sharing/SmartShare.java index c6b41e5..c934ad7 100644 --- a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/view/sharing/SmartShare.java +++ b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/view/sharing/SmartShare.java @@ -36,8 +36,8 @@ import com.google.gwt.user.client.ui.Label; /** * The Class SmartShare. * - * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it - * @Mar 3, 2014 + * @author Francesco Mangiacrapa + * Mar 3, 2014 */ public class SmartShare extends Dialog implements SmartDialogInterface{ diff --git a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/view/sharing/UserStore.java b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/view/sharing/UserStore.java index a2e22c3..27ad977 100644 --- a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/view/sharing/UserStore.java +++ b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/view/sharing/UserStore.java @@ -13,7 +13,7 @@ import com.google.gwt.core.client.GWT; import com.google.gwt.user.client.rpc.AsyncCallback; /** - * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it + * @author Francesco Mangiacrapa * */ public class UserStore implements ContactFetcher{ @@ -34,7 +34,7 @@ public class UserStore implements ContactFetcher{ listAllContact = new ArrayList(); - WorkspaceSharingController.rpcWorkspaceSharingService.getAllContacts(readGroupsFromHL, readGroupsFromPortal, new AsyncCallback>() { + WorkspaceSharingController.rpcWorkspaceSharingService.getAllContacts(new AsyncCallback>() { @Override public void onSuccess(List result) { diff --git a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/view/sharing/multisuggest/BulletList.java b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/view/sharing/multisuggest/BulletList.java index fecd892..d010e19 100644 --- a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/view/sharing/multisuggest/BulletList.java +++ b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/view/sharing/multisuggest/BulletList.java @@ -6,7 +6,7 @@ import com.google.gwt.user.client.ui.Widget; /** * * @author Massimiliano Assante, ISTI-CNR - * @version 0.1 Sep 2012 + * 1 Sep 2012 * */ public class BulletList extends ComplexPanel { diff --git a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/view/sharing/multisuggest/DialogMultiDragContact.java b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/view/sharing/multisuggest/DialogMultiDragContact.java index 513c2cb..54111b2 100644 --- a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/view/sharing/multisuggest/DialogMultiDragContact.java +++ b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/view/sharing/multisuggest/DialogMultiDragContact.java @@ -21,8 +21,8 @@ import com.extjs.gxt.ui.client.widget.toolbar.ToolBar; import com.google.gwt.user.client.Random; /** - * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it - * @Jan 27, 2015 + * @author Francesco Mangiacrapa + * Jan 27, 2015 * */ public class DialogMultiDragContact extends Dialog{ @@ -43,14 +43,7 @@ public class DialogMultiDragContact extends Dialog{ private LayoutContainer lcTop = new LayoutContainer(); private LayoutContainer lcMiddle = new LayoutContainer(); private LayoutContainer lcBottom = new LayoutContainer(); - /** - * - * @param headTitle - * @param leftListContactsTitle - * @param rightListContactsTitle - * @param visibleAlreadyShared - * @param hideOnPressOk - */ + public DialogMultiDragContact(String headTitle, String leftListContactsTitle, String rightListContactsTitle, boolean visibleAlreadyShared, boolean hideOnPressOk) { this.multiDragContact = new MultiDragContact(leftListContactsTitle, rightListContactsTitle, visibleAlreadyShared); this.hideOnPressOkButton = hideOnPressOk; @@ -60,11 +53,6 @@ public class DialogMultiDragContact extends Dialog{ // add(multiDragContact); } - /** - * - * @param visibleAlreadyShared - * @param hideOnPressOk - */ public DialogMultiDragContact(boolean visibleAlreadyShared, boolean hideOnPressOk){ this.multiDragContact = new MultiDragContact(visibleAlreadyShared); this.hideOnPressOkButton = hideOnPressOk; @@ -83,17 +71,10 @@ public class DialogMultiDragContact extends Dialog{ } - /** - * - * @param bool - */ public void showToolBar(boolean bool){ this.toolBar.setVisible(bool); } - /** - * - */ private void init() { setId(DialogMultiDragContact.class.getName()+Random.nextInt()); setSize(WIDTH_DIALOG, HEIGHT_DIALOG); @@ -175,9 +156,6 @@ public class DialogMultiDragContact extends Dialog{ } - /** - * - */ public MultiDragContact getMultiDrag() { return multiDragContact; } diff --git a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/view/sharing/multisuggest/ListItem.java b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/view/sharing/multisuggest/ListItem.java index b85a6d7..fc58442 100644 --- a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/view/sharing/multisuggest/ListItem.java +++ b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/view/sharing/multisuggest/ListItem.java @@ -12,7 +12,7 @@ import com.google.gwt.user.client.ui.Widget; /** * * @author Massimiliano Assante, ISTI-CNR - * @version 0.1 Sep 2012 + * 1 Sep 2012 * */ public class ListItem extends ComplexPanel { diff --git a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/view/sharing/multisuggest/MultiDragContact.java b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/view/sharing/multisuggest/MultiDragContact.java index dd0b8d2..cc38d14 100644 --- a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/view/sharing/multisuggest/MultiDragContact.java +++ b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/view/sharing/multisuggest/MultiDragContact.java @@ -45,15 +45,13 @@ import com.google.gwt.user.client.Random; /** * - * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it - * @Jan 27, 2015 + * @author Francesco Mangiacrapa + * Jan 27, 2015 * */ public class MultiDragContact extends ContentPanel { - /** - * - */ + private static final int HEIGHT_CP = 375; private static final String ALL_CONTACTS = "All Contacts"; private static final String SHARE_WITH = "Share with..."; @@ -92,14 +90,6 @@ public class MultiDragContact extends ContentPanel { setRightListContactsTitle(rightListContactsTitle); } - /** - * - * @param headTitle - * @param leftListContactsTitle - * @param rightListContactsTitle - * @param visibleAlreadyShared - * @param hideOnPressOk - */ public MultiDragContact(boolean visibleAlreadyShared) { this.setHeaderVisible(false); this.setBodyBorder(false); @@ -530,9 +520,7 @@ public class MultiDragContact extends ContentPanel { storeTarget.add(listContact); } - /** - * @param infoContactModel - */ + public void addSourceContact(InfoContactModel contact) { if (contact != null) storeSource.add(contact); diff --git a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/view/sharing/multisuggest/MultiValuePanel.java b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/view/sharing/multisuggest/MultiValuePanel.java index c6bb645..c28b582 100644 --- a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/view/sharing/multisuggest/MultiValuePanel.java +++ b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/view/sharing/multisuggest/MultiValuePanel.java @@ -27,8 +27,8 @@ import com.google.gwt.user.client.ui.TextBox; /** * The Class MultiValuePanel. * - * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it - * @Feb 25, 2014 + * @author Francesco Mangiacrapa + * Feb 25, 2014 */ public class MultiValuePanel extends Composite { 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 581449e..0be2e99 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 @@ -8,19 +8,25 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import org.gcube.common.homelibrary.home.User; -import org.gcube.common.homelibrary.home.exceptions.InternalErrorException; -import org.gcube.common.homelibrary.home.workspace.WorkspaceItem; -import org.gcube.common.homelibrary.home.workspace.WorkspaceSharedFolder; -import org.gcube.common.homelibrary.home.workspace.accessmanager.ACLType; -import org.gcube.common.homelibrary.home.workspace.folder.FolderItem; -import org.gcube.common.homelibrary.home.workspace.folder.items.ExternalFile; -import org.gcube.common.homelibrary.home.workspace.folder.items.ExternalImage; -import org.gcube.common.homelibrary.home.workspace.folder.items.ExternalPDFFile; -import org.gcube.common.homelibrary.home.workspace.folder.items.GCubeItem; -import org.gcube.common.homelibrary.home.workspace.usermanager.GCubeGroup; +//import org.gcube.common.homelibrary.home.User; +import org.gcube.common.portal.PortalContext; +import org.gcube.common.storagehub.model.acls.ACL; +import org.gcube.common.storagehub.model.acls.AccessType; +import org.gcube.common.storagehub.model.items.AbstractFileItem; +import org.gcube.common.storagehub.model.items.ExternalURL; +import org.gcube.common.storagehub.model.items.FolderItem; +import org.gcube.common.storagehub.model.items.GCubeItem; +import org.gcube.common.storagehub.model.items.GenericFileItem; +import org.gcube.common.storagehub.model.items.ImageFile; +import org.gcube.common.storagehub.model.items.Item; +import org.gcube.common.storagehub.model.items.PDFFileItem; +import org.gcube.common.storagehub.model.items.SharedFolder; +//import org.gcube.common.homelibrary.home.workspace.usermanager.GCubeGroup; import org.gcube.portlets.widgets.workspacesharingwidget.client.ConstantsSharing; +import org.gcube.portlets.widgets.workspacesharingwidget.server.util.PortalContextInfo; +import org.gcube.portlets.widgets.workspacesharingwidget.server.util.ScopeUtility; import org.gcube.portlets.widgets.workspacesharingwidget.server.util.UserUtil; +import org.gcube.portlets.widgets.workspacesharingwidget.server.util.WsUtil; import org.gcube.portlets.widgets.workspacesharingwidget.shared.ACL_TYPE; import org.gcube.portlets.widgets.workspacesharingwidget.shared.FileModel; import org.gcube.portlets.widgets.workspacesharingwidget.shared.FolderModel; @@ -30,6 +36,7 @@ import org.gcube.portlets.widgets.workspacesharingwidget.shared.WorkspaceACL; import org.gcube.portlets.widgets.workspacesharingwidget.shared.WorkspaceACL.USER_TYPE; import org.gcube.portlets.widgets.workspacesharingwidget.shared.system.VO; import org.gcube.portlets.widgets.workspacesharingwidget.shared.system.VRE; +import org.gcube.vomanagement.usermanagement.model.GCubeGroup; import org.gcube.vomanagement.usermanagement.model.GCubeUser; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -37,16 +44,13 @@ import org.slf4j.LoggerFactory; /** * The Class GWTWorkspaceSharingBuilder. * - * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it - * @Feb 25, 2014 + * @author Francesco Mangiacrapa Feb 25, 2014 */ public class GWTWorkspaceSharingBuilder { - protected Logger logger = LoggerFactory.getLogger(GWTWorkspaceSharingBuilder.class); + private static Logger logger = LoggerFactory.getLogger(GWTWorkspaceSharingBuilder.class); - private InfoContactModel userLogged; - - protected static HashMap hashTestUser = null; + private static HashMap hashTestUser = null; /** * Used in test mode. @@ -58,40 +62,31 @@ public class GWTWorkspaceSharingBuilder { if (hashTestUser == null) { hashTestUser = new HashMap(); - hashTestUser.put("federico.defaveri", new InfoContactModel( - "federico.defaveri", "federico.defaveri", - "Federico de Faveri", false)); + hashTestUser.put("federico.defaveri", + new InfoContactModel("federico.defaveri", "federico.defaveri", "Federico de Faveri", false)); - hashTestUser.put("antonio.gioia", new InfoContactModel( - "antonio.gioia", "antonio.gioia", "Antonio Gioia", false)); + hashTestUser.put("antonio.gioia", + new InfoContactModel("antonio.gioia", "antonio.gioia", "Antonio Gioia", false)); - hashTestUser.put("fabio.sinibaldi", new InfoContactModel( - "fabio.sinibaldi", "fabio.sinibaldi", "Fabio Sinibaldi", - false)); + hashTestUser.put("fabio.sinibaldi", + new InfoContactModel("fabio.sinibaldi", "fabio.sinibaldi", "Fabio Sinibaldi", false)); - hashTestUser.put("pasquale.pagano", new InfoContactModel( - "pasquale.pagano", "pasquale.pagano", "Pasquale Pagano", - false)); + hashTestUser.put("pasquale.pagano", + new InfoContactModel("pasquale.pagano", "pasquale.pagano", "Pasquale Pagano", false)); - hashTestUser.put("francesco.mangiacrapa", new InfoContactModel( - "francesco.mangiacrapa", "francesco.mangiacrapa", - "Francesco Mangiacrapa", false)); + hashTestUser.put("francesco.mangiacrapa", new InfoContactModel("francesco.mangiacrapa", + "francesco.mangiacrapa", "Francesco Mangiacrapa", false)); - hashTestUser.put("massimiliano.assante", new InfoContactModel( - "massimiliano.assante", "massimiliano.assante", - "Massimiliano Assante", false)); + hashTestUser.put("massimiliano.assante", new InfoContactModel("massimiliano.assante", + "massimiliano.assante", "Massimiliano Assante", false)); - hashTestUser.put("leonardo.candela", new InfoContactModel( - "leonardo.candela", "leonardo.candela", "Leonardo Candela", - false)); + hashTestUser.put("leonardo.candela", + new InfoContactModel("leonardo.candela", "leonardo.candela", "Leonardo Candela", false)); - hashTestUser.put("valentina.marioli", new InfoContactModel( - "valentina.marioli", "valentina.marioli", - "Valentina Marioli", false)); + hashTestUser.put("valentina.marioli", + new InfoContactModel("valentina.marioli", "valentina.marioli", "Valentina Marioli", false)); - hashTestUser.put("devVRE", new InfoContactModel( - "devVRE", "devVRE", - "devVRE", true)); + hashTestUser.put("devVRE", new InfoContactModel("devVRE", "devVRE", "devVRE", true)); // hashTestUser.put(WsUtil.TEST_USER.toString(), // new InfoContactModel( @@ -105,61 +100,84 @@ public class GWTWorkspaceSharingBuilder { /** * Sets the user logged. - * - * @param infoContactModel the new user logged + * + * @param info + * Portal Context info + * @return List of contacts */ - public void setUserLogged(InfoContactModel infoContactModel) { - this.userLogged = infoContactModel; + public List getGXTListContactsModelFromVOs(PortalContextInfo info) { + logger.info("Reading group names as scopes from Infrastructure.."); + List listContactsModel = new ArrayList<>(); + PortalContext context = PortalContext.getConfiguration(); + logger.info("context.getInfrastructureName(): " + context.getInfrastructureName()); + // String groupName = info.getCurrentGroupName(request); + logger.info("context.getGroupId(): " + info.getCurrGroupId()); + logger.info("context.getScope(): " + info.getCurrentScope()); + try { + ScopeUtility scopeUtility = new ScopeUtility(info.getCurrentScope()); + + if (scopeUtility.getVoName() != null) { + logger.info("VO name is not null, trying to calculate List VO"); + List lsVOs = WsUtil.getVresFromInfrastructure(context.getInfrastructureName(), + scopeUtility.getVoName()); + listContactsModel.addAll(buildGXTListContactsModelFromVOs(lsVOs, scopeUtility.getVo())); + } else + logger.warn("VO name is null, skipping list VO " + info.getCurrGroupId()); + + } catch (Exception e) { + logger.warn("An error occurred on recovering vo name, skipping list VO " + info.getCurrGroupId()); + } + return listContactsModel; } /** * Builds the gxt list contacts model from gcube group. * - * @param list the list + * @param list + * the list * @return the list - * @throws InternalErrorException the internal error exception + * @throws Exception + * the internal error exception */ - public List buildGXTListContactsModelFromGcubeGroup(List list) throws InternalErrorException { + public List buildGXTListContactsModelFromGcubeGroup(List list) throws Exception { List listContactsModel = new ArrayList(); if (list == null) return listContactsModel; - logger.trace("List size returned from GcubeGroup is: "+ list.size()); + logger.trace("List size returned from GcubeGroup is: " + list.size()); logger.trace("Building list contact model..."); for (GCubeGroup group : list) { try { - String groupDN = group.getDisplayName(); + String groupDN = group.getGroupName(); if (groupDN == null || groupDN.isEmpty()) - groupDN = group.getName(); + groupDN = group.getGroupName(); - if (group.getName() == null || group.getName().isEmpty()) - logger.warn("Skipping group with null or empty name "+ group); + if (group.getGroupName() == null || group.getGroupName().isEmpty()) + logger.warn("Skipping group with null or empty name " + group); else { - InfoContactModel contact = new InfoContactModel( - group.getName(), group.getName(), groupDN, true); + InfoContactModel contact = new InfoContactModel(group.getGroupName(), group.getGroupName(), groupDN, + true); logger.trace("Adding group " + contact); listContactsModel.add(contact); } - } catch (InternalErrorException e) { + } catch (Exception e) { logger.warn("Dispaly name is not available to group " + group); - logger.warn("Adding get name property " + group.getName()); + logger.warn("Adding get name property " + group.getGroupName()); - if (group.getName() == null || group.getName().isEmpty()) - logger.warn("Skipping group with null or empty name " - + group); + if (group.getGroupName() == null || group.getGroupName().isEmpty()) + logger.warn("Skipping group with null or empty name " + group); else - listContactsModel.add(new InfoContactModel(group.getName(), - group.getName(), group.getName(), true)); + listContactsModel.add(new InfoContactModel(group.getGroupName(), group.getGroupName(), + group.getGroupName(), true)); } } - logger.trace("List GCubeGroup contact model completed, return " - + listContactsModel.size() + " contacts"); + logger.trace("List GCubeGroup contact model completed, return " + listContactsModel.size() + " contacts"); return listContactsModel; } @@ -167,94 +185,98 @@ public class GWTWorkspaceSharingBuilder { /** * Builds the gxt list contacts model from v os. * - * @param listVO the list vo - * @param voPath the vo path + * @param listVO + * the list vo + * @param voPath + * the vo path * @return the list - * @throws InternalErrorException the internal error exception + * @throws Exception + * the internal error exception */ - public List buildGXTListContactsModelFromVOs(List listVO, String voPath) throws InternalErrorException { + public List buildGXTListContactsModelFromVOs(List listVO, String voPath) throws Exception { List listContactsModel = new ArrayList(); - if(voPath==null){ - voPath=ConstantsSharing.PATH_SEPARATOR; + if (voPath == null) { + voPath = ConstantsSharing.PATH_SEPARATOR; } - if(voPath!=null && !voPath.endsWith(ConstantsSharing.PATH_SEPARATOR)){ - voPath+=ConstantsSharing.PATH_SEPARATOR; + if (voPath != null && !voPath.endsWith(ConstantsSharing.PATH_SEPARATOR)) { + voPath += ConstantsSharing.PATH_SEPARATOR; } - if (listVO == null){ + if (listVO == null) { logger.warn("List is null, returning"); return listContactsModel; } - logger.trace("List size is: "+ listVO.size()); + logger.trace("List size is: " + listVO.size()); logger.trace("Building list contact model..."); - logger.trace("voPath is: "+ voPath); + logger.trace("voPath is: " + voPath); for (VO vo : listVO) { List vres = vo.getVres(); - logger.trace("vo getGroupName: "+ vo.getGroupName()); - logger.trace("vo getName: "+ vo.getName()); + logger.trace("vo getGroupName: " + vo.getGroupName()); + logger.trace("vo getName: " + vo.getName()); logger.trace("Building list contact model..."); - if(vres!=null){ - logger.trace("vres from VO "+vo.getName() +" having size :" +vres.size() +", converting"); + if (vres != null) { + logger.trace("vres from VO " + vo.getName() + " having size :" + vres.size() + ", converting"); for (VRE vre : vres) { - if(vre.getName()!=null || !vre.getName().isEmpty()){ - String groupId = voPath+vre.getName(); - logger.trace("adding contact groupId: "+groupId +" VRE name: "+vre.getName()); -// InfoContactModel contact = new InfoContactModel(groupId, groupId, vre.getName(), true); -// logger.trace("Adding group contact " + contact); -// listContactsModel.add(contact); + if (vre.getName() != null || !vre.getName().isEmpty()) { + String groupId = voPath + vre.getName(); + logger.trace("adding contact groupId: " + groupId + " VRE name: " + vre.getName()); + // InfoContactModel contact = new + // InfoContactModel(groupId, groupId, vre.getName(), + // true); + // logger.trace("Adding group contact " + contact); + // listContactsModel.add(contact); } } - }else - logger.trace("vres list is null, skipping VO "+vo.getName()); + } else + logger.trace("vres list is null, skipping VO " + vo.getName()); } - logger.trace("List GCubeGroup contact model completed, return " - + listContactsModel.size() + " contacts"); + logger.trace("List GCubeGroup contact model completed, return " + listContactsModel.size() + " contacts"); return listContactsModel; } /** - * Builds the gxt list contacts model from user model. - * - * @param listUsers the list users - * @return the list - * @throws InternalErrorException the internal error exception + * + * @param info + * Portal Context info + * @return the list of users + * @throws Exception + * Error */ - public List buildGXTListContactsModelFromUserModel( - List listUsers) throws InternalErrorException { + public List buildGXTListContactsModelFromUserModel(PortalContextInfo info) throws Exception { + + List listUsers = UserUtil.getOrganizationUsers(info.getCurrentScope()); + + if (listUsers == null) { + logger.error("No users found in: " + info.getCurrentScope()); + throw new Exception("An error occurred on recovering users from Portal, try again later"); + } List listContactsModel = new ArrayList(); - if (listUsers == null) - return listContactsModel; - - logger.trace("List size returned from Portal VO is: " - + listUsers.size()); + logger.trace("List size returned from Portal VO is: " + listUsers.size()); logger.trace("Building list contact model list user model"); for (GCubeUser userModel : listUsers) { String fullName = userModel.getFullname(); if (fullName != null && !fullName.isEmpty()) - listContactsModel.add(new InfoContactModel(userModel - .getUserId() + "", userModel.getScreenName(), fullName, - false)); + listContactsModel.add( + new InfoContactModel(userModel.getUserId() + "", userModel.getUsername(), fullName, false)); else - logger.trace("buildGXTListContactsModel is not returning user: " - + userModel.getScreenName() + logger.trace("buildGXTListContactsModel is not returning user: " + userModel.getUsername() + "because name is null or empty"); } - logger.trace("List contact model completed, return " - + listContactsModel.size() + " contacts"); + logger.trace("List contact model completed, return " + listContactsModel.size() + " contacts"); return listContactsModel; } @@ -262,7 +284,8 @@ public class GWTWorkspaceSharingBuilder { /** * Builds the gxt info contacts from portal logins. * - * @param listPortalLogin the list portal login + * @param listPortalLogin + * the list portal login * @return the list */ public List buildGxtInfoContactsFromPortalLogins(List listPortalLogin) { @@ -277,7 +300,8 @@ public class GWTWorkspaceSharingBuilder { /** * Builds the gxt info contact from portal login. * - * @param portalLogin the portal login + * @param portalLogin + * the portal login * @return the info contact model */ protected InfoContactModel buildGxtInfoContactFromPortalLogin(String portalLogin) { @@ -286,14 +310,14 @@ public class GWTWorkspaceSharingBuilder { logger.warn("Contact login is null, return empty"); portalLogin = ""; } - return new InfoContactModel(portalLogin, portalLogin,UserUtil.getUserFullName(portalLogin), false); + return new InfoContactModel(portalLogin, portalLogin, UserUtil.getUserFullName(portalLogin), false); } - /** * Builds the gxt info contact from portal group. * - * @param grouoLogin the grouo login + * @param grouoLogin + * the grouo login * @return the info contact model */ protected InfoContactModel buildGxtInfoContactFromPortalGroup(String grouoLogin) { @@ -304,23 +328,24 @@ public class GWTWorkspaceSharingBuilder { grouoLogin = ""; } - //RECOVERING VRE NAME - if(grouoLogin.contains("/")){ + // RECOVERING VRE NAME + if (grouoLogin.contains("/")) { int start = grouoLogin.lastIndexOf("/"); int end = grouoLogin.length(); - if(start buildGxtInfoContactFromPortalLoginTestMode(List listPortalLogin) { @@ -330,166 +355,115 @@ public class GWTWorkspaceSharingBuilder { for (String portalLogin : listPortalLogin) listContact.add(getHashTestUsers().get(portalLogin)); - logger.trace("returning "+listContact.size()+" info contacts test"); + logger.trace("returning " + listContact.size() + " info contacts test"); return listContact; } - /** - * Builds the gxt info contact model. - * - * @param user the user - * @return the info contact model - * @throws InternalErrorException the internal error exception - */ - public InfoContactModel buildGXTInfoContactModel(User user) - throws InternalErrorException { - - // TODO ISGROUP - if (user != null) - return new InfoContactModel(user.getId(), user.getPortalLogin(), - UserUtil.getUserFullName(user.getPortalLogin()), false); - - return new InfoContactModel(); - } - /** * Builds the gxt file model item. * - * @param item the item - * @param parentFolderModel the parent folder model + * @param item + * the item + * @param parent + * the parent folder model * @return the file model - * @throws Exception the exception + * @throws Exception + * the exception */ - protected FileModel buildGXTFileModelItem(WorkspaceItem item, - FileModel parentFolderModel) throws Exception { - FileModel fileModel = null; - - FileModel parent = parentFolderModel != null ? (FileModel) parentFolderModel - : null; - - logger.info("Workspace item converting..."); - + public FileModel buildGXTFileModelItem(Item item, FileModel parent) throws Exception { try { - switch (item.getType()) { - case FOLDER: - logger.info("Workspace item is folder..."); - fileModel = new FolderModel(item.getId(), item.getName(), - parent, true, false, false); - fileModel.setType(GXTFolderItemTypeEnum.FOLDER.toString()); + FileModel fileModel = null; + + logger.info("Workspace item converting..."); + + if (item instanceof SharedFolder) { + logger.info("Workspace item is a SharedFolder..."); + SharedFolder shared = (SharedFolder) item; + String name = shared.isVreFolder() ? shared.getDisplayName() : item.getName(); + fileModel = new FolderModel(item.getId(), name, item.getDescription(),parent, true, true, shared.isVreFolder()); + fileModel.setType(GXTFolderItemTypeEnum.SHARED_FOLDER.toString()); fileModel.setDescription(item.getDescription()); - break; - - case FOLDER_ITEM: - logger.info("Workspace item is folder item..."); - fileModel = new FileModel(item.getId(), item.getName(), parent, - false, false); - FolderItem folderItem = (FolderItem) item; - fileModel = setFolderItemType(fileModel, folderItem); - break; - - case SHARED_FOLDER: - logger.info("Workspace item is shared item..."); - WorkspaceSharedFolder shared = (WorkspaceSharedFolder) item; - String name = shared.isVreFolder() ? shared.getDisplayName() - : item.getName(); - fileModel = new FolderModel(item.getId(), name, parent, true, - true, shared.isVreFolder()); - fileModel.setType(GXTFolderItemTypeEnum.SHARED_FOLDER - .toString()); - fileModel.setDescription(item.getDescription()); - break; - - default: - logger.error("gxt conversion return null for item " - + item.getName()); - break; + } else { + if (item instanceof FolderItem) { + logger.info("Workspace item is a Folder..."); + fileModel = new FolderModel(item.getId(), item.getName(), item.getDescription(),parent, true, false, false); + fileModel.setType(GXTFolderItemTypeEnum.FOLDER.toString()); + fileModel.setDescription(item.getDescription()); + } else { + if (item instanceof AbstractFileItem) { + logger.info("Workspace item is a AbstractFileItem..."); + fileModel = new FileModel(item.getId(), item.getName(), item.getDescription(), parent, false, false); + AbstractFileItem abstractFileItem = (AbstractFileItem) item; + fileModel = setFolderItemType(fileModel, abstractFileItem); + } else { + if (item instanceof GCubeItem) { + logger.info("Workspace item is a GCubeItem..."); + fileModel = new FileModel(item.getId(), item.getName(), item.getDescription(),parent, false, false); + fileModel.setFolderItemType(GXTFolderItemTypeEnum.GCUBE_ITEM); + } else { + logger.error("gxt conversion return null for item " + item.getName()); + } + } + } } - } catch (Exception e) { - logger.error("gxt conversion error: ", e); - throw new Exception("Error on conversion: ", e); - } - return fileModel; + return fileModel; + + } catch (Exception e) { + logger.error("Build GXTFileModelItem error: " + e.getLocalizedMessage(), e); + throw new Exception("Error building item model: " + e.getLocalizedMessage(), e); + } } /** - * Sets the folder item type. + * Sets item type. * - * @param fileModel the file model - * @param worspaceFolderItem the worspace folder item + * @param fileModel + * the file model + * @param abstractfileItem + * the worspace folder item * @return the file model */ - protected FileModel setFolderItemType(FileModel fileModel, - FolderItem worspaceFolderItem) { + protected FileModel setFolderItemType(FileModel fileModel, AbstractFileItem abstractfileItem) { - switch (worspaceFolderItem.getFolderItemType()) { - case EXTERNAL_IMAGE: - fileModel.setFolderItemType(GXTFolderItemTypeEnum.EXTERNAL_IMAGE); - ExternalImage extImage = (ExternalImage) worspaceFolderItem; - fileModel.setType(extImage.getMimeType()); - break; - case EXTERNAL_FILE: - fileModel.setFolderItemType(GXTFolderItemTypeEnum.EXTERNAL_FILE); - ExternalFile extFile = (ExternalFile) worspaceFolderItem; - fileModel.setType(extFile.getMimeType()); - break; - case EXTERNAL_PDF_FILE: - fileModel.setFolderItemType(GXTFolderItemTypeEnum.EXTERNAL_PDF_FILE); - ExternalPDFFile pdfExt = (ExternalPDFFile) worspaceFolderItem; - fileModel.setType(pdfExt.getMimeType()); - break; - case EXTERNAL_URL: + if (abstractfileItem instanceof ExternalURL) { fileModel.setFolderItemType(GXTFolderItemTypeEnum.EXTERNAL_URL); - break; - case REPORT_TEMPLATE: - fileModel.setFolderItemType(GXTFolderItemTypeEnum.REPORT_TEMPLATE); - break; - case REPORT: - fileModel.setFolderItemType(GXTFolderItemTypeEnum.REPORT); - break; - case QUERY: - fileModel.setFolderItemType(GXTFolderItemTypeEnum.QUERY); - break; - case TIME_SERIES: - fileModel.setFolderItemType(GXTFolderItemTypeEnum.TIME_SERIES); - break; - case PDF_DOCUMENT: - fileModel.setFolderItemType(GXTFolderItemTypeEnum.PDF_DOCUMENT); - break; - case IMAGE_DOCUMENT: - fileModel.setFolderItemType(GXTFolderItemTypeEnum.IMAGE_DOCUMENT); - GCubeItem imgDoc = (GCubeItem) worspaceFolderItem; //Cast GCubeItem - try { - fileModel.setType(imgDoc.getMimeType()); - } catch (InternalErrorException e) { - logger.error("IMAGE_DOCUMENT InternalErrorException when getting MimeType on "+fileModel.getIdentifier()); + } else { + if (abstractfileItem instanceof GenericFileItem) { + fileModel.setFolderItemType(GXTFolderItemTypeEnum.DOCUMENT); + GenericFileItem doc = (GenericFileItem) abstractfileItem; + String mimetype = doc.getContent().getMimeType(); + if (mimetype != null && !mimetype.isEmpty()) { + fileModel.setType(mimetype); + } else { + logger.error("Error retrieving MimeType on file id: " + abstractfileItem.getId()); + } + } else { + if (abstractfileItem instanceof ImageFile) { + fileModel.setFolderItemType(GXTFolderItemTypeEnum.IMAGE_DOCUMENT); + ImageFile img = (ImageFile) abstractfileItem; + String mimetype = img.getContent().getMimeType(); + if (mimetype != null && !mimetype.isEmpty()) { + fileModel.setType(mimetype); + } else { + logger.error("Error retrieving MimeType on file id: " + abstractfileItem.getId()); + } + } else { + if (abstractfileItem instanceof PDFFileItem) { + fileModel.setFolderItemType(GXTFolderItemTypeEnum.PDF_DOCUMENT); + } else { + fileModel.setFolderItemType(GXTFolderItemTypeEnum.UNKNOWN_TYPE); + fileModel.setType(GXTFolderItemTypeEnum.UNKNOWN_TYPE.toString()); + + } + + } + } - break; - case DOCUMENT: - fileModel.setFolderItemType(GXTFolderItemTypeEnum.DOCUMENT); - GCubeItem doc = (GCubeItem) worspaceFolderItem; //Cast GCubeItem - try { - fileModel.setType(doc.getMimeType()); - } catch (InternalErrorException e) { - logger.error("DOCUMENT InternalErrorException when getting MimeType on "+fileModel.getIdentifier()); - } - break; - case URL_DOCUMENT: - fileModel.setFolderItemType(GXTFolderItemTypeEnum.URL_DOCUMENT); - break; - case METADATA: - fileModel.setFolderItemType(GXTFolderItemTypeEnum.METADATA); - break; - case GCUBE_ITEM: - fileModel.setFolderItemType(GXTFolderItemTypeEnum.GCUBE_ITEM); - break; - default: - fileModel.setFolderItemType(GXTFolderItemTypeEnum.UNKNOWN_TYPE); - fileModel.setType(GXTFolderItemTypeEnum.UNKNOWN_TYPE.toString()); - break; + } return fileModel; @@ -498,15 +472,17 @@ public class GWTWorkspaceSharingBuilder { /** * Gets the workspace acl from ac ls. * - * @param types the types + * @param types + * the types * @return the workspace acl from ac ls - * @throws Exception the exception + * @throws Exception + * the exception */ - public List getWorkspaceACLFromACLs(List types) throws Exception { + public List getWorkspaceACLFromAccessType(List types) throws Exception { List acls = new ArrayList(); - for (ACLType acl : types) { + for (AccessType acl : types) { switch (acl) { @@ -516,25 +492,23 @@ public class GWTWorkspaceSharingBuilder { // USER_TYPE.ADMINISTRATOR, "")); break; case READ_ONLY: - acls.add(new WorkspaceACL(acl.toString(), ACL_TYPE.READ_ONLY, - "Read Only", false, USER_TYPE.OTHER, + 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, + 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, + 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, "")); + // acls.add(new WorkspaceACL(acl.toString(), + // ACL_TYPE.WRITE_OWNER, + // acl.toString(), false, USER_TYPE.OTHER, "")); break; } } @@ -545,35 +519,111 @@ public class GWTWorkspaceSharingBuilder { return acls; } + /** + * Gets the workspace acl from ac ls. + * + * @param listACL + * the types + * @return the workspace acl from ac ls + * @throws Exception + * the exception + */ + public List getWorkspaceACLFromACLs(List listACL) throws Exception { + + List acls = new ArrayList(); + + for (ACL acl : listACL) { + List listAccessType = acl.getAccessTypes(); + for (AccessType accessType : listAccessType) { + switch (accessType) { + 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; + + } + /** * Gets the formatted html acl from ac ls. * - * @param aclOwner the acl owner + * @param acls + * the acl owner * @return the formatted html acl from ac ls */ - public String getFormattedHtmlACLFromACLs(Map> aclOwner) { + public String getFormattedHtmlACLFromACLs(List acls) { String html = "
"; - logger.trace("Formatting "+aclOwner.size() +" ACL/s"); + logger.trace("Formatting " + acls.size() + " ACL/s"); - for (ACLType type : aclOwner.keySet()) { + Map> aclOwner = new HashMap<>(); + + for (ACL acl : acls) { + for (AccessType accessType : acl.getAccessTypes()) { + if (aclOwner.containsKey(accessType)) { + List users = aclOwner.get(accessType); + boolean notfound = true; + for (String user : users) { + if (user.compareTo(acl.getPricipal()) == 0) { + notfound = false; + break; + } + } + if (notfound) { + users.add(acl.getPricipal()); + aclOwner.put(accessType, users); + } + } else { + List users = new ArrayList(); + users.add(acl.getPricipal()); + aclOwner.put(accessType, users); + } + } + } + + for (AccessType type : aclOwner.keySet()) { List listLogins = aclOwner.get(type); - html+=""+type+": "; - html+=""; + html += "" + type + ": "; + html += ""; for (String login : listLogins) { - logger.trace("Adding login "+login); - String fullName = UserUtil.getUserFullName(login); - if(fullName!=null && !fullName.isEmpty()) - html+=fullName+"; "; - else - html+=login+"; "; + logger.trace("Adding login " + login); + String fullName = UserUtil.getUserFullName(login); + if (fullName != null && !fullName.isEmpty()) + html += fullName + "; "; + else + html += login + "; "; } - html+="
"; + html += "

"; } - html+="
"; - + html += ""; return html; } 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 0b8ab10..49bf3da 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 @@ -2,41 +2,47 @@ package org.gcube.portlets.widgets.workspacesharingwidget.server; import java.util.ArrayList; import java.util.Arrays; +import java.util.HashSet; import java.util.List; +import java.util.Map; +import java.util.Set; import javax.servlet.http.HttpServletRequest; import org.gcube.common.homelibary.model.items.type.WorkspaceItemType; import org.gcube.common.homelibrary.home.HomeLibrary; -import org.gcube.common.homelibrary.home.exceptions.HomeNotFoundException; -import org.gcube.common.homelibrary.home.exceptions.InternalErrorException; import org.gcube.common.homelibrary.home.workspace.Workspace; import org.gcube.common.homelibrary.home.workspace.WorkspaceFolder; import org.gcube.common.homelibrary.home.workspace.WorkspaceItem; import org.gcube.common.homelibrary.home.workspace.WorkspaceSharedFolder; import org.gcube.common.homelibrary.home.workspace.accessmanager.ACLType; -import org.gcube.common.homelibrary.home.workspace.exceptions.InsufficientPrivilegesException; -import org.gcube.common.homelibrary.home.workspace.exceptions.ItemAlreadyExistException; -import org.gcube.common.homelibrary.home.workspace.exceptions.ItemNotFoundException; -import org.gcube.common.homelibrary.home.workspace.exceptions.WorkspaceFolderNotFoundException; -import org.gcube.common.homelibrary.home.workspace.exceptions.WrongDestinationException; -import org.gcube.common.homelibrary.home.workspace.usermanager.GCubeGroup; -import org.gcube.common.portal.PortalContext; +import org.gcube.common.scope.api.ScopeProvider; +import org.gcube.common.storagehub.client.dsl.FolderContainer; +import org.gcube.common.storagehub.client.dsl.ItemContainer; +import org.gcube.common.storagehub.client.dsl.OpenResolver; +import org.gcube.common.storagehub.client.dsl.StorageHubClient; +import org.gcube.common.storagehub.model.Metadata; +import org.gcube.common.storagehub.model.acls.ACL; +import org.gcube.common.storagehub.model.acls.AccessType; +import org.gcube.common.storagehub.model.items.FolderItem; +import org.gcube.common.storagehub.model.items.Item; +import org.gcube.common.storagehub.model.items.SharedFolder; import org.gcube.portlets.widgets.workspacesharingwidget.client.ConstantsSharing; import org.gcube.portlets.widgets.workspacesharingwidget.client.rpc.WorkspaceSharingService; import org.gcube.portlets.widgets.workspacesharingwidget.server.notifications.NotificationsProducer; +import org.gcube.portlets.widgets.workspacesharingwidget.server.util.AccessTypeComparator; import org.gcube.portlets.widgets.workspacesharingwidget.server.util.PortalContextInfo; import org.gcube.portlets.widgets.workspacesharingwidget.server.util.ScopeUtility; import org.gcube.portlets.widgets.workspacesharingwidget.server.util.UserUtil; import org.gcube.portlets.widgets.workspacesharingwidget.server.util.WsUtil; +import org.gcube.portlets.widgets.workspacesharingwidget.shared.AllowAccess; import org.gcube.portlets.widgets.workspacesharingwidget.shared.CredentialModel; +import org.gcube.portlets.widgets.workspacesharingwidget.shared.ExtendedWorkspaceACL; import org.gcube.portlets.widgets.workspacesharingwidget.shared.FileModel; import org.gcube.portlets.widgets.workspacesharingwidget.shared.InfoContactModel; +import org.gcube.portlets.widgets.workspacesharingwidget.shared.ReportAssignmentACL; import org.gcube.portlets.widgets.workspacesharingwidget.shared.SessionExpiredException; import org.gcube.portlets.widgets.workspacesharingwidget.shared.WorkspaceACL; -import org.gcube.portlets.widgets.workspacesharingwidget.shared.system.VO; -import org.gcube.portlets.widgets.workspacesharingwidget.shared.system.VRE; -import org.gcube.vomanagement.usermanagement.model.GCubeUser; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -45,46 +51,21 @@ import com.google.gwt.user.server.rpc.RemoteServiceServlet; /** * The server side implementation of the RPC service. * - * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it - * Aug 3, 2015 + * @author Francesco Mangiacrapa Aug 3, 2015 */ @SuppressWarnings("serial") -public class WorkspaceSharingServiceImpl extends RemoteServiceServlet implements - WorkspaceSharingService { +public class WorkspaceSharingServiceImpl extends RemoteServiceServlet implements WorkspaceSharingService { protected static Logger logger = LoggerFactory.getLogger(WorkspaceSharingServiceImpl.class); - - /** - * Gets the GWT workspace builder. - * - * @return the GWT workspace builder - */ - protected GWTWorkspaceSharingBuilder getGWTWorkspaceBuilder() - { - return WsUtil.getGWTWorkspaceSharingBuilder(this.getThreadLocalRequest()); - } - - /** - * Gets the workspace. - * - * @return the workspace - * @throws InternalErrorException the internal error exception - * @throws HomeNotFoundException the home not found exception - * @throws WorkspaceFolderNotFoundException the workspace folder not found exception - */ - protected Workspace getWorkspace() throws InternalErrorException, HomeNotFoundException, WorkspaceFolderNotFoundException - { - return WsUtil.getWorkspace(this.getThreadLocalRequest()); - } - /** * Gets the notification producer. * - * @param request the request + * @param request + * the request * @return the notification producer */ - protected NotificationsProducer getNotificationProducer(HttpServletRequest request){ + protected NotificationsProducer getNotificationProducer(HttpServletRequest request) { return WsUtil.getNotificationProducer(request); } @@ -94,7 +75,7 @@ public class WorkspaceSharingServiceImpl extends RemoteServiceServlet implements * * @return the scope util filter */ - protected ScopeUtility getScopeUtilFilter(){ + protected ScopeUtility getScopeUtilFilter() { return WsUtil.getScopeUtilFilter(this.getThreadLocalRequest()); } @@ -104,25 +85,24 @@ public class WorkspaceSharingServiceImpl extends RemoteServiceServlet implements * * @return true, if is test mode */ - protected boolean isTestMode(){ - return !WsUtil.isWithinPortal(); //IS NOT INTO PORTAL + protected boolean isTestMode() { + return !WsUtil.isWithinPortal(); // IS NOT INTO PORTAL } - /* (non-Javadoc) - * @see org.gcube.portlets.widgets.workspacesharingwidget.client.rpc.WorkspaceSharingService#getAllContacts(boolean, boolean) + /* + * (non-Javadoc) + * + * @see org.gcube.portlets.widgets.workspacesharingwidget.client.rpc. + * WorkspaceSharingService#getAllContacts(boolean, boolean) */ @Override - public List getAllContacts(boolean readGroupsFromHL, boolean readGroupsFromPortal) throws Exception { + public List getAllContacts() throws Exception { try { + logger.info("Call getAllContacts()"); - PortalContextInfo info = WsUtil.getPortalContext(this.getThreadLocalRequest()); - logger.info("Get all contacts"); - - GWTWorkspaceSharingBuilder builder = getGWTWorkspaceBuilder(); - - if(isTestMode()){ - logger.warn("WORKSPACE PORTLET IS IN TEST MODE - RETURN TEST USERS AND GROUPS"); + if (isTestMode()) { + logger.debug("WORKSPACE PORTLET IS IN TEST MODE - RETURN TEST USERS AND GROUPS"); GWTWorkspaceSharingBuilder.getHashTestUsers(); List listContactsModel = new ArrayList(); for (String key : GWTWorkspaceSharingBuilder.getHashTestUsers().keySet()) { @@ -131,134 +111,162 @@ public class WorkspaceSharingServiceImpl extends RemoteServiceServlet implements } return listContactsModel; } - //READING USERS FROM VRE - /*UserManager userManag = new LiferayUserManager(); - GroupManager gm = new LiferayGroupManager(); - String aslSessionGN = aslSession.getGroupName(); - logger.info("aslSession.getGroupName(): "+ aslSessionGN); - String groupId = gm.getGroupId(aslSessionGN); - logger.info("groupId from GroupManager: "+ groupId); - logger.info("Liferay User Manager getting list users by group: "+groupId); - List listContactsModel = builder.buildGXTListContactsModelFromUserModel(userManag.listUsersByGroup(groupId)); - */ - List users = UserUtil.getOrganizationUsers(info.getCurrentScope()); + // READING USERS FROM VRE + /* + * UserManager userManag = new LiferayUserManager(); GroupManager gm + * = new LiferayGroupManager(); String aslSessionGN = + * aslSession.getGroupName(); + * logger.info("aslSession.getGroupName(): "+ aslSessionGN); String + * groupId = gm.getGroupId(aslSessionGN); + * logger.info("groupId from GroupManager: "+ groupId); + * logger.info("Liferay User Manager getting list users by group: " + * +groupId); List listContactsModel = + * builder.buildGXTListContactsModelFromUserModel(userManag. + * listUsersByGroup(groupId)); + */ - if(users==null) - throw new Exception("An error occurred on recovering users from Portal, try again later"); + PortalContextInfo info = WsUtil.getPortalContext(this.getThreadLocalRequest()); - List listContactsModel = builder.buildGXTListContactsModelFromUserModel(users); + GWTWorkspaceSharingBuilder builder = new GWTWorkspaceSharingBuilder(); - if(readGroupsFromHL){ - logger.info("Reading group names from HL.."); - org.gcube.common.homelibrary.home.workspace.usermanager.UserManager hlUserManager = HomeLibrary.getHomeManagerFactory().getUserManager(); - logger.trace("Home Library User Manager getting list Gcube Group"); - List groups = hlUserManager.getGroups(); - if(groups!=null){ - logger.info("Read group names from HL, return "+groups.size()+" groups, converting"); - listContactsModel.addAll(builder.buildGXTListContactsModelFromGcubeGroup(groups)); - }else - logger.warn("Read group names from HL, return list null, skipping"); - } + List listContactsModel = builder.buildGXTListContactsModelFromUserModel(info); - if(readGroupsFromPortal){ - logger.info("Reading group names as scopes from Infrastructure.."); + listContactsModel.addAll(builder.getGXTListContactsModelFromVOs(info)); - PortalContext context = PortalContext.getConfiguration(); - logger.info("context.getInfrastructureName(): "+context.getInfrastructureName()); - String groupName = context.getCurrentGroupName(this.getThreadLocalRequest()); - logger.info("context.getGroupName(): "+ groupName); - logger.info("context.getScope(): "+ info.getCurrentScope()); - try{ - ScopeUtility scopeUtility = new ScopeUtility(info.getCurrentScope()); - - if(scopeUtility.getVoName()!=null){ - logger.info("VO name is not null, trying to calculate List VO"); - List lsVOs = WsUtil.getVresFromInfrastructure(context.getInfrastructureName(), scopeUtility.getVoName()); -// String voPath = ConstantsSharing.PATH_SEPARATOR+context.getInfrastructureName() + ConstantsSharing.PATH_SEPARATOR + aslSession.getGroupName() + ConstantsSharing.PATH_SEPARATOR; - listContactsModel.addAll(builder.buildGXTListContactsModelFromVOs(lsVOs, scopeUtility.getVo())); - }else - logger.warn("VO name is null, skipping list VO "+ groupName); - - }catch(Exception e){ - logger.warn("An error occurred on recovering vo name, skipping list VO "+ groupName); - } - } - - logger.info("Get all contacts returning a list having size: "+listContactsModel.size()); + logger.debug("Get all contacts returning a list having size: " + listContactsModel.size()); return listContactsModel; } catch (Exception e) { - logger.error("Error in server get all contacts ", e); -// return new ArrayList(); - throw new Exception(e.getMessage()); + logger.error("Error in getAllContacts(): " + e.getLocalizedMessage(), e); + throw new Exception("Error retrieving all contacts: " + e.getLocalizedMessage(), e); } } - /* (non-Javadoc) - * @see org.gcube.portlets.widgets.workspacesharingwidget.client.rpc.WorkspaceSharingService#getListUserSharedByFolderSharedId(java.lang.String) + /* + * (non-Javadoc) + * + * @see org.gcube.portlets.widgets.workspacesharingwidget.client.rpc. + * WorkspaceSharingService#getListUserSharedByFolderSharedId(java.lang. + * String) */ @Override - public List getListUserSharedByFolderSharedId(String folderSharedId) throws Exception{ - - logger.info("getListUserSharedByFolderSharedId "+ folderSharedId); + public List getListUserSharedByFolderSharedId(String itemId) throws Exception { try { - Workspace workspace = getWorkspace(); - - WorkspaceItem wsItem = workspace.getItem(folderSharedId); - - //TODO CHANGE TO READ ACL FROM SHARED SUBFOLDER - if(isASharedFolder(wsItem, false)){ - - WorkspaceSharedFolder wsFolder = (WorkspaceSharedFolder) workspace.getItem(wsItem.getIdSharedFolder()); - - GWTWorkspaceSharingBuilder builder = getGWTWorkspaceBuilder(); - - List listPortalLogin = wsFolder.getUsers(); - - logger.info("getListUserSharedByFolderSharedId return "+ listPortalLogin.size() + " user"); - - if(isTestMode()) - return builder.buildGxtInfoContactFromPortalLoginTestMode(listPortalLogin); - - return builder.buildGxtInfoContactsFromPortalLogins(listPortalLogin); - + logger.info("Call getListUserSharedByFolderSharedId(): [folderId=" + itemId + "]"); + if (itemId == null || itemId.isEmpty()) { + logger.error("Error in getListUserSharedByFolderSharedId(), invalid folder id: [id=" + itemId + "]"); + throw new Exception("Invalid item id requested: " + itemId); } - else{ - logger.info("the item with id: "+folderSharedId+ " is not "+WorkspaceItemType.SHARED_FOLDER); - //DEBUG - //System.out.println("the item with id: "+folderSharedId+ " is not "+WorkspaceItemType.SHARED_FOLDER); + StorageHubClient shc = new StorageHubClient(); + OpenResolver openResolver = shc.open(itemId); + FolderContainer folderContainer = openResolver.asFolder(); + FolderItem folder = folderContainer.get(); + if (folder.isShared()) { + if (folder instanceof SharedFolder) { + SharedFolder sharedFolder = (SharedFolder) folder; + return retrieveUsersListFromSharedFolder(sharedFolder); + } else { + FolderContainer rootSharedFolderContainer = folderContainer.getRootSharedFolder(); + FolderItem rootSharedFolder = rootSharedFolderContainer.get(); + if (rootSharedFolder instanceof SharedFolder) { + SharedFolder sharedFolder = (SharedFolder) rootSharedFolder; + return retrieveUsersListFromSharedFolder(sharedFolder); + } else { + String error = "The root shared folder has a invalid type: RootSharedFolder[id=" + + rootSharedFolder.getId() + "]"; + logger.error(error); + throw new Exception(error); + } + } + } else { + logger.info("The item with id: " + itemId + " is not shared a folder!"); + return new ArrayList(); } - return new ArrayList(); - }catch (ItemNotFoundException e){ - logger.error("Error in server during item retrieving, getListUserSharedByFolderSharedId", e); - throw new Exception("The Item id "+folderSharedId+" not found in workspace or is not a shared folder"); + } catch (Exception e) { - logger.error("Error in getListUserSharedByItemId ", e); - throw new Exception(e.getMessage()); + logger.error("Error in getListUserSharedByFolderSharedId(): " + e.getLocalizedMessage(), e); + throw new Exception(e.getLocalizedMessage(), e); } } - /* (non-Javadoc) - * @see org.gcube.portlets.widgets.workspacesharingwidget.client.rpc.WorkspaceSharingService#getOwnerByItemId(java.lang.String) + private List retrieveUsersListFromSharedFolder(SharedFolder sharedFolder) throws Exception { + Metadata metadata = sharedFolder.getUsers(); + if (metadata != null) { + Map map = metadata.getMap(); + if (map != null && !map.isEmpty()) { + List listShared = new ArrayList<>(); + List keys = new ArrayList(map.keySet()); + List listContactsModel = getAllContacts(); + for (String username : keys) { + for (InfoContactModel contact : listContactsModel) { + if (contact != null && contact.getLogin() != null + && contact.getLogin().compareTo(username) == 0) { + listShared.add(contact); + break; + } + } + } + return listShared; + } else { + logger.info("The folder with id: " + sharedFolder.getId() + " has a invalid map!"); + return new ArrayList(); + } + } else { + logger.info("The folder with id: " + sharedFolder.getId() + " has a invalid metadata!"); + return new ArrayList(); + } + } + + /* + * (non-Javadoc) + * + * @see org.gcube.portlets.widgets.workspacesharingwidget.client.rpc. + * WorkspaceSharingService#getOwnerByItemId(java.lang.String) */ @Override public InfoContactModel getOwnerByItemId(String itemId) throws Exception { - logger.info("get Owner By ItemId "+ itemId); try { + logger.info("Call getOwnerByItemId(): [itemId=" + itemId + "]"); + if (itemId == null || itemId.isEmpty()) { + logger.error("Error in getOwnerByItemId(), invalid item id: " + itemId); + throw new Exception("Invalid request, item id: " + itemId); + } - Workspace workspace = getWorkspace(); + StorageHubClient shc = new StorageHubClient(); + OpenResolver openResolverForFile = shc.open(itemId); + ItemContainer itemContainer = openResolverForFile.asItem(); + Item item = itemContainer.get(); + logger.debug("Retrieved Item: " + item); + if (item != null) { + logger.debug("Owner: " + item.getOwner()); + if (item.getOwner() != null && !item.getOwner().isEmpty()) { + PortalContextInfo info = WsUtil.getPortalContext(this.getThreadLocalRequest()); - WorkspaceItem wsItem = workspace.getItem(itemId); + GWTWorkspaceSharingBuilder builder = new GWTWorkspaceSharingBuilder(); - GWTWorkspaceSharingBuilder builder = getGWTWorkspaceBuilder(); - - return builder.buildGXTInfoContactModel(wsItem.getOwner()); + List listContactsModel = builder.buildGXTListContactsModelFromUserModel(info); + for (InfoContactModel infoContactModel : listContactsModel) { + if (infoContactModel.getLogin().compareTo(item.getOwner()) == 0) { + logger.debug("Retrieved: " + infoContactModel); + return infoContactModel; + } + } + logger.debug("Owner not found from user model!"); + return new InfoContactModel(item.getOwner(), item.getOwner(), item.getOwner(), false); + } else { + logger.debug("Owner not found from item"); + return new InfoContactModel(); + } + } else { + logger.debug("Item retrieved is null"); + return new InfoContactModel(); + } } catch (Exception e) { - logger.error("Error in getOwnerByItemId ", e); + logger.error("Error in getOwnerByItemId(): " + e.getLocalizedMessage(), e); throw new Exception(e.getMessage()); } } @@ -267,590 +275,1310 @@ public class WorkspaceSharingServiceImpl extends RemoteServiceServlet implements * Gets the AC ls. * * @return the AC ls - * @throws Exception the exception + * @throws Exception + * the exception */ @Override - public List getACLs() throws Exception{ + public List getACLs() throws Exception { try { - - GWTWorkspaceSharingBuilder builder = getGWTWorkspaceBuilder(); - return builder.getWorkspaceACLFromACLs(Arrays.asList(ACLType.values())); + logger.info("Call getACLs()"); + GWTWorkspaceSharingBuilder builder = new GWTWorkspaceSharingBuilder(); + return builder.getWorkspaceACLFromAccessType(Arrays.asList(AccessType.values())); } catch (Exception e) { - logger.error("Error in server get ACLs", e); - String error = ConstantsSharing.SERVER_ERROR +" get ACL rules. "+e.getMessage(); + logger.error("Error in getACLs(): " + e.getLocalizedMessage(), e); + String error = ConstantsSharing.SERVER_ERROR + " get ACL rules. " + e.getMessage(); throw new Exception(error); } } - /* (non-Javadoc) - * @see org.gcube.portlets.widgets.workspacesharingwidget.client.rpc.WorkspaceSharingService#getMyLogin() + /* + * (non-Javadoc) + * + * @see org.gcube.portlets.widgets.workspacesharingwidget.client.rpc. + * WorkspaceSharingService#getMyLogin() */ @Override - public String getMyLogin(){ - PortalContextInfo info = WsUtil.getPortalContext(this.getThreadLocalRequest()); - return info.getUsername(); + public String getMyLogin() throws Exception { + try { + logger.info("Call getMyLogin()"); + PortalContextInfo info = WsUtil.getPortalContext(this.getThreadLocalRequest()); + logger.debug("Username: " + info.getUsername()); + return info.getUsername(); + } catch (Exception e) { + logger.error("Error in getMyLogin(): " + e.getLocalizedMessage(), e); + throw new Exception("Error retrieving user information: " + e.getLocalizedMessage(), e); + } } - /* (non-Javadoc) - * @see org.gcube.portlets.widgets.workspacesharingwidget.client.rpc.WorkspaceSharingService#getFileModelByWorkpaceItemId(java.lang.String) + /* + * (non-Javadoc) + * + * @see org.gcube.portlets.widgets.workspacesharingwidget.client.rpc. + * WorkspaceSharingService#getFileModelByWorkpaceItemId(java.lang.String) */ @Override public FileModel getFileModelByWorkpaceItemId(String itemId) throws Exception { try { + logger.info("Call getFileModelByWorkpaceItemId(): [itemId=" + itemId + "]"); -// System.out.println("Get file model by itemId: "+itemId); + if (itemId == null || itemId.isEmpty()) { + logger.error("The item id is invalid: " + itemId); + throw new Exception("Invalid request item id is invalid: " + itemId); + } - if(itemId == null || itemId.isEmpty()) - throw new Exception("Identifier is null or empty"); + StorageHubClient shc = new StorageHubClient(); + OpenResolver openResolverForItem = shc.open(itemId); + ItemContainer itemContainer = openResolverForItem.asItem(); + Item item = itemContainer.get(); + logger.debug("Retrieved Item: " + item); + if (item == null) { + String error = "Error item not found: [itemId=" + itemId + "]"; + logger.error(error); + throw new Exception(error); + } + if (item.getParentId() == null || item.getParentId().isEmpty()) { + String error = "Error parent item not found: [itemId=" + itemId + "]"; + logger.error(error); + throw new Exception(error); + } - Workspace workspace = getWorkspace(); + OpenResolver openResolverForParent = shc.open(itemId); + ItemContainer parentContainer = openResolverForParent.asItem(); + Item parentItem = parentContainer.get(); + logger.debug("Retrieved Parent: " + parentItem); - logger.info("Get file model by itemId: "+itemId); - - WorkspaceItem wsItem = workspace.getItem(itemId); - - GWTWorkspaceSharingBuilder builder = getGWTWorkspaceBuilder(); - -// Long startTime = System.currentTimeMillis(); -// -// Long endTime = System.currentTimeMillis() - startTime; -// String time = String.format("%d msc %d sec", endTime, TimeUnit.MILLISECONDS.toSeconds(endTime)); -// logger.debug("get child for Grid by id returning element in " + time); - - logger.info("Getting folder parent"); - - WorkspaceFolder folderParent = null; - if(wsItem!=null) - folderParent = wsItem.getParent(); //BUILD PARENT - else - throw new Exception("Workspace item not found"); + // Long startTime = System.currentTimeMillis(); + // + // Long endTime = System.currentTimeMillis() - startTime; + // String time = String.format("%d msc %d sec", endTime, + // TimeUnit.MILLISECONDS.toSeconds(endTime)); + // logger.debug("get child for Grid by id returning element in " + + // time); + GWTWorkspaceSharingBuilder builder = new GWTWorkspaceSharingBuilder(); FileModel parent = null; - if(folderParent!=null){ - logger.info("Folder parent has id: "+folderParent.getId() + " and name: "+folderParent.getName()); - parent = builder.buildGXTFileModelItem(folderParent, null); - } - else - logger.info("Folder parent for item: "+wsItem.getId() +" is null"); + if (parentItem != null) { + logger.info("Folder parent has id: " + parentItem.getId() + " and name: " + parentItem.getName()); + parent = builder.buildGXTFileModelItem(parentItem, null); + } else + logger.info("Folder parent for item: " + item.getId() + " is null"); - //BUILD ITEM - return builder.buildGXTFileModelItem(wsItem, parent); - }catch (ItemNotFoundException e){ - logger.error("Error in server during item retrieving, getFileModelByWorkpaceItemId", e); - throw new Exception("The Item id "+itemId+" not found in workspace"); + return builder.buildGXTFileModelItem(item, parent); } catch (Exception e) { - logger.error("Error in server during item retrieving, getFileModelByWorkpaceItemId", e); - String error = ConstantsSharing.SERVER_ERROR + " retrieving the item from workspace, "+e.getMessage(); + logger.error("Error in getFileModelByWorkpaceItemId(): " + e.getLocalizedMessage(), e); + String error = ConstantsSharing.SERVER_ERROR + " retrieving the item from workspace. " + + e.getLocalizedMessage(); throw new Exception(error); } } - /* (non-Javadoc) - * @see org.gcube.portlets.user.workspace.client.rpc.GWTWorkspaceService#isSessionExpired() + /* + * (non-Javadoc) + * + * @see org.gcube.portlets.user.workspace.client.rpc.GWTWorkspaceService# + * isSessionExpired() */ @Override public boolean isSessionExpired() throws Exception { return WsUtil.isSessionExpired(this.getThreadLocalRequest()); } - // DEBUG /** * Prints the contacts. * - * @param listContacts the list contacts + * @param listContacts + * the list contacts */ - private void printContacts(List listContacts) { + // private void printContacts(List listContacts) { + // + // boolean testMode = isTestMode(); + // if (testMode) + // System.out.println("Contacts: "); + // else + // logger.debug("Contacts:"); + // + // for (InfoContactModel infoContactModel : listContacts) { + // if (testMode) + // System.out.println("User: " + infoContactModel); + // else + // logger.debug("User: " + infoContactModel); + // } + // } - boolean testMode = isTestMode(); - if (testMode) - System.out.println("Contacts: "); - else - logger.debug("Contacts:"); - - for (InfoContactModel infoContactModel : listContacts) { - if (testMode) - System.out.println("User: " + infoContactModel); - else - logger.debug("User: " + infoContactModel); - } - } - - - /* (non-Javadoc) - * @see org.gcube.portlets.widgets.workspacesharingwidget.client.rpc.WorkspaceSharingService#shareFolder(org.gcube.portlets.widgets.workspacesharingwidget.shared.FileModel, java.util.List, boolean, org.gcube.portlets.widgets.workspacesharingwidget.shared.WorkspaceACL) - */ @Override - public boolean shareFolder(FileModel folder, List listContacts, boolean isNewFolder, WorkspaceACL acl) throws Exception { + public boolean shareFolder(String itemId, String name, String description, String parentId, + List listContacts, boolean isNewFolder, WorkspaceACL acl) throws Exception { - if(isSessionExpired()) + if (isSessionExpired()) throw new SessionExpiredException(); try { + logger.info("Call shareFolder(): [id=" + itemId + ", name=" + name + ", description=" + description + + ", parentId=" + parentId + ", isNewFolder=" + isNewFolder + "]"); + if (listContacts == null || listContacts.isEmpty()) { + logger.error("Invalid contacts requested: " + listContacts); + throw new Exception("Invalid contacts requested"); - Workspace workspace = getWorkspace(); - - logger.info("sharing item id: "+ folder.getIdentifier() - + " name: "+ folder.getName() -// + " parent name: " + folder.getParentFileModel().getName() - + " listContacts size: " + listContacts.size()); - -// //DEBUG - //System.out.println("shareFolder "+ folder.getIdentifier() + " name: "+ folder.getName() + " parent name: " + folder.getParentFileModel().getName() + " listContacts size: " + listContacts.size()); -// for (InfoContactModel infoContactModel : listContacts) { -// System.out.println("share with "+ infoContactModel.getLogin()); -// } -// printContacts(listContacts); + } + logger.debug("ListContacts size: " + listContacts.size()); List listLogin = UserUtil.getListLoginByInfoContactModel(listContacts); - WorkspaceSharedFolder sharedFolder = null; - List listSharedContact = null; - boolean sourceFolderIsShared = folder.isShared(); + boolean created = false; + if (!listLogin.isEmpty()) { + FolderContainer folderContainer = null; + if (!isNewFolder) { + logger.info("Sharing item: [id=" + itemId + "]"); + if (itemId == null || itemId.isEmpty()) { + logger.error("Invalid folder id requested: " + itemId); + throw new Exception("Invalid folder id requested: " + itemId); + } + StorageHubClient shc = new StorageHubClient(); + OpenResolver openResolverForItem = shc.open(itemId); + folderContainer = openResolverForItem.asFolder(); + } else { + if (parentId == null || parentId.isEmpty()) { + logger.error("Invalid parent folder id requested: " + parentId); + throw new Exception("Invalid parent folder id requested: " + parentId); + } + if (name == null || name.isEmpty()) { + logger.error("Invalid folder name: " + name); + throw new Exception("Invalid folder name: " + name); + } - if(sourceFolderIsShared){ //if source folder is already shared... retrieve old list of sharing to notify - listSharedContact = getListUserSharedByFolderSharedId(folder.getIdentifier()); - } - - if(listLogin.size()>0){ - - if(!isNewFolder){ - sharedFolder = workspace.shareFolder(listLogin, folder.getIdentifier()); - sharedFolder.setDescription(folder.getDescription()); //SET NEW DESCRIPTION + StorageHubClient shc = new StorageHubClient(); + OpenResolver openResolverForItem = shc.open(parentId); + FolderContainer parentFolderContainer = openResolverForItem.asFolder(); + folderContainer = parentFolderContainer.newFolder(name, description); } - else - sharedFolder = workspace.createSharedFolder(folder.getName(), folder.getDescription(), listLogin, folder.getParentFileModel().getIdentifier()); - } - - boolean created = sharedFolder==null?false:true; - - if(acl!=null) - setACLs(sharedFolder.getId(), listLogin, acl.getId().toString()); - - if(created){ - NotificationsProducer np = getNotificationProducer(this.getThreadLocalRequest()); - if(!sourceFolderIsShared) {//if source folder is not already shared - - //TODO ADD NOTIFICATION -// np.notifyFolderSharing(listContacts, sharedFolder); - - }else{ - /*System.out.println("SHARED CONTACS: "); - printContacts(listSharedContact); - System.out.println("NEW CONTACS: "); - printContacts(listContacts);*/ - - //TODO ADD NOTIFICATION -// np.notifyAddedUsersToSharing(listSharedContact, listContacts, sharedFolder); + FolderItem folderItem = folderContainer.get(); + if (folderItem != null) { + if (folderItem.isShared()) { + logger.debug("Folder is shared"); + if (folderItem instanceof SharedFolder) { + logger.debug("Folder type: SharedFolder"); + Set logins = new HashSet<>(listLogin); + folderContainer.share(logins, getAccessType(acl)); + created = true; + } else { + logger.debug("The folder is already shared"); + throw new Exception("The folder selected is already shared!"); + } + } else { + logger.debug("Folder is not shared"); + Set logins = new HashSet<>(listLogin); + folderContainer.share(logins, getAccessType(acl)); + created = true; + } + } else { + logger.error("Invalid folder retrieved: [id=" + itemId + "]"); + throw new Exception("Invalid folder retrieved: [id=" + itemId + "]"); } + } else { + logger.error("The list of users is invalid!"); + throw new Exception("The list of users is invalid"); + } + /* + * if (created) { NotificationsProducer np = + * getNotificationProducer(this.getThreadLocalRequest()); if + * (!sourceFolderIsShared) {// if source folder is not already // + * shared + * + * // TODO ADD NOTIFICATION // np.notifyFolderSharing(listContacts, + * sharedFolder); + * + * } else { + * + * //System.out.println("SHARED CONTACS: "); + * //printContacts(listSharedContact); + * //System.out.println("NEW CONTACS: "); + * //printContacts(listContacts); + * + * + * // TODO ADD NOTIFICATION // + * np.notifyAddedUsersToSharing(listSharedContact, // listContacts, + * sharedFolder); } } + */ + return created; - } catch (InsufficientPrivilegesException e) { - logger.error("Error in shareFolder ", e); - String error = "An error occurred on creating shared folder. "+ e.getMessage(); - throw new Exception(error); - - } catch (ItemAlreadyExistException e) { - logger.error("Error in shareFolder ", e); - String error = "An error occurred on creating shared folder. "+ e.getMessage(); - throw new Exception(error); - - } catch (WrongDestinationException e) { - logger.error("Error in shareFolder ", e); - String error = "An error occurred on creating shared folder. "+ e.getMessage(); - throw new Exception(error); - } catch (Exception e) { - logger.error("Error in shareFolder ", e); - e.printStackTrace(); - String error = ConstantsSharing.SERVER_ERROR+" sharing item."; + logger.error("Error in shareFolder(): " + e.getLocalizedMessage(), e); + String error = ConstantsSharing.SERVER_ERROR + " sharing item."; throw new Exception(error); } } - /** - * Sets the ac ls. - * - * @param folderId the folder id - * @param listLogins the list logins - * @param aclType the acl type - * @throws Exception the exception + private AccessType getAccessType(WorkspaceACL acl) { + logger.debug("Convert GXTACL to AccessType: " + acl); + if (acl.getAclType() != null) { + switch (acl.getAclType()) { + case READ_ONLY: + return AccessType.READ_ONLY; + case WRITE_ANY: + return AccessType.WRITE_ALL; + case WRITE_OWNER: + return AccessType.WRITE_OWNER; + default: + return null; + } + } else { + return null; + } + } + + /* + * (non-Javadoc) + * + * @see org.gcube.portlets.widgets.workspacesharingwidget.client.rpc. + * WorkspaceSharingService#getInfoContactModelsFromCredential(java.util. + * List) */ - public void setACLs(String folderId, List listLogins, String aclType) throws Exception{ + @Override + public List getInfoContactModelsFromCredential(List listAlreadySharedContact) + throws Exception { try { + logger.info("Call getInfoContactModelsFromCredential()"); - if(folderId == null) - throw new Exception("Folder id is null"); + if (listAlreadySharedContact == null || listAlreadySharedContact.size() == 0) + throw new Exception("Credentials list is null or empty"); - if(listLogins==null || listLogins.size()==0) - throw new Exception("List Logins is null or empty"); + GWTWorkspaceSharingBuilder builder = new GWTWorkspaceSharingBuilder(); + List listContacts = new ArrayList(listAlreadySharedContact.size()); + for (CredentialModel credentialModel : listAlreadySharedContact) { - logger.info("Setting ACL for folder id: "+folderId); - logger.info("ACL type is: "+aclType); - - Workspace workspace = getWorkspace(); - WorkspaceItem wsItem = workspace.getItem(folderId); - - //IS A WORKSPACE FOLDER? - if(wsItem!= null && wsItem.isFolder() && wsItem.isShared()){ - WorkspaceFolder ite; - if(wsItem.getType().equals(WorkspaceItemType.SHARED_FOLDER)){ - //IS ROOT SHARED FOLDER - ite = (WorkspaceSharedFolder) wsItem; - logger.trace("Folder " +ite.getName()+" is a "+WorkspaceSharedFolder.class.getName()); - }else{ - // IS SUB FOLDER OF THE SHARING - ite = (WorkspaceFolder) wsItem; - logger.trace("Folder " +ite.getName()+" is a "+WorkspaceFolder.class.getName()); + if (!credentialModel.isGroup()) { + InfoContactModel contact = builder.buildGxtInfoContactFromPortalLogin(credentialModel.getLogin()); + contact.setReferenceCredential(credentialModel); + listContacts.add(contact); + logger.trace("Converted contact: " + credentialModel + ", into: " + contact); + } else if (credentialModel.getName() == null || credentialModel.getName().isEmpty()) { + InfoContactModel contact = builder.buildGxtInfoContactFromPortalGroup(credentialModel.getLogin()); + contact.setReferenceCredential(credentialModel); + listContacts.add(contact); + logger.trace("Converted group: " + credentialModel + ", into: " + contact); } + } - ite.setACL(listLogins, ACLType.valueOf(aclType)); - }else - throw new Exception("Source item is not shared or shared folder"); + return listContacts; - logger.info("Setting ACL for "+wsItem.getName()+" completed, returning"); } catch (Exception e) { - logger.info("Error in set ACLs", e); - String error = ConstantsSharing.SERVER_ERROR +" setting permissions. "+e.getMessage(); + logger.error("Error in getInfoContactModelsFromCredential(): " + e.getLocalizedMessage(), e); + String error = ConstantsSharing.SERVER_ERROR + " retrieving contacts info from user credentials."; throw new Exception(error); } } - /* (non-Javadoc) - * @see org.gcube.portlets.widgets.workspacesharingwidget.client.rpc.WorkspaceSharingService#getInfoContactModelsFromCredential(java.util.List) + /* + * (non-Javadoc) + * + * @see org.gcube.portlets.widgets.workspacesharingwidget.client.rpc. + * WorkspaceSharingService#getAdministratorsByFolderId(java.lang.String) */ @Override - public List getInfoContactModelsFromCredential(List listAlreadySharedContact) throws Exception { - - if(listAlreadySharedContact==null || listAlreadySharedContact.size()==0) - throw new Exception("Credentials list is null or empty"); - - - GWTWorkspaceSharingBuilder builder = getGWTWorkspaceBuilder(); - List listContacts = new ArrayList(listAlreadySharedContact.size()); - for (CredentialModel credentialModel : listAlreadySharedContact) { - - if(!credentialModel.isGroup()){ - InfoContactModel contact = builder.buildGxtInfoContactFromPortalLogin(credentialModel.getLogin()); - contact.setReferenceCredential(credentialModel); - listContacts.add(contact); - logger.trace("Converted contact: "+credentialModel +", into: "+contact); - }else if(credentialModel.getName()==null || credentialModel.getName().isEmpty()){ - InfoContactModel contact = builder.buildGxtInfoContactFromPortalGroup(credentialModel.getLogin()); - contact.setReferenceCredential(credentialModel); - listContacts.add(contact); - logger.trace("Converted group: "+credentialModel +", into: "+contact); - } - } - - return listContacts; - } - - /* (non-Javadoc) - * @see org.gcube.portlets.widgets.workspacesharingwidget.client.rpc.WorkspaceSharingService#getAdministratorsByFolderId(java.lang.String) - */ - @Override - public List getAdministratorsByFolderId(String sharedFolderId) throws Exception { - - if(sharedFolderId==null || sharedFolderId.isEmpty()) - throw new Exception("Shared Folder id is null or empty"); + public List getAdministratorsByFolderId(String itemId) throws Exception { try { + logger.info("Call getAdministratorsByFolderId(): [itemId=" + itemId + "]"); - Workspace workspace = getWorkspace(); - WorkspaceItem item = workspace.getItem(sharedFolderId); - logger.info("Getting administator/s to folder: "+sharedFolderId); + if (itemId == null || itemId.isEmpty()) { + String error = "Invalid shared folder: [id=" + itemId + "]"; + logger.error(error); + throw new Exception(error); + } + StorageHubClient shc = new StorageHubClient(); + OpenResolver openResolverForItem = shc.open(itemId); + FolderContainer folderContainer = openResolverForItem.asFolder(); + FolderItem folderItem = folderContainer.get(); + if (folderItem.isShared()) { + if (folderItem instanceof SharedFolder) { + return retrieveAdminContactsFromACLs(folderContainer); - if(item!=null && item.getType().equals(WorkspaceItemType.SHARED_FOLDER)){ - WorkspaceSharedFolder sharedFolder = (WorkspaceSharedFolder) item; - GWTWorkspaceSharingBuilder builder = getGWTWorkspaceBuilder(); - List admins = sharedFolder.getAdministrators(); - logger.info("Converting "+admins.size()+" administator/s List"); + } else { + FolderContainer rootSharedFolderContainer = folderContainer.getRootSharedFolder(); + FolderItem rootSharedFolder = rootSharedFolderContainer.get(); + if (rootSharedFolder instanceof SharedFolder) { + return retrieveAdminContactsFromACLs(rootSharedFolderContainer); + } else { + String error = "The root shared folder has a invalid type: RootSharedFolder[id=" + + rootSharedFolder.getId() + "]"; + logger.error(error); + throw new Exception(error); + } + } + } else { + logger.error("The item requested is not a valid shared folder : [itemId=" + itemId + "]"); + throw new Exception("The item requested is not a valid shared folder : [itemId=" + itemId + "]"); + } - if(isTestMode()) - return builder.buildGxtInfoContactFromPortalLoginTestMode(admins); - - return builder.buildGxtInfoContactsFromPortalLogins(admins); - }else - throw new Exception("The item is null or not instanceof "+WorkspaceItemType.SHARED_FOLDER); - } catch (ItemNotFoundException e){ - logger.error("Error in server getAdministratorsByFolderId", e); - throw new Exception("The Item id "+sharedFolderId+" not found in workspace or is not a shared folder"); } catch (Exception e) { - logger.error("Error in server getAdministratorsByFolderId", e); - String error = "Sorry an error occurred on getting Administrators"; + logger.error("Error in getAdministratorsByFolderId(): " + e.getLocalizedMessage(), e); + throw new Exception("Sorry an error occurred on getting Administrators"); + } + } + + /* + * (non-Javadoc) + * + * @see org.gcube.portlets.user.workspace.client.rpc.GWTWorkspaceService# + * addAdministratorsByFolderId(java.lang.String, java.util.List) + * + * true if administrators have been added, false otherwise + */ + /** + * Adds the administrators by folder id. + * + * @param itemId + * the folder id + * @param listContactLogins + * the list contact logins + * @return true, if successful + * @throws Exception + * the exception + */ + @Override + public boolean addAdministratorsByFolderId(String itemId, List listContactLogins) throws Exception { + try { + logger.info("Call addAdministratorsByFolderId(): [itemId=" + itemId + ", listContactLogins" + + listContactLogins + "]"); + logger.info("This function is not available in StorageHub!"); + return false; + // if(folderId==null || listContactLogins==null || + // listContactLogins.size()==0) + // return false; + // Workspace workspace = getWorkspace(); + // WorkspaceItem item = workspace.getItem(folderId); + // workspaceLogger.info("Adding administator/s to folder: + // "+folderId); + // + // if(item!=null && + // item.getType().equals(WorkspaceItemType.SHARED_FOLDER)){ + // WorkspaceSharedFolder sharedFolder = (WorkspaceSharedFolder) + // item; + // + // //retrieving old administrators list + // GWTWorkspaceBuilder builder = getGWTWorkspaceBuilder(); + // workspaceLogger.info("Retrieving old administator/s.."); + // List oldAdmins = + // builder.buildGxtInfoContactsFromPortalLogins(sharedFolder.getAdministrators()); + // workspaceLogger.info("Retrieving old administator/s are/is: + // "+oldAdmins.size()); + // + // workspaceLogger.info("Setting administators:"); + // printList(listContactLogins); + // sharedFolder.setAdmins(listContactLogins); + // + // workspaceLogger.info("Converting new administator/s.."); + // List newAdmins = + // builder.buildGxtInfoContactsFromPortalLogins(listContactLogins); + // NotificationsProducer np = getNotificationProducer(); + // + // workspaceLogger.info("Sending notifications downgrade/upgrade + // administator/s.."); + // DifferenceBetweenInfoContactModel diff1 = new + // DifferenceBetweenInfoContactModel(oldAdmins, newAdmins); + // List contactsDowngrade = + // diff1.getDifferentsContacts(); + // + // for (InfoContactModel infoContactModel : contactsDowngrade) { + // np.notifyAdministratorDowngrade(infoContactModel, sharedFolder); + // } + // + // DifferenceBetweenInfoContactModel diff2 = new + // DifferenceBetweenInfoContactModel(newAdmins, oldAdmins); + // List contactsUpgrade = + // diff2.getDifferentsContacts(); + // + // for (InfoContactModel infoContactModel : contactsUpgrade) { + // np.notifyAdministratorUpgrade(infoContactModel, sharedFolder); + // } + // + // return true; + // + // }else + // throw new Exception("The item is null or not instanceof + // "+WorkspaceItemType.SHARED_FOLDER); + + } catch (Exception e) { + logger.error("Error in addAdministratorsByFolderId(): " + e.getLocalizedMessage(), e); + String error = "Attention, administrators can not be added by StorageHub."; throw new Exception(error); } + } - - /** - * DEBUG. - * - * @return the fake groups - */ - private List getFakeGroups(){ - - List listContactsModel = new ArrayList(); - - PortalContext context = PortalContext.getConfiguration(); - System.out.println("context.getInfrastructureName(): "+context.getInfrastructureName()); -// System.out.println("context.getVOsAsString(): "+context.getVOsAsString()); - List vos = WsUtil.getVresFromInfrastructure(context.getInfrastructureName(), "devsec"); - - for (VO vo : vos) { - System.out.println("vo name "+vo.getName()); - - for (VRE vre : vo.getVres()) { - System.out.println("vre name "+vre.getName()); - listContactsModel.add(new InfoContactModel(vre.getName(), vre.getName(), vre.getName(), true)); + private List retrieveAdminContactsFromACLs(FolderContainer folderContainer) throws Exception { + List acls = folderContainer.getAcls(); + logger.debug("Retrieved acls: " + acls); + List admins = new ArrayList<>(); + for (ACL acl : acls) { + boolean isAdmin = false; + for (AccessType accesstype : acl.getAccessTypes()) { + if (accesstype != null && accesstype == AccessType.ADMINISTRATOR) { + isAdmin = true; + break; + } + } + if (isAdmin) { + admins.add(acl.getPricipal()); } } - - return listContactsModel; + logger.debug("Retrieved admins list: " + admins); + GWTWorkspaceSharingBuilder builder = new GWTWorkspaceSharingBuilder(); + return builder.buildGxtInfoContactsFromPortalLogins(admins); } - /* (non-Javadoc) - * @see org.gcube.portlets.widgets.workspacesharingwidget.client.rpc.WorkspaceSharingService#getACLForSharedItemId(java.lang.String) + // /** + // * DEBUG. + // * + // * @return the fake groups + // */ + // private List getFakeGroups() { + // + // List listContactsModel = new + // ArrayList(); + // + // PortalContext context = PortalContext.getConfiguration(); + // System.out.println("context.getInfrastructureName(): " + + // context.getInfrastructureName()); + // // System.out.println("context.getVOsAsString(): + // // "+context.getVOsAsString()); + // List vos = + // WsUtil.getVresFromInfrastructure(context.getInfrastructureName(), + // "devsec"); + // + // for (VO vo : vos) { + // System.out.println("vo name " + vo.getName()); + // + // for (VRE vre : vo.getVres()) { + // System.out.println("vre name " + vre.getName()); + // listContactsModel.add(new InfoContactModel(vre.getName(), vre.getName(), + // vre.getName(), true)); + // } + // } + // + // return listContactsModel; + // } + + /* + * (non-Javadoc) + * + * @see org.gcube.portlets.widgets.workspacesharingwidget.client.rpc. + * WorkspaceSharingService#getACLForSharedItemId(java.lang.String) * * return the WorkspaceACL of shared folder, null otherwise */ @Override - public WorkspaceACL getACLsForSharedFolderId(String itemID) throws Exception{ - logger.info("Getting ACLBySharedFolderId: "+itemID); - if(itemID==null || itemID.isEmpty()){ - logger.warn("Getting ACLBySharedFolderId identifier is null or empty, returning null"); - return null; - } + public WorkspaceACL getACLsForSharedFolderId(String itemId) throws Exception { try { + logger.info("Call getACLsForSharedFolderId(): [itemId=" + itemId + "]"); - Workspace workspace = getWorkspace(); - WorkspaceItem item = workspace.getItem(itemID); - - if(isASharedFolder(item, false)){ //IS A SHARED FOLDER - - //TODO REMOVE PARENT SHARED FOLDER -// WorkspaceSharedFolder parentSharedFolder = (WorkspaceSharedFolder) workspace.getItem(item.getIdSharedFolder()); - WorkspaceSharedFolder sharedFolder = (WorkspaceSharedFolder) item; - GWTWorkspaceSharingBuilder builder = getGWTWorkspaceBuilder(); - - logger.info("Read getPrivilege from HL: "+sharedFolder.getACLUser()); - List wsAcls = builder.getWorkspaceACLFromACLs(Arrays.asList(sharedFolder.getACLUser())); - - if(wsAcls==null || wsAcls.isEmpty()){ - logger.info("Converted ACLBySharedFolderId is null or empty, returning null"); - return null; - } - - logger.info("Returning first acl with id: "+wsAcls.get(0).getId()); - return wsAcls.get(0); - - }else - throw new Exception("The item is null or not a shared folder"); - - } catch (Exception e) { - logger.error("Error in server getACLForSharedItemId", e); - String error = "Sorry an error occurred when getting ACL for item: "+itemID; - throw new Exception(error); - } - } - - /** - * Gets the AC ls description for shared folder id. - * - * @param folderId the folder id - * @return Formatted HTML DIV containing ACLs description for folderId - * @throws Exception the exception - */ - @Override - public String getACLsDescriptionForSharedFolderId(String folderId) throws Exception{ - try { - - WorkspaceFolder wsFolder = getSharedFolderForId(folderId); - GWTWorkspaceSharingBuilder builder = getGWTWorkspaceBuilder(); - return builder.getFormattedHtmlACLFromACLs(wsFolder.getACLOwner()); - } catch (Exception e) { - logger.error("Error in server get getACLForFolderId", e); - String error = "Sorry an error occurred when getting ACL rules for selected folder. "+e.getMessage(); - throw new Exception(error); - } - } - - /** - * Gets the shared folder for id. - * - * @param folderId the folder id - * @return the shared folder for id - * @throws Exception the exception - */ - private WorkspaceFolder getSharedFolderForId(String folderId) throws Exception{ - - if(folderId == null) - throw new Exception("Folder id is null"); - - logger.trace("Get SharedFolderForId: "+folderId); - - Workspace workspace = getWorkspace(); - WorkspaceItem wsItem = null; - - try{ - wsItem = workspace.getItem(folderId); - }catch(Exception e){ - logger.error("Get SharedFolderForId error on folder id: "+folderId, e); - throw new Exception("Sorry, an error has occurred on the server when retrieving item with id: "+folderId+". Try again later!"); - } - - if(isASharedFolder(wsItem, false)){ - logger.trace("Get SharedFolderForId: folder id "+folderId+" is shared"); - - //TODO REMOVE wsItem.getIdSharedFolder() -// WorkspaceSharedFolder wsFolder = (WorkspaceSharedFolder) workspace.getItem(wsItem.getIdSharedFolder()); - WorkspaceFolder wsFolder = (WorkspaceFolder) workspace.getItem(wsItem.getId()); - - if(wsFolder!=null){ - logger.info("Get SharedFolderForId return name: "+wsFolder.getName()); - return wsFolder; - - //TODO USE THIS -// return (WorkspaceFolder) wsItem; - - }else{ - logger.warn("Source item is not a shared folder, throw exception"); - throw new Exception("Source item is not a shared folder"); + if (itemId == null || itemId.isEmpty()) { + String error = "Invalid shared folder: [itemId=" + itemId + "]"; + logger.error(error); + return null; } - }else{ - logger.warn("Source item is null or not shared, throw exception"); - throw new Exception("Source item is null or not shared for id: "+folderId); - } - } - - /** - * Checks if is a shared folder. - * - * @param itemID the item id - * @param asRoot true check if itemID is root, not otherwise - * @return true, if is a shared folder - */ - - public boolean isASharedFolder(String itemID, boolean asRoot){ - try { - - if(itemID==null) - throw new Exception("ItemId is null"); - - Workspace workspace = getWorkspace(); - WorkspaceItem item = workspace.getItem(itemID); - - return isASharedFolder(item, asRoot); - - }catch(Exception e){ - logger.error("Error in server isASharedFolder", e); - return false; - } - } - - /** - * Checks if is a shared folder. - * - * @param item the item - * @param asRoot the as root - * @return true, if is a shared folder - */ - public boolean isASharedFolder(WorkspaceItem item, boolean asRoot){ - try { - - if(item!=null && item.isFolder() && item.isShared()){ //IS A SHARED SUB-FOLDER - if(asRoot) - return item.getType().equals(WorkspaceItemType.SHARED_FOLDER); //IS ROOT? - - return true; - } - - return false; - }catch(Exception e){ - logger.error("Error in server isASharedFolder", e); - return false; - } - } - - /** - * Check list share name for group. - * - * @param listAlreadySharedContact the list already shared contact - * @return the list - */ - /*private static List checkShareNameForGroup(List listAlreadySharedContact){ - - if(listAlreadySharedContact==null) - return null; - - for (CredentialModel credentialModel : listAlreadySharedContact) { - if(credentialModel.isGroup() && (credentialModel.getName()==null || credentialModel.getName().isEmpty())){ - - //RECOVERING VRE NAME - if(credentialModel.getLogin().contains("/")){ - - int start = credentialModel.getLogin().lastIndexOf("/"); - int end = credentialModel.getLogin().length(); - - if(start acls = folderContainer.getAcls(); + logger.debug("Retrieved acls: " + acls); + GWTWorkspaceSharingBuilder builder = new GWTWorkspaceSharingBuilder(); + List wsAcls = builder.getWorkspaceACLFromACLs(acls); + if (wsAcls == null || wsAcls.isEmpty()) { + logger.info("Converted ACLBySharedFolderId is null or empty, returning null"); + return null; + } + + logger.info("Returning first acl with id: " + wsAcls.get(0).getId()); + return wsAcls.get(0); + } + + @Override + public String getACLsDescriptionForSharedFolderId(String itemId) throws Exception { + try { + + logger.info("Call getACLsDescriptionForSharedFolderId(): [itemId=" + itemId + "]"); + + if (itemId == null || itemId.isEmpty()) { + String error = "Invalid shared folder: [id=" + itemId + "]"; + logger.error(error); + return null; + } + StorageHubClient shc = new StorageHubClient(); + OpenResolver openResolverForItem = shc.open(itemId); + FolderContainer folderContainer = openResolverForItem.asFolder(); + FolderItem folderItem = folderContainer.get(); + if (folderItem.isShared()) { + if (folderItem instanceof SharedFolder) { + return retrieveACLsDescription(folderContainer); + } else { + FolderContainer rootSharedFolderContainer = folderContainer.getRootSharedFolder(); + FolderItem rootSharedFolder = rootSharedFolderContainer.get(); + if (rootSharedFolder instanceof SharedFolder) { + return retrieveACLsDescription(rootSharedFolderContainer); + } else { + String error = "The root shared folder has a invalid type: RootSharedFolder[id=" + + rootSharedFolder.getId() + "]"; + logger.error(error); + return null; + } + } + } else { + String error = "This item isn't a valid shared folder: [id=" + itemId + "]"; + logger.error(error); + return null; + } + + } catch (Exception e) { + logger.error("Error in getACLsDescriptionForSharedFolderId(): " + e.getLocalizedMessage(), e); + String error = "Sorry an error occurred when getting ACL rules for selected folder. " + + e.getLocalizedMessage(); + throw new Exception(error); + } + } + + private String retrieveACLsDescription(FolderContainer folderContainer) throws Exception { + List acls = folderContainer.getAcls(); + logger.debug("Retrieved acls: " + acls); + GWTWorkspaceSharingBuilder builder = new GWTWorkspaceSharingBuilder(); + return builder.getFormattedHtmlACLFromACLs(acls); + } + + @Override + public boolean unSharedFolderByFolderSharedId(String itemId) throws Exception { + + if (isSessionExpired()) + throw new SessionExpiredException(); + + try { + logger.debug("Call unSharedFolderByFolderSharedId(): [id=" + itemId + "]"); + if (itemId == null || itemId.isEmpty()) { + logger.error("Invalid folder requested: [id=" + itemId + "]"); + throw new Exception("Invalid folder requested: [id=" + itemId + "]"); + } + boolean shared = false; + StorageHubClient shc = new StorageHubClient(); + OpenResolver openResolver = shc.open(itemId); + FolderContainer folderContainer = openResolver.asFolder(); + FolderItem folderItem = folderContainer.get(); + if (folderItem != null) { + if (folderItem.isShared()) { + logger.debug("Folder is shared"); + if (folderItem instanceof SharedFolder) { + logger.debug("Folder type: SharedFolder"); + SharedFolder sharedFolder = (SharedFolder) folderItem; + folderContainer.unshare(sharedFolder.getUsers().getMap().keySet()); + shared = true; + } else { + String msg = "The folder requested is not a root shared folder." + + "To unshare this folder you have to unshare the root shared folder!"; + logger.debug(msg); + throw new Exception("The folder requested is not a root shared folder." + + "To unshare this folder you have to unshare the root shared folder"); + } + } else { + logger.error("Folder requested is not a shared "); + throw new Exception("The folder requested is not shared!"); + + } + } else { + logger.error("Invalid folder retrieved: [id=" + itemId + "]"); + throw new Exception("Invalid folder retrieved: [id=" + itemId + "]"); + } + + return shared; + + } catch (Exception e) { + logger.error("Error in unSharedFolderByFolderSharedId(): " + e.getLocalizedMessage(), e); + String error = ConstantsSharing.SERVER_ERROR + " unsharing item."; + throw new Exception(error); + } + } + + /** + * Gets the user acl for folder id. + * + * @param itemId + * the folder id + * @return the user acl for folder id + * @throws Exception + * the exception + */ + @Override + public List getUserACLForFolderId(String itemId) throws Exception { + try { + logger.info("Call getUserACLForFolderId(): [itemId=" + itemId + "]"); + + if (itemId == null || itemId.isEmpty()) { + String error = "Invalid shared folder: [itemId=" + itemId + "]"; + logger.error(error); + return null; + } + StorageHubClient shc = new StorageHubClient(); + OpenResolver openResolverForItem = shc.open(itemId); + FolderContainer folderContainer = openResolverForItem.asFolder(); + FolderItem folderItem = folderContainer.get(); + if (folderItem.isShared()) { + if (folderItem instanceof SharedFolder) { + List acls = retrieveACLsFromFolderContainer(folderContainer); + List listEACL = new ArrayList(acls.size()); + for (WorkspaceACL workspaceACL : acls) { + boolean isBaseSharedFolder = true; + ExtendedWorkspaceACL eac = new ExtendedWorkspaceACL(workspaceACL.getId(), + workspaceACL.getAclType(), workspaceACL.getLabel(), workspaceACL.getDefaultValue(), + workspaceACL.getUserType(), workspaceACL.getDescription(), folderItem.getOwner(), + itemId, isBaseSharedFolder); + logger.debug("ACL " + workspaceACL + " converted in: " + eac); + listEACL.add(eac); + } + return listEACL; + } else { + FolderContainer rootSharedFolderContainer = folderContainer.getRootSharedFolder(); + FolderItem rootSharedFolder = rootSharedFolderContainer.get(); + if (rootSharedFolder instanceof SharedFolder) { + List acls = retrieveACLsFromFolderContainer(folderContainer); + List listEACL = new ArrayList(acls.size()); + for (WorkspaceACL workspaceACL : acls) { + boolean isBaseSharedFolder = true; + ExtendedWorkspaceACL eac = new ExtendedWorkspaceACL(workspaceACL.getId(), + workspaceACL.getAclType(), workspaceACL.getLabel(), workspaceACL.getDefaultValue(), + workspaceACL.getUserType(), workspaceACL.getDescription(), folderItem.getOwner(), + itemId, isBaseSharedFolder); + logger.debug("ACL " + workspaceACL + " converted in: " + eac); + listEACL.add(eac); + } + return listEACL; + } else { + String error = "The root shared folder has a invalid type: RootSharedFolder[id=" + + rootSharedFolder.getId() + "]"; + logger.error(error); + throw new Exception(error); + } + } + } else { + logger.error("The item is not a shared folder: [id=" + itemId + "]"); + throw new Exception("The item is not a shared folder"); + } + + } catch (Exception e) { + logger.error("Error in getUserACLForFolderId(): " + e.getLocalizedMessage(), e); + throw new Exception("Error retrieving ACL rules for selected folder: " + e.getLocalizedMessage(), e); + } + } + + private List retrieveACLsFromFolderContainer(FolderContainer folderContainer) throws Exception { + List acls = folderContainer.getAcls(); + logger.debug("Retrieved acls: " + acls); + GWTWorkspaceSharingBuilder builder = new GWTWorkspaceSharingBuilder(); + List wsAcls = builder.getWorkspaceACLFromACLs(acls); + if (wsAcls == null || wsAcls.isEmpty()) { + logger.info("Converted ACLBySharedFolderId is null or empty, returning null"); + return null; + } + + logger.info("Returning first acl with id: " + wsAcls.get(0).getId()); + return wsAcls; + } + + /** + * Gets ACLs Description For WorkspaceItem ById. + * + * @param itemId + * the folder id + * @return a description of the ACLs + * @throws Exception + * the exception + */ + @Override + public String getACLsDescriptionForWorkspaceItemById(String itemId) throws Exception { + try { + + logger.info("Call getACLsDescriptionForWorkspaceItemById(): " + itemId); + + StorageHubClient shc = new StorageHubClient(); + OpenResolver openResolverForItem = shc.open(itemId); + FolderContainer folderContainer = openResolverForItem.asFolder(); + String aclDescription = retrieveACLsDescription(folderContainer); + logger.debug("Retrieved ACL description: " + aclDescription); + return aclDescription; + + } catch (Exception e) { + logger.error("Error in getACLsDescriptionForWorkspaceItemById(): " + e.getLocalizedMessage(), e); + throw new Exception("Error retrieving ACL descriptions for requested item: " + e.getLocalizedMessage(), e); + } + } + + /* + * (non-Javadoc) + * + * @see org.gcube.portlets.user.workspace.client.rpc.GWTWorkspaceService# + * accessToFolderLink(java.lang.String) + */ + /** + * Access to folder link. + * + * @param itemId + * the item id + * @return the allow access + * @throws SessionExpiredException + * the session expired exception + * @throws Exception + * the exception + */ + @Override + public AllowAccess accessToFolderLink(String itemId) throws Exception { + try { + logger.info("Call accessToFolderLink(): " + itemId); + StorageHubClient shc = new StorageHubClient(); + OpenResolver openResolverForItem = shc.open(itemId); + FolderContainer folderContainer = openResolverForItem.asFolder(); + FolderItem folderItem = folderContainer.get(); + InfoContactModel owner = null; + if (folderItem != null) { + logger.debug("Owner: " + folderItem.getOwner()); + PortalContextInfo info = WsUtil.getPortalContext(this.getThreadLocalRequest()); + if (folderItem.getOwner() != null && !folderItem.getOwner().isEmpty()) { + GWTWorkspaceSharingBuilder builder = new GWTWorkspaceSharingBuilder(); + + List listContactsModel = builder.buildGXTListContactsModelFromUserModel(info); + for (InfoContactModel icm : listContactsModel) { + if (icm.getLogin().compareTo(folderItem.getOwner()) == 0) { + logger.debug("Retrieved: " + icm); + owner = icm; + } + } + logger.debug("Owner not found from user model!"); + owner = new InfoContactModel(folderItem.getOwner(), folderItem.getOwner(), folderItem.getOwner(), + false); + } else { + logger.debug("Owner not found from item"); + owner = new InfoContactModel(); + } + + String username = info.getUsername(); + if (folderItem.isPublicItem()) { + logger.info("The folder is already public. Access granted to " + username); + return new AllowAccess(itemId, true, "The folder is already public. Access granted to " + username, + null); + } + logger.info("owner of: " + folderItem.getName() + " is: " + owner); + logger.info("current context user: " + username); + if (owner.getLogin().compareToIgnoreCase(username) == 0) { + logger.info("Access to Folder Link " + folderItem.getName() + " granted, " + username + + " is the owner of: " + itemId); + return new AllowAccess(itemId, true, + info.getUserFullName() + " is the owner of: " + folderItem.getName(), null); + } + + try { + List admins = null; + + if (folderItem.isShared()) { + if (folderItem instanceof SharedFolder) { + admins = retrieveAdminContactsFromACLs(folderContainer); + + } else { + FolderContainer rootSharedFolderContainer = folderContainer.getRootSharedFolder(); + FolderItem rootSharedFolder = rootSharedFolderContainer.get(); + if (rootSharedFolder instanceof SharedFolder) { + admins = retrieveAdminContactsFromACLs(rootSharedFolderContainer); + } else { + String error = "The root shared folder has a invalid type: RootSharedFolder[id=" + + rootSharedFolder.getId() + "]"; + logger.error(error); + throw new Exception(error); + } + } + } else { + logger.error("The item requested is not a valid shared folder : [itemId=" + itemId + "]"); + throw new Exception( + "The item requested is not a valid shared folder : [itemId=" + itemId + "]"); + } + + for (InfoContactModel infoContactModel : admins) { + if (infoContactModel.getLogin().compareToIgnoreCase(username) == 0) { + logger.info("Access to Folder Link " + logger.getName() + " granted, " + username + + " is the admin of: " + itemId); + return new AllowAccess(itemId, true, + info.getUserFullName() + " is the admin of: " + folderItem.getName(), null); + } + } + } catch (Exception e) { + return new AllowAccess(itemId, false, + "You have not permission to get Folder Link, you must be owner or administrator to the folder", + e.getMessage()); + } + + return new AllowAccess(itemId, false, + "You have not permission to get Folder Link, you must be owner or administrator to the folder", + null); + } else { + return new AllowAccess(itemId, false, "The item is not a folder", null); + } + + } catch ( + + Exception e) { + logger.error("Error in server FormattedGcubeItemProperties: " + e.getLocalizedMessage(), e); + String error = "Error when reading access policy to Folder Link: " + itemId + ", Refresh and try again"; + throw new Exception(error, e); + } + } + + /* + * (non-Javadoc) + * + * @see + * org.gcube.portlets.user.workspace.client.rpc.GWTWorkspaceService#setACLs( + * java.lang.String, java.util.List, java.lang.String) + */ + /** + * Sets the ac ls. + * + * @param itemId + * the folder id + * @param listLogins + * the list logins + * @param aclType + * the acl type + * @throws Exception + * the exception + */ + @Override + public void setACLs(String itemId, List listLogins, String aclType) throws Exception { + try { + logger.info("Call setACLs(): [itemId=" + itemId + ", listLogins=" + listLogins + ", aclType=" + aclType); + String error = "Set ACLs is not enabled in StorageHub. You must share, or unshare a root folder for set ACLs."; + logger.error(error); + throw new Exception(error); + // if(folderId == null) + // throw new Exception("Folder id is null"); + // + // if(listLogins==null || listLogins.size()==0) + // throw new Exception("List Logins is null or empty"); + // + // logger.trace("Setting ACL for folder id: "+folderId); + // logger.trace("ACL type is: "+aclType); + // Workspace workspace = getWorkspace(); + // WorkspaceItem wsItem = workspace.getItem(folderId); + // + // //IS A WORKSPACE FOLDER? + // if(wsItem!= null && wsItem.isFolder() && wsItem.isShared()){ + // WorkspaceFolder ite; + // if(wsItem.getType().equals(WorkspaceItemType.SHARED_FOLDER)){ + // //IS ROOT SHARED FOLDER + // ite = (WorkspaceSharedFolder) wsItem; + // logger.trace("Folder " +ite.getName()+" is a + // "+WorkspaceSharedFolder.class.getName()); + // // ite = (WorkspaceSharedFolder) + // workspace.getItemByPath(wsItem.getPath()); + // }else{ + // // IS SUB FOLDER OF THE SHARING + // ite = (WorkspaceFolder) wsItem; + // logger.trace("Folder " +ite.getName()+" is a + // "+WorkspaceFolder.class.getName()); + // // ite = (WorkspaceSharedFolder) + // workspace.getItem(wsItem.getIdSharedFolder()); + // } + // + // ite.setACL(listLogins, ACLType.valueOf(aclType)); + // }else + // throw new Exception("Source item is not shared or shared + // folder"); + // + // logger.info("Setting ACL for "+wsItem.getName()+" completed, + // returning"); + } catch (Exception e) { + logger.error("Error in setACLs(): " + e.getLocalizedMessage(), e); + String error = "Error setting permissions. " + e.getLocalizedMessage(); + throw new Exception(error, e); + } + } + + /** + * Validate acl to user. + * + * @param itemId + * the folder id + * @param listLogins + * the list logins + * @param aclType + * the acl type + * @return the report assignment acl + * @throws Exception + * the exception + */ + @Override + public ReportAssignmentACL validateACLToUser(String itemId, List listLogins, String aclType) + throws Exception { + + try { + logger.info("Call validateACLToUser(): [itemId=" + itemId + "]"); + + if (itemId == null || itemId.isEmpty()) { + String error = "Invalid folder id: [itemId=" + itemId + "]"; + logger.error(error); + return null; + } + + AccessType settingACL = AccessType.valueOf(aclType); + if (settingACL == null) { + String error = "Invalid acl type requested: [AccessType=" + aclType + "]"; + logger.error(error); + return null; + } + + StorageHubClient shc = new StorageHubClient(); + OpenResolver openResolverForItem = shc.open(itemId); + FolderContainer folderContainer = openResolverForItem.asFolder(); + FolderItem folderItem = folderContainer.get(); + if (folderItem.isShared()) { + if (folderItem instanceof SharedFolder) { + List acls = folderContainer.getAcls(); + logger.debug("Retrieved acls: " + acls); + return createReportAssignementACL(acls, listLogins, settingACL); + + } else { + FolderContainer rootSharedFolderContainer = folderContainer.getRootSharedFolder(); + FolderItem rootSharedFolder = rootSharedFolderContainer.get(); + if (rootSharedFolder instanceof SharedFolder) { + List acls = folderContainer.getAcls(); + logger.debug("Retrieved acls: " + acls); + return createReportAssignementACL(acls, listLogins, settingACL); + + } else { + String error = "The root shared folder has a invalid type: RootSharedFolder[id=" + + rootSharedFolder.getId() + "]"; + logger.error(error); + throw new Exception(error); + } + } + } else { + logger.error("The item is not a shared folder: [id=" + itemId + "]"); + throw new Exception("The item is not a shared folder"); + } + + } catch (Exception e) { + logger.error("Error on setting ACLs", e); + throw new Exception("Sorry, an error occurred when validating ACL assignment, try again later"); + } + + } + + private ReportAssignmentACL createReportAssignementACL(List acls, List listLogins, + AccessType settingACL) { + + logger.debug("Retrieved acls: " + acls); + List admins = new ArrayList<>(); + + // REMOVE ADMINS + for (ACL acl : acls) { + boolean isAdmin = false; + for (AccessType accesstype : acl.getAccessTypes()) { + if (accesstype != null && accesstype == AccessType.ADMINISTRATOR) { + isAdmin = true; + break; + } + } + if (isAdmin) { + admins.add(acl.getPricipal()); } } - return listAlreadySharedContact; - }*/ - - /** - * The main method. - * - * @param args the arguments - */ - public static void main(String[] args) { - - /*try { - String root="gcube"; - String nameVO = "devsec"; - String vrePath = ConstantsSharing.PATH_SEPARATOR+root + ConstantsSharing.PATH_SEPARATOR + nameVO + ConstantsSharing.PATH_SEPARATOR; - - List lsVOs = WsUtil.getVresFromInfrastructure(root, nameVO); - GWTWorkspaceSharingBuilder builder = new GWTWorkspaceSharingBuilder(); - List groups = builder.buildGXTListContactsModelFromVOs(lsVOs, vrePath); - - for (VO vo : lsVOs) { - System.out.println(vo.getName()); - - for (VRE vre : vo.getVres()) { - System.out.println("VRE: "+vre.getName()); + List errors = new ArrayList(); + if (!admins.isEmpty()) { + for (String admin : admins) { + boolean removed = listLogins.remove(admin); + logger.info("Reject username: " + admin + " as " + AccessType.ADMINISTRATOR); + if (removed) { + String fullname = isTestMode() ? admin : UserUtil.getUserFullName(admin); + errors.add("Unable to grant the privilege " + settingACL + " for " + fullname + ", he/she is an: " + + AccessType.ADMINISTRATOR); } } + } -// for (InfoContactModel infoContactModel : groups) { -// System.out.println(infoContactModel); -// } + // COMPLETE REPORT + AccessTypeComparator comparator = new AccessTypeComparator(); + List validLogins = new ArrayList(listLogins); + ReportAssignmentACL reportValidation = new ReportAssignmentACL(); + logger.debug("\nChecking listLogins: " + listLogins); - } catch (Exception e) { - // TODO Auto-generated catch block - e.printStackTrace(); - }*/ + for (String username : listLogins) { + logger.trace("\nChecking username: " + username); + String fullname = isTestMode() ? username : UserUtil.getUserFullName(username); + for (ACL acl : acls) { + if (acl.getPricipal().compareTo(username) == 0) { + checkAccessType(settingACL, errors, comparator, validLogins, username, fullname, acl); + break; + } + } + } - /*List list = new ArrayList(); - list.add(new CredentialModel(null, "test.user", false)); - list.add(new CredentialModel(null, "/gcube/devsec/devVRE", true)); - list.add(new CredentialModel(null, "francesco.mangiacrapa", false)); - list.add(new CredentialModel(null, "devVRE", true)); - list.add(new CredentialModel(null, "/gcube/devsec/NextNext", true)); + logger.info("Valid logins: "); + for (String username : validLogins) { + logger.info("Set ACL: " + settingACL + " to " + username); + } - list = checkListShareNameForGroup(list); - - for (CredentialModel credentialModel : list) { - System.out.println(credentialModel); - }*/ + reportValidation.setAclType(settingACL.name()); + reportValidation.setErrors(errors); + reportValidation.setValidLogins(validLogins); + return reportValidation; } + + private void checkAccessType(AccessType settingACL, List errors, AccessTypeComparator comparator, + List validLogins, String username, String fullname, ACL acl) { + for (AccessType currentAccessType : acl.getAccessTypes()) { + int cmp = comparator.compare(settingACL, currentAccessType); + if (cmp == -1) { + // CHANGE ACL IS NOT VALID + logger.debug("Reject ACL: " + settingACL + " to " + username); + validLogins.remove(username); + errors.add("Unable to grant the privilege " + settingACL + " for " + fullname + + ", it's lower than (parent privilege) " + currentAccessType); + break; + } else if (cmp == 0) { + // SAME ACL + logger.debug("Skipping ACL: " + settingACL + " to " + username); + errors.add(settingACL + " privilege for " + fullname + " already assigned"); + validLogins.remove(username); + break; + } else if (cmp == 1) { + // CHANGE ACL IS VALID + logger.debug("Valid ACL: " + settingACL + " to " + fullname); + } + } + } + + /** + * Update acl for vr eby group name. + * + * @param folderId + * the folder id + * @param aclType + * the acl type + * @throws Exception + * the exception + */ + @Override + public void updateACLForVREbyGroupName(String folderId, String aclType) throws Exception { + try { + + if (folderId == null) + throw new Exception("Folder id is null"); + + logger.trace("Updating ACL to VRE FOLDER id: " + folderId); + logger.trace("ACL type is: " + aclType); + logger.trace("Get Workspace"); + PortalContextInfo info = WsUtil.getPortalContext(this.getThreadLocalRequest()); + + logger.trace("PortalContextInfo: " + info); + + ScopeProvider.instance.set(info.getCurrentScope()); + logger.trace("Scope provider set: " + info.getCurrentScope()); + + Workspace workspace = HomeLibrary.getUserWorkspace(info.getUsername()); + WorkspaceItem wsItem = workspace.getItem(folderId); + + if (wsItem.isShared() && wsItem.getType().equals(WorkspaceItemType.SHARED_FOLDER)) { + WorkspaceSharedFolder ite = (WorkspaceSharedFolder) wsItem; + // PATCH TODO TEMPORARY SOLUTION + if (ite.isVreFolder()) { + List groupName = new ArrayList(); + groupName.add(wsItem.getName()); + ite.setACL(groupName, ACLType.valueOf(aclType)); + } + } else + throw new Exception("Source item is not shared or shared folder"); + + logger.trace("Updating ACL completed, retuning"); + } catch (Exception e) { + logger.error("Error in set ACLs", e); + String error = "Error updating the permissions. " + e.getMessage(); + throw new Exception(error); + } + } + + /** + * Check notify add item to share. + * + * @param destinationItem + * the destination item + * @param sourceSharedId + * the source shared id + * @param folderDestinationItem + * the folder destination item + */ + // private void checkNotifyAddItemToShare(final WorkspaceItem + // destinationItem, + // final String sourceSharedId, final WorkspaceItem folderDestinationItem) { + // + // logger.trace("checkNotifyAddItemToShare"); + // + // if(folderDestinationItem!=null){ + // + // try{ + // //if folder destination is shared folder + // if(folderDestinationItem.isShared()){ //Notify Added Item To Sharing? + // logger.trace("checkNotifyAddItemToShare destination item: + // "+destinationItem.getName()+" sourceSharedId: "+sourceSharedId + " folder + // destination: "+folderDestinationItem.getName()); + // //share condition is true if source shared folder is null or not equal to + // destination shared folder + // boolean shareChangeCondition = sourceSharedId==null || + // sourceSharedId.compareTo(folderDestinationItem.getIdSharedFolder())!=0; + // logger.trace("shareChangeCondition add item: "+shareChangeCondition); + // //if shareChangeCondition is true.. notifies added item to sharing + // if(shareChangeCondition){ + // + // List listContacts = + // getListUserSharedByFolderSharedId(folderDestinationItem.getIdSharedFolder()); + // + // //DEBUG + // //printContacts(listContacts); + // Workspace workspace = getWorkspace(); + // WorkspaceItem destinationSharedFolder = + // workspace.getItem(folderDestinationItem.getIdSharedFolder()); + // NotificationsProducer np = getNotificationProducer(); + // + // if(destinationSharedFolder instanceof WorkspaceSharedFolder){ + // np.notifyAddedItemToSharing(listContacts, destinationItem, + // (WorkspaceSharedFolder) destinationSharedFolder); + // logger.trace("The notifies sent correctly"); + // } + // else + // logger.warn("Notifies added item: "+destinationItem+ "to share doesn't + // sent + // because "+destinationSharedFolder+" is not istance of + // WorkspaceSharedFolder"); + // // np.notifyAddedItemToSharing(listContacts, (WorkspaceFolder) + // folderDestinationItem); + // } + // } + // else + // logger.trace("folder destination is not shared"); + // + // }catch (Exception e) { + // logger.error("An error occurred in verifyNotifyAddItemToShare ",e); + // } + // }else + // logger.warn("The notifies is failure in verifyNotifyAddItemToShare + // because + // folder destination item is null"); + // } + + /** + * Check notify move item from share. + * + * @param sourceItemIsShared + * the source item is shared + * @param sourceItem + * the source item + * @param sourceSharedId + * the source shared id + * @param folderDestinationItem + * the folder destination item + */ + // private void checkNotifyMoveItemFromShare(final boolean + // sourceItemIsShared, + // final WorkspaceItem sourceItem, final String sourceSharedId, final + // WorkspaceItem folderDestinationItem) { + // + // logger.trace("checkNotifyMoveItemFromShare:"); + // + // try{ + // + // if(folderDestinationItem!=null){ + // + // String idSharedFolder = + // folderDestinationItem.getIdSharedFolder()!=null?folderDestinationItem.getIdSharedFolder():""; + // + // //share condition is true if source shared folder is not equal to + // destination + // shared folder + // boolean shareChangeCondition = + // sourceSharedId==null?false:sourceSharedId.compareTo(idSharedFolder)!=0; + // + // logger.trace("checkNotifyMoveItemFromShare source item: + // "+sourceItem.getName()+" sourceSharedId: "+sourceSharedId + " folder + // destination: "+folderDestinationItem.getName() +" sourceItemIsShared: + // "+sourceItemIsShared); + // + // // System.out.println("shareChangeCondition remove item: "+ + // shareChangeCondition); + // + // logger.trace("shareChangeCondition remove item: "+ shareChangeCondition); + // + // //Notify Removed Item To Sharing? + // //if source Item is shared and folder destination is not shared or + // shareChangeCondition is true.. notifies removed item to sharing + // if(sourceItemIsShared && (!folderDestinationItem.isShared() || + // shareChangeCondition)){ + // + // //get contacts + // List listContacts = + // getListUserSharedByFolderSharedId(sourceSharedId); + // + // //DEBUG + // printContacts(listContacts); + // Workspace workspace = getWorkspace(); + // WorkspaceItem sourceSharedFolder = workspace.getItem(sourceSharedId); + // NotificationsProducer np = getNotificationProducer(); + // + // if(sourceSharedFolder instanceof WorkspaceSharedFolder){ + // np.notifyMovedItemToSharing(listContacts, sourceItem, + // (WorkspaceSharedFolder) + // sourceSharedFolder); + // logger.trace("The notifies was sent correctly"); + // }else + // logger.warn("Notifies moved item: "+sourceItem+ "from share doesn't sent + // because "+sourceSharedFolder+" is not istance of WorkspaceSharedFolder"); + // } + // + // }else + // logger.warn("The notifies is failure in checkNotifyMoveItemFromShare + // because + // folder destination item is null"); + // + // }catch (Exception e) { + // logger.error("An error occurred in checkNotifyMoveItemFromShare ",e); + // } + // + // } + } diff --git a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/server/notifications/NotificationsProducer.java b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/server/notifications/NotificationsProducer.java index d1bdbd6..3082984 100644 --- a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/server/notifications/NotificationsProducer.java +++ b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/server/notifications/NotificationsProducer.java @@ -7,21 +7,20 @@ import javax.servlet.http.HttpServletRequest; import org.apache.log4j.Logger; import org.gcube.applicationsupportlayer.social.NotificationsManager; -import org.gcube.common.homelibrary.home.exceptions.InternalErrorException; -import org.gcube.common.homelibrary.home.workspace.WorkspaceItem; -import org.gcube.common.homelibrary.home.workspace.WorkspaceSharedFolder; +import org.gcube.applicationsupportlayer.social.shared.SocialFileItem; +import org.gcube.applicationsupportlayer.social.shared.SocialSharedFolder; import org.gcube.common.scope.impl.ScopeBean; +import org.gcube.common.storagehub.model.items.Item; +import org.gcube.common.storagehub.model.items.SharedFolder; import org.gcube.portlets.widgets.workspacesharingwidget.server.util.DiffereceBeetweenInfoContactModel; import org.gcube.portlets.widgets.workspacesharingwidget.server.util.UserUtil; import org.gcube.portlets.widgets.workspacesharingwidget.server.util.WsUtil; import org.gcube.portlets.widgets.workspacesharingwidget.shared.InfoContactModel; - /** * The Class NotificationsProducer. * - * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it - * Nov 25, 2016 + * @author Francesco Mangiacrapa Nov 25, 2016 */ public class NotificationsProducer { @@ -30,11 +29,11 @@ public class NotificationsProducer { protected NotificationsManager notificationsMng; protected String userId; - /** * Instantiates a new notifications producer. * - * @param request the request + * @param request + * the request */ public NotificationsProducer(HttpServletRequest request) { this.notificationsMng = WsUtil.getNotificationManager(request); @@ -53,7 +52,8 @@ public class NotificationsProducer { /** * Sets the notification mng. * - * @param notificationMng the new notification mng + * @param notificationMng + * the new notification mng */ public void setNotificationMng(NotificationsManager notificationMng) { this.notificationsMng = notificationMng; @@ -62,36 +62,44 @@ public class NotificationsProducer { /** * Runs a new thread to notify the contacts passed in input. * - * @param listContacts the list contacts - * @param sharedFolder the shared folder + * @param listContacts + * the list contacts + * @param sharedFolder + * the shared folder */ - public void notifyFolderSharing(final List listContacts, final WorkspaceSharedFolder sharedFolder) { + public void notifyFolderSharing(final List listContacts, final SharedFolder sharedFolder) { - new Thread(){ + new Thread() { @Override public void run() { logger.trace("Send notifies folder sharing is running..."); for (InfoContactModel infoContactModel : listContacts) { - try{ - //NOTIFIES ONLY THE USERS THAT ARE DIFFERENT FROM CURRENT USER - if(infoContactModel.getLogin().compareTo(userId)!=0){ + try { + // NOTIFIES ONLY THE USERS THAT ARE DIFFERENT FROM + // CURRENT USER + if (infoContactModel.getLogin().compareTo(userId) != 0) { - logger.trace("Sending notification new share folder "+sharedFolder.getName()+" for user "+infoContactModel.getLogin()); + logger.trace("Sending notification new share folder " + sharedFolder.getName() + + " for user " + infoContactModel.getLogin()); - //DEBUG - System.out.println("Sending notification new share folder "+sharedFolder.getName()+" for user "+infoContactModel.getLogin()); + // DEBUG + System.out.println("Sending notification new share folder " + sharedFolder.getName() + + " for user " + infoContactModel.getLogin()); + SocialItemFactory socialItemFactor = new SocialItemFactory(); + SocialSharedFolder socialSharedFolder = socialItemFactor + .createSocialSharedFolder(sharedFolder); - boolean notify = notificationsMng.notifyFolderSharing(infoContactModel.getLogin(), sharedFolder); + boolean notify = notificationsMng.notifyFolderSharing(infoContactModel.getLogin(), + socialSharedFolder); - - if(!notify) - logger.error("An error occured when notify user: "+infoContactModel.getLogin()); + if (!notify) + logger.error("An error occured when notify user: " + infoContactModel.getLogin()); } - }catch (Exception e) { + } catch (Exception e) { logger.error("An error occured in notifyFolderSharing ", e); -// e.printStackTrace(); + // e.printStackTrace(); } } @@ -99,59 +107,65 @@ public class NotificationsProducer { } }.start(); - } - - /** * Runs a new thread to notify the contacts passed in input. * - * @param listSharedContact the list shared contact - * @param folderItem the folder item - * @param itemOldName the item old name - * @param itemNewName the item new name - * @param idsharedFolder the idshared folder + * @param listSharedContact + * the list shared contact + * @param folderItem + * the folder item + * @param itemOldName + * the item old name + * @param itemNewName + * the item new name + * @param idsharedFolder + * the idshared folder */ - public void notifyFolderRenamed(final List listSharedContact, final WorkspaceItem folderItem, final String itemOldName, final String itemNewName, final String idsharedFolder) { + public void notifyFolderRenamed(final List listSharedContact, final Item folderItem, + final String itemOldName, final String itemNewName, final String idsharedFolder) { - new Thread(){ + new Thread() { @Override public void run() { logger.trace("Send notifies shared folder was renamed is running..."); try { - - if(NotificationsUtil.checkIsRootFolderShared(folderItem.getId(), idsharedFolder)){ + NotificationsUtil notificationsUtil=new NotificationsUtil(); + if (notificationsUtil.checkIsRootFolderShared(folderItem.getId(), idsharedFolder)) { logger.trace("Notification isn't sent because the event is on root shared folder"); return; } - } catch (InternalErrorException e1) { + } catch (Exception e1) { logger.error("An error occurred in checkIsRootFolderShared ", e1); return; } for (InfoContactModel infoContactModel : listSharedContact) { - try{ - //NOTIFIES ONLY THE USERS THAT ARE DIFFERENT FROM CURRENT USER - if(infoContactModel.getLogin().compareTo(userId)!=0){ + try { + // NOTIFIES ONLY THE USERS THAT ARE DIFFERENT FROM + // CURRENT USER + if (infoContactModel.getLogin().compareTo(userId) != 0) { - logger.trace("Sending notification share folder "+itemOldName+" was renamed as " + itemNewName+ "for user "+infoContactModel.getLogin()); + logger.trace("Sending notification share folder " + itemOldName + " was renamed as " + + itemNewName + "for user " + infoContactModel.getLogin()); - //DEBUG - System.out.println("Sending notification share folder "+itemOldName+" was renamed as " + itemNewName+ "for user "+infoContactModel.getLogin()); + // DEBUG + System.out.println("Sending notification share folder " + itemOldName + " was renamed as " + + itemNewName + "for user " + infoContactModel.getLogin()); - boolean notify = notificationsMng.notifyFolderRenaming(infoContactModel.getLogin(), itemOldName, itemNewName, idsharedFolder); + boolean notify = notificationsMng.notifyFolderRenaming(infoContactModel.getLogin(), + itemOldName, itemNewName, idsharedFolder); - - if(!notify) - logger.error("An error occured when notify user: "+infoContactModel.getLogin()); + if (!notify) + logger.error("An error occured when notify user: " + infoContactModel.getLogin()); } - }catch (Exception e) { + } catch (Exception e) { logger.error("An error occured in notifyFolderRenamed ", e); -// e.printStackTrace(); + // e.printStackTrace(); } } @@ -159,46 +173,58 @@ public class NotificationsProducer { } }.start(); - } - /** * Runs a new thread to notify the contacts passed in input. * - * @param listSharedContact the list shared contact - * @param previousName the previous name - * @param item the item - * @param sharedFolder the shared folder + * @param listSharedContact + * the list shared contact + * @param previousName + * the previous name + * @param item + * the item + * @param sharedFolder + * the shared folder */ - public void notifyItemRenamed(final List listSharedContact, final String previousName, final WorkspaceItem item, final WorkspaceSharedFolder sharedFolder) { + public void notifyItemRenamed(final List listSharedContact, final String previousName, + final Item item, final SharedFolder sharedFolder) { - new Thread(){ + new Thread() { @Override public void run() { logger.trace("Send notifies shared item was updated is running..."); for (InfoContactModel infoContactModel : listSharedContact) { - try{ - //NOTIFIES ONLY THE USERS THAT ARE DIFFERENT FROM CURRENT USER - if(infoContactModel.getLogin().compareTo(userId)!=0){ + try { + // NOTIFIES ONLY THE USERS THAT ARE DIFFERENT FROM + // CURRENT USER + if (infoContactModel.getLogin().compareTo(userId) != 0) { - logger.trace("Sending notification to user "+infoContactModel.getLogin() + " updated item "+item.getName()); + logger.trace("Sending notification to user " + infoContactModel.getLogin() + + " updated item " + item.getName()); - //DEBUG - System.out.println("Sending notification to user "+infoContactModel.getLogin() + " updated item "+item.getName()); + // DEBUG + System.out.println("Sending notification to user " + infoContactModel.getLogin() + + " updated item " + item.getName()); -// notificationsMng.notifyItemRenaming(infoContactModel.getLogin(), previousName, item, sharedFolder); + // notificationsMng.notifyItemRenaming(infoContactModel.getLogin(), + // previousName, item, sharedFolder); + SocialItemFactory socialItemFactor = new SocialItemFactory(); + SocialSharedFolder socialSharedFolder = socialItemFactor + .createSocialSharedFolder(sharedFolder); + SocialFileItem socialFileItem = socialItemFactor.createSocialFileItem(item, sharedFolder); - boolean notify = notificationsMng.notifyItemRenaming(infoContactModel.getLogin(), previousName, item, sharedFolder); + boolean notify = notificationsMng.notifyItemRenaming(infoContactModel.getLogin(), + previousName, socialFileItem, socialSharedFolder); - if(!notify) - logger.error("An error occured when notify user: "+infoContactModel.getLogin()); + if (!notify) + logger.error("An error occured when notify user: " + infoContactModel.getLogin()); } - }catch (Exception e) { + } catch (Exception e) { logger.error("An error occured in notifyItemUpdated ", e); -// e.printStackTrace(); + // e.printStackTrace(); } } @@ -206,399 +232,513 @@ public class NotificationsProducer { } }.start(); - } - /** * Runs a new thread to notify the new contacts passed in input. * - * @param listSharedContact - list of contacts already shared - * @param listSharingContact - list of "new" contacts witch share - * @param sharedFolder - the shared folder + * @param listSharedContact + * - list of contacts already shared + * @param listSharingContact + * - list of "new" contacts witch share + * @param sharedFolder + * - the shared folder */ - public void notifyAddedUsersToSharing(final List listSharedContact, final List listSharingContact, final WorkspaceSharedFolder sharedFolder) { + public void notifyAddedUsersToSharing(final List listSharedContact, + final List listSharingContact, final SharedFolder sharedFolder) { new Thread() { - @Override - public void run() { + @Override + public void run() { - try{ + try { - DiffereceBeetweenInfoContactModel diff = new DiffereceBeetweenInfoContactModel(listSharingContact, listSharedContact); + DiffereceBeetweenInfoContactModel diff = new DiffereceBeetweenInfoContactModel(listSharingContact, + listSharedContact); - List listExclusiveContacts = diff.getDifferentsContacts(); + List listExclusiveContacts = diff.getDifferentsContacts(); - System.out.println("list exclusive contacts: "+listExclusiveContacts); + System.out.println("list exclusive contacts: " + listExclusiveContacts); - if(listExclusiveContacts.size()>0){ + if (listExclusiveContacts.size() > 0) { - if(listExclusiveContacts.size()==1){ //CASE ONLY ONE CONTACS WAS ADDED + if (listExclusiveContacts.size() == 1) { // CASE ONLY + // ONE + // CONTACS + // WAS ADDED - InfoContactModel infoContactModel = listExclusiveContacts.get(0); + InfoContactModel infoContactModel = listExclusiveContacts.get(0); - for (InfoContactModel contact : listSharedContact) { //NOTIFIES ALREADY SHARED CONTACTS THATH A NEW USER WAS ADDED + for (InfoContactModel contact : listSharedContact) { // NOTIFIES + // ALREADY + // SHARED + // CONTACTS + // THATH + // A + // NEW + // USER + // WAS + // ADDED - try{ + try { - logger.trace("Sending notification to user "+contact.getLogin()+", added user "+ infoContactModel.getLogin() +" to share folder "+sharedFolder.getName()); + logger.trace("Sending notification to user " + contact.getLogin() + ", added user " + + infoContactModel.getLogin() + " to share folder " + + sharedFolder.getName()); - //DEBUG - // System.out.println("Sending notification added user "+ infoContactModel.getLogin() +" to share folder "+sharedFolder.getName() + " for user "+contact.getLogin()); + // DEBUG + // System.out.println("Sending notification + // added user "+ infoContactModel.getLogin() + // +" to share folder + // "+sharedFolder.getName() + " for user + // "+contact.getLogin()); + SocialItemFactory socialItemFactor = new SocialItemFactory(); + SocialSharedFolder socialSharedFolder = socialItemFactor + .createSocialSharedFolder(sharedFolder); - boolean notify = notificationsMng.notifyFolderAddedUser(contact.getLogin(), sharedFolder, infoContactModel.getLogin()); + boolean notify = notificationsMng.notifyFolderAddedUser(contact.getLogin(), + socialSharedFolder, infoContactModel.getLogin()); - if(!notify) - logger.error("An error occured when notifies user: "+contact.getLogin()); + if (!notify) + logger.error("An error occured when notifies user: " + contact.getLogin()); - }catch (Exception e) { - logger.error("An error occured in notifyFolderAddedUser ", e); -// e.printStackTrace(); - } + } catch (Exception e) { + logger.error("An error occured in notifyFolderAddedUser ", e); + // e.printStackTrace(); + } } List listCts = new ArrayList(); listCts.add(infoContactModel); - notifyFolderSharing(listCts, sharedFolder); //NOTIFIER NEW USER OF SHARING FOLDER + notifyFolderSharing(listCts, sharedFolder); // NOTIFIER + // NEW + // USER + // OF + // SHARING + // FOLDER - }else{ //CASE MORE THEN ONE CONTACS WAS ADDED + } else { // CASE MORE THEN ONE CONTACS WAS ADDED - List listLogins = UserUtil.getListLoginByInfoContactModel(listExclusiveContacts); + List listLogins = UserUtil.getListLoginByInfoContactModel(listExclusiveContacts); - for (InfoContactModel contact : listSharedContact) { //NOTIFIES ALREADY SHARED CONTACTS THATH A NEW USER WAS ADDED + for (InfoContactModel contact : listSharedContact) { // NOTIFIES + // ALREADY + // SHARED + // CONTACTS + // THATH + // A + // NEW + // USER + // WAS + // ADDED - try{ + try { - logger.trace("Sending notification to user "+contact.getLogin()+", added "+listLogins.size()+" users to share folder "+sharedFolder.getName()); + logger.trace("Sending notification to user " + contact.getLogin() + ", added " + + listLogins.size() + " users to share folder " + sharedFolder.getName()); - //DEBUG - // System.out.println("Sending notification added user "+ infoContactModel.getLogin() +" to share folder "+sharedFolder.getName() + " for user "+contact.getLogin()); + // DEBUG + // System.out.println("Sending notification + // added user "+ infoContactModel.getLogin() + // +" to share folder + // "+sharedFolder.getName() + " for user + // "+contact.getLogin()); + SocialItemFactory socialItemFactor = new SocialItemFactory(); + SocialSharedFolder socialSharedFolder = socialItemFactor + .createSocialSharedFolder(sharedFolder); - boolean notify = notificationsMng.notifyFolderAddedUsers(contact.getLogin(), sharedFolder, listLogins); + boolean notify = notificationsMng.notifyFolderAddedUsers(contact.getLogin(), + socialSharedFolder, listLogins); - if(!notify) - logger.error("An error occured when notifies user: "+contact.getLogin()); + if (!notify) + logger.error("An error occured when notifies user: " + contact.getLogin()); - }catch (Exception e) { - logger.error("An error occured in notifyFolderAddedUser ", e); -// e.printStackTrace(); - } + } catch (Exception e) { + logger.error("An error occured in notifyFolderAddedUser ", e); + // e.printStackTrace(); + } } + notifyFolderSharing(listExclusiveContacts, sharedFolder); // NOTIFIER + // NEW + // USER + // OF + // SHARING + // FOLDER - notifyFolderSharing(listExclusiveContacts, sharedFolder); //NOTIFIER NEW USER OF SHARING FOLDER + } + } + } catch (Exception e) { + logger.error("An error occured in notifyAddedUserToSharing ", e); + // e.printStackTrace(); + } + } - } - } + }.start(); - }catch (Exception e) { - logger.error("An error occured in notifyAddedUserToSharing ", e); -// e.printStackTrace(); + } + + /** + * Runs a new thread to notify the contacts passed in input. + * + * @param listContacts + * the list contacts + * @param unSharedFolder + * the un shared folder + */ + public void notifyFolderUnSharing(final List listContacts, final SharedFolder unSharedFolder) { + + new Thread() { + @Override + public void run() { + + // printContacts(listContacts); + logger.trace("Send notifies folder un share is running..."); + + for (InfoContactModel infoContactModel : listContacts) { + try { + + // NOTIFIES ONLY THE USERS THAT ARE DIFFERENT FROM + // CURRENT USER + if (infoContactModel.getLogin().compareTo(userId) != 0) { + + logger.trace("Sending notification to user " + infoContactModel.getLogin() + + " un shared folder " + unSharedFolder.getName()); + + // DEBUG + // System.out.println("Sending notification to user + // "+infoContactModel.getLogin() +" un shared folder + // "+unSharedFolder.getName()); + SocialItemFactory socialItemFactor = new SocialItemFactory(); + SocialSharedFolder socialSharedFolder = socialItemFactor + .createSocialSharedFolder(unSharedFolder); + + boolean notify = notificationsMng.notifyFolderRemovedUser(infoContactModel.getLogin(), + socialSharedFolder); + + if (!notify) + logger.error("An error occured when notifies user: " + infoContactModel.getLogin()); + } + } catch (Exception e) { + logger.error("An error occured in notifyFolderUnSharing ", e); + // e.printStackTrace(); } } + logger.trace("notifies of un share notifications is completed"); + } + }.start(); } - /** * Runs a new thread to notify the contacts passed in input. * - * @param listContacts the list contacts - * @param unSharedFolder the un shared folder + * @param listContacts + * the list contacts + * @param item + * the workspace item + * @param sharedFolder + * the shared folder */ - public void notifyFolderUnSharing(final List listContacts, final WorkspaceSharedFolder unSharedFolder) { - + public void notifyAddedItemToSharing(final List listContacts, final Item item, + final SharedFolder sharedFolder) { new Thread() { - @Override - public void run() { + @Override + public void run() { -// printContacts(listContacts); - logger.trace("Send notifies folder un share is running..."); + // printContacts(listContacts); + logger.trace("Send notifies added item in sharedfolder is running..."); - for (InfoContactModel infoContactModel : listContacts) { - try{ + // DEBUG + System.out.println("Send notifies added item in sharedfolder is running..."); - //NOTIFIES ONLY THE USERS THAT ARE DIFFERENT FROM CURRENT USER - if(infoContactModel.getLogin().compareTo(userId)!=0){ + for (InfoContactModel infoContactModel : listContacts) { + try { - logger.trace("Sending notification to user "+infoContactModel.getLogin() +" un shared folder "+unSharedFolder.getName()); + // NOTIFIES ONLY THE USERS THAT ARE DIFFERENT FROM + // CURRENT USER + if (infoContactModel.getLogin().compareTo(userId) != 0) { - //DEBUG -// System.out.println("Sending notification to user "+infoContactModel.getLogin() +" un shared folder "+unSharedFolder.getName()); - boolean notify = notificationsMng.notifyFolderRemovedUser(infoContactModel.getLogin(), unSharedFolder); + logger.trace("Sending notification to user " + infoContactModel.getLogin() + " added item " + + item.getName() + " in shared folder " + sharedFolder.getName()); - if(!notify) - logger.error("An error occured when notifies user: "+infoContactModel.getLogin()); + // DEBUG + System.out.println("Sending notification to user " + infoContactModel.getLogin() + + " added item " + item.getName() + " in shared folder " + sharedFolder.getName()); + + // DEBUG + // System.out.println("Send notify folder un share + // user "+infoContactModel.getLogin()); + SocialItemFactory socialItemFactor = new SocialItemFactory(); + SocialSharedFolder socialSharedFolder = socialItemFactor + .createSocialSharedFolder(sharedFolder); + SocialFileItem socialFileItem = socialItemFactor.createSocialFileItem(item, sharedFolder); + + boolean notify = notificationsMng.notifyAddedItem(infoContactModel.getLogin(), + socialFileItem, socialSharedFolder); + + if (!notify) { + logger.error("An error occured when notify user: " + infoContactModel.getLogin()); + // DEBUG + // System.out.println("An error occured when + // notify user: "+infoContactModel.getLogin()); } - }catch (Exception e) { - logger.error("An error occured in notifyFolderUnSharing ", e); -// e.printStackTrace(); } + } catch (Exception e) { + logger.error("An error occured in notifyAddedItemToSharing ", e); + // e.printStackTrace(); } + } - logger.trace("notifies of un share notifications is completed"); - } + logger.trace("notifies of added item in shared folder is completed"); + + // DEBUG + // System.out.println("notifies of added item in shared folder + // is completed"); + } }.start(); - } - - /** * Runs a new thread to notify the contacts passed in input. * - * @param listContacts the list contacts - * @param workspaceItem the workspace item - * @param sharedFolder the shared folder + * @param listContacts + * the list contacts + * @param item + * the workspace item + * @param sharedFolder + * the shared folder */ - public void notifyAddedItemToSharing(final List listContacts, final WorkspaceItem workspaceItem, final WorkspaceSharedFolder sharedFolder) { + public void notifyUpdatedItemToSharing(final List listContacts, final Item item, + final SharedFolder sharedFolder) { new Thread() { - @Override - public void run() { + @Override + public void run() { -// printContacts(listContacts); - logger.trace("Send notifies added item in sharedfolder is running..."); + // printContacts(listContacts); + logger.trace("Send notifies updated item in shared folder is running..."); - //DEBUG - System.out.println("Send notifies added item in sharedfolder is running..."); + // DEBUG + // System.out.println("Send notifies updated item in shared + // folder is running..."); - for (InfoContactModel infoContactModel : listContacts) { - try{ + for (InfoContactModel infoContactModel : listContacts) { + try { - //NOTIFIES ONLY THE USERS THAT ARE DIFFERENT FROM CURRENT USER - if(infoContactModel.getLogin().compareTo(userId)!=0){ + // NOTIFIES ONLY THE USERS THAT ARE DIFFERENT FROM + // CURRENT USER + if (infoContactModel.getLogin().compareTo(userId) != 0) { - logger.trace("Sending notification to user "+infoContactModel.getLogin() +" added item "+workspaceItem.getName()+" in shared folder "+sharedFolder.getName()); + logger.trace( + "Sending notification to user " + infoContactModel.getLogin() + " updated item " + + item.getName() + " in shared folder " + sharedFolder.getName()); - //DEBUG - System.out.println("Sending notification to user "+infoContactModel.getLogin() +" added item "+workspaceItem.getName()+" in shared folder "+sharedFolder.getName()); + // DEBUG + // System.out.println("Sending notification to user + // "+infoContactModel.getLogin() +" updated item + // "+workspaceItem.getName()+" in shared folder + // "+sharedFolder.getName()); - //DEBUG -// System.out.println("Send notify folder un share user "+infoContactModel.getLogin()); + // DEBUG + // System.out.println("Send notify folder un share + // user "+infoContactModel.getLogin()); + SocialItemFactory socialItemFactor = new SocialItemFactory(); + SocialSharedFolder socialSharedFolder = socialItemFactor + .createSocialSharedFolder(sharedFolder); + SocialFileItem socialFileItem = socialItemFactor.createSocialFileItem(item, sharedFolder); - boolean notify = notificationsMng.notifyAddedItem(infoContactModel.getLogin(), workspaceItem, sharedFolder); + boolean notify = notificationsMng.notifyUpdatedItem(infoContactModel.getLogin(), + socialFileItem, socialSharedFolder); - if(!notify){ - logger.error("An error occured when notify user: "+infoContactModel.getLogin()); - //DEBUG -// System.out.println("An error occured when notify user: "+infoContactModel.getLogin()); - } + if (!notify) { + logger.error("An error updated when notify user: " + infoContactModel.getLogin()); + // DEBUG + // System.out.println("An error updated when + // notify user: "+infoContactModel.getLogin()); } - }catch (Exception e) { - logger.error("An error occured in notifyAddedItemToSharing ", e); -// e.printStackTrace(); } + } catch (Exception e) { + logger.error("An error updated in notifyAddedItemToSharing ", e); + e.printStackTrace(); } + } - logger.trace("notifies of added item in shared folder is completed"); + logger.trace("notifies of updated item in shared folder is completed"); - //DEBUG -// System.out.println("notifies of added item in shared folder is completed"); - } + // DEBUG + // System.out.println("notifies of updated item in shared folder + // is completed"); + } }.start(); } - /** * Runs a new thread to notify the contacts passed in input. * - * @param listContacts the list contacts - * @param workspaceItem the workspace item - * @param sharedFolder the shared folder + * @param listContacts + * the list contacts + * @param item + * the workspace item + * @param sharedFolder + * the shared folder */ - public void notifyUpdatedItemToSharing(final List listContacts, final WorkspaceItem workspaceItem, final WorkspaceSharedFolder sharedFolder) { + public void notifyMovedItemToSharing(final List listContacts, final Item item, + final SharedFolder sharedFolder) { new Thread() { - @Override - public void run() { + @Override + public void run() { -// printContacts(listContacts); - logger.trace("Send notifies updated item in shared folder is running..."); + logger.trace("Sending notification remove item in shared folder is running..."); + // printContacts(listContacts); - //DEBUG -// System.out.println("Send notifies updated item in shared folder is running..."); - - for (InfoContactModel infoContactModel : listContacts) { - try{ - - //NOTIFIES ONLY THE USERS THAT ARE DIFFERENT FROM CURRENT USER - if(infoContactModel.getLogin().compareTo(userId)!=0){ - - logger.trace("Sending notification to user "+infoContactModel.getLogin() +" updated item "+workspaceItem.getName()+" in shared folder "+sharedFolder.getName()); - - //DEBUG -// System.out.println("Sending notification to user "+infoContactModel.getLogin() +" updated item "+workspaceItem.getName()+" in shared folder "+sharedFolder.getName()); - - //DEBUG -// System.out.println("Send notify folder un share user "+infoContactModel.getLogin()); - - boolean notify = notificationsMng.notifyUpdatedItem(infoContactModel.getLogin(), workspaceItem, sharedFolder); - - if(!notify){ - logger.error("An error updated when notify user: "+infoContactModel.getLogin()); - //DEBUG -// System.out.println("An error updated when notify user: "+infoContactModel.getLogin()); - } - } - }catch (Exception e) { - logger.error("An error updated in notifyAddedItemToSharing ", e); - e.printStackTrace(); - } - } - - logger.trace("notifies of updated item in shared folder is completed"); - - //DEBUG -// System.out.println("notifies of updated item in shared folder is completed"); - } - - }.start(); - } - - - - - - /** - * Runs a new thread to notify the contacts passed in input. - * - * @param listContacts the list contacts - * @param workspaceItem the workspace item - * @param sharedFolder the shared folder - */ - public void notifyMovedItemToSharing(final List listContacts, final WorkspaceItem workspaceItem, final WorkspaceSharedFolder sharedFolder) { - - - new Thread() { - @Override - public void run() { - - logger.trace("Sending notification remove item in shared folder is running..."); -// printContacts(listContacts); - - try { - - if(NotificationsUtil.checkIsRootFolderShared(workspaceItem.getId(), sharedFolder.getId())){ - logger.trace("Notification isn't sent because the event is on root shared folder"); - return; - } - - } catch (InternalErrorException e1) { - logger.error("An error occurred in checkIsRootFolderShared ", e1); + try { + NotificationsUtil notificationsUtil=new NotificationsUtil(); + if (notificationsUtil.checkIsRootFolderShared(item.getId(), sharedFolder.getId())) { + logger.trace("Notification isn't sent because the event is on root shared folder"); return; - } - - logger.trace("Sending notification moved item in shared folder is running..."); - -// System.out.println("Sending notification moved item in shared folder is running..."); - - for (InfoContactModel infoContactModel : listContacts) { - try{ - - //NOTIFIES ONLY THE USERS THAT ARE DIFFERENT FROM CURRENT USER - if(infoContactModel.getLogin().compareTo(userId)!=0){ - - logger.trace("Sending notification to user "+infoContactModel.getLogin() +" moved item "+workspaceItem.getName()+" in shared folder "+sharedFolder.getName()); - - //DEBUG -// System.out.println("Sending notification to user "+infoContactModel.getLogin() +" moved item "+workspaceItem.getName()+" in shared folder "+sharedFolder.getName()); - - boolean notify = notificationsMng.notifyMovedItem(infoContactModel.getLogin(), workspaceItem, sharedFolder); - - if(!notify){ - logger.error("An error occured when notify user: "+infoContactModel.getLogin()); - - //DEBUG -// System.out.println("An error occured when notify user: "+infoContactModel.getLogin()); - } - } - }catch (Exception e) { - logger.error("An error occurred in notifyMovedItemToSharing ", e); - e.printStackTrace(); - } } - logger.trace("notifies of moved item in shared folder is completed"); + } catch (Exception e1) { + logger.error("An error occurred in checkIsRootFolderShared ", e1); + return; + } - //DEBUG -// System.out.println("notifies of moved item in shared folder is completed"); - } + logger.trace("Sending notification moved item in shared folder is running..."); + // System.out.println("Sending notification moved item in shared + // folder is running..."); + for (InfoContactModel infoContactModel : listContacts) { + try { + + // NOTIFIES ONLY THE USERS THAT ARE DIFFERENT FROM + // CURRENT USER + if (infoContactModel.getLogin().compareTo(userId) != 0) { + + logger.trace("Sending notification to user " + infoContactModel.getLogin() + " moved item " + + item.getName() + " in shared folder " + sharedFolder.getName()); + + // DEBUG + // System.out.println("Sending notification to user + // "+infoContactModel.getLogin() +" moved item + // "+workspaceItem.getName()+" in shared folder + // "+sharedFolder.getName()); + SocialItemFactory socialItemFactor = new SocialItemFactory(); + SocialSharedFolder socialSharedFolder = socialItemFactor + .createSocialSharedFolder(sharedFolder); + SocialFileItem socialFileItem = socialItemFactor.createSocialFileItem(item, sharedFolder); + + boolean notify = notificationsMng.notifyMovedItem(infoContactModel.getLogin(), + socialFileItem, socialSharedFolder); + + if (!notify) { + logger.error("An error occured when notify user: " + infoContactModel.getLogin()); + + // DEBUG + // System.out.println("An error occured when + // notify user: "+infoContactModel.getLogin()); + } + } + } catch (Exception e) { + logger.error("An error occurred in notifyMovedItemToSharing ", e); + e.printStackTrace(); + } + } + + logger.trace("notifies of moved item in shared folder is completed"); + + // DEBUG + // System.out.println("notifies of moved item in shared folder + // is completed"); + } }.start(); } - /** * Runs a new thread to notify the contacts passed in input. * - * @param listContacts the list contacts - * @param itemName the item name - * @param sharedFolder the shared folder + * @param listContacts + * the list contacts + * @param itemName + * the item name + * @param sharedFolder + * the shared folder */ - public void notifyRemovedItemToSharing(final List listContacts, final String itemName, final WorkspaceSharedFolder sharedFolder) { - + public void notifyRemovedItemToSharing(final List listContacts, final String itemName, + final SharedFolder sharedFolder) { new Thread() { - @Override - public void run() { + @Override + public void run() { - logger.trace("Sending notification remove item in shared folder is running..."); -// printContacts(listContacts); + logger.trace("Sending notification remove item in shared folder is running..."); + // printContacts(listContacts); - if(itemName==null || itemName.isEmpty()){ - logger.trace("Notification isn't sent - itemName is null or empty"); - return; - } + if (itemName == null || itemName.isEmpty()) { + logger.trace("Notification isn't sent - itemName is null or empty"); + return; + } - if(sharedFolder==null){ - logger.trace("Notification isn't sent - sharedFolder is null"); - } + if (sharedFolder == null) { + logger.trace("Notification isn't sent - sharedFolder is null"); + } - logger.trace("Sending notification removed item in shared folder is running..."); + logger.trace("Sending notification removed item in shared folder is running..."); -// System.out.println("Sending notification removed item in shared folder is running..."); + // System.out.println("Sending notification removed item in + // shared folder is running..."); - for (InfoContactModel infoContactModel : listContacts) { - try{ + for (InfoContactModel infoContactModel : listContacts) { + try { - //NOTIFIES ONLY THE USERS THAT ARE DIFFERENT FROM CURRENT USER - if(infoContactModel.getLogin().compareTo(userId)!=0){ + // NOTIFIES ONLY THE USERS THAT ARE DIFFERENT FROM + // CURRENT USER + if (infoContactModel.getLogin().compareTo(userId) != 0) { - logger.trace("Sending notification to user "+infoContactModel.getLogin() +" removed item "+itemName+" in shared folder "+sharedFolder.getName()); + logger.trace("Sending notification to user " + infoContactModel.getLogin() + + " removed item " + itemName + " in shared folder " + sharedFolder.getName()); - //DEBUG -// System.out.println("Sending notification to user "+infoContactModel.getLogin() +" removed item "+itemName+" in shared folder "+sharedFolder.getName()); + // DEBUG + // System.out.println("Sending notification to user + // "+infoContactModel.getLogin() +" removed item + // "+itemName+" in shared folder + // "+sharedFolder.getName()); + SocialItemFactory socialItemFactor=new SocialItemFactory(); + SocialSharedFolder socialSharedFolder=socialItemFactor.createSocialSharedFolder(sharedFolder); + + boolean notify = notificationsMng.notifyRemovedItem(infoContactModel.getLogin(), itemName, + socialSharedFolder); - boolean notify = notificationsMng.notifyRemovedItem(infoContactModel.getLogin(), itemName, sharedFolder); + if (!notify) { + logger.error("An error occured when notify user: " + infoContactModel.getLogin()); - if(!notify){ - logger.error("An error occured when notify user: "+infoContactModel.getLogin()); - - //DEBUG -// System.out.println("An error occured when notify user: "+infoContactModel.getLogin()); - } + // DEBUG + // System.out.println("An error occured when + // notify user: "+infoContactModel.getLogin()); } - }catch (Exception e) { - logger.error("An error occurred in notifyRemovedItemToSharing ", e); -// e.printStackTrace(); } + } catch (Exception e) { + logger.error("An error occurred in notifyRemovedItemToSharing ", e); + // e.printStackTrace(); } + } - logger.trace("notifies of moved item in shared folder is completed"); + logger.trace("notifies of moved item in shared folder is completed"); - //DEBUG -// System.out.println("notifies of moved item in shared folder is completed"); - } + // DEBUG + // System.out.println("notifies of moved item in shared folder + // is completed"); + } }.start(); } @@ -606,58 +746,62 @@ public class NotificationsProducer { /** * Runs a new thread to notify the contacts passed in input. * - * @param listContacts the list contacts - * @param folderNameDeleted the folder name deleted + * @param listContacts + * the list contacts + * @param folderNameDeleted + * the folder name deleted */ public void notifySharedFolderDeleted(final List listContacts, final String folderNameDeleted) { - new Thread() { - @Override - public void run() { + @Override + public void run() { -// printContacts(listContacts); - logger.trace("Send notifies shared folder deleted is running..."); + // printContacts(listContacts); + logger.trace("Send notifies shared folder deleted is running..."); - for (InfoContactModel infoContactModel : listContacts) { - try{ + for (InfoContactModel infoContactModel : listContacts) { + try { - //NOTIFIES ONLY THE USERS THAT ARE DIFFERENT FROM CURRENT USER - if(infoContactModel.getLogin().compareTo(userId)!=0){ + // NOTIFIES ONLY THE USERS THAT ARE DIFFERENT FROM + // CURRENT USER + if (infoContactModel.getLogin().compareTo(userId) != 0) { - logger.trace("Sending notification to user "+infoContactModel.getLogin() +" deleted shared folder "+folderNameDeleted); + logger.trace("Sending notification to user " + infoContactModel.getLogin() + + " deleted shared folder " + folderNameDeleted); - //DEBUG - System.out.println("Sending notification to user "+infoContactModel.getLogin() +" deleted shared folder "+folderNameDeleted); + // DEBUG + System.out.println("Sending notification to user " + infoContactModel.getLogin() + + " deleted shared folder " + folderNameDeleted); - //TODO -// boolean notify = notificationsMng. + // TODO + // boolean notify = notificationsMng. -// if(!notify) -// logger.error("An error occured when notifies user: "+infoContactModel.getLogin()); - } - }catch (Exception e) { - logger.error("An error occured in notifySharedFolderDeleted ", e); -// e.printStackTrace(); + // if(!notify) + // logger.error("An error occured when notifies + // user: "+infoContactModel.getLogin()); } + } catch (Exception e) { + logger.error("An error occured in notifySharedFolderDeleted ", e); + // e.printStackTrace(); } + } - logger.trace("notifies of deleted shared foder is completed"); - } + logger.trace("notifies of deleted shared foder is completed"); + } }.start(); } - - - //DEBUG + // DEBUG /** * Prints the contacts. * - * @param listContacts the list contacts + * @param listContacts + * the list contacts */ - private void printContacts(List listContacts){ + private void printContacts(List listContacts) { System.out.println("Print contacts"); for (InfoContactModel infoContactModel : listContacts) { @@ -666,24 +810,21 @@ public class NotificationsProducer { System.out.println("End print contacts"); } - /*public static void main(String[] args) throws Exception - { - String sessionID = "1"; - String user = "francesco.mangiacrapa"; - String scopeString = "/gcube/devsec/devVRE"; - String fullName = "Francesco Mangiacrapa"; - - ScopeBean scope; - ASLSession session; - - session = SessionManager.getInstance().getASLSession(sessionID, user); - scope = new ScopeBean(scopeString); - session.setScope(scope.toString()); - session.setUserAvatarId(user + "Avatar"); - session.setUserFullName(fullName); - - - NotificationsProducer feeder = new NotificationsProducer(session); - }*/ + /* + * public static void main(String[] args) throws Exception { String + * sessionID = "1"; String user = "francesco.mangiacrapa"; String + * scopeString = "/gcube/devsec/devVRE"; String fullName = + * "Francesco Mangiacrapa"; + * + * ScopeBean scope; ASLSession session; + * + * session = SessionManager.getInstance().getASLSession(sessionID, user); + * scope = new ScopeBean(scopeString); session.setScope(scope.toString()); + * session.setUserAvatarId(user + "Avatar"); + * session.setUserFullName(fullName); + * + * + * NotificationsProducer feeder = new NotificationsProducer(session); } + */ } \ No newline at end of file diff --git a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/server/notifications/NotificationsUtil.java b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/server/notifications/NotificationsUtil.java index 9d8f0b5..d4b7916 100644 --- a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/server/notifications/NotificationsUtil.java +++ b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/server/notifications/NotificationsUtil.java @@ -5,13 +5,18 @@ package org.gcube.portlets.widgets.workspacesharingwidget.server.notifications; import java.util.ArrayList; import java.util.List; +import java.util.Map; import javax.servlet.http.HttpServletRequest; -import org.gcube.common.homelibary.model.items.type.WorkspaceItemType; -import org.gcube.common.homelibrary.home.workspace.Workspace; -import org.gcube.common.homelibrary.home.workspace.WorkspaceItem; -import org.gcube.common.homelibrary.home.workspace.WorkspaceSharedFolder; +import org.gcube.common.storagehub.client.dsl.FolderContainer; +import org.gcube.common.storagehub.client.dsl.OpenResolver; +import org.gcube.common.storagehub.client.dsl.StorageHubClient; +import org.gcube.common.storagehub.model.Metadata; +import org.gcube.common.storagehub.model.acls.ACL; +import org.gcube.common.storagehub.model.items.FolderItem; +import org.gcube.common.storagehub.model.items.Item; +import org.gcube.common.storagehub.model.items.SharedFolder; import org.gcube.portlets.widgets.workspacesharingwidget.server.GWTWorkspaceSharingBuilder; import org.gcube.portlets.widgets.workspacesharingwidget.server.util.WsUtil; import org.gcube.portlets.widgets.workspacesharingwidget.shared.InfoContactModel; @@ -21,109 +26,127 @@ import org.slf4j.LoggerFactory; /** * The Class NotificationsUtil. * - * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it - * @May 27, 2013 + * @author Francesco Mangiacrapa + * May 27, 2013 */ public class NotificationsUtil { - protected static Logger logger = LoggerFactory.getLogger(NotificationsUtil.class); /** * Send a notification if an item is added or updated to sharing folder. * - * @param request the request - * @param sourceItem the source item - * @param sourceSharedId the source shared id - * @param folderDestinationItem the folder destination item - * @param isOverwrite the is overwrite + * @param request + * the request + * @param sourceItem + * the source item + * @param sourceSharedId + * the source shared id + * @param folderDestinationItem + * the folder destination item + * @param isOverwrite + * the is overwrite */ - public static void checkSendNotifyChangedItemToShare(HttpServletRequest request, final WorkspaceItem sourceItem, final String sourceSharedId, final WorkspaceItem folderDestinationItem, boolean isOverwrite) { + public void checkSendNotifyChangedItemToShare(HttpServletRequest request, final Item sourceItem, + final String sourceSharedId, final FolderItem folderDestinationItem, boolean isOverwrite) { logger.info("checkSendNotifyAddItemToShare"); - if(folderDestinationItem!=null){ + if (folderDestinationItem != null) { - try{ - //if folder destination is shared folder - if(folderDestinationItem.isShared()){ //Notify Added Item To Sharing? + try { + // if folder destination is shared folder + if (folderDestinationItem.isShared()) { // Notify Added Item To + // Sharing? - logger.info("checkNotifyAddItemToShare source item: "+sourceItem.getName()+" sourceSharedId: "+sourceSharedId + " folder destination: "+folderDestinationItem.getName() + " folder destination shared folder id: "+folderDestinationItem.getIdSharedFolder()); + logger.info("checkNotifyAddItemToShare source item: " + sourceItem.getName() + " sourceSharedId: " + + sourceSharedId + " folder destination: " + folderDestinationItem.getName() + + " folder destination shared folder id: " + folderDestinationItem.getId()); - //share condition is true if source shared folder is not null - boolean shareChangeCondition = sourceSharedId==null?false:true; + // share condition is true if source shared folder is not + // null + boolean shareChangeCondition = sourceSharedId == null ? false : true; - //System.out.println("shareChangeCondition add item: "+ shareChangeCondition); + // System.out.println("shareChangeCondition add item: "+ + // shareChangeCondition); - logger.info("shareChangeCondition add item: "+shareChangeCondition); + logger.info("shareChangeCondition add item: " + shareChangeCondition); - //if shareChangeCondition is true.. notifies added item to sharing - if(shareChangeCondition){ + // if shareChangeCondition is true.. notifies added item to + // sharing + if (shareChangeCondition) { - Workspace workspace = WsUtil.getWorkspace(request); - - List listContacts = getListUserSharedByFolderSharedId(workspace, folderDestinationItem.getIdSharedFolder()); - - WorkspaceItem destinationSharedFolder = workspace.getItem(folderDestinationItem.getIdSharedFolder()); + List listContacts = getListUserSharedByFolderSharedId( + folderDestinationItem.getId()); NotificationsProducer np = new NotificationsProducer(request); - //SWITCH BEETWEEN ADDED OR UPDATED - if(!isOverwrite) - np.notifyAddedItemToSharing(listContacts, sourceItem, (WorkspaceSharedFolder) destinationSharedFolder); + // SWITCH BEETWEEN ADDED OR UPDATED + if (!isOverwrite) + np.notifyAddedItemToSharing(listContacts, sourceItem, (SharedFolder) folderDestinationItem); else - np.notifyUpdatedItemToSharing(listContacts, sourceItem, (WorkspaceSharedFolder) destinationSharedFolder); - + np.notifyUpdatedItemToSharing(listContacts, sourceItem, + (SharedFolder) folderDestinationItem); logger.info("The notifies was sent correctly"); -// np.notifyAddedItemToSharing(listContacts, (WorkspaceFolder) folderDestinationItem); + // np.notifyAddedItemToSharing(listContacts, + // (WorkspaceFolder) folderDestinationItem); } - } - else + } else logger.info("folder destination is not shared"); - }catch (Exception e) { - logger.error("An error occurred in checkSendNotifyAddItemToShare ",e); + } catch (Exception e) { + logger.error("An error occurred in checkSendNotifyAddItemToShare ", e); } - }else - logger.warn("The notifies is failure in checkSendNotifyAddItemToShare because folder destination item is null"); + } else + logger.warn( + "The notifies is failure in checkSendNotifyAddItemToShare because folder destination item is null"); } - /** * Gets the list user shared by folder shared id. * - * @param workspace the workspace - * @param idSharedFolder the id shared folder + * @param workspace + * the workspace + * @param idSharedFolder + * the id shared folder * @return the list user shared by folder shared id - * @throws Exception the exception + * @throws Exception + * the exception */ - public static List getListUserSharedByFolderSharedId(Workspace workspace, String idSharedFolder) throws Exception { + /** + * + * @param id + * Folder Id + * @return List of users + * @throws Exception + * Exception + */ + public List getListUserSharedByFolderSharedId(String id) throws Exception { - logger.info("getListUserSharedByFolderSharedId "+ idSharedFolder); + logger.info("getListUserSharedByFolderSharedId " + id); try { - - WorkspaceItem wsItem = workspace.getItem(idSharedFolder); - - if(isARootSharedFolder(wsItem)){ - - WorkspaceSharedFolder wsFolder = (WorkspaceSharedFolder) wsItem; - + StorageHubClient shc = new StorageHubClient(); + OpenResolver openResolverForItem = shc.open(id); + FolderContainer folderContainer = openResolverForItem.asFolder(); + FolderItem folderItem = folderContainer.get(); + if (folderItem.isShared() && folderItem instanceof SharedFolder) { + SharedFolder sharedFolder = (SharedFolder) folderItem; + Metadata metadata = sharedFolder.getUsers(); + Map map = metadata.getMap(); + List listPortalLogin = new ArrayList<>(map.keySet()); + logger.info("getListUserSharedByFolderSharedId return " + listPortalLogin.size() + " user"); GWTWorkspaceSharingBuilder builder = new GWTWorkspaceSharingBuilder(); - List listPortalLogin = wsFolder.getUsers(); - - logger.info("getListUserSharedByFolderSharedId return "+ listPortalLogin.size() + " user"); - return builder.buildGxtInfoContactsFromPortalLogins(listPortalLogin); - } - else{ - logger.info("the item with id: "+idSharedFolder+ " is not "+WorkspaceItemType.SHARED_FOLDER); + } else { + logger.error("The item with id: " + id + " is not a shared folder."); - //DEBUG - //System.out.println("the item with id: "+folderSharedId+ " is not "+WorkspaceItemType.SHARED_FOLDER); + // DEBUG + // System.out.println("the item with id: "+folderSharedId+ " is + // not "+WorkspaceItemType.SHARED_FOLDER); } return new ArrayList(); @@ -136,60 +159,55 @@ public class NotificationsUtil { /** * Check send notify remove item to share. * - * @param request the request - * @param sourceItemIsShared the source item is shared - * @param oldItemName the old item name - * @param oldItemId the old item id - * @param sourceFolderSharedId the source folder shared id + * @param request + * the request + * @param sourceItemIsShared + * the source item is shared + * @param oldItemName + * the old item name + * @param oldItemId + * the old item id + * @param sourceFolderSharedId + * the source folder shared id */ - public static void checkSendNotifyRemoveItemToShare(HttpServletRequest request, final boolean sourceItemIsShared, final String oldItemName, String oldItemId, final String sourceFolderSharedId) { + public void checkSendNotifyRemoveItemToShare(HttpServletRequest request, final boolean sourceItemIsShared, + final String oldItemName, String oldItemId, final String sourceFolderSharedId) { logger.info("checkNotifyRemoveItemToShare:"); - try{ + try { - if(!sourceItemIsShared){ + if (!sourceItemIsShared) { logger.info("checkSendNotifyRemoveItemToShare returned, source item is not shared"); return; } - String idSharedFolder = sourceFolderSharedId!=null?sourceFolderSharedId:""; - boolean isRootFolderShared = checkIsRootFolderShared(oldItemId, idSharedFolder); - logger.info("isRootFolderShared is: "+ isRootFolderShared); + boolean isRootFolderShared = isRootSharedFolderById(sourceFolderSharedId); + logger.info("isRootFolderShared is: " + isRootFolderShared); - if(isRootFolderShared){ + if (isRootFolderShared) { logger.info("Notification doesn't send because the event is on root shared folder"); return; } - boolean isSharedFolder = isASharedFolderForId(request,idSharedFolder); - logger.info("idSharedFolder is: "+ idSharedFolder +" is shared folder: "+isSharedFolder); + logger.info("idSharedFolder is: " + sourceFolderSharedId); - //Notify Removed Item To Sharing? - if(isSharedFolder && !isRootFolderShared){ - - Workspace workspace = WsUtil.getWorkspace(request); - - //get contacts - List listContacts = getListUserSharedByFolderSharedId(workspace, idSharedFolder); - - WorkspaceItem sourceSharedFolder = workspace.getItem(idSharedFolder); - - //System.out.println(" name sourceSharedFolder: "+ sourceSharedFolder.getName()); + // get contacts + List listContacts = getListUserSharedByFolderSharedId(sourceFolderSharedId); + StorageHubClient shc = new StorageHubClient(); + OpenResolver openResolverForItem = shc.open(sourceFolderSharedId); + FolderContainer folderContainer = openResolverForItem.asFolder(); + FolderItem folderItem = folderContainer.get(); + if (folderItem instanceof SharedFolder) { + SharedFolder sharedFolder = (SharedFolder) folderItem; NotificationsProducer np = new NotificationsProducer(request); - - if(sourceSharedFolder instanceof WorkspaceSharedFolder) - np.notifyRemovedItemToSharing(listContacts, oldItemName, (WorkspaceSharedFolder) sourceSharedFolder); - else - logger.info("Source shared folder "+sourceSharedFolder + " is not instanceof WorkspaceSharedFolder, skipping"); - - logger.info("The notifies was sent correctly"); - + np.notifyRemovedItemToSharing(listContacts, oldItemName, sharedFolder); } + logger.info("The notifies was sent correctly"); - }catch (Exception e) { - logger.error("An error occurred in checkSendNotifyRemoveItemToShare ",e); + } catch (Exception e) { + logger.error("An error occurred in checkSendNotifyRemoveItemToShare ", e); } } @@ -197,60 +215,88 @@ public class NotificationsUtil { /** * Checks if is a root shared folder. * - * @param wsItem the ws item + * @param wsItem + * the ws item * @return true, if is a root shared folder */ - public static boolean isARootSharedFolder(WorkspaceItem wsItem){ - if(wsItem!=null) - return wsItem.getType().equals(WorkspaceItemType.SHARED_FOLDER); - return false; - } - + /* + * public boolean isARootSharedFolder(Item wsItem) { if (wsItem != null) + * return wsItem.getType().equals(WorkspaceItemType.SHARED_FOLDER); return + * false; } + */ /** * Checks if is a shared folder for id. * - * @param request the request - * @param itemId the item id + * @param request + * the request + * @param itemId + * the item id * @return true, if is a shared folder for id */ - public static boolean isASharedFolderForId(HttpServletRequest request, String itemId){ - - if(itemId==null || itemId.isEmpty()) - return false; + /* + * public boolean isASharedFolderForId(String itemId) { + * + * if (itemId == null || itemId.isEmpty()) return false; + * + * try { + * + * Workspace workspace = WsUtil.getWorkspace(request); WorkspaceItem wsItem + * = workspace.getItem(itemId); if (wsItem != null) return + * wsItem.getType().equals(WorkspaceItemType.SHARED_FOLDER); return false; + * + * } catch (Exception e) { + * logger.error("An errror occurred in isASharedFolderForId", e); return + * false; } } + */ + private boolean isRootSharedFolderById(String id) throws Exception { try { + if (id == null || id.isEmpty()) { + logger.error("The item with id: " + id + " is not a shared folder."); + return false; + } - Workspace workspace = WsUtil.getWorkspace(request); - WorkspaceItem wsItem = workspace.getItem(itemId); - if(wsItem!=null) - return wsItem.getType().equals(WorkspaceItemType.SHARED_FOLDER); - return false; + StorageHubClient shc = new StorageHubClient(); + OpenResolver openResolverForItem = shc.open(id); + FolderContainer folderContainer = openResolverForItem.asFolder(); + FolderItem folderItem = folderContainer.get(); + if (folderItem.isShared() && folderItem instanceof SharedFolder) { + logger.info("The item with id: " + id + " is a shared folder."); + return true; + } else { + logger.error("The item with id: " + id + " is not a shared folder."); + return false; + + } } catch (Exception e) { - logger.error("An errror occurred in isASharedFolderForId", e); - return false; + logger.error("Error in isASharedFolderById: " + e.getLocalizedMessage(), e); + throw new Exception("Error checking the type of folder: [id=" + id + "]"); } - } + } /** * Check is root folder shared. * - * @param itemId the item id - * @param rootFolderSharedId the root folder shared id + * @param itemId + * the item id + * @param rootFolderSharedId + * the root folder shared id * @return true, if successful */ - public static boolean checkIsRootFolderShared(String itemId, String rootFolderSharedId) { + public boolean checkIsRootFolderShared(String itemId, String rootFolderSharedId) { - logger.info("checkIsRootFolderShared between [itemid: "+itemId +", rootFolderSharedId: "+rootFolderSharedId+"]"); - if(itemId==null) + logger.info("checkIsRootFolderShared between [itemid: " + itemId + ", rootFolderSharedId: " + + rootFolderSharedId + "]"); + if (itemId == null) return false; - if(rootFolderSharedId==null) + if (rootFolderSharedId == null) return false; - if(itemId.compareTo(rootFolderSharedId)==0) + if (itemId.compareTo(rootFolderSharedId) == 0) return true; return false; diff --git a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/server/notifications/SocialItemFactory.java b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/server/notifications/SocialItemFactory.java new file mode 100644 index 0000000..943f690 --- /dev/null +++ b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/server/notifications/SocialItemFactory.java @@ -0,0 +1,26 @@ +package org.gcube.portlets.widgets.workspacesharingwidget.server.notifications; + +import org.gcube.applicationsupportlayer.social.shared.SocialFileItem; +import org.gcube.applicationsupportlayer.social.shared.SocialSharedFolder; +import org.gcube.common.storagehub.model.items.FolderItem; +import org.gcube.common.storagehub.model.items.Item; + +/** + * + * @author Giancarlo Panichi + * + */ +public class SocialItemFactory { + + public SocialFileItem createSocialFileItem(Item item, FolderItem parent) { + SocialSharedFolder socialSharedFolder=createSocialSharedFolder(parent); + return new SocialFileItem(item.getId(), item.getName(), item.getTitle(), item.getPath(), socialSharedFolder); + } + + public SocialSharedFolder createSocialSharedFolder(FolderItem folder) { + return new SocialSharedFolder(folder.getId(), folder.getName(), folder.getTitle(), folder.getName(), + folder.getPath(), folder.getParentId(), false); + + } + +} diff --git a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/server/util/AccessTypeComparator.java b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/server/util/AccessTypeComparator.java new file mode 100644 index 0000000..131eb82 --- /dev/null +++ b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/server/util/AccessTypeComparator.java @@ -0,0 +1,104 @@ +/** + * + */ +package org.gcube.portlets.widgets.workspacesharingwidget.server.util; + +import java.util.ArrayList; +import java.util.Comparator; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +import org.gcube.common.storagehub.model.acls.AccessType; + +/** + * The Class AclTypeComparator. + * + * @author Francesco Mangiacrapa francesco.mangiacrapaATisti.cnr.it Mar 5, 2015 + */ +public class AccessTypeComparator implements Comparator { + + public static final Map aclTypeOrder; + static { + aclTypeOrder = new LinkedHashMap(); + aclTypeOrder.put(AccessType.READ_ONLY, 0); + aclTypeOrder.put(AccessType.WRITE_OWNER, 1); + aclTypeOrder.put(AccessType.WRITE_ALL, 2); + // aclTypeOrder.put(ACLType.ADMINISTRATOR, 3); + } + + /* + * (non-Javadoc) + * + * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object) + */ + @Override + public int compare(AccessType o1, AccessType o2) { + if (o1 == null) + return -1; + if (o2 == null) + return 1; + + Integer order1 = aclTypeOrder.get(o1); + Integer order2 = aclTypeOrder.get(o2); + + if (order1 == null) + return -1; + + if (order2 == null) + return 1; + + if (order1 == order2) + return 0; + + return order1 < order2 ? -1 : 1; + } + + /** + * Gets the allowed. + * + * @param accessType + * the acl type to compare + * @param includeEqual + * if true include equal ACLType, no otherwise + * @return the allowed + */ + public List getAllowed(AccessType accessType, boolean includeEqual) { + + List allowed = new ArrayList<>(); + + if (accessType == null) + return allowed; + + // IF MAP DOES NOT CONTAINS ACT TYPE IT IS NOT COMPARABLE + if (aclTypeOrder.get(accessType) == null) + return allowed; + + for (AccessType aMap : aclTypeOrder.keySet()) { + int comparator = compare(aMap, accessType); + if (comparator == 1) + allowed.add(aMap); + else if (includeEqual && comparator == 0) + allowed.add(aMap); + } + + return allowed; + } + + /** + * The main method. + * + * @param args + * the arguments + */ + public static void main(String[] args) { + + AccessTypeComparator comparator = new AccessTypeComparator(); + + List allowed = comparator.getAllowed(AccessType.WRITE_ALL, false); + + System.out.println(allowed); + + } + +} diff --git a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/server/util/DiffereceBeetweenInfoContactModel.java b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/server/util/DiffereceBeetweenInfoContactModel.java index 27e64af..c2d754d 100644 --- a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/server/util/DiffereceBeetweenInfoContactModel.java +++ b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/server/util/DiffereceBeetweenInfoContactModel.java @@ -7,106 +7,76 @@ import org.gcube.portlets.widgets.workspacesharingwidget.shared.InfoContactModel /** * - * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it - * @Feb 25, 2014 + * @author Francesco Mangiacrapa Feb 25, 2014 * */ public class DiffereceBeetweenInfoContactModel { - - + private List listOne; private List listTwo; - + /** - * Get difference between listA and listB + * Get difference between listA and listB + * * @param listA + * List A * @param listB + * List B */ - public DiffereceBeetweenInfoContactModel(List listA, List listB){ - + public DiffereceBeetweenInfoContactModel(List listA, List listB) { + this.listOne = listA; this.listTwo = listB; - + } - + /** * * @return what is in listA that is not in listB. */ - public List getDifferentsContacts(){ - - if(this.listOne==null) + public List getDifferentsContacts() { + + if (this.listOne == null) return new ArrayList(); - - if(this.listTwo==null || this.listTwo.size()==0) + + if (this.listTwo == null || this.listTwo.size() == 0) return this.listOne; - + List difference = new ArrayList(); - + boolean found; - + for (InfoContactModel o1 : listOne) { found = false; for (InfoContactModel o2 : listTwo) { - if(compare(o1,o2)==0){ + if (compare(o1, o2) == 0) { found = true; break; } } - - if(!found) + + if (!found) difference.add(o1); } - - return difference; - - } - - /** - * - * @param o1 - * @param o2 - * @return 0 if and only if o1.getName().compareTo(o2.getName())==0 && (o1.getLogin().compareTo(o2.getLogin())==0) is true - */ - public int compare(InfoContactModel o1, InfoContactModel o2) { - - if (o1 == null) { - return -1; - } else if (o2 == null) { - return 1; - } - - if (o1.getName().compareTo(o2.getName())==0 && (o1.getLogin().compareTo(o2.getLogin())==0)) - return 0; - else - return -2; - } - - - /** - * test - * @param args - */ - /*public static void main(String[] args) { - - List listA = new ArrayList(); - listA.add(new InfoContactModel("federico.defaveri", "federico.defaveri", "Federico de Faveri", false)); - listA.add(new InfoContactModel("antonio.gioia", "antonio.gioia", "Antonio Gioia",false)); - listA.add(new InfoContactModel("fabio.sinibaldi", "fabio.sinibaldi", "Fabio Sinibaldi",false)); - listA.add(new InfoContactModel("pasquale.pagano", "pasquale.pagano", "Pasquale Pagano",false)); - listA.add(new InfoContactModel("francesco.mangiacrapa", "francesco.mangiacrapa", "Francesco Mangiacrapa",false)); - listA.add(new InfoContactModel("massimiliano.assante", "massimiliano.assante", "Massimiliano Assante",false)); - - List listB = new ArrayList(); - - listB.add(new InfoContactModel("federico.defaveri", "federico.defaveri", "Federico de Faveri",false)); - listB.add(new InfoContactModel("fabio.sinibaldi", "fabio.sinibaldi", "Fabio Sinibaldi",false)); - listB.add(new InfoContactModel("antonio.gioia", "antonio.gioia", "Antonio Gioia",false)); - listB.add(new InfoContactModel("pasquale.pagano", "pasquale.pagano", "Pasquale Pagano",false)); - - DiffereceBeetweenInfoContactModel diff = new DiffereceBeetweenInfoContactModel(listA, listB); - - System.out.println("the differce is: "+diff.getDifferentsContacts()); - }*/ + return difference; + + } + + public int compare(InfoContactModel o1, InfoContactModel o2) { + + if (o1 == null) { + return -1; + } else if (o2 == null) { + return 1; + } + + if (o1.getName().compareTo(o2.getName()) == 0 && (o1.getLogin().compareTo(o2.getLogin()) == 0)) + return 0; + else + return -2; + } + + + } diff --git a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/server/util/LoginServiceUtil.java b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/server/util/LoginServiceUtil.java index fb61c32..8b71eb5 100644 --- a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/server/util/LoginServiceUtil.java +++ b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/server/util/LoginServiceUtil.java @@ -22,29 +22,22 @@ import org.slf4j.LoggerFactory; * * @author Massimiliano Assante ISTI-CNR * - * @version 2.0 Jan 10th 2012 + * Jan 10th 2012 * - * changed by Francesco Mangiacrapa + * changed by Francesco Mangiacrapa */ public class LoginServiceUtil { - /** - * - */ + public static final String ROOT_ORG = "rootorganization"; - /** - * - */ public static final String PUBLIC_LAYOUT_NAME = " Data e-Infrastructure gateway"; - /** - * - */ public static final String GUEST_COMMUNITY_NAME = "Guest"; private static final Logger _log = LoggerFactory.getLogger(LoginServiceUtil.class); /** * simply returns fake VOS for debugging purpose - * @return + * + * @return List of VO */ protected static List getFakeVOs() { VO rootVO = new VO(); @@ -54,14 +47,14 @@ public class LoginServiceUtil { rootVO.setImageURL("http://portal.d4science.research-infrastructures.eu/vologin/html/RedGrid.jpg"); rootVO.setUserBelonging(UserBelonging.BELONGING); - /***************************************/ VO emVO = new VO(); emVO.setRoot(false); emVO.setGroupName("/d4science.research-infrastructures.eu/EM/"); emVO.setName("EM VO"); - emVO.setDescription("EM and AEM Virtual Organisation The FARM Virtual Organisation is the dynamic group of individuals and/or institutions defined around a set of sharing rules in which resource providers and consumers specify clearly and carefully just what is shared, who is allowed to share, and the conditions under which sharing occurs to serve the needs of the Fisheries and Aquaculture Resources Management."); + emVO.setDescription( + "EM and AEM Virtual Organisation The FARM Virtual Organisation is the dynamic group of individuals and/or institutions defined around a set of sharing rules in which resource providers and consumers specify clearly and carefully just what is shared, who is allowed to share, and the conditions under which sharing occurs to serve the needs of the Fisheries and Aquaculture Resources Management."); emVO.setImageURL("http://portal.d4science.research-infrastructures.eu/vologin/html/RedGrid.jpg"); emVO.setUserBelonging(UserBelonging.NOT_BELONGING); @@ -70,8 +63,8 @@ public class LoginServiceUtil { VRE cool_EM_VRE = new VRE(); cool_EM_VRE.setName("COOL EM VRE"); cool_EM_VRE.setGroupName("/d4science.research-infrastructures.eu/EM/COOLEMVRE"); - cool_EM_VRE.setDescription("cool_EM_VRE VRE Description
"+ - "This Virtual Research Environment is for cool authors, managers and researchers who produce reports containing cool data."); + cool_EM_VRE.setDescription("cool_EM_VRE VRE Description
" + + "This Virtual Research Environment is for cool authors, managers and researchers who produce reports containing cool data."); cool_EM_VRE.setImageURL("http://portal.d4science.research-infrastructures.eu/vologin/html/gcm-preview.jpg"); cool_EM_VRE.setUserBelonging(UserBelonging.BELONGING); emVO.addVRE(cool_EM_VRE); @@ -79,26 +72,28 @@ public class LoginServiceUtil { VRE cool_EM_VRE2 = new VRE(); cool_EM_VRE2.setName("COOL VRE 2"); cool_EM_VRE2.setGroupName("/d4science.research-infrastructures.eu/EM/COOLEMVRE2"); - cool_EM_VRE2.setDescription("Cool VRE Description
"+ - "This Virtual Research Environment is for cool authors, managers and researchers who produce reports containing cool data."); + cool_EM_VRE2.setDescription("Cool VRE Description
" + + "This Virtual Research Environment is for cool authors, managers and researchers who produce reports containing cool data."); - cool_EM_VRE2.setImageURL("http://portal.d4science.research-infrastructures.eu/vologin/html/aquamaps-preview.jpg"); + cool_EM_VRE2 + .setImageURL("http://portal.d4science.research-infrastructures.eu/vologin/html/aquamaps-preview.jpg"); cool_EM_VRE2.setUserBelonging(UserBelonging.NOT_BELONGING); VRE cool_EM_VRE3 = new VRE(); cool_EM_VRE3.setName("COOL EM VRE TRE"); cool_EM_VRE3.setGroupName("/d4science.research-infrastructures.eu/EM/COOlVRE3"); - cool_EM_VRE3.setDescription("Cool VRE Description
"+ - "This Virtual Research Environment is for cool authors, managers and researchers who produce reports containing cool data."); + cool_EM_VRE3.setDescription("Cool VRE Description
" + + "This Virtual Research Environment is for cool authors, managers and researchers who produce reports containing cool data."); - cool_EM_VRE3.setImageURL("http://portal.d4science.research-infrastructures.eu/vologin/html/aquamaps-preview.jpg"); + cool_EM_VRE3 + .setImageURL("http://portal.d4science.research-infrastructures.eu/vologin/html/aquamaps-preview.jpg"); cool_EM_VRE3.setUserBelonging(UserBelonging.BELONGING); VRE demo = new VRE(); demo.setName("Demo"); demo.setGroupName("/d4science.research-infrastructures.eu/EM/Demo"); - demo.setDescription("Cool VRE Description
"+ - "This Virtual Research Environment is for cool authors, managers and researchers who produce reports containing cool data."); + demo.setDescription("Cool VRE Description
" + + "This Virtual Research Environment is for cool authors, managers and researchers who produce reports containing cool data."); demo.setImageURL("http://portal.d4science.research-infrastructures.eu/vologin/html/RedGrid.jpg"); demo.setUserBelonging(UserBelonging.BELONGING); @@ -111,7 +106,6 @@ public class LoginServiceUtil { vreGCM.setImageURL("http://portal.d4science.research-infrastructures.eu/vologin/html/aquamaps-preview.jpg"); vreGCM.setUserBelonging(UserBelonging.BELONGING); - emVO.addVRE(cool_EM_VRE); emVO.addVRE(cool_EM_VRE2); emVO.addVRE(cool_EM_VRE3); @@ -127,46 +121,49 @@ public class LoginServiceUtil { /** * - * @param scopename a string + * @param scopename + * a string * @return true if any VRE Exists */ protected static Boolean checkVresPresence(String scopename) { ScopeBean scope = null; - scope = new ScopeBean("/"+scopename); + scope = new ScopeBean("/" + scopename); try { _log.info("Searching for VREs into " + scope.name()); String currScope = ScopeProvider.instance.get(); ScopeProvider.instance.set(scope.toString()); SimpleQuery query = queryFor(GenericResource.class); - query.addCondition("$resource/Profile/SecondaryType/text() eq '"+ Type.VRE +"'"); + query.addCondition("$resource/Profile/SecondaryType/text() eq '" + Type.VRE + "'"); DiscoveryClient client = clientFor(GenericResource.class); boolean result = client.submit(query).size() > 0; ScopeProvider.instance.set(currScope); return result; } catch (Exception e) { - _log.error("Generic Exception for " + scope.name() + " " + e.getMessage()); + _log.error("Generic Exception for " + scope.name() + " " + e.getMessage()); e.printStackTrace(); return null; } } + + /** - * - * @param scopename a string - * @return an arraylist of VRE with just name and description filled + * + * @param scopename scope name + * @return List of VREs */ protected static List getVREsFromInfrastructure(String scopename) { - List toReturn = new ArrayList(); + List toReturn = new ArrayList(); ScopeBean scope = null; - scope = new ScopeBean("/"+scopename); + scope = new ScopeBean("/" + scopename); try { _log.info("Searching for VREs into " + scope.name()); String currScope = ScopeProvider.instance.get(); ScopeProvider.instance.set(scope.toString()); SimpleQuery query = queryFor(GenericResource.class); - query.addCondition("$resource/Profile/SecondaryType/text() eq '"+ Type.VRE +"'"); + query.addCondition("$resource/Profile/SecondaryType/text() eq '" + Type.VRE + "'"); DiscoveryClient client = clientFor(GenericResource.class); for (GenericResource genres : client.submit(query)) { @@ -176,7 +173,7 @@ public class LoginServiceUtil { return toReturn; } catch (Exception e) { e.printStackTrace(); - _log.error("Generic Exception for " + scope.name() + " " + e.getMessage()); + _log.error("Generic Exception for " + scope.name() + " " + e.getMessage()); return null; } } diff --git a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/server/util/PortalContextInfo.java b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/server/util/PortalContextInfo.java index a9cef60..0659f89 100644 --- a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/server/util/PortalContextInfo.java +++ b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/server/util/PortalContextInfo.java @@ -9,7 +9,7 @@ import java.io.Serializable; /** * The Class PortalContextInfo. * - * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it + * @author Francesco Mangiacrapa * Nov 25, 2016 */ public class PortalContextInfo implements Serializable{ 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 61d4474..fe6072a 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 @@ -23,7 +23,7 @@ import org.slf4j.LoggerFactory; /** * The Class UserUtil. * - * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it + * @author Francesco Mangiacrapa * Nov 25, 2016 */ public class UserUtil { 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 bc9b60b..2ca277a 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 @@ -9,18 +9,15 @@ import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; -import org.apache.commons.lang.StringUtils; + import org.gcube.applicationsupportlayer.social.ApplicationNotificationsManager; import org.gcube.applicationsupportlayer.social.NotificationsManager; import org.gcube.applicationsupportlayer.social.shared.SocialNetworkingSite; import org.gcube.applicationsupportlayer.social.shared.SocialNetworkingUser; -import org.gcube.common.homelibrary.home.HomeLibrary; -import org.gcube.common.homelibrary.home.exceptions.HomeNotFoundException; -import org.gcube.common.homelibrary.home.exceptions.InternalErrorException; -import org.gcube.common.homelibrary.home.workspace.Workspace; -import org.gcube.common.homelibrary.home.workspace.exceptions.WorkspaceFolderNotFoundException; import org.gcube.common.portal.PortalContext; import org.gcube.common.scope.api.ScopeProvider; +import org.gcube.common.storagehub.client.dsl.FolderContainer; +import org.gcube.common.storagehub.client.dsl.StorageHubClient; import org.gcube.portlets.widgets.workspacesharingwidget.server.GWTWorkspaceSharingBuilder; import org.gcube.portlets.widgets.workspacesharingwidget.server.notifications.NotificationsProducer; import org.gcube.portlets.widgets.workspacesharingwidget.shared.InfoContactModel; @@ -36,7 +33,7 @@ import com.liferay.portal.service.UserLocalServiceUtil; /** * The Class WsUtil. * - * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it + * @author Francesco Mangiacrapa * Nov 25, 2016 */ public class WsUtil { @@ -107,7 +104,7 @@ public class WsUtil { * * @param infrastructure the infrastructure name * @param startScopes the starting scopes - * @return an arraylist of VO containing their child VREs + * @return an arraylist of VO containing their child VREs */ public static List getVresFromInfrastructure(String infrastructure, String startScopes) { List toReturn = new ArrayList(); @@ -133,43 +130,7 @@ public class WsUtil { return toReturn; } - /** - * Gets the workspace. - * - * @param httpServletRequest the http servlet request - * @return the workspace - * @throws InternalErrorException the internal error exception - * @throws HomeNotFoundException the home not found exception - * @throws WorkspaceFolderNotFoundException the workspace folder not found exception - */ - public static Workspace getWorkspace(HttpServletRequest httpServletRequest) throws InternalErrorException, HomeNotFoundException, WorkspaceFolderNotFoundException - { - logger.trace("Get Workspace"); - PortalContextInfo info = getPortalContext(httpServletRequest); - logger.trace("PortalContextInfo: "+info); - - ScopeProvider.instance.set(info.getCurrentScope()); - logger.trace("Scope provider instancied"); - - Workspace workspace = HomeLibrary.getUserWorkspace(info.getUsername()); - HttpSession session = httpServletRequest.getSession(); - - if (session.getAttribute(WORKSPACEBUILDER_ATTRIBUTE) == null) - { - logger.info("Initializing the workspace area builder"); - - GWTWorkspaceSharingBuilder builder = new GWTWorkspaceSharingBuilder(); - - //ADDED 03/09/2013 - //TODO IS GROUP? - builder.setUserLogged(new InfoContactModel(info.getUsername(), info.getUsername(), info.getUserFullName(), false)); - - session.setAttribute(WORKSPACEBUILDER_ATTRIBUTE, builder); - } - - return workspace; - } - + /** * Gets the notification manager. @@ -241,9 +202,15 @@ public class WsUtil { */ public static boolean isVRE(String scope){ - int slashCount = StringUtils.countMatches(scope, "/"); - - if(slashCount < 3){ + int slashCounter = 0; + char slash="/".charAt(0); + for (int i = 0; i < scope.length(); i++) { + if (scope.charAt(i)==slash) { + slashCounter++; + } + } + + if(slashCounter < 3){ logger.trace("currentScope is not VRE"); return false; } diff --git a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/shared/ACL_TYPE.java b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/shared/ACL_TYPE.java index 813abe7..2f5b279 100644 --- a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/shared/ACL_TYPE.java +++ b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/shared/ACL_TYPE.java @@ -4,8 +4,8 @@ package org.gcube.portlets.widgets.workspacesharingwidget.shared; /** - * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it - * @Feb 27, 2014 + * @author Francesco Mangiacrapa + * Feb 27, 2014 * */ public enum ACL_TYPE { diff --git a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/shared/AllowAccess.java b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/shared/AllowAccess.java new file mode 100644 index 0000000..58356dc --- /dev/null +++ b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/shared/AllowAccess.java @@ -0,0 +1,123 @@ +/** + * + */ +package org.gcube.portlets.widgets.workspacesharingwidget.shared; + +import java.io.Serializable; + +/** + * + * @author Francesco Mangiacrapa francesco.mangiacrapaATisti.cnr.it Nov 29, 2016 + */ +public class AllowAccess implements Serializable { + + /** + * + */ + private static final long serialVersionUID = -2180345568585856822L; + + private String itemId; + private Boolean accessGranted = false; + private String accessAllowDenyMotivation; + private String error; + + public AllowAccess() { + } + + public AllowAccess(String itemId) { + + } + + public AllowAccess(String itemId, Boolean accessGranted, String accessAllowDenyMotivation, String error) { + + super(); + this.itemId = itemId; + this.accessGranted = accessGranted; + this.accessAllowDenyMotivation = accessAllowDenyMotivation; + this.error = error; + } + + public String getItemId() { + + return itemId; + } + + public Boolean getAccessGranted() { + + return accessGranted; + } + + /** + * @return the accessAllowDenyMotivation + */ + public String getAccessAllowDenyMotivation() { + + return accessAllowDenyMotivation; + } + + /** + * @return the error + */ + public String getError() { + + return error; + } + + /** + * @param itemId + * the itemId to set + */ + public void setItemId(String itemId) { + + this.itemId = itemId; + } + + /** + * @param accessGranted + * the accessGranted to set + */ + public void setAccessGranted(Boolean accessGranted) { + + this.accessGranted = accessGranted; + } + + /** + * @param accessAllowDenyMotivation + * the accessAllowDenyMotivation to set + */ + public void setAccessAllowDenyMotivation(String accessAllowDenyMotivation) { + + this.accessAllowDenyMotivation = accessAllowDenyMotivation; + } + + /** + * @param error + * the error to set + */ + public void setError(String error) { + + this.error = error; + } + + /* + * (non-Javadoc) + * + * @see java.lang.Object#toString() + */ + @Override + public String toString() { + + StringBuilder builder = new StringBuilder(); + builder.append("AllowAccess [itemId="); + builder.append(itemId); + builder.append(", accessGranted="); + builder.append(accessGranted); + builder.append(", accessAllowDenyMotivation="); + builder.append(accessAllowDenyMotivation); + builder.append(", error="); + builder.append(error); + builder.append("]"); + return builder.toString(); + } + +} diff --git a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/shared/CredentialModel.java b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/shared/CredentialModel.java index 04ae425..bddd804 100644 --- a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/shared/CredentialModel.java +++ b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/shared/CredentialModel.java @@ -9,7 +9,7 @@ import java.io.Serializable; /** * The Class CredentialModel. * - * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it + * @author Francesco Mangiacrapa * Apr 14, 2016 */ public class CredentialModel implements Serializable{ diff --git a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/shared/ExtendedWorkspaceACL.java b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/shared/ExtendedWorkspaceACL.java new file mode 100644 index 0000000..6aa18a3 --- /dev/null +++ b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/shared/ExtendedWorkspaceACL.java @@ -0,0 +1,69 @@ +package org.gcube.portlets.widgets.workspacesharingwidget.shared; + +import org.gcube.portlets.widgets.workspacesharingwidget.shared.ACL_TYPE; +import org.gcube.portlets.widgets.workspacesharingwidget.shared.WorkspaceACL; + +/** + * + * @author Francesco Mangiacrapa francesco.mangiacrapaATisti.cnr.it Feb 21, 2014 + * + */ +public class ExtendedWorkspaceACL extends WorkspaceACL { + + /** + * + */ + private static final long serialVersionUID = 5272059977475806564L; + + private String loginOwner; + private String workspaceItemId; + + private boolean isBaseSharedFolder; + + /** + * + */ + public ExtendedWorkspaceACL() { + } + + public ExtendedWorkspaceACL(String id, ACL_TYPE aclType, String label, boolean defaultValue, USER_TYPE userType, + String description, String loginOwner, String workspaceItemId, boolean isBaseSharedFolder) { + super(id, aclType, label, defaultValue, userType, description); + this.loginOwner = loginOwner; + this.workspaceItemId = workspaceItemId; + this.isBaseSharedFolder = isBaseSharedFolder; + } + + public String getLoginOwner() { + return loginOwner; + } + + public String getWorkspaceItemId() { + return workspaceItemId; + } + + public void setLoginOwner(String loginOwner) { + this.loginOwner = loginOwner; + } + + public void setWorkspaceItemId(String workspaceItemId) { + this.workspaceItemId = workspaceItemId; + } + + public boolean isBaseSharedFolder() { + return isBaseSharedFolder; + } + + public void setBaseSharedFolder(boolean isBaseSharedFolder) { + this.isBaseSharedFolder = isBaseSharedFolder; + } + + @Override + public String toString() { + return "ExtendedWorkspaceACL [loginOwner=" + loginOwner + ", workspaceItemId=" + workspaceItemId + + ", isBaseSharedFolder=" + isBaseSharedFolder + ", getId()=" + getId() + ", getLabel()=" + getLabel() + + ", getDefaultValue()=" + getDefaultValue() + ", getUserType()=" + getUserType() + + ", getDescription()=" + getDescription() + ", getAclType()=" + getAclType() + "]"; + } + +} diff --git a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/shared/FileModel.java b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/shared/FileModel.java index 6337505..48c16fb 100644 --- a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/shared/FileModel.java +++ b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/shared/FileModel.java @@ -7,8 +7,7 @@ import com.extjs.gxt.ui.client.data.BaseModelData; /** * - * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it - * @Feb 25, 2014 + * @author Francesco Mangiacrapa Feb 25, 2014 * */ public class FileModel extends BaseModelData implements Serializable { @@ -17,28 +16,16 @@ public class FileModel extends BaseModelData implements Serializable { * */ private static final long serialVersionUID = 7291843683961579349L; - - private static final String DIRECTORYDESCRIPTION = "DIRECTORYDESCRIPTION"; - private static final String PARENT = "PARENT"; - private static final String OWNER = "OWNER"; - private static final String OWNERFULLNAME = "OWNERFULLNAME"; - private static final String ISSHARED = "ISSHARED"; - private static final String SHAREUSERS = "SHAREUSERS"; - private static final String ISDIRECTORY = "ISDIRECTORY"; - private static final String IDENTIFIER = "IDENTIFIER"; - private static final String TYPE = "TYPE"; - private static final String NAME = "NAME"; - private static final String FOLDERITEMTYPE = "FOLDERITEMTYPE"; protected boolean isRoot = false; @@ -47,31 +34,19 @@ public class FileModel extends BaseModelData implements Serializable { protected FileModel() { } - /** - * - * @param identifier - * @param name - * @param parent - * @param isDirectory - * @param isShared - */ - public FileModel(String identifier, String name, FileModel parent, boolean isDirectory, boolean isShared) { + public FileModel(String identifier, String name, String description, FileModel parent, boolean isDirectory, boolean isShared) { setIdentifier(identifier); setName(name); + setDescription(description); setParentFileModel(parent); setIsDirectory(isDirectory); setShared(isShared); } - /** - * - * @param identifier - * @param name - * @param isDirectory - */ - public FileModel(String identifier, String name, boolean isDirectory) { + public FileModel(String identifier, String name, String description,boolean isDirectory) { setIdentifier(identifier); setName(name); + setDescription(description); setIsDirectory(isDirectory); } @@ -92,6 +67,7 @@ public class FileModel extends BaseModelData implements Serializable { * ConstantsExplorer.FOLDERLOADED = "loaded"; * * @param status + * Status */ public void setStatus(String status) { set("status", status); @@ -123,8 +99,7 @@ public class FileModel extends BaseModelData implements Serializable { return get(OWNERFULLNAME); } - public void setSharingValue(boolean isShared, - List listShareUsers) { + public void setSharingValue(boolean isShared, List listShareUsers) { set(ISSHARED, isShared); set(SHAREUSERS, listShareUsers); } @@ -190,12 +165,12 @@ public class FileModel extends BaseModelData implements Serializable { } return super.equals(obj); } - - public void setFolderItemType(GXTFolderItemTypeEnum folderItemTypeEnum){ + + public void setFolderItemType(GXTFolderItemTypeEnum folderItemTypeEnum) { set(FOLDERITEMTYPE, folderItemTypeEnum); } - - public GXTFolderItemTypeEnum getGXTFolderItemType(){ + + public GXTFolderItemTypeEnum getGXTFolderItemType() { return (GXTFolderItemTypeEnum) get(FOLDERITEMTYPE); } @@ -211,6 +186,7 @@ public class FileModel extends BaseModelData implements Serializable { * It's: folder, mime type or unknown * * @param type + * Type */ public void setType(String type) { set(TYPE, type); @@ -227,4 +203,17 @@ public class FileModel extends BaseModelData implements Serializable { public void setVreFolder(boolean isVreFolder) { this.isVreFolder = isVreFolder; } + + @Override + public String toString() { + return "FileModel [isRoot=" + isRoot + ", isVreFolder=" + isVreFolder + ", getDescription()=" + getDescription() + + ", getOwner()=" + getOwner() + ", getOwnerFullName()=" + getOwnerFullName() + + ", getListUserSharing()=" + getListUserSharing() + ", isShared()=" + isShared() + ", isRoot()=" + + isRoot() + ", getStatus()=" + getStatus() + ", getIdentifier()=" + getIdentifier() + ", getName()=" + + getName() + ", isDirectory()=" + isDirectory() + ", getType()=" + getType() + ", isVreFolder()=" + + isVreFolder() + "]"; + } + + + } diff --git a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/shared/FolderModel.java b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/shared/FolderModel.java index 2c03268..52f3c4a 100644 --- a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/shared/FolderModel.java +++ b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/shared/FolderModel.java @@ -1,7 +1,7 @@ package org.gcube.portlets.widgets.workspacesharingwidget.shared; /** - * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it + * @author Francesco Mangiacrapa * */ public class FolderModel extends FileModel { @@ -14,13 +14,13 @@ public class FolderModel extends FileModel { public FolderModel() { } - public FolderModel(String identifier, String name, FileModel parent, boolean isDirectory, boolean isShared, boolean isVreFolder) { - super(identifier, name, parent, isDirectory, isShared); + public FolderModel(String identifier, String name, String description, FileModel parent, boolean isDirectory, boolean isShared, boolean isVreFolder) { + super(identifier, name, description, parent, isDirectory, isShared); super.setVreFolder(isVreFolder); } - public FolderModel(String identifier, String name, boolean isDirectory, boolean isVreFolder) { - super(identifier, name, isDirectory); + public FolderModel(String identifier, String name, String description, boolean isDirectory, boolean isVreFolder) { + super(identifier, name, description, isDirectory); super.setVreFolder(isVreFolder); } diff --git a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/shared/GXTFolderItemTypeEnum.java b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/shared/GXTFolderItemTypeEnum.java index 1e2d6b3..e757d39 100644 --- a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/shared/GXTFolderItemTypeEnum.java +++ b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/shared/GXTFolderItemTypeEnum.java @@ -6,7 +6,7 @@ import java.io.Serializable; /** * The Enum GXTFolderItemTypeEnum. * - * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it + * @author Francesco Mangiacrapa * Jun 19, 2015 */ public enum GXTFolderItemTypeEnum implements Serializable { diff --git a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/shared/InfoContactModel.java b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/shared/InfoContactModel.java index 89860f7..77f2396 100644 --- a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/shared/InfoContactModel.java +++ b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/shared/InfoContactModel.java @@ -6,7 +6,7 @@ import java.util.Comparator; import com.extjs.gxt.ui.client.data.BaseModelData; /** - * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it + * @author Francesco Mangiacrapa * */ public class InfoContactModel extends BaseModelData implements Serializable, Comparable { diff --git a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/shared/ReportAssignmentACL.java b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/shared/ReportAssignmentACL.java new file mode 100644 index 0000000..017f207 --- /dev/null +++ b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/shared/ReportAssignmentACL.java @@ -0,0 +1,88 @@ +/** + * + */ +package org.gcube.portlets.widgets.workspacesharingwidget.shared; + +import java.io.Serializable; +import java.util.List; + +/** + * + * @author Francesco Mangiacrapa francesco.mangiacrapaATisti.cnr.it + * Mar 6, 2015 + */ +public class ReportAssignmentACL implements Serializable{ + + /** + * + */ + private static final long serialVersionUID = -7218122043660957432L; + + private List validLogins; + private List errors; + private String aclType; + + /** + * + */ + public ReportAssignmentACL() { + } + + /** + * @return the validLogins + */ + public List getValidLogins() { + return validLogins; + } + + /** + * @param validLogins the validLogins to set + */ + public void setValidLogins(List validLogins) { + this.validLogins = validLogins; + } + + /** + * @return the errors + */ + public List getErrors() { + return errors; + } + + /** + * @param errors the errors to set + */ + public void setErrors(List errors) { + this.errors = errors; + } + + /** + * @return the aclType + */ + public String getAclType() { + return aclType; + } + + /** + * @param aclType the aclType to set + */ + public void setAclType(String aclType) { + this.aclType = aclType; + } + + /* (non-Javadoc) + * @see java.lang.Object#toString() + */ + @Override + public String toString() { + StringBuilder builder = new StringBuilder(); + builder.append("ReportValidationACL [validLogins="); + builder.append(validLogins); + builder.append(", errors="); + builder.append(errors); + builder.append(", aclType="); + builder.append(aclType); + builder.append("]"); + return builder.toString(); + } +} diff --git a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/shared/SessionExpiredException.java b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/shared/SessionExpiredException.java index 716f50d..02cfe9e 100644 --- a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/shared/SessionExpiredException.java +++ b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/shared/SessionExpiredException.java @@ -5,8 +5,8 @@ package org.gcube.portlets.widgets.workspacesharingwidget.shared; /** * - * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it - * @Mar 3, 2014 + * @author Francesco Mangiacrapa + * Mar 3, 2014 * */ public class SessionExpiredException extends Exception{ 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 edbb45e..e41c709 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 @@ -6,8 +6,8 @@ import java.io.Serializable; /** * - * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it - * @Feb 21, 2014 + * @author Francesco Mangiacrapa + * Feb 21, 2014 * */ public class WorkspaceACL implements Serializable{ @@ -31,15 +31,6 @@ 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; diff --git a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/shared/system/VO.java b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/shared/system/VO.java index cb29446..047f419 100644 --- a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/shared/system/VO.java +++ b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/shared/system/VO.java @@ -14,23 +14,11 @@ public class VO extends ResearchEnvironment implements Comparable, Serializa private boolean isRoot; private ArrayList vres = new ArrayList(); - /** - * - */ + public VO() { super(); } - /** - * - * @param voName . - * @param description . - * @param imageURL . - * @param vomsGroupName . - * @param friendlyURL . - * @param userBelonging . - * @param isRoot . - * @param vres . - */ + public VO(String voName, String description, String imageURL, String vomsGroupName, String friendlyURL, UserBelonging userBelonging, boolean isRoot, ArrayList vres) { @@ -51,18 +39,13 @@ public class VO extends ResearchEnvironment implements Comparable, Serializa public void setVres(ArrayList vres) { this.vres = vres; } - /** - * - * @param toAdd - */ + public void addVRE(VRE toAdd) { if (vres == null) vres = new ArrayList(); vres.add(toAdd); } - /** - * compare the number of vres - */ + public int compareTo(VO voToCompare) { return (this.vres.size() >= voToCompare.getVres().size()) ? 1 : -1; } diff --git a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/shared/system/VRE.java b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/shared/system/VRE.java index f83d68d..d90fdca 100644 --- a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/shared/system/VRE.java +++ b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/shared/system/VRE.java @@ -5,23 +5,11 @@ import java.io.Serializable; @SuppressWarnings("serial") public class VRE extends ResearchEnvironment implements Serializable { - /** - * - */ public VRE() { super(); // TODO Auto-generated constructor stub } - /** - * - * @param vreName - * @param description - * @param imageURL - * @param vomsGroupName - * @param friendlyURL - * @param userBelonging - */ public VRE(String vreName, String description, String imageURL, String vomsGroupName, String friendlyURL, UserBelonging userBelonging) { diff --git a/src/test/java/org/gcube/portlets/widgets/workspacesharingwidget/client/ItemRetrieving.java b/src/test/java/org/gcube/portlets/widgets/workspacesharingwidget/client/ItemRetrieving.java index e6adf47..f44931e 100644 --- a/src/test/java/org/gcube/portlets/widgets/workspacesharingwidget/client/ItemRetrieving.java +++ b/src/test/java/org/gcube/portlets/widgets/workspacesharingwidget/client/ItemRetrieving.java @@ -17,8 +17,8 @@ import org.gcube.common.scope.impl.ScopeBean; /** * - * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it - * @Jan 29, 2014 + * @author Francesco Mangiacrapa + * Jan 29, 2014 * */ public class ItemRetrieving {