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 0000000..27f0eee
Binary files /dev/null and b/src/main/java/org/gcube/portlets/widgets/ckan2zenodopublisher/client/resource/loading.gif differ
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;
+ }
+
+}