From 181ff4576ce2f4e447f126548f51caf72fa17d3b Mon Sep 17 00:00:00 2001 From: Francesco Mangiacrapa Date: Mon, 3 Mar 2014 18:17:26 +0000 Subject: [PATCH] enhancements git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/portlets/widgets/workspace-sharing-widget@92580 82a268e6-3cf1-43bd-a215-b396298e98cf --- .../client/WorkspaceSharingWidget.java | 7 - .../WorkspaceSmartSharingController.java | 92 ++++++ .../client/rpc/WorkspaceSharingService.java | 10 + .../rpc/WorkspaceSharingServiceAsync.java | 8 + .../client/view/sharing/ContactFetcher.java | 9 + .../client/view/sharing/DialogShareWItem.java | 3 - ...ogShareWItemNoACL.java => SmartShare.java} | 205 ++++-------- .../client/view/sharing/UserStore.java | 20 ++ .../sharing/multisuggest/MultiValuePanel.java | 26 +- .../public/white-grad.png | Bin 0 -> 210 bytes .../public/workspacesharingwidget.css | 300 +++++++++++++++++- .../server/GWTWorkspaceSharingBuilder.java | 10 +- .../server/WorkspaceSharingServiceImpl.java | 25 ++ .../server/util/WsUtil.java | 8 +- .../shared/CredentialModel.java | 70 ++++ .../shared/FileModel.java | 2 - .../shared/InfoContactModel.java | 33 +- 17 files changed, 649 insertions(+), 179 deletions(-) create mode 100644 src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/WorkspaceSmartSharingController.java rename src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/view/sharing/{DialogShareWItemNoACL.java => SmartShare.java} (61%) create mode 100644 src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/public/white-grad.png create mode 100644 src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/shared/CredentialModel.java diff --git a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/WorkspaceSharingWidget.java b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/WorkspaceSharingWidget.java index 0d33b6d..ddaadbf 100644 --- a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/WorkspaceSharingWidget.java +++ b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/WorkspaceSharingWidget.java @@ -1,13 +1,6 @@ package org.gcube.portlets.widgets.workspacesharingwidget.client; -import org.gcube.portlets.widgets.workspacesharingwidget.shared.ACL_TYPE; - -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; -import com.google.gwt.user.client.ui.Button; -import com.google.gwt.user.client.ui.RootPanel; /** * Entry point classes define onModuleLoad(). diff --git a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/WorkspaceSmartSharingController.java b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/WorkspaceSmartSharingController.java new file mode 100644 index 0000000..c159d5b --- /dev/null +++ b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/WorkspaceSmartSharingController.java @@ -0,0 +1,92 @@ +/** + * + */ +package org.gcube.portlets.widgets.workspacesharingwidget.client; + +import java.util.List; + +import org.gcube.portlets.widgets.workspacesharingwidget.client.rpc.WorkspaceSharingService; +import org.gcube.portlets.widgets.workspacesharingwidget.client.rpc.WorkspaceSharingServiceAsync; +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 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.GWT; + +/** + * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it + * @Feb 25, 2014 + * + */ +public class WorkspaceSmartSharingController { + + public static final WorkspaceSharingServiceAsync rpcWorkspaceSharingService = (WorkspaceSharingServiceAsync) GWT.create(WorkspaceSharingService.class); + + private SmartShare smartShare = null; + + private List listAlreadySharedContact; + + private FileModel fileModel; + + + /** + * + * @param file a fake file (used to display name of the file or folder) + * @param listAlreadySharedContact + */ + public WorkspaceSmartSharingController(FileModel file, List listAlreadySharedContact) { + this.listAlreadySharedContact = listAlreadySharedContact; + this.fileModel = file; + smartShare = new SmartShare(); + smartShare.setSize(ConstantsSharing.WIDTH_DIALOG+20, ConstantsSharing.HEIGHT_DIALOG-150); + updateSharingDialog(); + addListenersSharingDialog(); + } + + + /** + * Example of listners + */ + private void addListenersSharingDialog(){ + + smartShare.getButtonById(Dialog.OK).addListener(Events.Select, new Listener() { + + @Override + public void handleEvent(BaseEvent be) { + + if(smartShare.isValidForm(true)){ + //THAT'S OK + } + + } + }); + } + + /** + * + * @param fileModel + */ + private void updateSharingDialog(){ + smartShare.unmask(); + smartShare.updateSharingDialog(fileModel, listAlreadySharedContact); +// dialogShareItem.show(); + + smartShare.layout(); + } + + + + /** + * + * @return + */ + public Window getSharingDialog() { + return smartShare; + } + +} diff --git a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/rpc/WorkspaceSharingService.java b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/rpc/WorkspaceSharingService.java index a6a58f5..c3eb2a0 100644 --- a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/rpc/WorkspaceSharingService.java +++ b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/rpc/WorkspaceSharingService.java @@ -2,6 +2,7 @@ package org.gcube.portlets.widgets.workspacesharingwidget.client.rpc; import java.util.List; +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 org.gcube.portlets.widgets.workspacesharingwidget.shared.WorkspaceACL; @@ -70,4 +71,13 @@ public interface WorkspaceSharingService extends RemoteService { */ boolean shareFolder(FileModel folder, List listContacts, boolean isNewFolder, WorkspaceACL acl) throws Exception; + + /** + * @param listAlreadySharedContact + * @return + * @throws Exception + */ + List getInfoContactModelsFromCredential( + List listAlreadySharedContact) throws Exception; + } diff --git a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/rpc/WorkspaceSharingServiceAsync.java b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/rpc/WorkspaceSharingServiceAsync.java index 6115dfd..78cb924 100644 --- a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/rpc/WorkspaceSharingServiceAsync.java +++ b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/rpc/WorkspaceSharingServiceAsync.java @@ -2,6 +2,7 @@ package org.gcube.portlets.widgets.workspacesharingwidget.client.rpc; import java.util.List; +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 org.gcube.portlets.widgets.workspacesharingwidget.shared.WorkspaceACL; @@ -62,4 +63,11 @@ public interface WorkspaceSharingServiceAsync void shareFolder(FileModel folder, List listContacts, boolean isNewFolder, WorkspaceACL acl, AsyncCallback callback); + + + void getInfoContactModelsFromCredential( + List listAlreadySharedContact, + AsyncCallback> callback); + + } diff --git a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/view/sharing/ContactFetcher.java b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/view/sharing/ContactFetcher.java index 81d6344..42be6d2 100644 --- a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/view/sharing/ContactFetcher.java +++ b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/view/sharing/ContactFetcher.java @@ -2,6 +2,7 @@ package org.gcube.portlets.widgets.workspacesharingwidget.client.view.sharing; import java.util.List; +import org.gcube.portlets.widgets.workspacesharingwidget.shared.CredentialModel; import org.gcube.portlets.widgets.workspacesharingwidget.shared.InfoContactModel; import com.google.gwt.user.client.rpc.AsyncCallback; @@ -13,4 +14,12 @@ public interface ContactFetcher { public List getExclusiveContactsFromAllContact(List listSharedUser); public void getOwner(String sharedFolderId, AsyncCallback callback); + /** + * @param listAlreadySharedContact + * @param callback + */ + void getInfoContactModelsFromCredential( + List listAlreadySharedContact, + AsyncCallback> callback); + } diff --git a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/view/sharing/DialogShareWItem.java b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/view/sharing/DialogShareWItem.java index c8f7cab..1ca8496 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 @@ -16,9 +16,6 @@ import com.extjs.gxt.ui.client.Style.HorizontalAlignment; import com.extjs.gxt.ui.client.Style.Scroll; import com.extjs.gxt.ui.client.Style.VerticalAlignment; import com.extjs.gxt.ui.client.event.ButtonEvent; -import com.extjs.gxt.ui.client.event.EventType; -import com.extjs.gxt.ui.client.event.Events; -import com.extjs.gxt.ui.client.event.Listener; import com.extjs.gxt.ui.client.event.SelectionListener; import com.extjs.gxt.ui.client.widget.Dialog; import com.extjs.gxt.ui.client.widget.HorizontalPanel; diff --git a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/view/sharing/DialogShareWItemNoACL.java b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/view/sharing/SmartShare.java similarity index 61% rename from src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/view/sharing/DialogShareWItemNoACL.java rename to src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/view/sharing/SmartShare.java index 81b0c17..14ff264 100644 --- a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/view/sharing/DialogShareWItemNoACL.java +++ b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/view/sharing/SmartShare.java @@ -1,56 +1,55 @@ +/** + * + */ package org.gcube.portlets.widgets.workspacesharingwidget.client.view.sharing; import java.util.ArrayList; import java.util.List; -import org.gcube.portlets.widgets.workspacesharingwidget.client.WorkspaceSharingController; +import org.gcube.portlets.widgets.workspacesharingwidget.client.ConstantsSharing; import org.gcube.portlets.widgets.workspacesharingwidget.client.view.sharing.multisuggest.MultiDragContact; import org.gcube.portlets.widgets.workspacesharingwidget.client.view.sharing.multisuggest.MultiValuePanel; +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 org.gcube.portlets.widgets.workspacesharingwidget.shared.WorkspaceACL; import com.extjs.gxt.ui.client.Style.HorizontalAlignment; import com.extjs.gxt.ui.client.Style.Scroll; -import com.extjs.gxt.ui.client.Style.VerticalAlignment; import com.extjs.gxt.ui.client.event.ButtonEvent; import com.extjs.gxt.ui.client.event.SelectionListener; import com.extjs.gxt.ui.client.widget.Dialog; -import com.extjs.gxt.ui.client.widget.HorizontalPanel; import com.extjs.gxt.ui.client.widget.LayoutContainer; import com.extjs.gxt.ui.client.widget.MessageBox; -import com.extjs.gxt.ui.client.widget.form.TextArea; import com.extjs.gxt.ui.client.widget.form.TextField; import com.extjs.gxt.ui.client.widget.layout.FormLayout; -import com.google.gwt.core.shared.GWT; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; -import com.google.gwt.event.shared.HandlerManager; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.Button; import com.google.gwt.user.client.ui.FlexTable; import com.google.gwt.user.client.ui.Label; /** - * * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it - * @Feb 27, 2014 + * @Mar 3, 2014 * */ -public class DialogShareWItemNoACL extends Dialog { +public class SmartShare extends Dialog{ - private int widthDialog = 530; - private int heightTextArea = 100; private TextField txtName; - private TextArea textAreaDescription = new TextArea(); private FileModel fileToShare = null; private UserStore userStore = new UserStore(); private MultiValuePanel suggestPanel = new MultiValuePanel(userStore); private Button buttonMultiDrag = new Button("Choose Contacts"); - private TextField txtOwner; - private PanelTogglePermission permission; - private HorizontalPanel hpPermission = null; + /** + * + */ + public SmartShare() { + initLayout(); + } + + private List listAlreadyShared = new ArrayList(){ /** @@ -80,21 +79,20 @@ public class DialogShareWItemNoACL extends Dialog { }; + /** * Use to modify a shared folder or share an existing folder * @param fileModel * @param type */ - public DialogShareWItemNoACL(FileModel fileModel, HandlerManager eventBus, final boolean shareOnlyOwner) { - initLayout(); - this.fileToShare = fileModel; -// this.setIcon(Resources.getIconShareFolder()); - - setWidth(widthDialog); + + public void updateSharingDialog(FileModel fileModel, List listAlreadySharedContact){ + this.fileToShare = fileModel; + setButtons(Dialog.OKCANCEL); - String heading = "Share workspace"; + String heading = "Share"; if(fileModel.isDirectory()) heading+=" folder: "; else @@ -107,21 +105,8 @@ public class DialogShareWItemNoACL extends Dialog { txtName.setValue(fileModel.getName()); txtName.setReadOnly(true); txtName.setAutoValidate(true); - txtName.setFieldLabel("Folder Name"); + txtName.setFieldLabel("Item Name"); - txtOwner = new TextField(); - txtOwner.setAllowBlank(true); - txtOwner.setValue(""); - txtOwner.setReadOnly(true); - txtOwner.setAutoValidate(false); - txtOwner.setFieldLabel("Owner"); - - textAreaDescription.setFieldLabel("Description"); - textAreaDescription.setHeight(heightTextArea); - textAreaDescription.setWidth(380); - - textAreaDescription.setValue(fileModel.getDescription()); -// textAreaDescription.setReadOnly(true); final LayoutContainer lc = new LayoutContainer(); lc.setStyleAttribute("margin-top", "10px"); @@ -136,121 +121,55 @@ public class DialogShareWItemNoACL extends Dialog { buttonMultiDrag.setStyleName("wizardButton"); -// buttonMultiDrag.setIcon(Resources.getIconUsers()); + 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); - - hpPermission = new HorizontalPanel(); - hpPermission.setVerticalAlign(VerticalAlignment.MIDDLE); - Label labelProperty = new Label("Permissions"); -// final ToggleButton togglePermission = new ToggleButton("Set Permissions"); -// flexTable.setWidget(3, 0, labelProperty); - -// flexTable.setWidget(3, 1, Resources.getIconLoading().createImage()); - hpPermission.add(labelProperty); - - WorkspaceSharingController.rpcWorkspaceSharingService.getACLs(new AsyncCallback>() { - - @Override - public void onSuccess(List result) { - permission = new PanelTogglePermission(result,null); - hpPermission.add(permission); - hpPermission.layout(); - permission.setEnabled(false); - layout(); - } - - @Override - public void onFailure(Throwable caught) { - hpPermission.add(new Label("Error on recovering ACLs")); - hpPermission.layout(); - layout(); - } - }); + if(listAlreadySharedContact!=null && listAlreadySharedContact.size()>0){ - lc.add(flexTable); - if(hpPermission!=null) - lc.add(hpPermission); - lc.mask(); - userStore.getListSharedUserByFolderId(fileModel.getIdentifier(), new AsyncCallback>() { - - @Override - public void onSuccess(List result) { - - for (InfoContactModel infoContactModel : result) { + userStore.getInfoContactModelsFromCredential(listAlreadySharedContact, new AsyncCallback>() { + + @Override + public void onSuccess(List result) { + for (InfoContactModel infoContactModel : result) { if(infoContactModel.getName()!=null){ listAlreadyShared.add(infoContactModel); suggestPanel.addRecipient(infoContactModel.getName(),false); + layout(); } } lc.unmask(); - } - - @Override - public void onFailure(Throwable caught) { - lc.unmask(); - - } - }); + lc.layout(); + layout(); + + } + + @Override + public void onFailure(Throwable caught) { + lc.unmask(); + + } + }); + + } + lc.add(flexTable); - userStore.getOwner(fileModel.getIdentifier(), new AsyncCallback() { - - @Override - public void onFailure(Throwable caught) { - txtOwner.setValue("Error on retrieving Owner"); - } - - @Override - public void onSuccess(InfoContactModel result) { - txtOwner.setValue(result.getName()); - if(shareOnlyOwner) - permissionControl(result.getLogin(), true); - } - }); - setFocusWidget(suggestPanel.getBox()); add(txtName); - add(txtOwner); +// add(txtOwner); add(lc); addListners(); - if(shareOnlyOwner) - enableFormDialog(false); //FORM IS DISABLED BY DEFAULT - -// this.show(); } - 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){ - enableFormDialog(false); - if(showAlert) - MessageBox.alert("Permission denied", "You have no permissions to change sharing. You are not owner of \""+txtName.getValue()+"\"", null); - }else{ - enableFormDialog(true); - } - } - - private void enableFormDialog(boolean bool){ - getButtonById(Dialog.OK).setEnabled(bool); - buttonMultiDrag.setEnabled(bool); - textAreaDescription.setEnabled(bool); - if(permission!=null) - permission.setEnabled(bool); - -// setEnabled(bool); - - } - - public FileModel getParentFolder() { + /** + * + * @return + */ + public FileModel getFileToShare() { return fileToShare; } @@ -262,11 +181,10 @@ public class DialogShareWItemNoACL extends Dialog { setModal(true); setScrollMode(Scroll.AUTOY); setBodyStyle("padding: 9px; background: none"); - setWidth(widthDialog); - setHeight(397); + setWidth(ConstantsSharing.WIDTH_DIALOG); + setHeight(ConstantsSharing.HEIGHT_DIALOG); setResizable(true); setButtonAlign(HorizontalAlignment.CENTER); - setWidth(widthDialog); setButtons(Dialog.OKCANCEL); } @@ -275,6 +193,11 @@ public class DialogShareWItemNoACL extends Dialog { // printSelectedUser(); return suggestPanel.getSelectedUser(); } + + + public List getSharedListUsersCredential() { + return suggestPanel.getSelectedUserCredential(); + } public void addListners(){ @@ -384,13 +307,6 @@ public class DialogShareWItemNoACL extends Dialog { return txtName.getValue(); } - public String getDescription() { - if(textAreaDescription.getValue()==null) - return ""; - - return textAreaDescription.getValue(); - } - /** * * @param displayAlert @@ -415,10 +331,5 @@ public class DialogShareWItemNoACL extends Dialog { return true; } - - public WorkspaceACL getSelectedACL(){ - if(permission!=null) - return permission.getSelectedACL(); - return null; - } + } diff --git a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/view/sharing/UserStore.java b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/view/sharing/UserStore.java index 4ddad45..0138175 100644 --- a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/view/sharing/UserStore.java +++ b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/view/sharing/UserStore.java @@ -5,6 +5,7 @@ import java.util.List; import org.gcube.portlets.widgets.workspacesharingwidget.client.ConstantsSharing; import org.gcube.portlets.widgets.workspacesharingwidget.client.WorkspaceSharingController; +import org.gcube.portlets.widgets.workspacesharingwidget.shared.CredentialModel; import org.gcube.portlets.widgets.workspacesharingwidget.shared.InfoContactModel; import com.extjs.gxt.ui.client.widget.MessageBox; @@ -110,4 +111,23 @@ public class UserStore implements ContactFetcher{ } }); } + + @Override + public void getInfoContactModelsFromCredential(List listAlreadySharedContact, final AsyncCallback> callback){ + + WorkspaceSharingController.rpcWorkspaceSharingService.getInfoContactModelsFromCredential(listAlreadySharedContact, new AsyncCallback>() { + + @Override + public void onFailure(Throwable caught) { + GWT.log("an error occured ingetInfoContactModelsFromCredential "+caught.getMessage()); + + } + + @Override + public void onSuccess(List result) { + callback.onSuccess(result); + + } + }); + } } \ No newline at end of file diff --git a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/view/sharing/multisuggest/MultiValuePanel.java b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/view/sharing/multisuggest/MultiValuePanel.java index 7dbf709..b81f766 100644 --- a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/view/sharing/multisuggest/MultiValuePanel.java +++ b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/client/view/sharing/multisuggest/MultiValuePanel.java @@ -5,6 +5,7 @@ import java.util.HashMap; import java.util.List; import org.gcube.portlets.widgets.workspacesharingwidget.client.view.sharing.ContactFetcher; +import org.gcube.portlets.widgets.workspacesharingwidget.shared.CredentialModel; import org.gcube.portlets.widgets.workspacesharingwidget.shared.InfoContactModel; import com.google.gwt.core.client.GWT; @@ -70,7 +71,7 @@ public class MultiValuePanel extends Composite { if(li.getWidget(0) instanceof Paragraph){ Paragraph p = (Paragraph) li.getWidget(0); -// GWT.log("p "+p.getText() +" is removable : " + p.isRemovable()); + GWT.log("p "+p.getText() +" is removable : " + p.isRemovable()); if (itemsSelected.contains(p.getText()) && (p.isRemovable()==true)) { itemsSelected.remove(p.getText()); GWT.log("Removing selected item: " + p.getText() + "'"); @@ -155,6 +156,26 @@ public class MultiValuePanel extends Composite { return toReturn; } } + + + /** + * + * @return the selected contacts (user logins e.g. pino.pini) + */ + public List getSelectedUserCredential() { + if (users == null) + return new ArrayList(); + else { + List toReturn = new ArrayList(); + + for (String login : itemsSelected) { + InfoContactModel wsuser = users.get(login); + if(wsuser!= null && !toReturn.contains(wsuser)) + toReturn.add(wsuser.getReferenceCredential()); + } + return toReturn; + } + } private void removeListItem(ListItem displayItem, BulletList list) { GWT.log("Removing: " + displayItem.getWidget(0).getElement().getInnerHTML(), null); @@ -190,7 +211,7 @@ public class MultiValuePanel extends Composite { @Override public void onFailure(Throwable caught) { - + GWT.log("Error on loading contacts"); } @Override @@ -201,7 +222,6 @@ public class MultiValuePanel extends Composite { for (InfoContactModel wsUser : result) { oracle.add(wsUser.getName()); users.put(wsUser.getName(), wsUser); - } } }; diff --git a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/public/white-grad.png b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/public/white-grad.png new file mode 100644 index 0000000000000000000000000000000000000000..aaf57aa9500bb4e3cf74c2fd34b5fa900e90cb50 GIT binary patch literal 210 zcmeAS@N?(olHy`uVBq!ia0vp^tUxTs!3HFs)Lq#Nq*#ibJVQ8upoSx*1IXtr@Q5sC zVBi)4Va7{$>;3=*6-!(rN`mv#O3D+9QW<;`lZ*0mQ&Tb%72Gn5Qp@v;vWpc=^bB69 zsh0v3i-8n77o{eaWaj57gklFzshE@e=l}oz^=u{w sTJ#QpK$ELt*};X2YFF$i{?RJL(9C0{cF)_y5vYN|)78&qol`;+0C9#ulK=n! literal 0 HcmV?d00001 diff --git a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/public/workspacesharingwidget.css b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/public/workspacesharingwidget.css index f49ba88..ecb68ac 100644 --- a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/public/workspacesharingwidget.css +++ b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/public/workspacesharingwidget.css @@ -95,7 +95,7 @@ li.multivalue-panel-token-ws span { -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; - background: #F2F2F2 url(images/white-grad.png) repeat-x scroll left top; + background: #F2F2F2 url(white-grad.png) repeat-x scroll left top; border-color: #BBB; color: #464646; font-size: 12px; @@ -114,7 +114,7 @@ li.multivalue-panel-token-ws span { border-color: #BBB; cursor: default; opacity: 1.0; - background: #F2F2F2 url(images/white-grad.png) repeat-x scroll left top; + background: #F2F2F2 url(white-grad.png) repeat-x scroll left top; } .wizardButton:hover { @@ -124,7 +124,7 @@ li.multivalue-panel-token-ws span { } .wizardButton:active { - background: #e3e8f3 url(images/white-grad.png) repeat-x scroll left top; + background: #e3e8f3 url(white-grad.png) repeat-x scroll left top; } @@ -163,4 +163,296 @@ table.userssuggest th { height: 30px; border-collapse: collapse; border-spacing: 0px; -} \ No newline at end of file +} + + + +/*************************** COPIED FROM WS MAIL WIDGET ***************************/ + +attach-file-link { + font-size: 12px; +} +a.attach-file-link { + color: #3B5998; + font-family: 'Helvetica Neue',Arial,sans-serif; +} +a.attach-file-link, a.attach-file-link:visited { + color: #3B5998; + cursor: pointer; + font-size: 12px; + text-decoration: none; +} +a.attach-file-link:hover { + font-size: 12px; + opacity: 0.8; + text-decoration: underline; +} +.mail-div-table { + background-clip: border-box; + background-image: none; + background-origin: padding-box; + border-bottom: 1px solid #DADADA; + display: table; + padding: 7px; + width: 500px; +} +.mail-div-table-row { + display: table-row; + text-align: left; +} +.mail-div-table-col { + display: table-cell; + padding-right: 5px; + padding-top: 5px; + text-align: left; + vertical-align: middle; +} +.mail-div-table-col.labels { + color: #666666; + font-family: arial,sans-serif; + font-size: 13px; + font-weight: bold; + width: 100px; +} +.error { + background-color: #FFC0CB; + color: #FFFFFF; + transition: background 0.45s ease-in-out 0s; +} +.dark-color { + background-color: #FFFFFF; + color: #333333; + transition: background 0.25s ease-in-out 0s; +} +.simple-tbox { + border: 1px solid #CCCCCC; + border-radius: 3px 3px 3px 3px; + color: #000000; + font-family: 'Lucida Grande',Verdana,'Bitstream Vera Sans',Arial,sans-serif !important; + font-size: 12px !important; + padding: 4px 2px; + width: 496px; +} +.simple-tarea { + border-radius: 3px 3px 3px 3px; + height: 80px; +} +.gwt-SuggestBox { + border-color: #999999; + border-width: 1px; + color: #333333; + font-family: 'Lucida Grande',Verdana,'Bitstream Vera Sans',Arial,sans-serif; + font-size: 12px; + letter-spacing: normal; + padding: 4px 2px; + z-index: 1500; +} +.gwt-SuggestBoxPopup { + z-index: 10010; +} +.gwt-SuggestBoxPopup .item { + color: #333333; + cursor: default; + font-family: 'Lucida Grande',Verdana,'Bitstream Vera Sans',Arial,sans-serif; + font-size: 11px; + padding: 2px 6px; +} +.gwt-SuggestBoxPopup .item-selected { + background: none repeat scroll 0 0 #D3E1F1; +} +.gwt-SuggestBoxPopup .suggestPopupContent { + background: none repeat scroll 0 0 #FFFFFF; +} +.gwt-SuggestBoxPopup .suggestPopupTopCenter { + border-top: 1px solid #BBBBBB; +} +.gwt-SuggestBoxPopup .suggestPopupBottomCenter { + border-bottom: 1px solid #BBBBBB; +} +.gwt-SuggestBoxPopup .suggestPopupTopCenterInner, .gwt-SuggestBoxPopup .suggestPopupBottomCenterInner { + height: 1px; + line-height: 1px; +} +.gwt-SuggestBoxPopup .suggestPopupMiddleLeft { + background-color: #FFFFFF; + border-left: 1px solid #BBBBBB; +} +.gwt-SuggestBoxPopup .suggestPopupMiddleRight { + background-color: #FFFFFF; + border-right: 1px solid #BBBBBB; +} +.gwt-SuggestBoxPopup .suggestPopupMiddleLeftInner, .gwt-SuggestBoxPopup .suggestPopupMiddleRightInner { + line-height: 1px; + width: 1px; +} +.gwt-SuggestBoxPopup .suggestPopupTopLeftInner { + background-color: #FFFFFF; + height: 0; + width: 0; +} +.gwt-SuggestBoxPopup .suggestPopupTopRightInner { + height: 0; + width: 0; +} +.gwt-SuggestBoxPopup .suggestPopupBottomLeftInner { + height: 0; + width: 0; +} +.gwt-SuggestBoxPopup .suggestPopupBottomRightInner { + height: 0; + width: 0; +} +.gwt-SuggestBoxPopup .suggestPopupTopLeft { + background-color: #FFFFFF; + border-left: 1px solid #BBBBBB; + border-top: 1px solid #BBBBBB; + height: 5px; + width: 5px; +} +.gwt-SuggestBoxPopup .suggestPopupTopRight { + border-right: 1px solid #BBBBBB; + border-top: 1px solid #BBBBBB; + height: 5px; + width: 5px; +} +.gwt-SuggestBoxPopup .suggestPopupBottomLeft { + border-bottom: 1px solid #BBBBBB; + border-left: 1px solid #BBBBBB; + height: 5px; + width: 5px; +} +.gwt-SuggestBoxPopup .suggestPopupBottomRight { + border-bottom: 1px solid #BBBBBB; + border-right: 1px solid #BBBBBB; + height: 5px; + width: 5px; +} +html > body .gwt-SuggestBoxPopup { +} +* html .gwt-SuggestBoxPopup .suggestPopupTopLeftInner { + height: 0; + overflow: hidden; + width: 0; +} +* html .gwt-SuggestBoxPopup .suggestPopupTopRightInner { + height: 0; + overflow: hidden; + width: 0; +} +* html .gwt-SuggestBoxPopup .suggestPopupBottomLeftInner { + height: 0; + overflow: hidden; + width: 0; +} +* html .gwt-SuggestBoxPopup .suggestPopupBottomRightInner { + height: 0; + overflow: hidden; + width: 0; +} +.auto_suggest { + background-color: #FFFFFF; + height: 230px; + padding: 10px; + width: 100%; + z-index: 20; +} +ul.attach-panel-list { + background-color: #FFFFFF; + cursor: text; + font-family: Verdana; + font-size: 12px; + height: auto !important; + list-style-type: none; + margin: 0; + min-height: 1px; + overflow: hidden; + padding: 0; + width: 500px; + z-index: 999; +} +ul.attach-panel-list li input { + background-color: #FFFFFF; + border: 0 none; + margin: 2px 0; + padding: 3px 8px; + width: 100px; +} +li.attach-panel-token { + background-color: #FFFFCC; + background-image: url("images/clip.png"); + background-repeat: no-repeat; + border: 1px solid #CCCCCC; + border-radius: 5px 5px 5px 5px; + color: #1C2A47; + cursor: default; + float: left; + font-size: 11px; + height: auto !important; + margin: 3px; + overflow: hidden; + padding: 1px 3px; +} +li.attach-panel-token p { + display: inline; + line-height: 15px; + margin: 0; + padding-left: 16px; +} +li.attach-panel-token span { + color: #A6B3CF; + cursor: pointer; + font-weight: bold; + margin-left: 5px; +} +ul.multivalue-panel-list { + background-color: #FFFFFF; + border: 1px solid #CCCCCC; + border-radius: 3px 3px 3px 3px; + cursor: text; + font-family: Verdana; + font-size: 12px; + height: auto !important; + list-style-type: none; + margin: 0; + min-height: 1px; + overflow: hidden; + padding: 0; + width: 500px; + z-index: 999; +} +ul.multivalue-panel-list li input { + background-color: #FFFFFF; + border: 0 none; + margin: 2px 0; + padding: 3px 8px; + width: 100px; +} +li.multivalue-panel-token { + background-color: #E2E6F0; + border: 1px solid #9DACCC; + border-radius: 5px 5px 5px 5px; + color: #1C2A47; + cursor: default; + float: left; + font-size: 11px; + height: auto !important; + margin: 3px; + overflow: hidden; + padding: 1px 3px; +} +.notSelectable { + background-color: #FFFFFF !important; +} +li.multivalue-panel-token p { + display: inline; + margin: 0; + padding: 0; +} +li.multivalue-panel-token span { + color: #A6B3CF; + cursor: pointer; + font-weight: bold; + margin-left: 5px; +} + +/*************************** END COPIED FROM WS MAIL WIDGET ***************************/ diff --git a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/server/GWTWorkspaceSharingBuilder.java b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/server/GWTWorkspaceSharingBuilder.java index 02a04ba..b2343db 100644 --- a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/server/GWTWorkspaceSharingBuilder.java +++ b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/server/GWTWorkspaceSharingBuilder.java @@ -19,7 +19,6 @@ import org.gcube.common.homelibrary.home.workspace.folder.items.ExternalPDFFile; import org.gcube.common.homelibrary.home.workspace.folder.items.gcube.Document; import org.gcube.common.homelibrary.home.workspace.folder.items.gcube.ImageDocument; 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; @@ -114,8 +113,7 @@ public class GWTWorkspaceSharingBuilder { * @return * @throws InternalErrorException */ - public List buildGXTListContactsModel( - List listUsers) throws InternalErrorException { + public List buildGXTListContactsModel(List listUsers) throws InternalErrorException { List listContactsModel = new ArrayList(); @@ -149,8 +147,7 @@ public class GWTWorkspaceSharingBuilder { * @param listPortalLogin * @return */ - public List buildGxtInfoContactsFromPortalLogins( - List listPortalLogin) { + public List buildGxtInfoContactsFromPortalLogins(List listPortalLogin) { List listContact = new ArrayList(); for (String portalLogin : listPortalLogin) @@ -172,8 +169,7 @@ public class GWTWorkspaceSharingBuilder { portalLogin = ""; } - return new InfoContactModel(portalLogin, portalLogin, - UserUtil.getUserFullName(portalLogin)); + return new InfoContactModel(portalLogin, portalLogin,UserUtil.getUserFullName(portalLogin)); } 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 018b2e0..59d3430 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 @@ -24,6 +24,7 @@ import org.gcube.portlets.widgets.workspacesharingwidget.server.notifications.No import org.gcube.portlets.widgets.workspacesharingwidget.server.util.ScopeUtilFilter; 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.CredentialModel; import org.gcube.portlets.widgets.workspacesharingwidget.shared.FileModel; import org.gcube.portlets.widgets.workspacesharingwidget.shared.InfoContactModel; import org.gcube.portlets.widgets.workspacesharingwidget.shared.SessionExpiredException; @@ -394,5 +395,29 @@ public class WorkspaceSharingServiceImpl extends RemoteServiceServlet implements } } + /* (non-Javadoc) + * @see org.gcube.portlets.widgets.workspacesharingwidget.client.rpc.WorkspaceSharingService#getInfoContactModelsFromCredential(java.util.List) + */ + @Override + public List getInfoContactModelsFromCredential(List listAlreadySharedContact) throws Exception { + + if(listAlreadySharedContact==null || listAlreadySharedContact.size()==0) + throw new Exception("Credentials list is null or empty"); + + + GWTWorkspaceSharingBuilder builder = getGWTWorkspaceBuilder(); + List listContacts = new ArrayList(listAlreadySharedContact.size()); + for (CredentialModel credentialModel : listAlreadySharedContact) { + + if(!credentialModel.isGroup()){ + InfoContactModel contact = builder.buildGxtInfoContactFromPortalLogin(credentialModel.getLogin()); + contact.setReferenceCredential(credentialModel); + listContacts.add(contact); + } + } + + return listContacts; + } + } 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 f5ae27f..7e2b06e 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 @@ -99,10 +99,10 @@ public class WsUtil { withoutPortal = true; //COMMENT THIS IN PRODUCTION ENVIROMENT -// }else if(user.compareToIgnoreCase("francesco.mangiacrapa")==0){ -// -// withoutPortal = true; -//// END UNCOMMENT + }else if(user.compareToIgnoreCase("francesco.mangiacrapa")==0){ + + withoutPortal = true; +// END UNCOMMENT }else{ withoutPortal = false; diff --git a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/shared/CredentialModel.java b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/shared/CredentialModel.java new file mode 100644 index 0000000..3222389 --- /dev/null +++ b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/shared/CredentialModel.java @@ -0,0 +1,70 @@ +/** + * + */ +package org.gcube.portlets.widgets.workspacesharingwidget.shared; + +import java.io.Serializable; + +/** + * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it + * @Mar 3, 2014 + * + */ +public class CredentialModel implements Serializable{ + + /** + * + */ + private static final long serialVersionUID = -4265499048265553603L; + + private String id; + private String login; + private boolean isGroup; + + public CredentialModel(){ + + } + /** + * @param id + * @param login + * @param isGroup + */ + public CredentialModel(String id, String login, boolean isGroup) { + this.id = id; + this.login = login; + this.isGroup = isGroup; + } + + public String getId() { + return id; + } + public String getLogin() { + return login; + } + public boolean isGroup() { + return isGroup; + } + public void setId(String id) { + this.id = id; + } + public void setLogin(String login) { + this.login = login; + } + public void setGroup(boolean isGroup) { + this.isGroup = isGroup; + } + + @Override + public String toString() { + StringBuilder builder = new StringBuilder(); + builder.append("CredentialModel [id="); + builder.append(id); + builder.append(", login="); + builder.append(login); + builder.append(", isGroup="); + builder.append(isGroup); + builder.append("]"); + return builder.toString(); + } + +} diff --git a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/shared/FileModel.java b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/shared/FileModel.java index a075a39..6337505 100644 --- a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/shared/FileModel.java +++ b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/shared/FileModel.java @@ -41,7 +41,6 @@ public class FileModel extends BaseModelData implements Serializable { private static final String FOLDERITEMTYPE = "FOLDERITEMTYPE"; - protected InfoContactModel infoContacts; protected boolean isRoot = false; protected boolean isVreFolder; @@ -65,7 +64,6 @@ public class FileModel extends BaseModelData implements Serializable { } /** - * USED FOR ATTACHMENTS AND FolderBulkCreator * * @param identifier * @param name diff --git a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/shared/InfoContactModel.java b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/shared/InfoContactModel.java index f15d18a..214ccfa 100644 --- a/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/shared/InfoContactModel.java +++ b/src/main/java/org/gcube/portlets/widgets/workspacesharingwidget/shared/InfoContactModel.java @@ -21,6 +21,9 @@ public class InfoContactModel extends BaseModelData implements Serializable { protected static final String ID = "id"; public static final String FULLNAME = "fullname"; public static final String LOGIN = "login"; + public static final String ISGROUP = "isgroup"; + + private CredentialModel referenceCredential; public InfoContactModel() {} @@ -31,6 +34,14 @@ public class InfoContactModel extends BaseModelData implements Serializable { setName(fullName); } + public void setIsGroup(boolean isGroup){ + set(ISGROUP, isGroup); + } + + public Boolean isGroup(boolean isGroup){ + return (Boolean) get(ISGROUP); + } + public void setName(String name) { set(FULLNAME,name); @@ -65,17 +76,35 @@ public class InfoContactModel extends BaseModelData implements Serializable { }; + /** + * @return the referenceCredential + */ + public CredentialModel getReferenceCredential() { + return referenceCredential; + } + + /** + * @param referenceCredential the referenceCredential to set + */ + public void setReferenceCredential(CredentialModel referenceCredential) { + this.referenceCredential = referenceCredential; + } + @Override public String toString() { StringBuilder builder = new StringBuilder(); - builder.append("InfoContactModel [getName()="); + builder.append("InfoContactModel [referenceCredential="); + builder.append(referenceCredential); + builder.append(", getName()="); builder.append(getName()); builder.append(", getId()="); builder.append(getId()); builder.append(", getLogin()="); builder.append(getLogin()); + builder.append(", getReferenceCredential()="); + builder.append(getReferenceCredential()); builder.append("]"); return builder.toString(); } - + } \ No newline at end of file