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
master
Giancarlo Panichi 5 years ago
parent da0f424536
commit b9d5ac9622

@ -13,13 +13,17 @@
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry including="**/*.java" kind="src" output="target/test-classes" path="src/test/resources"/>
<classpathentry excluding="**" kind="src" output="target/test-classes" path="src/test/resources">
<attributes>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER">
<attributes>
<attribute name="org.eclipse.jst.component.dependency" value="/WEB-INF/lib"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7">
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
<attributes>
<attribute name="maven.pomderived" value="true"/>
</attributes>

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

@ -1,18 +1,19 @@
<ReleaseNotes>
<Changeset component="portlets-widgets.workspace-sharing-widget.1-9-0"
date="2019-01-31">
<Change>Updated to StorageHub [ticket: #13226]</Change>
</Changeset>
<Changeset component="portlets-widgets.workspace-sharing-widget.1-8-2"
date="2017-02-24">
<Change>[Task 3236] Stylesheet fix
</Change>
<Change>[Task 3236] Stylesheet fix</Change>
</Changeset>
<Changeset component="portlets-widgets.workspace-sharing-widget.1-8-1"
date="2016-11-25">
<Change>Removed ASL Session dependency
</Change>
<Change>Removed ASL Session dependency</Change>
</Changeset>
<Changeset component="portlets-widgets.workspace-sharing-widget.1-7-0"
date="2016-05-31">
<Change>Feature #4128: Migration to Liferay 6.2
</Change>
<Change>Feature #4128: Migration to Liferay 6.2</Change>
</Changeset>
<Changeset component="portlets-widgets.workspace-sharing-widget.1-6-0"
date="2016-04-14">
@ -21,8 +22,7 @@
</Changeset>
<Changeset component="portlets-widgets.workspace-sharing-widget.1-5-1"
date="2016-01-04">
<Change>Removed portal-framework dependecy from Etics
</Change>
<Change>Removed portal-framework dependecy from Etics</Change>
</Changeset>
<Changeset component="portlets-widgets.workspace-sharing-widget.1-5-0"
date="2015-09-28">

@ -14,7 +14,7 @@
<groupId>org.gcube.portlets.widgets</groupId>
<artifactId>workspace-sharing-widget</artifactId>
<packaging>jar</packaging>
<version>1.8.3-SNAPSHOT</version>
<version>1.9.0-SNAPSHOT</version>
<name>gCube Workspace Sharing Widget</name>
<description>
gCube Workspace Sharing Widget allows users to share gCube Workspace items
@ -33,7 +33,7 @@
<distroDirectory>distro</distroDirectory>
<!-- GWT needs at least java 1.6 -->
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
<maven.compiler.target>1.8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
@ -115,17 +115,28 @@
<scope>provided</scope>
</dependency>
<!-- StorageHub -->
<dependency>
<groupId>org.gcube.common</groupId>
<artifactId>storagehub-client-library</artifactId>
<scope>compile</scope>
</dependency>
<!-- HOME LIBRARY -->
<dependency>
<groupId>org.gcube.common</groupId>
<artifactId>home-library-jcr</artifactId>
<version>[2.0.0-SNAPSHOT, 3.0.0-SNAPSHOT)</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.gcube.common</groupId>
<artifactId>home-library</artifactId>
<version>[2.0.0-SNAPSHOT, 3.0.0-SNAPSHOT)</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.gcube.common</groupId>
<artifactId>home-library-model</artifactId>
<scope>provided</scope>
</dependency>

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

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

@ -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<InfoContactModel> sources = new ArrayList<InfoContactModel>();
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<String>() {
WorkspaceSharingController.rpcWorkspaceSharingService.getACLsDescriptionForSharedFolderId(workspaceItemId,
new AsyncCallback<String>() {
@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 = "#<b>Current Permissions:</b> <br/>";
msg += result;
htmlCurrentPermissions.setHtml(msg);
}
});
@Override
public void onSuccess(String result) {
String msg = "#<b>Current Permissions:</b> <br/>";
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<List<WorkspaceACL>>() {
@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<BaseEvent>() {
@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<String>() {
private void loadMyLogin(final boolean loadContacts) {
WorkspaceSharingServiceAsync.INSTANCE.getMyLogin(new AsyncCallback<String>() {
@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<List<InfoContactModel>>() {
// LOADING LIST OF ALREADY SHARED USER
userStore.getAdministratorsByFolderId(workspaceItemId, new AsyncCallback<List<InfoContactModel>>() {
@Override
public void onFailure(Throwable caught) {
@ -227,96 +230,86 @@ public class MultiDragContactsEditPermissions {
@Override
public void onSuccess(List<InfoContactModel> 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<List<InfoContactModel>>() {
@Override
public void onSuccess(List<InfoContactModel> 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<List<InfoContactModel>>() {
@Override
public void onSuccess(List<InfoContactModel> 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<InfoContactModel> listContacts){
if(listContacts!=null){
public void addTargetContact(List<InfoContactModel> listContacts) {
if (listContacts != null) {
for (InfoContactModel infoContactModel : listContacts) {
dialogMultiDragContact.getMultiDrag().addTargetContact(infoContactModel);
}
}
}
/**
*
* @param result
*/
private void fillMultiDrag(List<InfoContactModel> result){
private void fillMultiDrag(List<InfoContactModel> 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<InfoContactModel> getTargetContacts() {
return dialogMultiDragContact.getMultiDrag().getTargetListContact();
}
/**
*
* @return
*/
public List<InfoContactModel> getTargetContactsWithMyLogin() {
public List<InfoContactModel> getTargetContacts() {
return dialogMultiDragContact.getMultiDrag().getTargetListContact();
}
public List<InfoContactModel> getTargetContactsWithMyLogin() {
List<InfoContactModel> contacts = getTargetContacts();
if(myContact == null){
if (myContact == null) {
GWT.log("TargetContactsWithMyLogin my Contact is null, skipping!");
}else
} else
contacts.add(myContact);
return contacts;
}
}
}

@ -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<ButtonEvent>() {
@Override
public void componentSelected(ButtonEvent ce) {
hide();
}
});
this.getButtonById(Dialog.OK).addSelectionListener(new SelectionListener<ButtonEvent>() {
@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<String>() {
@Override
public void onFailure(Throwable caught) {
GWT.log("error getACLsDescriptionForSharedFolderId: " + caught.getMessage(), caught);
}
@Override
public void onSuccess(String result) {
String msg = "#<b>Current Permissions:</b> <br/>";
msg += result;
htmlCurrentPermissions.setHtml(msg);
}
});
add(lcCurrentPermissions);
}
public String getHeadTitle() {
return headTitle;
}
}

@ -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<InfoContactModel> targets = new ArrayList<InfoContactModel>();
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<String>() {
private void loadMyLogin(final boolean loadContacts) {
WorkspaceSharingServiceAsync.INSTANCE.getMyLogin(new AsyncCallback<String>() {
@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<List<InfoContactModel>>() {
// LOADING LIST OF ALREADY SHARED USER
userStore.getAdministratorsByFolderId(workspaceItemId, new AsyncCallback<List<InfoContactModel>>() {
@Override
public void onFailure(Throwable caught) {
@ -101,83 +111,78 @@ public class SimpleMultiDragWorkspaceContact {
@Override
public void onSuccess(List<InfoContactModel> 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<List<InfoContactModel>>() {
@Override
public void onSuccess(List<InfoContactModel> 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<List<InfoContactModel>>() {
@Override
public void onSuccess(List<InfoContactModel> 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<InfoContactModel> listContacts){
if(listContacts!=null){
public void addTargetContact(List<InfoContactModel> listContacts) {
if (listContacts != null) {
for (InfoContactModel infoContactModel : listContacts) {
dialogMultiDragContact.getMultiDrag().addTargetContact(infoContactModel);
}
}
}
/**
*
* @param result
*/
private void fillMultiDrag(List<InfoContactModel> result){
private void fillMultiDrag(List<InfoContactModel> 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<List<InfoContactModel>> addSourceContacts = new AsyncCallback<List<InfoContactModel>>() {
@Override
@ -188,51 +193,44 @@ public class SimpleMultiDragWorkspaceContact {
@Override
public void onSuccess(List<InfoContactModel> result) {
List<InfoContactModel> contactTargets = new ArrayList<InfoContactModel>(targets.size()+1);
List<InfoContactModel> contactTargets = new ArrayList<InfoContactModel>(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<InfoContactModel> 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<InfoContactModel> getTargetContacts() {
return dialogMultiDragContact.getMultiDrag().getTargetListContact();
}
/**
*
* @return
*/
public List<InfoContactModel> getTargetContactsWithMyLogin() {
public List<InfoContactModel> getTargetContacts() {
return dialogMultiDragContact.getMultiDrag().getTargetListContact();
}
public List<InfoContactModel> getTargetContactsWithMyLogin() {
List<InfoContactModel> contacts = getTargetContacts();
if(myContact == null){
if (myContact == null) {
GWT.log("TargetContactsWithMyLogin my Contact is null, skipping!");
}else
} else
contacts.add(myContact);
return contacts;
}
}
}

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

@ -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 DialogShareWItem sharingDialog = null;
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<FileModel>() {
@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<ButtonEvent>() {
@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) ;
}*/
GWT.log("ACL selected is "+sharingDialog.getSelectedACL());
* 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());
final String itemName = fileModel.getName();
sharingDialog.mask("Sharing and setting permissions", ConstantsSharing.LOADINGSTYLE);
rpcWorkspaceSharingService.shareFolder(fileModel, sharingDialog.getSharedListUsers(), false, sharingDialog.getSelectedACL(), new AsyncCallback<Boolean>() {
@Override
public void onFailure(Throwable caught) {
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();
}
});
rpcWorkspaceSharingService.shareFolder(fileModel.getIdentifier(), fileModel.getName(),
fileModel.getDescription(),
fileModel.getParentFileModel() != null ? fileModel.getParentFileModel().getIdentifier()
: null,
sharingDialog.getSharedListUsers(), false, sharingDialog.getSelectedACL(),
new AsyncCallback<Boolean>() {
@Override
public void onFailure(Throwable caught) {
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<String>() {
@ -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;
}

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

@ -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<CredentialModel> 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<CredentialModel> listAlreadySharedContact, boolean readGroupsFromHL, boolean readGroupsFromPortal) {
public WorkspaceSmartSharingController(FileModel file, List<CredentialModel> 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<BaseEvent>() {
@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();

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

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

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

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

@ -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<InfoContactModel> getAllContacts(boolean readGroupsFromHL,
boolean readGroupsFromPortal) throws Exception;
/**
* @param folderSharedId
* @return
* @throws Exception
*/
List<InfoContactModel> getListUserSharedByFolderSharedId(
String folderSharedId) throws Exception;
/**
* @param itemId
* @return
* @throws Exception
*/
AllowAccess accessToFolderLink(String itemId) throws Exception;
List<InfoContactModel> getAllContacts() throws Exception;
List<InfoContactModel> getListUserSharedByFolderSharedId(String folderSharedId) throws Exception;
InfoContactModel getOwnerByItemId(String itemId) throws Exception;
/**
* @return
* @throws Exception
*/
List<WorkspaceACL> 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<InfoContactModel> listContacts,
boolean isNewFolder, WorkspaceACL acl) throws Exception;
/**
* @param listAlreadySharedContact
* @return
* @throws Exception
*/
List<InfoContactModel> getInfoContactModelsFromCredential(List<CredentialModel> listAlreadySharedContact) throws Exception;
boolean shareFolder(String id, String name, String description, String parentId,
List<InfoContactModel> listContacts, boolean isNewFolder, WorkspaceACL acl) throws Exception;
List<InfoContactModel> getInfoContactModelsFromCredential(List<CredentialModel> listAlreadySharedContact)
throws Exception;
List<InfoContactModel> 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<ExtendedWorkspaceACL> getUserACLForFolderId(String folderId) throws Exception;
String getACLsDescriptionForWorkspaceItemById(String workspaceItemId) throws Exception;
void setACLs(String folderId, List<String> listLogins, String aclType) throws Exception;
void updateACLForVREbyGroupName(String folderId, String aclType) throws Exception;
ReportAssignmentACL validateACLToUser(String folderId, List<String> listLogins, String aclType) throws Exception;
boolean addAdministratorsByFolderId(String itemId, List<String> listContactLogins) throws Exception;
}

@ -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<List<InfoContactModel>> callback);
private Util()
{
// Utility class should not be instanciated
}
}
void getAllContacts(boolean readGroupsFromHL, boolean readGroupsFromPortal, AsyncCallback<List<InfoContactModel>> callback);
void getListUserSharedByFolderSharedId(String folderSharedId,
AsyncCallback<List<InfoContactModel>> callback);
void getOwnerByItemId(String itemId,
AsyncCallback<InfoContactModel> callback);
void getListUserSharedByFolderSharedId(String folderSharedId, AsyncCallback<List<InfoContactModel>> callback);
void getOwnerByItemId(String itemId, AsyncCallback<InfoContactModel> callback);
void getACLs(AsyncCallback<List<WorkspaceACL>> callback);
void getMyLogin(AsyncCallback<String> callback);
void getFileModelByWorkpaceItemId(String itemId, AsyncCallback<FileModel> callback);
void getFileModelByWorkpaceItemId(String itemId,
AsyncCallback<FileModel> callback);
void isSessionExpired(AsyncCallback<Boolean> callback);
void shareFolder(String id, String name, String description, String parentId, List<InfoContactModel> listContacts,
boolean isNewFolder, WorkspaceACL acl, AsyncCallback<Boolean> callback);
void isSessionExpired(AsyncCallback<Boolean> callback);
void getInfoContactModelsFromCredential(List<CredentialModel> listAlreadySharedContact,
AsyncCallback<List<InfoContactModel>> callback);
void getAdministratorsByFolderId(String sharedFolderId, AsyncCallback<List<InfoContactModel>> callback);
void shareFolder(FileModel folder, List<InfoContactModel> listContacts,
boolean isNewFolder, WorkspaceACL acl,
AsyncCallback<Boolean> callback);
void getACLsForSharedFolderId(String itemID, AsyncCallback<WorkspaceACL> asyncCallback);
void getACLsDescriptionForSharedFolderId(String folderId, AsyncCallback<String> callback);
void getInfoContactModelsFromCredential(
List<CredentialModel> listAlreadySharedContact,
AsyncCallback<List<InfoContactModel>> callback);
void unSharedFolderByFolderSharedId(String folderId, AsyncCallback<Boolean> asyncCallback);
void getUserACLForFolderId(String folderId, AsyncCallback<List<ExtendedWorkspaceACL>> callback);
/**
* @param sharedFolderId
*/
void getAdministratorsByFolderId(String sharedFolderId, AsyncCallback<List<InfoContactModel>> callback);
void getACLsDescriptionForWorkspaceItemById(String workspaceItemId, AsyncCallback<String> callback);
void accessToFolderLink(String itemId, AsyncCallback<AllowAccess> callback);
/**
* @param itemID
* @param asyncCallback
*/
void getACLsForSharedFolderId(String itemID,
AsyncCallback<WorkspaceACL> asyncCallback);
void setACLs(String folderId, List<String> listLogins, String aclType, AsyncCallback<Void> callback);
void updateACLForVREbyGroupName(String folderId, String aclType, AsyncCallback<Void> callback);
void getACLsDescriptionForSharedFolderId(String folderId,
AsyncCallback<String> callback);
void validateACLToUser(String folderId, List<String> listLogins, String aclType,
AsyncCallback<ReportAssignmentACL> callback);
void addAdministratorsByFolderId(String itemId, List<String> listContactLogins, AsyncCallback<Boolean> callback);
}

@ -14,10 +14,7 @@ public interface ContactFetcher {
public List<InfoContactModel> getExclusiveContactsFromAllContact(List<InfoContactModel> listSharedUser);
public void getOwner(String sharedFolderId, AsyncCallback<InfoContactModel> callback);
/**
* @param listAlreadySharedContact
* @param callback
*/
public void getInfoContactModelsFromCredential(
List<CredentialModel> listAlreadySharedContact,
AsyncCallback<List<InfoContactModel>> callback);

@ -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<String> txtName;
private TextArea textAreaDescription = new TextArea();
@ -52,23 +50,18 @@ public class DialogShareWItem extends Dialog {
private Button buttonMultiDrag = new Button("Choose Contacts");
private TextField<String> 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<InfoContactModel> listAlreadyShared = new ArrayList<InfoContactModel>() {
private List<InfoContactModel> listAlreadyShared = new ArrayList<InfoContactModel>(){
/**
*
*/
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: ";
setHeading(heading+fileModel.getName());
String heading = "Share workspace";
if (fileModel.isDirectory())
heading += " folder: ";
else
heading += " item: ";
txtName = new TextField<String>();
txtName.setAllowBlank(false);
txtName.setValue(fileModel.getName());
txtName.setReadOnly(true);
txtName.setAutoValidate(true);
txtName.setFieldLabel("Folder Name");
setHeading(heading + fileModel.getName());
txtOwner = new TextField<String>();
txtOwner.setAllowBlank(true);
txtOwner.setValue("");
txtOwner.setReadOnly(true);
txtOwner.setAutoValidate(false);
txtOwner.setFieldLabel("Owner");
txtName = new TextField<String>();
txtName.setAllowBlank(false);
txtName.setValue(fileModel.getName());
txtName.setReadOnly(true);
txtName.setAutoValidate(true);
txtName.setFieldLabel("Folder Name");
textAreaDescription.setFieldLabel("Description");
textAreaDescription.setHeight(heightTextArea);
textAreaDescription.setWidth(380);
txtOwner = new TextField<String>();
txtOwner.setAllowBlank(true);
txtOwner.setValue("");
txtOwner.setReadOnly(true);
txtOwner.setAutoValidate(false);
txtOwner.setFieldLabel("Owner");
textAreaDescription.setValue(fileModel.getDescription());
textAreaDescription.setFieldLabel("Description");
textAreaDescription.setHeight(heightTextArea);
textAreaDescription.setWidth(380);
final LayoutContainer lc = new LayoutContainer();
lc.setStyleAttribute("margin-top", "10px");
lc.setStyleAttribute("margin-bottom", "10px");
lc.setSize(480, 50);
textAreaDescription.setValue(fileModel.getDescription());
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 LayoutContainer lc = new LayoutContainer();
lc.setStyleAttribute("margin-top", "10px");
lc.setStyleAttribute("margin-bottom", "10px");
lc.setSize(480, 50);
buttonMultiDrag.setStyleName("wizardButton");
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");
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<List<WorkspaceACL>>() {
@Override
public void onSuccess(List<WorkspaceACL> 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<List<InfoContactModel>>() {
userStore.getListSharedUserByFolderId(fileModel.getIdentifier(), new AsyncCallback<List<InfoContactModel>>() {
@Override
public void onSuccess(List<InfoContactModel> result) {
for (InfoContactModel infoContactModel : result) {
if(infoContactModel.getName()!=null){
listAlreadyShared.add(infoContactModel);
suggestPanel.addRecipient(infoContactModel.getName(),false);
}
}
@Override
public void onSuccess(List<InfoContactModel> result) {
lc.unmask();
}
for (InfoContactModel infoContactModel : result) {
if (infoContactModel.getName() != null) {
listAlreadyShared.add(infoContactModel);
suggestPanel.addRecipient(infoContactModel.getName(), false);
}
}
@Override
public void onFailure(Throwable caught) {
lc.unmask();
lc.unmask();
}
}
});
@Override
public void onFailure(Throwable caught) {
lc.unmask();
}
});
userStore.getOwner(fileModel.getIdentifier(), new AsyncCallback<InfoContactModel>() {
userStore.getOwner(fileModel.getIdentifier(), new AsyncCallback<InfoContactModel>() {
@Override
public void onFailure(Throwable caught) {
txtOwner.setValue("Error on retrieving Owner");
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("<br/> <p style=\"color:red; font-family:verdana, arial; font-size:14px;\">"+message+"</p>"));
this.add(new Html(
"<br/> <p style=\"color:red; font-family:verdana, arial; font-size:14px;\">" + message + "</p>"));
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<InfoContactModel> getSharedListUsers() {
// printSelectedUser();
// printSelectedUser();
return suggestPanel.getSelectedUser();
}
public void addListners() {
public void addListners(){
this.getButtonById(Dialog.CANCEL).addSelectionListener(new SelectionListener<ButtonEvent>() {
this.getButtonById(Dialog.CANCEL).addSelectionListener(new SelectionListener<ButtonEvent>() {
@Override
public void componentSelected(ButtonEvent ce) {
@ -326,30 +313,28 @@ public class DialogShareWItem extends Dialog {
}
});
/*
* this.getButtonById(Dialog.OK).addSelectionListener(new
* SelectionListener<ButtonEvent>() {
*
* @Override public void componentSelected(ButtonEvent ce) {
* if(isValidForm(true)) hide(); } });
*/
/*this.getButtonById(Dialog.OK).addSelectionListener(new SelectionListener<ButtonEvent>() {
@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<InfoContactModel> exclusiveContacts = userStore.getExclusiveContactsFromAllContact(suggestPanel.getSelectedUser());
List<InfoContactModel> 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;
}

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

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

@ -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<InfoContactModel>();
WorkspaceSharingController.rpcWorkspaceSharingService.getAllContacts(readGroupsFromHL, readGroupsFromPortal, new AsyncCallback<List<InfoContactModel>>() {
WorkspaceSharingController.rpcWorkspaceSharingService.getAllContacts(new AsyncCallback<List<InfoContactModel>>() {
@Override
public void onSuccess(List<InfoContactModel> result) {

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

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

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

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

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

@ -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<String, InfoContactModel> hashTestUser = null;
private static HashMap<String, InfoContactModel> hashTestUser = null;
/**
* Used in test mode.
@ -58,40 +62,31 @@ public class GWTWorkspaceSharingBuilder {
if (hashTestUser == null) {
hashTestUser = new HashMap<String, InfoContactModel>();
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<InfoContactModel> getGXTListContactsModelFromVOs(PortalContextInfo info) {
logger.info("Reading group names as scopes from Infrastructure..");
List<InfoContactModel> 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<VO> 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<InfoContactModel> buildGXTListContactsModelFromGcubeGroup(List<GCubeGroup> list) throws InternalErrorException {
public List<InfoContactModel> buildGXTListContactsModelFromGcubeGroup(List<GCubeGroup> list) throws Exception {
List<InfoContactModel> listContactsModel = new ArrayList<InfoContactModel>();
if (list == null)
return listContactsModel;
logger.trace("List<GCubeGroup> size returned from GcubeGroup is: "+ list.size());
logger.trace("List<GCubeGroup> 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<InfoContactModel> buildGXTListContactsModelFromVOs(List<VO> listVO, String voPath) throws InternalErrorException {
public List<InfoContactModel> buildGXTListContactsModelFromVOs(List<VO> listVO, String voPath) throws Exception {
List<InfoContactModel> listContactsModel = new ArrayList<InfoContactModel>();
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<VO> is null, returning");
return listContactsModel;
}
logger.trace("List<VO> size is: "+ listVO.size());
logger.trace("List<VO> 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<VRE> 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<InfoContactModel> buildGXTListContactsModelFromUserModel(
List<GCubeUser> listUsers) throws InternalErrorException {
public List<InfoContactModel> buildGXTListContactsModelFromUserModel(PortalContextInfo info) throws Exception {
List<InfoContactModel> listContactsModel = new ArrayList<InfoContactModel>();
List<GCubeUser> listUsers = UserUtil.getOrganizationUsers(info.getCurrentScope());
if (listUsers == null)
return listContactsModel;
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");
}
logger.trace("List<UserModel> size returned from Portal VO is: "
+ listUsers.size());
List<InfoContactModel> listContactsModel = new ArrayList<InfoContactModel>();
logger.trace("List<UserModel> 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<InfoContactModel> buildGxtInfoContactsFromPortalLogins(List<String> 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<end)
groupName = grouoLogin.substring(start+1, end);
if (start < end)
groupName = grouoLogin.substring(start + 1, end);
else
groupName = grouoLogin;
}
return new InfoContactModel(grouoLogin, grouoLogin, groupName , true);
return new InfoContactModel(grouoLogin, grouoLogin, groupName, true);
}
/**
* Used in test mode.
*
* @param listPortalLogin the list portal login
* @param listPortalLogin
* the list portal login
* @return the list
*/
protected List<InfoContactModel> buildGxtInfoContactFromPortalLoginTestMode(List<String> 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.setDescription(item.getDescription());
break;
FileModel fileModel = null;
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;
logger.info("Workspace item converting...");
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());
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;
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());
}
}
}
}
return fileModel;
} catch (Exception e) {
logger.error("gxt conversion error: ", e);
throw new Exception("Error on conversion: ", e);
logger.error("Build GXTFileModelItem error: " + e.getLocalizedMessage(), e);
throw new Exception("Error building item model: " + e.getLocalizedMessage(), e);
}
return fileModel;
}
/**
* 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) {
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:
protected FileModel setFolderItemType(FileModel fileModel, AbstractFileItem abstractfileItem) {
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());
}
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());
} 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 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<WorkspaceACL> getWorkspaceACLFromACLs(List<ACLType> types) throws Exception {
public List<WorkspaceACL> getWorkspaceACLFromAccessType(List<AccessType> types) throws Exception {
List<WorkspaceACL> acls = new ArrayList<WorkspaceACL>();
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<WorkspaceACL> getWorkspaceACLFromACLs(List<ACL> listACL) throws Exception {
List<WorkspaceACL> acls = new ArrayList<WorkspaceACL>();
for (ACL acl : listACL) {
List<AccessType> 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<ACLType, List<String>> aclOwner) {
public String getFormattedHtmlACLFromACLs(List<ACL> acls) {
String html = "<div style=\"width: 100%; text-align:left; font-size: 10px;\">";
logger.trace("Formatting "+aclOwner.size() +" ACL/s");
logger.trace("Formatting " + acls.size() + " ACL/s");
Map<AccessType, List<String>> aclOwner = new HashMap<>();
for (ACL acl : acls) {
for (AccessType accessType : acl.getAccessTypes()) {
if (aclOwner.containsKey(accessType)) {
List<String> 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<String> users = new ArrayList<String>();
users.add(acl.getPricipal());
aclOwner.put(accessType, users);
}
}
}
for (ACLType type : aclOwner.keySet()) {
for (AccessType type : aclOwner.keySet()) {
List<String> listLogins = aclOwner.get(type);
html+="<span style=\"font-weight:bold; padding-top: 5px;\">"+type+": </span>";
html+="<span style=\"font-weight:normal;\">";
html += "<span style=\"font-weight:bold; padding-top: 5px;\">" + type + ": </span>";
html += "<span style=\"font-weight:normal;\">";
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+="</span><br/>";
html += "</span><br/>";
}
html+="</div>";
html += "</div>";
return html;
}

@ -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){
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());
if (folderDestinationItem != null) {
//share condition is true if source shared folder is not null
boolean shareChangeCondition = sourceSharedId==null?false:true;
try {
// if folder destination is shared folder
if (folderDestinationItem.isShared()) { // Notify Added Item To
// Sharing?
//System.out.println("shareChangeCondition add item: "+ shareChangeCondition);
logger.info("checkNotifyAddItemToShare source item: " + sourceItem.getName() + " sourceSharedId: "
+ sourceSharedId + " folder destination: " + folderDestinationItem.getName()
+ " folder destination shared folder id: " + folderDestinationItem.getId());
logger.info("shareChangeCondition add item: "+shareChangeCondition);
// share condition is true if source shared folder is not
// null
boolean shareChangeCondition = sourceSharedId == null ? false : true;
//if shareChangeCondition is true.. notifies added item to sharing
if(shareChangeCondition){
// System.out.println("shareChangeCondition add item: "+
// shareChangeCondition);
Workspace workspace = WsUtil.getWorkspace(request);
logger.info("shareChangeCondition add item: " + shareChangeCondition);
List<InfoContactModel> listContacts = getListUserSharedByFolderSharedId(workspace, folderDestinationItem.getIdSharedFolder());
// if shareChangeCondition is true.. notifies added item to
// sharing
if (shareChangeCondition) {
WorkspaceItem destinationSharedFolder = workspace.getItem(folderDestinationItem.getIdSharedFolder());
List<InfoContactModel> 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<InfoContactModel> getListUserSharedByFolderSharedId(Workspace workspace, String idSharedFolder) throws Exception {
/**
*
* @param id
* Folder Id
* @return List of users
* @throws Exception
* Exception
*/
public List<InfoContactModel> 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<String, Object> map = metadata.getMap();
List<String> listPortalLogin = new ArrayList<>(map.keySet());
logger.info("getListUserSharedByFolderSharedId return " + listPortalLogin.size() + " user");
GWTWorkspaceSharingBuilder builder = new GWTWorkspaceSharingBuilder();
List<String> 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<InfoContactModel>();
@ -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);
//Notify Removed Item To Sharing?
if(isSharedFolder && !isRootFolderShared){
Workspace workspace = WsUtil.getWorkspace(request);
//get contacts
List<InfoContactModel> listContacts = getListUserSharedByFolderSharedId(workspace, idSharedFolder);
WorkspaceItem sourceSharedFolder = workspace.getItem(idSharedFolder);
logger.info("idSharedFolder is: " + sourceFolderSharedId);
//System.out.println(" name sourceSharedFolder: "+ sourceSharedFolder.getName());
// get contacts
List<InfoContactModel> 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;

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

@ -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<AccessType> {
public static final Map<AccessType, Integer> aclTypeOrder;
static {
aclTypeOrder = new LinkedHashMap<AccessType, Integer>();
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<AccessType> getAllowed(AccessType accessType, boolean includeEqual) {
List<AccessType> 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<AccessType> allowed = comparator.getAllowed(AccessType.WRITE_ALL, false);
System.out.println(allowed);
}
}

@ -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<InfoContactModel> listOne;
private List<InfoContactModel> listTwo;
/**
* Get difference between listA and listB
* Get difference between listA and listB
*
* @param listA
* List A
* @param listB
* List B
*/
public DiffereceBeetweenInfoContactModel(List<InfoContactModel> listA, List<InfoContactModel> listB){
public DiffereceBeetweenInfoContactModel(List<InfoContactModel> listA, List<InfoContactModel> listB) {
this.listOne = listA;
this.listTwo = listB;
}
/**
*
* @return what is in listA that is not in listB.
*/
public List<InfoContactModel> getDifferentsContacts(){
if(this.listOne==null)
public List<InfoContactModel> getDifferentsContacts() {
if (this.listOne == null)
return new ArrayList<InfoContactModel>();
if(this.listTwo==null || this.listTwo.size()==0)
if (this.listTwo == null || this.listTwo.size() == 0)
return this.listOne;
List<InfoContactModel> difference = new ArrayList<InfoContactModel>();
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;
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<InfoContactModel> listA = new ArrayList<InfoContactModel>();
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<InfoContactModel> listB = new ArrayList<InfoContactModel>();
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());
}*/
}

@ -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<VO> 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<br />"+
"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<br />"
+ "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<br />"+
"This Virtual Research Environment is for cool authors, managers and researchers who produce reports containing cool data.");
cool_EM_VRE2.setDescription("Cool VRE Description<br />"
+ "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<br />"+
"This Virtual Research Environment is for cool authors, managers and researchers who produce reports containing cool data.");
cool_EM_VRE3.setDescription("Cool VRE Description<br />"
+ "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<br />"+
"This Virtual Research Environment is for cool authors, managers and researchers who produce reports containing cool data.");
demo.setDescription("Cool VRE Description<br />"
+ "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<GenericResource> 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 <class>VRE</class> with just name and description filled
*
* @param scopename scope name
* @return List of VREs
*/
protected static List<VRE> getVREsFromInfrastructure(String scopename) {
List<VRE> toReturn = new ArrayList<VRE>();
List<VRE> toReturn = new ArrayList<VRE>();
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<GenericResource> 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;
}
}

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

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

@ -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 <class>VO</class> containing their child VREs
* @return an arraylist of VO containing their child VREs
*/
public static List<VO> getVresFromInfrastructure(String infrastructure, String startScopes) {
List<VO> toReturn = new ArrayList<VO>();
@ -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;
}

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

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

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

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

@ -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<InfoContactModel> listShareUsers) {
public void setSharingValue(boolean isShared, List<InfoContactModel> 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() + "]";
}
}

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

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

@ -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<InfoContactModel> {

@ -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<String> validLogins;
private List<String> errors;
private String aclType;
/**
*
*/
public ReportAssignmentACL() {
}
/**
* @return the validLogins
*/
public List<String> getValidLogins() {
return validLogins;
}
/**
* @param validLogins the validLogins to set
*/
public void setValidLogins(List<String> validLogins) {
this.validLogins = validLogins;
}
/**
* @return the errors
*/
public List<String> getErrors() {
return errors;
}
/**
* @param errors the errors to set
*/
public void setErrors(List<String> 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();
}
}

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

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

@ -14,23 +14,11 @@ public class VO extends ResearchEnvironment implements Comparable<VO>, Serializa
private boolean isRoot;
private ArrayList<VRE> vres = new ArrayList<VRE>();
/**
*
*/
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<VRE> vres) {
@ -51,18 +39,13 @@ public class VO extends ResearchEnvironment implements Comparable<VO>, Serializa
public void setVres(ArrayList<VRE> vres) {
this.vres = vres;
}
/**
*
* @param toAdd
*/
public void addVRE(VRE toAdd) {
if (vres == null)
vres = new ArrayList<VRE>();
vres.add(toAdd);
}
/**
* compare the number of vres
*/
public int compareTo(VO voToCompare) {
return (this.vres.size() >= voToCompare.getVres().size()) ? 1 : -1;
}

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

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

Loading…
Cancel
Save