diff --git a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/SimpleMultiDragContact.java b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/SimpleMultiDragContact.java index c3f5e12..8530f6f 100644 --- a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/SimpleMultiDragContact.java +++ b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/SimpleMultiDragContact.java @@ -6,12 +6,14 @@ package org.gcube.portlets.widgets.workspacesharingwidget.client; import java.util.ArrayList; import java.util.List; +import org.gcube.portlets.widgets.workspacesharingwidget.client.rpc.WorkspaceSharingServiceAsync; import org.gcube.portlets.widgets.workspacesharingwidget.client.view.sharing.UserStore; import org.gcube.portlets.widgets.workspacesharingwidget.client.view.sharing.multisuggest.MultiDragContact; import org.gcube.portlets.widgets.workspacesharingwidget.shared.InfoContactModel; import com.extjs.gxt.ui.client.widget.MessageBox; import com.google.gwt.core.client.GWT; +import com.google.gwt.user.client.Window; import com.google.gwt.user.client.rpc.AsyncCallback; /** @@ -24,13 +26,64 @@ public class SimpleMultiDragContact { private UserStore userStore = new UserStore(); private LOAD_CONTACTS_AS loadContactAs; public static enum LOAD_CONTACTS_AS{SHARED_USER, ADMINISTRATOR} - private MultiDragContact multiDragContact = new MultiDragContact(); + private MultiDragContact multiDragContact = new MultiDragContact(false); private List targets = new ArrayList(); + private boolean readGroupsFromPortal; + private boolean readGroupsFromHL; + private boolean hiddenMySelf; + private String workspaceItemId; + private String myLogin; + private InfoContactModel myContact; + /** * Load administrators or shared users as contacts + * @param load + * @param workspaceItemId + * @param readGroupsFromHL + * @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 */ - public SimpleMultiDragContact(LOAD_CONTACTS_AS load, String workspaceItemId, final boolean readGroupsFromHL, final boolean readGroupsFromPortal) { + public SimpleMultiDragContact(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) + loadMyLogin(true); + else + loadSharedContacts(); + } + + + private void loadMyLogin(final boolean loadContacts){ + + WorkspaceSharingServiceAsync.Util.getInstance().getMyLogin(new AsyncCallback() { + + @Override + public void onFailure(Throwable caught) { + GWT.log("Error on loading my login is empty"); + myLogin = ""; + loadSharedContacts(); + } + + @Override + public void onSuccess(String result) { + GWT.log("My login is: "+result); + myLogin = result; + + if(loadContacts) + loadSharedContacts(); + } + }); + } + + /** + * Load the target contacts + */ + private void loadSharedContacts(){ + switch (loadContactAs) { case ADMINISTRATOR: @@ -41,18 +94,13 @@ public class SimpleMultiDragContact { @Override public void onFailure(Throwable caught) { GWT.log("Error on loading admnistrators"); + MessageBox.alert("Error on loading admnistrators", caught.getMessage(), null); } @Override public void onSuccess(List result) { GWT.log("Returned "+result.size()+" admin/s"); - for (InfoContactModel infoContactModel : result) { - if(infoContactModel.getName()!=null){ - multiDragContact.addTargetContact(infoContactModel); - targets.add(infoContactModel); - } - } - + fillMultiDrag(result); loadAllContacts(readGroupsFromHL, readGroupsFromPortal); } @@ -62,43 +110,52 @@ public class SimpleMultiDragContact { case SHARED_USER: - //LOADING LIST OF ALREADY SHARED USER userStore.getListSharedUserByFolderId(workspaceItemId, new AsyncCallback>() { @Override public void onSuccess(List result) { GWT.log("Returned "+result.size()+" contact/s"); - for (InfoContactModel infoContactModel : result) { - if(infoContactModel.getName()!=null){ - multiDragContact.addTargetContact(infoContactModel); - targets.add(infoContactModel); - } - } - + 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: - break; } - - - -// List exclusiveContacts = userStore.getExclusiveContactsFromAllContact(suggestPanel.getSelectedUser()); -// multiDrag.addSourceContacts(exclusiveContacts); - } + /** + * + * @param result + */ + private void fillMultiDrag(List result){ + + for (InfoContactModel infoContactModel : result) { + if(infoContactModel.getLogin()!=null){ + if(hiddenMySelf && (infoContactModel.getLogin().compareTo(myLogin)==0)){ + GWT.log("Skipping myself: "+myLogin); + myContact = infoContactModel; + }else{ + multiDragContact.addTargetContact(infoContactModel); + targets.add(infoContactModel); + } + } + } + } + + /** + * Load all contacts + * @param readGroupsFromHL + * @param readGroupsFromPortal + */ private void loadAllContacts(boolean readGroupsFromHL, boolean readGroupsFromPortal){ userStore.getListContact(addSourceContacts, false, readGroupsFromHL, readGroupsFromPortal); } @@ -114,8 +171,13 @@ public class SimpleMultiDragContact { @Override public void onSuccess(List result) { + List contactTargets = new ArrayList(targets.size()+1); + contactTargets.addAll(targets); if(result!=null && result.size()>0){ - List exclusiveContacts = userStore.getExclusiveContactsFromAllContact(targets); + if(hiddenMySelf) + contactTargets.add(myContact); + + List exclusiveContacts = userStore.getExclusiveContactsFromAllContact(contactTargets); multiDragContact.addSourceContacts(exclusiveContacts); } } diff --git a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/WorkspaceSharingWidgetEntryPoint.java b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/WorkspaceSharingWidgetEntryPoint.java index ed171c5..b4b47c3 100644 --- a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/WorkspaceSharingWidgetEntryPoint.java +++ b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/WorkspaceSharingWidgetEntryPoint.java @@ -1,16 +1,7 @@ package org.gcube.portlets.widgets.workspacesharingwidget.client; import org.gcube.portlets.widgets.workspacesharingwidget.client.SimpleMultiDragContact.LOAD_CONTACTS_AS; -import org.gcube.portlets.widgets.workspacesharingwidget.client.view.sharing.SmartShare; -import org.gcube.portlets.widgets.workspacesharingwidget.shared.CredentialModel; -import org.gcube.portlets.widgets.workspacesharingwidget.shared.FileModel; -import org.gcube.portlets.widgets.workspacesharingwidget.shared.InfoContactModel; -import com.extjs.gxt.ui.client.event.BaseEvent; -import com.extjs.gxt.ui.client.event.Events; -import com.extjs.gxt.ui.client.event.Listener; -import com.extjs.gxt.ui.client.widget.Dialog; -import com.extjs.gxt.ui.client.widget.Window; import com.google.gwt.core.client.EntryPoint; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; @@ -101,7 +92,7 @@ public class WorkspaceSharingWidgetEntryPoint implements EntryPoint { private void showSimpleMultiDrag(){ - final SimpleMultiDragContact multiDragContact = new SimpleMultiDragContact(LOAD_CONTACTS_AS.SHARED_USER, ITEMID, true, false); + final SimpleMultiDragContact multiDragContact = new SimpleMultiDragContact(LOAD_CONTACTS_AS.SHARED_USER, ITEMID, true, false, true); Button openSharingWindow = new Button("Show Simple Multi Drag", new ClickHandler() { diff --git a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/view/sharing/DialogShareWItem.java b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/view/sharing/DialogShareWItem.java index d2587d8..9c5f3db 100644 --- a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/view/sharing/DialogShareWItem.java +++ b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/view/sharing/DialogShareWItem.java @@ -340,7 +340,7 @@ public class DialogShareWItem extends Dialog { @Override public void onClick(ClickEvent event) { - final MultiDragContact multiDrag = new MultiDragContact(); + final MultiDragContact multiDrag = new MultiDragContact(true); multiDrag.show(); List exclusiveContacts = userStore.getExclusiveContactsFromAllContact(suggestPanel.getSelectedUser()); diff --git a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/view/sharing/SmartShare.java b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/view/sharing/SmartShare.java index f81d1ba..5e87521 100644 --- a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/view/sharing/SmartShare.java +++ b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/view/sharing/SmartShare.java @@ -295,7 +295,7 @@ public class SmartShare extends Dialog implements SmartDialogInterface{ @Override public void onClick(ClickEvent event) { - final MultiDragContact multiDrag = new MultiDragContact(); + final MultiDragContact multiDrag = new MultiDragContact(true); multiDrag.show(); List exclusiveContacts = userStore.getExclusiveContactsFromAllContact(suggestPanel.getSelectedUser()); diff --git a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/view/sharing/multisuggest/MultiDragContact.java b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/view/sharing/multisuggest/MultiDragContact.java index a9aaf4d..9560f52 100644 --- a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/view/sharing/multisuggest/MultiDragContact.java +++ b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/view/sharing/multisuggest/MultiDragContact.java @@ -66,7 +66,7 @@ public class MultiDragContact extends Dialog { private Button buttonAllRight; private Button buttonAllLeft; - public MultiDragContact() { + public MultiDragContact(boolean visibleAlreadyShared) { setStyleAttribute("margin", "10px"); setSize(WIDTH_DIALOG, HEIGHT_DIALOG); setHeading("Group dragging contacts"); @@ -86,7 +86,11 @@ public class MultiDragContact extends Dialog { ContentPanel cpAlreadyShared = new ContentPanel(); cpAlreadyShared.setSize(WIDTH_CP, 60); cpAlreadyShared.setHeaderVisible(false); - + cpAlreadyShared.setVisible(visibleAlreadyShared); + + if(!visibleAlreadyShared) + setHeight(HEIGHT_DIALOG-60); + cpAlreadyShared.setLayout(new FitLayout()); VerticalPanel vpShared = new VerticalPanel(); @@ -265,23 +269,20 @@ public class MultiDragContact extends Dialog { @Override public void componentSelected(ButtonEvent ce) { - List shareContacts = storeTarget - .getModels(); - + /* + List shareContacts = storeTarget.getModels(); if (shareContacts == null || shareContacts.isEmpty()) { - MessageBox mbc = MessageBox - .confirm( - "Confirm exit?", - "You have not selected any contact to share, confirm exit?", - null); + MessageBox mbc = MessageBox.confirm( + "Confirm exit?", + "You have not selected any contact to share, confirm exit?", + null); mbc.addCallback(new Listener() { @Override public void handleEvent(MessageBoxEvent be) { - String clickedButton = be - .getButtonClicked().getItemId(); + String clickedButton = be.getButtonClicked().getItemId(); if (clickedButton.equals(Dialog.YES)) { hide(); } @@ -289,6 +290,9 @@ public class MultiDragContact extends Dialog { }); } else hide(); + */ + + hide(); } }); diff --git a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/server/WorkspaceSharingServiceImpl.java b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/server/WorkspaceSharingServiceImpl.java index 7b07148..64711af 100644 --- a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/server/WorkspaceSharingServiceImpl.java +++ b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/server/WorkspaceSharingServiceImpl.java @@ -16,6 +16,7 @@ import org.gcube.common.homelibrary.home.workspace.WorkspaceSharedFolder; import org.gcube.common.homelibrary.home.workspace.accessmanager.ACLType; import org.gcube.common.homelibrary.home.workspace.exceptions.InsufficientPrivilegesException; import org.gcube.common.homelibrary.home.workspace.exceptions.ItemAlreadyExistException; +import org.gcube.common.homelibrary.home.workspace.exceptions.ItemNotFoundException; import org.gcube.common.homelibrary.home.workspace.exceptions.WorkspaceFolderNotFoundException; import org.gcube.common.homelibrary.home.workspace.exceptions.WrongDestinationException; import org.gcube.common.homelibrary.home.workspace.usermanager.GCubeGroup; @@ -203,7 +204,9 @@ public class WorkspaceSharingServiceImpl extends RemoteServiceServlet implements //System.out.println("the item with id: "+folderSharedId+ " is not "+WorkspaceItemType.SHARED_FOLDER); } return new ArrayList(); - + }catch (ItemNotFoundException e){ + logger.error("Error in server during item retrieving, getListUserSharedByFolderSharedId", e); + throw new Exception("The Item id "+folderSharedId+" not found in workspace or is not a shared folder"); } catch (Exception e) { logger.error("Error in getListUserSharedByItemId ", e); throw new Exception(e.getMessage()); @@ -297,6 +300,9 @@ public class WorkspaceSharingServiceImpl extends RemoteServiceServlet implements //BUILD ITEM return builder.buildGXTFileModelItem(wsItem, parent); + }catch (ItemNotFoundException e){ + logger.error("Error in server during item retrieving, getFileModelByWorkpaceItemId", e); + throw new Exception("The Item id "+itemId+" not found in workspace"); } catch (Exception e) { logger.error("Error in server during item retrieving, getFileModelByWorkpaceItemId", e); String error = ConstantsSharing.SERVER_ERROR + " retrieving the item from workspace, "+e.getMessage(); @@ -348,12 +354,10 @@ public class WorkspaceSharingServiceImpl extends RemoteServiceServlet implements // //DEBUG //System.out.println("shareFolder "+ folder.getIdentifier() + " name: "+ folder.getName() + " parent name: " + folder.getParentFileModel().getName() + " listContacts size: " + listContacts.size()); - // for (InfoContactModel infoContactModel : listContacts) { // System.out.println("share with "+ infoContactModel.getLogin()); // } - - printContacts(listContacts); +// printContacts(listContacts); List listLogin = UserUtil.getListLoginByInfoContactModel(listContacts); @@ -506,10 +510,12 @@ public class WorkspaceSharingServiceImpl extends RemoteServiceServlet implements return builder.buildGxtInfoContactsFromPortalLogins(admins); }else throw new Exception("The item is null or not instanceof "+WorkspaceItemType.SHARED_FOLDER); - + } catch (ItemNotFoundException e){ + logger.error("Error in server getAdministratorsByFolderId", e); + throw new Exception("The Item id "+sharedFolderId+" not found in workspace or is not a shared folder"); } catch (Exception e) { logger.error("Error in server getAdministratorsByFolderId", e); - String error = "Sorry an erroro occurred on getting Administrators"; + String error = "Sorry an error occurred on getting Administrators"; throw new Exception(error); } } @@ -541,6 +547,8 @@ public class WorkspaceSharingServiceImpl extends RemoteServiceServlet implements } + + public static void main(String[] args) { diff --git a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/server/util/WsUtil.java b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/server/util/WsUtil.java index 8e89ade..6cc116d 100644 --- a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/server/util/WsUtil.java +++ b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/server/util/WsUtil.java @@ -77,7 +77,7 @@ public class WsUtil { user=TEST_USER; //UNCOMMENT THIS IN DEVELOP ENVIROMENT -// user = "francesco.mangiacrapa"; + user = "francesco.mangiacrapa"; logger.warn("WORKSPACE PORTLET STARTING IN TEST MODE - NO USER FOUND - PORTLETS STARTING WITH FOLLOWING SETTINGS:"); logger.warn("session id: "+sessionID); @@ -104,9 +104,9 @@ public class WsUtil { withoutPortal = true; //COMMENT THIS IN PRODUCTION ENVIROMENT -// }else if(user.compareToIgnoreCase("francesco.mangiacrapa")==0){ -// -// withoutPortal = false; + }else if(user.compareToIgnoreCase("francesco.mangiacrapa")==0){ + + withoutPortal = true; // END UNCOMMENT }else{