From b7904782f869a8be8c2dbd8a3971fc6eb1c9bcee Mon Sep 17 00:00:00 2001 From: "francesco.mangiacrapa" Date: Fri, 20 Dec 2019 16:36:49 +0100 Subject: [PATCH] Updated the GUI --- .settings/org.eclipse.jdt.core.prefs | 4 +- pom.xml | 29 ++++++- .../client/CkanToZendoPublisherWidget.java | 57 ++++++++++++- .../client/resource/Icons.java | 31 +++++++ .../client/resource/loading.gif | Bin 0 -> 2533 bytes .../client/ui/BasicTabPanel.java | 4 - .../client/view/Ckan2ZenodoViewManager.java | 34 ++------ .../client/view/LoaderIcon.java | 63 ++++++++++++++ .../CkanToZenodoPublisherServiceImpl.java | 45 +++++++++- .../server/PortalUtils.java | 78 ++++++++++++++++++ 10 files changed, 302 insertions(+), 43 deletions(-) create mode 100644 src/main/java/org/gcube/portlets/widgets/ckan2zenodopublisher/client/resource/Icons.java create mode 100644 src/main/java/org/gcube/portlets/widgets/ckan2zenodopublisher/client/resource/loading.gif create mode 100644 src/main/java/org/gcube/portlets/widgets/ckan2zenodopublisher/client/view/LoaderIcon.java create mode 100644 src/main/java/org/gcube/portlets/widgets/ckan2zenodopublisher/server/PortalUtils.java diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs index a5c7673..4e4a3ad 100644 --- a/.settings/org.eclipse.jdt.core.prefs +++ b/.settings/org.eclipse.jdt.core.prefs @@ -1,9 +1,9 @@ eclipse.preferences.version=1 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 -org.eclipse.jdt.core.compiler.compliance=1.7 +org.eclipse.jdt.core.compiler.compliance=1.8 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning org.eclipse.jdt.core.compiler.release=disabled -org.eclipse.jdt.core.compiler.source=1.7 +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/pom.xml b/pom.xml index 0ca85e5..0723b3c 100644 --- a/pom.xml +++ b/pom.xml @@ -31,10 +31,10 @@ - 2.7.0 + 2.8.2 - 1.7 + 1.8 1.8 UTF-8 @@ -80,6 +80,31 @@ [1.0.0-SNAPSHOT, 2.0.0-SNAPSHOT) compile + + com.liferay.portal + portal-service + provided + + + org.gcube.dvos + usermanagement-core + provided + + + org.gcube.common.portal + portal-manager + provided + + + org.gcube.portal + social-networking-library + provided + + + org.gcube.portal + custom-portal-handler + provided + junit junit diff --git a/src/main/java/org/gcube/portlets/widgets/ckan2zenodopublisher/client/CkanToZendoPublisherWidget.java b/src/main/java/org/gcube/portlets/widgets/ckan2zenodopublisher/client/CkanToZendoPublisherWidget.java index 4daf55c..7843314 100644 --- a/src/main/java/org/gcube/portlets/widgets/ckan2zenodopublisher/client/CkanToZendoPublisherWidget.java +++ b/src/main/java/org/gcube/portlets/widgets/ckan2zenodopublisher/client/CkanToZendoPublisherWidget.java @@ -1,9 +1,21 @@ package org.gcube.portlets.widgets.ckan2zenodopublisher.client; +import org.gcube.portlets.widgets.ckan2zenodopublisher.client.ui.BasicTabPanel; import org.gcube.portlets.widgets.ckan2zenodopublisher.client.view.Ckan2ZenodoViewManager; +import org.gcube.portlets.widgets.ckan2zenodopublisher.client.view.LoaderIcon; import org.gcube.portlets.widgets.ckan2zenodopublisher.shared.CatalogueItem; import org.gcube.portlets.widgets.ckan2zenodopublisher.shared.wrapped.ZenodoItem; +import com.github.gwtbootstrap.client.ui.Alert; +import com.github.gwtbootstrap.client.ui.Button; +import com.github.gwtbootstrap.client.ui.Label; +import com.github.gwtbootstrap.client.ui.Modal; +import com.github.gwtbootstrap.client.ui.ModalFooter; +import com.github.gwtbootstrap.client.ui.constants.AlertType; +import com.github.gwtbootstrap.client.ui.constants.LabelType; +import com.google.gwt.event.dom.client.ClickEvent; +import com.google.gwt.event.dom.client.ClickHandler; +import com.google.gwt.user.client.Window; import com.google.gwt.user.client.rpc.AsyncCallback; /** @@ -18,6 +30,7 @@ public class CkanToZendoPublisherWidget { private final CkanToZenodoPublisherServiceAsync ckanToZenodoService = CkanToZenodoPublisherServiceAsync.Util .getInstance(); + private Button buttonPublish = new Button("Publish on Zenodo"); /** * Instantiates a new ckan to zendo publisher widget. */ @@ -31,20 +44,58 @@ public class CkanToZendoPublisherWidget { * @param item the item */ public void publishOnZenodo(final CatalogueItem item) { - + + final Modal modal = new Modal(true); + modal.setTitle("Publishing on Zenodo..."); + modal.addStyleName("ckan2zenodo-modal-style"); + modal.setCloseVisible(true); + buttonPublish.setEnabled(false); + final LoaderIcon loader = new LoaderIcon("Loading data from service..."); + modal.add(loader); ckanToZenodoService.convertToZenodoItem(item, new AsyncCallback() { @Override public void onFailure(Throwable caught) { + loader.setVisible(false); + modal.remove(loader); + Alert erroLabel = new Alert(); + erroLabel.setClose(false); + erroLabel.setType(AlertType.ERROR); + erroLabel.setText(caught.getLocalizedMessage()); + modal.add(erroLabel); + Button close = new Button("Close"); + close.addClickHandler(new ClickHandler() { + + @Override + public void onClick(ClickEvent event) { + modal.hide(); + } + }); + modal.add(close); + //Window.alert(caught.getMessage()); } @Override public void onSuccess(ZenodoItem result) { - + loader.setVisible(false); + modal.remove(loader); Ckan2ZenodoViewManager manager = new Ckan2ZenodoViewManager(); - manager.viewForPublishing(result); + BasicTabPanel basicTabPanel = manager.viewForPublishing(result); + modal.add(basicTabPanel); + buttonPublish.setEnabled(true); } }); + + buttonPublish.addClickHandler(new ClickHandler() { + + @Override + public void onClick(ClickEvent event) { + } + }); + + ModalFooter modalFooter = new ModalFooter(buttonPublish); + modal.add(modalFooter); + modal.show(); } /** diff --git a/src/main/java/org/gcube/portlets/widgets/ckan2zenodopublisher/client/resource/Icons.java b/src/main/java/org/gcube/portlets/widgets/ckan2zenodopublisher/client/resource/Icons.java new file mode 100644 index 0000000..182ab2c --- /dev/null +++ b/src/main/java/org/gcube/portlets/widgets/ckan2zenodopublisher/client/resource/Icons.java @@ -0,0 +1,31 @@ +/** + * + */ +package org.gcube.portlets.widgets.ckan2zenodopublisher.client.resource; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.resources.client.ClientBundle; +import com.google.gwt.resources.client.ImageResource; + + +// TODO: Auto-generated Javadoc +/** + * The Interface Icons. + * + * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it + * Feb 7, 2018 + */ +public interface Icons extends ClientBundle { + + /** The Constant ICONS. */ + public static final Icons ICONS = GWT.create(Icons.class); + + /** + * Loading. + * + * @return the image resource + */ + @Source("loading.gif") + ImageResource loading(); + +} diff --git a/src/main/java/org/gcube/portlets/widgets/ckan2zenodopublisher/client/resource/loading.gif b/src/main/java/org/gcube/portlets/widgets/ckan2zenodopublisher/client/resource/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..27f0eeec008138a3340f8c6bf8badcd2f5503054 GIT binary patch literal 2533 zcmZwJYfw|^83*t;CnuboBqn%rAq5gb2#|zZz<}W*5(p##L_r0STf#LUmqdt$fEq%$ z1eA*+qJoN|BCZr2Z>!QG=<2Gq*xl*4JL4|Utwp=t(fXzBwAur9+uaV|&zbZ5=6~Mz z`Kz@_ib%aXa0l;*0HpK*0KQ#(D<~X(|NaAQ^HFm8kxk9l;w;o6gu5cbv0ZNNN95kvL>#>N|2&YHU^+y7~lM5@_x3~ zczH4}WAJL-oW;P;EDX+9FW0*Wjn!rrsmWm!|nK203t#ODSEV;X(yq16vUl z6B`#V43Pk;SQ4HKAxZw2B%t4;3G*s#$zA=Q@d-a2|B`HZ{L#%*Tb9PxSr67b3g`O% z6qb7aS^J|x4w|sZ*`+m^76Cca#dIqjo|xIFvJB83P2F`2Tqmba>4mfGD?v>?XJx+I z`|r8Z-Hfl^WDve}AIJb}8o4}belsfv(Aqgwpr&~zP!UQ%S!0D?az|dBPP$RXXyd?# zwz28{S}vpqY3#`8-eRTy;Y693K%4{-W+Y1PUuY1z%SmLxfdeZF?tB!8w*W5Oinh%U zIq!Me#gQ*Rr4fC6Z8&0qjV2l5xq~dXHipfR2e*IGC2Z%la;ImCjLCF9oT+Mu=&Yo| zIWr07#YM|@Ax0p2@t&6AqHJXQkuW~d&PoEUUQT8w#-o~dRkRaIBf7B!3SZ(hL$Rb< zA!IvVpg+th;TxD+`HXRuB@Y*E@F@kG+3VWQpr(4E3=Grcp}EsO$Z?B*+4Id zgTX6;?*14F5F<@_(|U`zM`M>IKXnGr=wum%@-tT~EpUR$n-&w$`3EHKW-ttQs8>IX z55Yl}D;NBYzwLB6EVgeSFk8hbl#Qm~u=R`3NY|N=@=HY`+?K>E=B0g~s zi^#VDdo$Jo>On)tUN5ZHybH1rDgfF+ssgX# zW7MIw{SaCPOm6hbn$R^8mrYgheu?gm8|+ag5cc-2h`I9r7=zVyY5J?^hNxG*K@#>M|09r4FZ4A%X{f+fa8*+lU> zUs@>YOlx-3&PkyMjB@UE=>d;F&ZWot(tkUD<8PihcDn8C8_{^5L+!1!a2HP^-md~1 zO`l&7yrumWN9+OnYy>+ngWYWnRW&xK7Q@eeeFdlt&Lb753Kd&GW>z-HS--)SUXXYS z)248vNHMIq_>CcwFu5c{hvZ45m)+bw`2t~E+luqw_*o1b6E}a1?-LpRDvV~RkQaN% z(S%gH>cPxS1xIlN5Hy+awbPw~RsZxu7z?khJX>e?`0aOBStsD52j7TA*>UEe+2knd z4^g(I7#i?jYAFWH0d|9WXQP)<3-5^9S4X`GABnX5(Ju6zS{Va>;^FxcF2k%Pj9?Q6+ z&w3tBge_&!r8b!Y0n!iVC7)@XgR1*sw=D9?Em(ijv7?$&ouyoU+4~ZRd*e zzUIALzk)Fdos$A@W*do$OA4N7T)9U<|arp8)BULrgKy zu&TSEBm+v+*A)kB-pa6_AIW9YCFIJYO}q?t43Bi21NWZOZso}%2GPhm2uYFF`d*+Q zNu;dP^DByOFN+3ffRX`~qKJ=gF2!@0t8nSjJdxeIfUlV8RgMlpx<(RA_X5w{y)&Xa zz;1E}nb9@;3x&}&({29KW8_BCc#2FjAfh~dvK39aV_W;8Fev!@1_BKwV(XjO9{7da z($4I_s;u3iB+S+h6_~pTVxX2gDuhrX*kI8$6nP>U3dT_ud@2VArE;NSkj`G`Nvbw? z3=3saYDA4Vs!o(Fsig%TqadSkC%#!Zp&yq%ihJ;-KSdB5mzMsbd} literal 0 HcmV?d00001 diff --git a/src/main/java/org/gcube/portlets/widgets/ckan2zenodopublisher/client/ui/BasicTabPanel.java b/src/main/java/org/gcube/portlets/widgets/ckan2zenodopublisher/client/ui/BasicTabPanel.java index 70f48b5..6cc2a68 100644 --- a/src/main/java/org/gcube/portlets/widgets/ckan2zenodopublisher/client/ui/BasicTabPanel.java +++ b/src/main/java/org/gcube/portlets/widgets/ckan2zenodopublisher/client/ui/BasicTabPanel.java @@ -6,10 +6,6 @@ import java.util.List; import com.github.gwtbootstrap.client.ui.Pager; import com.github.gwtbootstrap.client.ui.Tab; import com.github.gwtbootstrap.client.ui.TabPanel; -import com.github.gwtbootstrap.client.ui.TabPanel.ShownEvent.Handler; -import com.github.gwtbootstrap.client.ui.event.ShowEvent; -import com.github.gwtbootstrap.client.ui.event.ShowHandler; -import com.github.gwtbootstrap.client.ui.event.ShownEvent; import com.google.gwt.core.client.GWT; import com.google.gwt.core.client.Scheduler; import com.google.gwt.core.client.Scheduler.ScheduledCommand; diff --git a/src/main/java/org/gcube/portlets/widgets/ckan2zenodopublisher/client/view/Ckan2ZenodoViewManager.java b/src/main/java/org/gcube/portlets/widgets/ckan2zenodopublisher/client/view/Ckan2ZenodoViewManager.java index 04afcf5..f8184ab 100644 --- a/src/main/java/org/gcube/portlets/widgets/ckan2zenodopublisher/client/view/Ckan2ZenodoViewManager.java +++ b/src/main/java/org/gcube/portlets/widgets/ckan2zenodopublisher/client/view/Ckan2ZenodoViewManager.java @@ -4,11 +4,6 @@ import org.gcube.portlets.widgets.ckan2zenodopublisher.client.ui.BasicTabPanel; import org.gcube.portlets.widgets.ckan2zenodopublisher.client.ui.basicinformation.BasicInformationView; import org.gcube.portlets.widgets.ckan2zenodopublisher.shared.wrapped.ZenodoItem; -import com.github.gwtbootstrap.client.ui.Button; -import com.github.gwtbootstrap.client.ui.Modal; -import com.github.gwtbootstrap.client.ui.ModalFooter; -import com.google.gwt.event.dom.client.ClickEvent; -import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.event.shared.HandlerManager; /** @@ -22,7 +17,7 @@ public class Ckan2ZenodoViewManager { private BasicTabPanel basicTabPanel; - private Button buttonPublish = new Button("Publish on Zenodo"); + public final static HandlerManager eventBus = new HandlerManager(null); @@ -37,11 +32,10 @@ public class Ckan2ZenodoViewManager { * View for publishing. * * @param zenodoItem the zenodo item + * @return */ - public void viewForPublishing(final ZenodoItem zenodoItem){ + public BasicTabPanel viewForPublishing(final ZenodoItem zenodoItem){ - Modal modal = new Modal(true); - basicTabPanel = new BasicTabPanel(); boolean isUpdate = false; @@ -74,27 +68,11 @@ public class Ckan2ZenodoViewManager { PublishFileViewManager vm = new PublishFileViewManager(zenodoItem.getFiles(), tabIndex); basicTabPanel.getAcc_files().add(vm.getView()); + return basicTabPanel; + //return basePanel; - modal.setTitle("Publishing on Zenodo..."); - modal.addStyleName("ckan2zenodo-modal-style"); - modal.setCloseVisible(true); - modal.add(basicTabPanel); - - - //buttonPublish.setEnabled(false); - - buttonPublish.addClickHandler(new ClickHandler() { - - @Override - public void onClick(ClickEvent event) { - } - }); - - ModalFooter modalFooter = new ModalFooter(buttonPublish); - modal.add(modalFooter); - - modal.show(); + } diff --git a/src/main/java/org/gcube/portlets/widgets/ckan2zenodopublisher/client/view/LoaderIcon.java b/src/main/java/org/gcube/portlets/widgets/ckan2zenodopublisher/client/view/LoaderIcon.java new file mode 100644 index 0000000..cf1efbd --- /dev/null +++ b/src/main/java/org/gcube/portlets/widgets/ckan2zenodopublisher/client/view/LoaderIcon.java @@ -0,0 +1,63 @@ +/** + * + */ +package org.gcube.portlets.widgets.ckan2zenodopublisher.client.view; + + + +import org.gcube.portlets.widgets.ckan2zenodopublisher.client.resource.Icons; + +import com.google.gwt.user.client.ui.HTML; +import com.google.gwt.user.client.ui.HorizontalPanel; +import com.google.gwt.user.client.ui.Image; + +/** + * The Class LoaderIcon. + * + * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it + * Feb 19, 2015 + */ +public class LoaderIcon extends HorizontalPanel{ + + + private Image imgLoading = new Image(Icons.ICONS.loading()); + private HTML txtLoading = new HTML(""); + + /** + * Instantiates a new loader icon. + * + * @param txtHTML the txt html + */ + public LoaderIcon(String txtHTML) { + this(); + setText(txtHTML); + } + + /** + * Instantiates a new loader icon. + */ + public LoaderIcon() { + setStyleName("marginTop20"); + add(imgLoading); + add(txtLoading); + } + + /** + * Sets the text. + * + * @param txtHTML the new text + */ + public void setText(String txtHTML){ + txtLoading.setHTML(""+txtHTML+""); + } + + /** + * Show. + * + * @param bool the bool + */ + public void show(boolean bool){ + this.setVisible(bool); + } + +} diff --git a/src/main/java/org/gcube/portlets/widgets/ckan2zenodopublisher/server/CkanToZenodoPublisherServiceImpl.java b/src/main/java/org/gcube/portlets/widgets/ckan2zenodopublisher/server/CkanToZenodoPublisherServiceImpl.java index a538345..c3f34d8 100644 --- a/src/main/java/org/gcube/portlets/widgets/ckan2zenodopublisher/server/CkanToZenodoPublisherServiceImpl.java +++ b/src/main/java/org/gcube/portlets/widgets/ckan2zenodopublisher/server/CkanToZenodoPublisherServiceImpl.java @@ -4,6 +4,8 @@ import java.util.ArrayList; import java.util.Date; import java.util.List; +import org.gcube.data.publishing.ckan2zenodo.Ckan2Zenodo; +import org.gcube.data.publishing.ckan2zenodo.model.CkanItemDescriptor; import org.gcube.data.publishing.ckan2zenodo.model.zenodo.Creator; import org.gcube.data.publishing.ckan2zenodo.model.zenodo.DepositionMetadata; import org.gcube.data.publishing.ckan2zenodo.model.zenodo.DepositionMetadata.AccessRights; @@ -21,6 +23,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.google.gwt.user.server.rpc.RemoteServiceServlet; +import com.liferay.portal.service.UserLocalServiceUtil; /** * The server side implementation of the RPC service. @@ -52,8 +55,27 @@ public class CkanToZenodoPublisherServiceImpl extends RemoteServiceServlet imple public ZenodoItem convertToZenodoItem(CatalogueItem item) throws Exception { try { - - //TO TEST + + if(isOutFromPortal()) { + PortalUtils.getCurrentContext(this.getThreadLocalRequest(), true); + PortalUtils.getCurrentToken(this.getThreadLocalRequest(), true); + } + +// Ckan2Zenodo client= Ckan2Zenodo.get(); +// +// // Get the item representation +// CkanItemDescriptor itemDescr=client.read(item.getItemName()); +// +// //Get a preview of the deposition to be published +// ZenodoDeposition zdPreview=client.translate(itemDescr); +// +// //Filter resources according to VRE policies +// //List toFilterFiles=client.filterResources(itemDescr); +// +// //zdPreview.setFiles(toFilterFiles); +// return ItemToZenodoConverter.toZenodoItem(zdPreview); + +// //TO TEST ZenodoDeposition zd = new ZenodoDeposition(); zd.setTitle("My beautiful title"); ArrayList files = new ArrayList(); @@ -70,14 +92,29 @@ public class CkanToZenodoPublisherServiceImpl extends RemoteServiceServlet imple related_identifiers.add(new RelatedIdentifier("12345", Relation.cites)); metadata.setRelated_identifiers(related_identifiers); zd.setMetadata(metadata); - return ItemToZenodoConverter.toZenodoItem(zd); + } catch (Exception e) { String error = "Error on converting the catalogue item: "+item.getItemName(); LOG.error(error, e); - String clientError = String.format("%s. %s", error, CkanToZendoPublisherWidgetConstant.MSG_OF_ERROR_REFRESH_AND_TRY_AGAIN_OR_CONTACT_THE_SUPPORT); + String clientError = String.format("%s. %s", error, e.getMessage()); throw new Exception(clientError); } } + + /** + * Online or in development mode? + * @return true if you're running into the portal, false if in development + */ + private boolean isOutFromPortal() { + try { + UserLocalServiceUtil.getService(); + return false; + } + catch (com.liferay.portal.kernel.bean.BeanLocatorException ex) { + LOG.debug("Development Mode ON"); + return true; + } + } } diff --git a/src/main/java/org/gcube/portlets/widgets/ckan2zenodopublisher/server/PortalUtils.java b/src/main/java/org/gcube/portlets/widgets/ckan2zenodopublisher/server/PortalUtils.java new file mode 100644 index 0000000..71010bb --- /dev/null +++ b/src/main/java/org/gcube/portlets/widgets/ckan2zenodopublisher/server/PortalUtils.java @@ -0,0 +1,78 @@ +package org.gcube.portlets.widgets.ckan2zenodopublisher.server; + +import javax.servlet.http.HttpServletRequest; + +import org.gcube.common.authorization.library.provider.SecurityTokenProvider; +import org.gcube.common.portal.PortalContext; +import org.gcube.common.scope.api.ScopeProvider; +import org.gcube.vomanagement.usermanagement.model.GCubeUser; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class PortalUtils { + + private static Logger LOG = LoggerFactory.getLogger(PortalUtils.class); + + /** + * Retrieve the current scope by using the portal manager. + * + * @param request the request + * @param setInThread the set in thread + * @return a GcubeUser object + */ + public static String getCurrentContext(HttpServletRequest request, boolean setInThread) { + + if (request == null) + throw new IllegalArgumentException("HttpServletRequest is null!"); + + PortalContext pContext = PortalContext.getConfiguration(); + String context = pContext.getCurrentScope(request); + LOG.debug("Returning context " + context); + + if (context != null && setInThread) + ScopeProvider.instance.set(context); + + return context; + } + + /** + * Retrieve the current token by using the portal manager. + * + * @param request the request + * @param setInThread the set in thread + * @return a GcubeUser object + */ + public static String getCurrentToken(HttpServletRequest request, boolean setInThread) { + + if (request == null) + throw new IllegalArgumentException("HttpServletRequest is null!"); + + PortalContext pContext = PortalContext.getConfiguration(); + String token = pContext.getCurrentUserToken(getCurrentContext(request, false), + getCurrentUser(request).getUsername()); + LOG.debug("Returning token " + token.substring(0, token.length() - 7) + "XXXXX"); + + if (token != null && setInThread) + SecurityTokenProvider.instance.set(token); + + return token; + } + + /** + * Retrieve the current user by using the portal manager. + * + * @param request the request + * @return a GcubeUser object + */ + public static GCubeUser getCurrentUser(HttpServletRequest request) { + + if (request == null) + throw new IllegalArgumentException("HttpServletRequest is null!"); + + PortalContext pContext = PortalContext.getConfiguration(); + GCubeUser user = pContext.getCurrentUser(request); + LOG.debug("Returning user " + user); + return user; + } + +}