From d7a9786971c4cb56fc43b6fdc6383dd4067f0e9d Mon Sep 17 00:00:00 2001 From: Francesco Mangiacrapa Date: Mon, 13 Jun 2016 07:48:29 +0000 Subject: [PATCH] moved from private svn git-svn-id: http://svn.d4science-ii.research-infrastructures.eu/gcube/trunk/portlets/user/gcube-ckan-datacatalog@129070 82a268e6-3cf1-43bd-a215-b396298e98cf --- .classpath | 37 +++ .project | 53 ++++ .settings/.jsdtscope | 13 + .../com.google.appengine.eclipse.core.prefs | 2 + .settings/com.google.gdt.eclipse.core.prefs | 5 + .settings/com.google.gwt.eclipse.core.prefs | 2 + .settings/org.eclipse.core.resources.prefs | 6 + .settings/org.eclipse.jdt.core.prefs | 8 + .settings/org.eclipse.jst.jsp.core.prefs | 3 + .settings/org.eclipse.m2e.core.prefs | 4 + .settings/org.eclipse.wst.common.component | 10 + ....eclipse.wst.common.project.facet.core.xml | 8 + ...rg.eclipse.wst.jsdt.ui.superType.container | 1 + .../org.eclipse.wst.jsdt.ui.superType.name | 1 + .settings/org.eclipse.wst.validation.prefs | 2 + .tern-project | 1 + distro/LICENSE | 1 + distro/README | 60 +++++ distro/changelog.xml | 6 + distro/descriptor.xml | 32 +++ distro/profile.xml | 25 ++ pom.xml | 239 ++++++++++++++++++ .../GCubeCkanDataCatalog.gwt.xml | 24 ++ .../client/CkanEventHandlerManager.java | 32 +++ .../client/GCubeCkanDataCatalog.java | 31 +++ .../client/GcubeCkanDataCatalogService.java | 21 ++ .../GcubeCkanDataCatalogServiceAsync.java | 20 ++ .../client/event/EditMetadataEvent.java | 38 +++ .../event/EditMetadataEventHandler.java | 19 ++ .../client/event/InsertMetadataEvent.java | 38 +++ .../event/InsertMetadataEventHandler.java | 20 ++ .../client/resource/CkanPortletResources.java | 18 ++ .../client/resource/loader.gif | Bin 0 -> 6382 bytes .../client/resource/loading.gif | Bin 0 -> 11311 bytes .../client/view/BaseViewTemplate.java | 73 ++++++ .../client/view/BaseViewTemplate.ui.xml | 13 + .../client/view/CkanFramePanel.java | 67 +++++ .../view/CkanMetadataManagementPanel.java | 85 +++++++ .../view/GCubeCkanDataCatalogPanel.java | 175 +++++++++++++ .../portlet/GCubeCkanDataCatalogPortlet.java | 46 ++++ .../server/GcoreEndpointReader.java | 85 +++++++ .../GcubeCkanDataCatalogServiceImpl.java | 154 +++++++++++ .../server/SessionUtil.java | 59 +++++ .../gcubeckandatacatalog/shared/CkanRole.java | 18 ++ .../GCubeCkanDataCatalog.gwt.xml | 24 ++ .../client/Messages_fr.properties | 2 + src/main/webapp/GCubeCkanDataCatalog.css | 39 +++ src/main/webapp/GCubeCkanDataCatalog.html | 28 ++ .../jsp/GCubeCkanDataCatalogPortlet_view.jsp | 12 + src/main/webapp/WEB-INF/liferay-display.xml | 5 + .../WEB-INF/liferay-plugin-package.properties | 9 + src/main/webapp/WEB-INF/liferay-portlet.xml | 11 + src/main/webapp/WEB-INF/portlet.xml | 18 ++ src/main/webapp/WEB-INF/web.xml | 32 +++ .../client/GwtTestGCubeCkanDataCatalog.java | 26 ++ .../GCubeCkanDataCatalogJUnit.gwt.xml | 9 + 56 files changed, 1770 insertions(+) create mode 100644 .classpath create mode 100644 .project create mode 100644 .settings/.jsdtscope create mode 100644 .settings/com.google.appengine.eclipse.core.prefs create mode 100644 .settings/com.google.gdt.eclipse.core.prefs create mode 100644 .settings/com.google.gwt.eclipse.core.prefs create mode 100644 .settings/org.eclipse.core.resources.prefs create mode 100644 .settings/org.eclipse.jdt.core.prefs create mode 100644 .settings/org.eclipse.jst.jsp.core.prefs create mode 100644 .settings/org.eclipse.m2e.core.prefs create mode 100644 .settings/org.eclipse.wst.common.component create mode 100644 .settings/org.eclipse.wst.common.project.facet.core.xml create mode 100644 .settings/org.eclipse.wst.jsdt.ui.superType.container create mode 100644 .settings/org.eclipse.wst.jsdt.ui.superType.name create mode 100644 .settings/org.eclipse.wst.validation.prefs create mode 100644 .tern-project create mode 100644 distro/LICENSE create mode 100644 distro/README create mode 100644 distro/changelog.xml create mode 100644 distro/descriptor.xml create mode 100644 distro/profile.xml create mode 100644 pom.xml create mode 100644 src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/GCubeCkanDataCatalog.gwt.xml create mode 100644 src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/CkanEventHandlerManager.java create mode 100644 src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/GCubeCkanDataCatalog.java create mode 100644 src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/GcubeCkanDataCatalogService.java create mode 100644 src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/GcubeCkanDataCatalogServiceAsync.java create mode 100644 src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/event/EditMetadataEvent.java create mode 100644 src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/event/EditMetadataEventHandler.java create mode 100644 src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/event/InsertMetadataEvent.java create mode 100644 src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/event/InsertMetadataEventHandler.java create mode 100644 src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/resource/CkanPortletResources.java create mode 100644 src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/resource/loader.gif create mode 100644 src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/resource/loading.gif create mode 100644 src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/view/BaseViewTemplate.java create mode 100644 src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/view/BaseViewTemplate.ui.xml create mode 100644 src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/view/CkanFramePanel.java create mode 100644 src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/view/CkanMetadataManagementPanel.java create mode 100644 src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/view/GCubeCkanDataCatalogPanel.java create mode 100644 src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/portlet/GCubeCkanDataCatalogPortlet.java create mode 100644 src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/server/GcoreEndpointReader.java create mode 100644 src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/server/GcubeCkanDataCatalogServiceImpl.java create mode 100644 src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/server/SessionUtil.java create mode 100644 src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/shared/CkanRole.java create mode 100644 src/main/resources/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/GCubeCkanDataCatalog.gwt.xml create mode 100644 src/main/resources/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/Messages_fr.properties create mode 100644 src/main/webapp/GCubeCkanDataCatalog.css create mode 100644 src/main/webapp/GCubeCkanDataCatalog.html create mode 100644 src/main/webapp/WEB-INF/jsp/GCubeCkanDataCatalogPortlet_view.jsp create mode 100644 src/main/webapp/WEB-INF/liferay-display.xml create mode 100644 src/main/webapp/WEB-INF/liferay-plugin-package.properties create mode 100644 src/main/webapp/WEB-INF/liferay-portlet.xml create mode 100644 src/main/webapp/WEB-INF/portlet.xml create mode 100644 src/main/webapp/WEB-INF/web.xml create mode 100644 src/test/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/GwtTestGCubeCkanDataCatalog.java create mode 100644 src/test/resources/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/GCubeCkanDataCatalogJUnit.gwt.xml diff --git a/.classpath b/.classpath new file mode 100644 index 0000000..46858fe --- /dev/null +++ b/.classpath @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.project b/.project new file mode 100644 index 0000000..51b285c --- /dev/null +++ b/.project @@ -0,0 +1,53 @@ + + + gcube-ckan-datacatalog + + + + + + org.eclipse.wst.jsdt.core.javascriptValidator + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.wst.common.project.facet.core.builder + + + + + org.eclipse.wst.validation.validationbuilder + + + + + com.google.gdt.eclipse.core.webAppProjectValidator + + + + + com.google.gwt.eclipse.core.gwtProjectValidator + + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.eclipse.jem.workbench.JavaEMFNature + org.eclipse.wst.common.modulecore.ModuleCoreNature + org.eclipse.jdt.core.javanature + org.eclipse.m2e.core.maven2Nature + org.eclipse.wst.common.project.facet.core.nature + org.eclipse.wst.jsdt.core.jsNature + com.google.gwt.eclipse.core.gwtNature + + diff --git a/.settings/.jsdtscope b/.settings/.jsdtscope new file mode 100644 index 0000000..b72a6a4 --- /dev/null +++ b/.settings/.jsdtscope @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/.settings/com.google.appengine.eclipse.core.prefs b/.settings/com.google.appengine.eclipse.core.prefs new file mode 100644 index 0000000..82c36af --- /dev/null +++ b/.settings/com.google.appengine.eclipse.core.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +filesCopiedToWebInfLib= diff --git a/.settings/com.google.gdt.eclipse.core.prefs b/.settings/com.google.gdt.eclipse.core.prefs new file mode 100644 index 0000000..a81940d --- /dev/null +++ b/.settings/com.google.gdt.eclipse.core.prefs @@ -0,0 +1,5 @@ +eclipse.preferences.version=1 +jarsExcludedFromWebInfLib= +lastWarOutDir=/home/francesco-mangiacrapa/wseclipseluna/gcube-ckan-datacatalog/target/gcube-ckan-datacatalog-1.0.0-SNAPSHOT +warSrcDir=src/main/webapp +warSrcDirIsOutput=false diff --git a/.settings/com.google.gwt.eclipse.core.prefs b/.settings/com.google.gwt.eclipse.core.prefs new file mode 100644 index 0000000..f23a752 --- /dev/null +++ b/.settings/com.google.gwt.eclipse.core.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +entryPointModules= diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..29abf99 --- /dev/null +++ b/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,6 @@ +eclipse.preferences.version=1 +encoding//src/main/java=UTF-8 +encoding//src/main/resources=UTF-8 +encoding//src/test/java=UTF-8 +encoding//src/test/resources=UTF-8 +encoding/=UTF-8 diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..443e085 --- /dev/null +++ b/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,8 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 +org.eclipse.jdt.core.compiler.compliance=1.7 +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.source=1.7 diff --git a/.settings/org.eclipse.jst.jsp.core.prefs b/.settings/org.eclipse.jst.jsp.core.prefs new file mode 100644 index 0000000..3a5c98d --- /dev/null +++ b/.settings/org.eclipse.jst.jsp.core.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +validateFragments=false +validation.use-project-settings=true diff --git a/.settings/org.eclipse.m2e.core.prefs b/.settings/org.eclipse.m2e.core.prefs new file mode 100644 index 0000000..f897a7f --- /dev/null +++ b/.settings/org.eclipse.m2e.core.prefs @@ -0,0 +1,4 @@ +activeProfiles= +eclipse.preferences.version=1 +resolveWorkspaceProjects=true +version=1 diff --git a/.settings/org.eclipse.wst.common.component b/.settings/org.eclipse.wst.common.component new file mode 100644 index 0000000..5fe3680 --- /dev/null +++ b/.settings/org.eclipse.wst.common.component @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/.settings/org.eclipse.wst.common.project.facet.core.xml b/.settings/org.eclipse.wst.common.project.facet.core.xml new file mode 100644 index 0000000..bc0de8f --- /dev/null +++ b/.settings/org.eclipse.wst.common.project.facet.core.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/.settings/org.eclipse.wst.jsdt.ui.superType.container b/.settings/org.eclipse.wst.jsdt.ui.superType.container new file mode 100644 index 0000000..3bd5d0a --- /dev/null +++ b/.settings/org.eclipse.wst.jsdt.ui.superType.container @@ -0,0 +1 @@ +org.eclipse.wst.jsdt.launching.baseBrowserLibrary \ No newline at end of file diff --git a/.settings/org.eclipse.wst.jsdt.ui.superType.name b/.settings/org.eclipse.wst.jsdt.ui.superType.name new file mode 100644 index 0000000..05bd71b --- /dev/null +++ b/.settings/org.eclipse.wst.jsdt.ui.superType.name @@ -0,0 +1 @@ +Window \ No newline at end of file diff --git a/.settings/org.eclipse.wst.validation.prefs b/.settings/org.eclipse.wst.validation.prefs new file mode 100644 index 0000000..04cad8c --- /dev/null +++ b/.settings/org.eclipse.wst.validation.prefs @@ -0,0 +1,2 @@ +disabled=06target +eclipse.preferences.version=1 diff --git a/.tern-project b/.tern-project new file mode 100644 index 0000000..a185ba0 --- /dev/null +++ b/.tern-project @@ -0,0 +1 @@ +{"ide":{"scriptPaths":[]},"plugins":{"aui":{},"liferay":{},"yui":{}},"libs":["ecma5","browser"]} \ No newline at end of file diff --git a/distro/LICENSE b/distro/LICENSE new file mode 100644 index 0000000..2d9616a --- /dev/null +++ b/distro/LICENSE @@ -0,0 +1 @@ +${gcube.license} \ No newline at end of file diff --git a/distro/README b/distro/README new file mode 100644 index 0000000..355aa76 --- /dev/null +++ b/distro/README @@ -0,0 +1,60 @@ +The gCube System - ${name} +-------------------------------------------------- + +${description} + + +${gcube.description} + +${gcube.funding} + + +Version +-------------------------------------------------- + +${version} (${buildDate}) + +Please see the file named "changelog.xml" in this directory for the release notes. + + +Authors +-------------------------------------------------- + +* Francesco Mangiacrapa (francesco.mangiacrapa-AT-isti.cnr.it), Istituto di Scienza e Tecnologie dell'Informazione "A. Faedo" - CNR, Pisa (Italy). + +Maintainers +----------- + +* Francesco Mangiacrapa (francesco.mangiacrapa-AT-isti.cnr.it), Istituto di Scienza e Tecnologie dell'Informazione "A. Faedo" - CNR, Pisa (Italy). + +Download information +-------------------------------------------------- + +Source code is available from SVN: + ${scm.url} + +Binaries can be downloaded from the gCube website: + ${gcube.website} + + +Installation +-------------------------------------------------- + + +Documentation +-------------------------------------------------- + +Documentation is available on-line in the gCube Wiki: + ${gcube.wikiRoot}/Workspace + +Support +-------------------------------------------------- + +Bugs and support requests can be reported in the gCube issue tracking tool: + ${gcube.issueTracking} + + +Licensing +-------------------------------------------------- + +This software is licensed under the terms you may find in the file named "LICENSE" in this directory. \ No newline at end of file diff --git a/distro/changelog.xml b/distro/changelog.xml new file mode 100644 index 0000000..8d13f4f --- /dev/null +++ b/distro/changelog.xml @@ -0,0 +1,6 @@ + + + first release + + diff --git a/distro/descriptor.xml b/distro/descriptor.xml new file mode 100644 index 0000000..0eec2ec --- /dev/null +++ b/distro/descriptor.xml @@ -0,0 +1,32 @@ + + servicearchive + + tar.gz + + / + + + ${distroDirectory} + / + true + + README + LICENSE + changelog.xml + profile.xml + + 755 + true + + + + + target/${build.finalName}.${project.packaging} + /${artifactId} + + + + diff --git a/distro/profile.xml b/distro/profile.xml new file mode 100644 index 0000000..51c3b6b --- /dev/null +++ b/distro/profile.xml @@ -0,0 +1,25 @@ + + + + Service + + ${description} + PortletUser + ${artifactId} + ${version} + + + ${artifactId} + ${version} + + ${groupId} + ${artifactId} + ${version} + + + target/${build.finalName}.war + + + + + diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..d8b8eb0 --- /dev/null +++ b/pom.xml @@ -0,0 +1,239 @@ + + + + 4.0.0 + + maven-parent + org.gcube.tools + 1.0.0 + + + + org.gcube.portlets.gcubeckan + gcube-ckan-datacatalog + war + 1.0.0-SNAPSHOT + gCube CKAN Data Catalog + The gCube CKAN Data Catalog portlet + + + + 2.7.0 + distro + + 1.7 + 1.7 + ${project.build.directory}/${project.build.finalName} + + UTF-8 + UTF-8 + + + + + + org.gcube.distribution + maven-portal-bom + LATEST + pom + import + + + gwt-user + com.google.gwt + + + com.google.gwt + gwt-servlet + + + + + + + + + + com.google.gwt + gwt-user + + compile + ${gwtVersion} + + + com.github.gwtbootstrap + gwt-bootstrap + compile + + + org.gcube.portal + custom-portal-handler + provided + + + + org.gcube.resources.discovery + ic-client + provided + + + org.gcube.core + common-scope-maps + compile + + + + + org.gcube.common + authorization-client + [1.0.0-SNAPSHOT, 2.0.0-SNAPSHOT) + + + org.gcube.common + common-authorization + [1.0.0-SNAPSHOT, 2.0.0-SNAPSHOT) + + + + org.gcube.applicationsupportlayer + aslcore + provided + + + javax.portlet + portlet-api + provided + + + junit + junit + 4.11 + test + + + + com.liferay.portal + portal-service + provided + + + + + log4j + log4j + + + org.slf4j + slf4j-log4j12 + + + org.slf4j + slf4j-api + + + + + + + ${webappDirectory}/WEB-INF/classes + + + + + + org.codehaus.mojo + gwt-maven-plugin + ${gwtVersion} + + + + compile + + + + + + + GCubeCkanDataCatalog.html + ${webappDirectory} + + + + + + org.apache.maven.plugins + maven-war-plugin + 2.1.1 + + + compile + + exploded + + + + + ${webappDirectory} + + + + org.apache.maven.plugins + maven-compiler-plugin + 2.3.2 + + ${maven.compiler.source} + ${maven.compiler.target} + + + + + org.apache.maven.plugins + maven-assembly-plugin + 2.2 + + + ${distroDirectory}/descriptor.xml + + + + + servicearchive + install + + single + + + + + + org.apache.maven.plugins + maven-resources-plugin + 2.5 + + + copy-profile + install + + copy-resources + + + target + + + ${distroDirectory} + true + + profile.xml + + + + + + + + + + + diff --git a/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/GCubeCkanDataCatalog.gwt.xml b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/GCubeCkanDataCatalog.gwt.xml new file mode 100644 index 0000000..715ff51 --- /dev/null +++ b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/GCubeCkanDataCatalog.gwt.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/CkanEventHandlerManager.java b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/CkanEventHandlerManager.java new file mode 100644 index 0000000..ee97f0a --- /dev/null +++ b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/CkanEventHandlerManager.java @@ -0,0 +1,32 @@ +/** + * + */ +package org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client; + +import com.google.gwt.event.shared.HandlerManager; + + +/** + * + * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it + * Jun 10, 2016 + */ +public class CkanEventHandlerManager { + + private HandlerManager eventBus = new HandlerManager(null); + + + /** + * + */ + public CkanEventHandlerManager() { + } + + + /** + * @return + */ + public HandlerManager getEventBus() { + return eventBus; + } +} diff --git a/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/GCubeCkanDataCatalog.java b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/GCubeCkanDataCatalog.java new file mode 100644 index 0000000..ab7dd13 --- /dev/null +++ b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/GCubeCkanDataCatalog.java @@ -0,0 +1,31 @@ + +package org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client; + +import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.view.GCubeCkanDataCatalogPanel; + +import com.google.gwt.core.client.EntryPoint; +import com.google.gwt.core.shared.GWT; +import com.google.gwt.user.client.ui.RootPanel; + + +/** + * Entry point classes define onModuleLoad(). + */ +public class GCubeCkanDataCatalog implements EntryPoint { + + /** + * Create a remote service proxy to talk to the server-side Greeting + * service. + */ + public static final GcubeCkanDataCatalogServiceAsync service = GWT.create(GcubeCkanDataCatalogService.class); + private final String DIV_PORTLET_ID = "gCubeCkanDataCatalog"; + private CkanEventHandlerManager eventManager = new CkanEventHandlerManager(); + + + /** + * This is the entry point method. + */ + public void onModuleLoad() { + new GCubeCkanDataCatalogPanel(RootPanel.get(DIV_PORTLET_ID), eventManager.getEventBus()); + } +} diff --git a/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/GcubeCkanDataCatalogService.java b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/GcubeCkanDataCatalogService.java new file mode 100644 index 0000000..f141b4f --- /dev/null +++ b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/GcubeCkanDataCatalogService.java @@ -0,0 +1,21 @@ +package org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client; + +import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.shared.CkanRole; + +import com.google.gwt.user.client.rpc.RemoteService; +import com.google.gwt.user.client.rpc.RemoteServiceRelativePath; + +/** + * The client side stub for the RPC service. + */ +@RemoteServiceRelativePath("ckandatacatalogue") +public interface GcubeCkanDataCatalogService extends RemoteService { + + String getCKanConnector() throws Exception; + + /** + * @return + * @throws Exception + */ + CkanRole getMyRole() throws Exception; +} diff --git a/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/GcubeCkanDataCatalogServiceAsync.java b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/GcubeCkanDataCatalogServiceAsync.java new file mode 100644 index 0000000..27f4820 --- /dev/null +++ b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/GcubeCkanDataCatalogServiceAsync.java @@ -0,0 +1,20 @@ +/** + * + */ +package org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client; + +import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.shared.CkanRole; + +import com.google.gwt.user.client.rpc.AsyncCallback; + +/** + * + * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it + * Apr 12, 2016 + */ +public interface GcubeCkanDataCatalogServiceAsync { + + void getCKanConnector(AsyncCallback callback); + + void getMyRole(AsyncCallback callback); +} diff --git a/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/event/EditMetadataEvent.java b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/event/EditMetadataEvent.java new file mode 100644 index 0000000..0ccd44f --- /dev/null +++ b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/event/EditMetadataEvent.java @@ -0,0 +1,38 @@ +package org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.event; + +import com.google.gwt.event.shared.GwtEvent; + + +/** + * The Class InsertMetadataEvent. + * + * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it + * Jun 10, 2016 + */ +public class EditMetadataEvent extends GwtEvent { + public static Type TYPE = new Type(); + + + /** + * Instantiates a new insert metadata event. + */ + public EditMetadataEvent() { + } + + /* (non-Javadoc) + * @see com.google.gwt.event.shared.GwtEvent#getAssociatedType() + */ + @Override + public Type getAssociatedType() { + return TYPE; + } + + /* (non-Javadoc) + * @see com.google.gwt.event.shared.GwtEvent#dispatch(com.google.gwt.event.shared.EventHandler) + */ + @Override + protected void dispatch(EditMetadataEventHandler handler) { + handler.onEditMetadata(this); + } + +} diff --git a/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/event/EditMetadataEventHandler.java b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/event/EditMetadataEventHandler.java new file mode 100644 index 0000000..f38b92c --- /dev/null +++ b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/event/EditMetadataEventHandler.java @@ -0,0 +1,19 @@ +package org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.event; + +import com.google.gwt.event.shared.EventHandler; + + +/** + * The Interface InsertMetadataEventHandler. + * + * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it + * Jun 10, 2016 + */ +public interface EditMetadataEventHandler extends EventHandler { + + /** + * @param editMetadataEvent + */ + void onEditMetadata(EditMetadataEvent editMetadataEvent); + +} \ No newline at end of file diff --git a/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/event/InsertMetadataEvent.java b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/event/InsertMetadataEvent.java new file mode 100644 index 0000000..f9ebf23 --- /dev/null +++ b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/event/InsertMetadataEvent.java @@ -0,0 +1,38 @@ +package org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.event; + +import com.google.gwt.event.shared.GwtEvent; + + +/** + * The Class InsertMetadataEvent. + * + * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it + * Jun 10, 2016 + */ +public class InsertMetadataEvent extends GwtEvent { + public static Type TYPE = new Type(); + + + /** + * Instantiates a new insert metadata event. + */ + public InsertMetadataEvent() { + } + + /* (non-Javadoc) + * @see com.google.gwt.event.shared.GwtEvent#getAssociatedType() + */ + @Override + public Type getAssociatedType() { + return TYPE; + } + + /* (non-Javadoc) + * @see com.google.gwt.event.shared.GwtEvent#dispatch(com.google.gwt.event.shared.EventHandler) + */ + @Override + protected void dispatch(InsertMetadataEventHandler handler) { + handler.onInsertMetadata(this); + } + +} diff --git a/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/event/InsertMetadataEventHandler.java b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/event/InsertMetadataEventHandler.java new file mode 100644 index 0000000..13db1bf --- /dev/null +++ b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/event/InsertMetadataEventHandler.java @@ -0,0 +1,20 @@ +package org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.event; + +import com.google.gwt.event.shared.EventHandler; + + +/** + * The Interface InsertMetadataEventHandler. + * + * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it + * Jun 10, 2016 + */ +public interface InsertMetadataEventHandler extends EventHandler { + + /** + * On insert metadata. + * + * @param loadSelecteReleaseEvent the load selecte release event + */ + void onInsertMetadata(InsertMetadataEvent loadSelecteReleaseEvent); +} \ No newline at end of file diff --git a/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/resource/CkanPortletResources.java b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/resource/CkanPortletResources.java new file mode 100644 index 0000000..e3bacd8 --- /dev/null +++ b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/resource/CkanPortletResources.java @@ -0,0 +1,18 @@ +package org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.resource; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.resources.client.ClientBundle; +import com.google.gwt.resources.client.ImageResource; + +/** + * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it + * @Jan 15, 2015 + * + */ +public interface CkanPortletResources extends ClientBundle { + + public static final CkanPortletResources ICONS = GWT.create(CkanPortletResources.class); + + @Source("loader.gif") + ImageResource loading(); +} diff --git a/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/resource/loader.gif b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/resource/loader.gif new file mode 100644 index 0000000000000000000000000000000000000000..cb630e11725f4bb178505084d25562c085ebfeca GIT binary patch literal 6382 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 literal 0 HcmV?d00001 diff --git a/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/resource/loading.gif b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/resource/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..3f4738be88be8207b2271e9e826dad5b67cea8f6 GIT binary patch literal 11311 zcmaKS2RK~Oy7r!C7$u^2qeSlnkv5_WB9Vx0^v*;XozY8lq6VXPhUig-=md#GMD*w- zT8LD?od2G4?sNbD+_m@f?6ubZ+FI*--uii#t>zrIi<)NOEqOOXRm;?j_ z0Ki3;fwnGE*}~J};(6n?55~gE$;K0DX=CT$dXszqWj8m{!TKimd+88Apdk1wt zcN;xForhL_PFB~fxo_V>-tbZIalyFQcv>KRT%27!6nt)STUfhU+9+Jq|8|RWBmY6- z>2#A@@$U=dU!6*B?l#D)V$z~k5|WZgSy?ejnX9t0k|Ibc2}vn&iHloSR8mIas;q*P z9P+;k_k}ihYg>f}%BugR>!Nj&+uqX?qaZHs?d>h*EiLBeZYM5z?b@}!GNhzLFDOJk zd|f>)d_-M6c>XCt*~Y`l-2vn2;O2__E78Kz&CBy9_l2eZcL*++e~ESV5c|h)#H`$0 z#CLT&B;oz%tUU(_C+4{ZKz@Bde@$3tI?jrao_4>vD&E1L^)p1-Ov z3QF!a7M^bI58d3H|2d1g_HLeT9``R2Qb60n%E9$-hu}Xrw6zs9Ts=H3T&-+0 zly7oh$PjaIuvSo#P?1!XQoVLZ@nW(iRiv(6y`!w8B6IbcgtDZptgPHWd6nI)yj*Nt zJ^#sT{cm2y|H%8-8C)xI9&UpO}C{Lk-SKYx5b`*wQr_4w%UVE@bB z?#}ks=EnNk>gSc^rNxE$xlgknXFg27e>e5^&E&-R>#@<1;i18S{=QeeJ;d&=&W@Mu zZLKZMO^q)a>IrqVHPuy>73F26CB;RB1^E2D+~+yjS(zE>&(cy;l9Lh>;^Usi#zaR& zMudljhTwvO0t5X0e0{vJUY;KAPcUw-F3wJl4)%7oHr7^_7HD%bQxjt&Lxacqj~?nh zxUYLpM_cQzriQwjs*1AG9YxgbTQ_f9SGXoGCwo;!T1rwvTuf9%SV&NSpYIAU4>uQ* zlY^a&m4%s!k%69$mgX|`B`Qh^as(MEoCF4ifG^;I>pK(%0G9xf3#7P!94i2To=*;I zRCUVlyncC(7D%vm$g{7kbruGxaE*DoFexp4K}#@&_AB}buq47&j*t?YKDr1TwFzn6 zQ1yeJJ&xyZ*xzdo*d~9f&HhPQ1`e0r08CghK<6R>Arq zVJbcmCQ%tNKpZO|o#+u7mi83tFkqXfL{>eNIH9fJ>Sv>E;2(%rfn4YAXq?{Zvv-cnvJ-sODgB`E;> zyy`Yi_2l=+W!B6)I3wRr9Mo^VrA`mfkt)klSXQh^`AZth6SDSJFFoUwWY}xPthO-T z2u8ea55>LpyP5Rcv-LC_D51rj9JGxYE;6{b(2t|e9Lb;DzNz+yy8*LYc2ze=+Z3|3 z_BzV#0Nd~r_ImjhzrmtE7;xKreI4!J`Q2|eD{DDJ+ye9aWJeIselDGH$lv2~4jRId zXd7}7J%2f1*>OPcIxgt&u#6*O=h@>Pe~&#oJOrUNWD!Dz6BwizjF%5lW&^hZByalr z3ZF8HP#489_0_M$%g;7j;cots4~tSXleY#_(mC)@s*?y3Q?&EG@uq3ms+OeQc#lM- z$umgsf*%oH4f}CHMF$u!omn!>AaG4N|0Vtm_y{&r604x&7#dA-m$qjZNGw;B17end6(n2dc5B(~tL+6v2+k5He z@t*f0Wc8QglCSigvtj2Kfvt-%-ITy*Q~~Ap+|}ookO@ol)fB|F5Vwft<>z_}r$DuN z0%5Z#(M-VzQ+%s!qk5y({|ms&@pHf1ierYZxy9wzmzUpaZyfYYEEw!nd`<{B>XPPs zc~I>e^mBXa*sSxU;j?M|>7e)i&9m1}7ftuqa_WA48?$mV+h5O5ytQS+-`4Q+z&O9V zK(QeI_m>YcfEmiBeuwj5%oY`X^&o^g4iDuo4@hy?;JFboPlQ295IK>#RVd~y8~ z$YwxyV$aY5bR;0_3m|hsMH2{Po~9I_s(pWSoTRRcx(O+1N3pw961y#-@S%~sXdUz7 zZkrFH3|;7r6TL?P{K@U4Cnt3W(D4p+2*2lV8VQF61_{_>!z_Gb zqNDwz^y3+&lF_~nQ3V-AMI_nuK&~k#A5dFY2N5@pDQ?aH$HhZ(!6aECV&Im(4Dxo{ zjxaeJvGo2Ta-zYAH_4C2Q`Fthn!d z3Njx|GnG%>`_z)PJpdRs_W{JzmmGQA&ASkqhr({TIlhSAjw=+I3x16!6lKgZ=%iP` zH}Az`O@?5m;qPl(k|Ip^@^6L7?|*(lO;`x(Iex$8-E(fcLa)y0IhDnT$I(-um%nUIH*ga_4FM|Fcc|FHrfya z2b?zp385tV$&i8dv)kKh#B7S)&sJnt(9HSiPEt_*JWMF_Vmg_GLV2yQCL*^Q}l&ZmZn(aY5}3AWjpk#k{@LUc}<(>v{PN@G>sRoYjEJ}eh+X-PNauS z-HW}K6y7n}N-;GH?jucAm3&15!5#L{I5kMTqWbjpuzOclN}}iDBl_eLzrTow9w37w zz7%a4BhrJABFDgO2z3Juk6Mn$ctokQ;)Eh(Pew#@f2sP78s}aWGf0N=WV-Afh0A;N zBAcs(l$%TQq>?cj)kPN0e)>M%I`DK3R7{BjQ?%B|&6!T@$;}GAGi_P$lcql549*cf zTZxn7z`YKCT!Wgu$@?YtbLRCfl*+2wy>{C9tf+-n&~qO2nSr~x*pKb_md=(9pL#L> zd0G_5sbu^3movT=y{@D$jaHM#ZzxT8kvk&leyvt%5%R)4b7h{bV)KX(#D0Ncf$Rw-u5&2 zit07Yd43y}EgfFBK~>e(ebl|qHSRQf?(L(9U-qfJG$H zvCHM9nZQW6i%W9T#Z9i|P=Rud2>E`HY<>}v5a)}jMRMfTn~(sH?gDM*B$1t6oJ6@- zk$_m-i0#;Gq+C{Y%{!k&{h5!*s(BiZ&~;7rRU}FO1}${^?%o%Uog=#;RFfb?d0Cj+ zEguF}I@%q2TVNqAPr`Hgkmd_DJc{b3!BcxnVqc=v`5zT2R7x>1lJy$4_%cZ(Kv%0d zB13l11_2Sd%~u^=&_9;N?P4oHl-f|El?+aQ$KR-oV^(oGsK(siDlb(aVVlw9-3|?< zO)-K!ZGw*1m`s%xFHH$eHR!x7jMv1b&1X?B7s_Av7SjXRz!L#ga<8VkJk0fH(2phH z4H42v<+xLG!OQVvY6H|bso6A~xD`jeA^iRX`An?XBO^F4VSKfQucYk+HUqDQWr~6u z_Q;j#b@kc&PTlB@BFOiJ3tBg42L++JLAW2&Y^=8M_#lfA@bT<-8H#uBtjS z_5~mCzRL5(s;({!2t?A6c>BB$_<0govUrX==z*ICpM%ckLEkAikpaKGit&CT^7aHErZF^nw(jL7awHv z!H%%jO6;hk)1Xj}ScBe^>Dtx5a)Z4Uga&NEf4NcYd9>%t0vxs!7pY~rO`r}~v@ z3H^N8IZR#Q7vy1|EIs;gkT6nT|ALM3*OOQ9PuJbs^nC&v`US5yNsZq8nhmtebq63X zNgpfX0D0-8<4J~nk?{dJaq1UPwT0crNnN#EX^3h@G65j94m<|=M%=vzAqyA9&gkC0 z=?Qss9O4Es=d~Hm z232bbExk*F&N^U-?(!Ah@i_H4OQ)r4-B~z(UhcQ=H+POaW4qmiX$v@L}1wmV?}+-NyEmJ0!4AbkVI;7>u#A6j0! zW&#F_T+A^w@@SMB-wQ?Lkvog&rr&a@pR|A}ppvw61hWk4&wa>{dfqFZik3^`Z#cP`YSGSr{Z z`arOw%V^4rS5nw>;PXA1cHG-JNo>J%PJVG_ebt!nq4Dj{aw|;(&~qh+BLVcSTz*JH z+-{-Cw3>FPNVsg_^QV;EVJ8o}WUniQx0YTd+JR;}IKFO$)R-%x^M8tFyyefo^seg( z<&W=D?B~Hz>=@1rFOD<4#T1z(&w)o}!;xW%>4H=T>p7;84?#KH zVi>z@p-ByVF5=g5crcbDl@W z`OpW=0wLS`-7P_HYC6kRtB7sdqm|!U9gF#Yp8Wf1p z{P|%{Qe~2B4=2xcVK&P&5swZ;aYrwhqb1H+{x=;SfJkMq)x8#}7O5E*z00no%*O~j`9fv3=dcJB}R2nDJU^yr%_s;sZsK-zV zl(6&0nRWMc(H(wE_M?qlk~kl@oc+n78$`@!&Qr}*w%?6{@U1;gj_RAuZ#1HIk;HYC6zs{`uy!H)iVM3$bE%Akx-4{>y8sF|Le?I*Z|Bb2UAXy>Nn|AKLrN8T9L{!(KeT3n@-;g zy!)BN!-IqutKb{$tYeN2)^iW_fJ6%TMEk{xyXs;RLy|+&uB2x`{7vHSTgoQkVPKeD zAx&{fnR5n@R)R_mo&ZjL(byEzQVK)}iUfBh6T#3|JpI0Ur$4qN6W;SyU9U$APRvhwU>_YyVRLQV)*8$ zAKclQ>U{V?@Qrhh?K{PX;oY&Ik}YbDO5WI14v3h&yk;?Jh9F5_njo=2J6m3oX~xj4 z2mFlRz?HPpsz9sgqm)4Wi03<=!4lLA8R!5`KcaJp}(&MAN)27D*klm@7~i7o!S2cOL|#q)mu zKK@}y&2f(YOm@Ht{ti0oE_p1djM!Me~ebGbpOHMvQEUmr`o35r_+`T`H|DBl>GVN_{08Ggg6h!}JBvP^$^c$n)_nS`?7X)9 zsG=7%dX$NJVSCfKx_*9-NNiYiZK+gkb-liwH}n7iTBn61#BPvf8SmB_^kj#Eh>@ej zF8mRssAKZ&rwzmM$kEST6kkW~wE?J{7juO2;Whce2?+OAKA~io3s*qN%qYlhy zZb1Yg>^tgf*@f#-Ib2U~G<0e%Wj726$;}D#u3M74;Ct07ATZc7Gz<%gN77Nyzp|HgHu$#(8DuZ^yJc$Vw8vJ1k@-%G)u}7G!?wAw{sCzA0L!G$`ib=0CRi+9!kH{osE`lu7P>W zn^#^1;a!Xqsc4$DlCZ91FRdsaCb39`m~>wu0Z2wL;JH{b8d6mehbJJ=4=9}u5hsPH zcY(coK8ZdCO`w&`YqxQj?xB?Xk2!?fu@pd(#pta9Bi#NSI`dbj?K#kp*{VP*EQ*e8 zcc|=Xs_t`>HlXKqzM2^_7YeLSt6Ud|NBOTd%!>zfvzY}r9B)h|me1!IK+X==tjg;G zZUhzm*c;?Lm!$Z0k#_m@J!O+#QDe9ORcOe;|xGB?Bw$?f-f?tV)QP3tUAHHojV%d6 z=Y@l^61$HHKYUPSkU3uw$QvEwx9{kJm9Xjf_m73<)dWhy@t3a=}LRohJqChbF>D+xz zJQ3uxQ6o3)cpQ*>4UpLTx^!piX3Ko^evS7mbAFo%ijHh;YM*m9lGE$6PoL5D|B2tji<+atC zvi5O+DE&Jh(#!@ELI_?WQ`iU~nC$~B3i$)vOZaLj)ro4^S(=C4F)>&zK6k~TIzL_4 z#0icbjo+fJ`-W#Kie=&lK0qiS=SKt52-GB_(BgCnOAd>`fGA>bk|AI+D8&>!{#iz* z0D{B>R8SRKQJjfj^{cEdRINkvBXT37no?8(o|5(Tmv^dlhsl#m_D}RvrVY`LKx#yw zlb`w$-tnY-SYesr1}NqxZ!fY}e%@c5;^f=v-`V9@U4i`i-GH3kzWg$(E|(;jv@XIP zDFNyU<)GnP?N>}dxlt>sD{uCsph%9+rJ6s@Bo@M+o@m96siknj6Hg>+-_1NIfu>DP zhCJU2yCd`+Y^q93SR!qNbiTfFoj}8M7d_in zYtLK`d&!N`Yrv4{(&1%m#_ODwI^yr9_fA(hzKLl9u}l08&HPvtc1J*NUO)%5BE+`YUJ8!1sTYTW2Wi5Kw7v%hgL$X{?#9#Lv`d zP;>K##_*<4>T9g0Q!zPgX+qoYWwX%6?=ajD64C+xJo(YN{1 zHf=^t1b?>t^hIkv*LbJ?x5ZDPW)w!^-~RpH%!UU8rdLE=;GK8WBscCEQG*n#TcrXw7^hLaKw5cH$F9yNB(amORA z3{MCX>f#ctYO|VUHtdF<^o=sep}SsAL~!?`zh+Zh~p2Ey$bmn=(Cb!UhVM+cEOXGUx4J>_yeQ~n?6 z7Zc#$0Kybq!t?_@Byksn{(ImJ!)ORhxEE%+)b2x4f8Ea3oe|hg7}CH`0t#WT1ctDh zMtUI;`@``X-Jw;PDf8HgMSHJ+tC|uD--{*%Qi3hqS=iky~zkg2&U7X+O0diLQJ}zo*EMP(GyY_U&mGP5Hu}JCT&^s#68%6=h4x^E8WhWtR=e zA)I>Ljq*~DhZ#UDLuoOD_0p%J^&KWXyfz~e*9_B~BW%{ko=IJTMzqnY+$)l?p)uWl zU=^F78&6U^0tSF60U4XziZo%ZI`eN91`=34ofkrre(`dInlTv01DbT*+X@E8Dy_fn zVXRpsbN-ahF49P_2s9W>x0;)&|IjVPGhwaVR<%|~2leb@VYc6(&lkTZPhHux(^AG- zS~}_HxlW>IRi>`(i35LXX53l$owZrJ*zM%To?!XOj%+N6=h9ljwb)L`^W$ek#dgn` z>0$YaJa$p<{kJNS`4YHaXKhqec(pDwgP*7S#;?oFZ@&uswYt^9d2aW+?O-t&PpOU$ zp>_6H3Iu-{#KWj=ZQc!l=-A^U7)uLr0SjxgTv2;X+_(UNpfWCh-fSOKte{S*1;8t2 zO?)aJbY|g2`&OL@+~yDff#ey!7dX(m9)C{x_6USZ))g~ACOwqOns?M?AY1S&llcDm zA;0bS75Cq;$&w7c%Yy45pLicz!M*zjtJ(0OnZ=yarIe9u^;$TPR}yVN%(JX4W5t(f z9dj3`oDR?B<6_fB^5QsVhATn7h@x)6nf$8F~)tW5{t7>UmJI+b{#px!d@r z!LYjEVSlzubK9SO(fS2HV^`gm2~S;`=$?<(w1BIxzXf2eqt%`6BiHxA2@N@QT^*tR zie-PWtOx4Q)$4?p*mYf}-Zv~F@gORz>L<+__9)4g%Nr0Bh&Q$R$w0>u>-69p1OAAK zGDGBen8~=h7Z3^iMb#zs%|vS8paF*&2jH*6Ce$<78t6%!QC~q|k-+dQjmM%*^bpde zuY+G%(4H_90}?l5{kXlj%Xn~dnWeAuw2jYBt6>i3q%Avt z>yt?2jNkri>{6Wct+O%l#ANJBEM)F%Ep$qhs5tK&N8z*9XDQ~_75OryWqKi0to?II za9CXKnEbcX z=S*;~|0Tn}ztO?5Bau z-Mks2v`tz`N=sLBpwgos_qa2`UiaA+sQ|n&PpfL0JggET-uP5FV>zUqk3>Lw5Kp_< zYRim;-Y7&FL^D$H1kFBsLe|_zgX+TEYcL5)*9Ii|ajwy@ytQ>oQOh2|LaVFA(~j9q zj58q1duNhAiH@Jl+&4IuJ+UrJJrU>1xkguxXnLR7wGPf5d$_+*`c)p}b9_SmCd$eH zm+fz|v8Wa-c&8U`SON=I>W1{%_Q~`~j;0T$ywKw=Ld{4x_(9)?}Y*0 z|SLN$G~(#?u8OpE~surJ$W@kRnZnEF?AsVKhig67?U zL7}JsXGT31W+4!d+)B@caM<0+QB)*Cd&11*m-Hl;bc*ztD!C(WV4D&RfF6sRN?)zK zp>6g~)m-#AfRPn_`rgp#HRwYtwEfD={i?R+3Y&bFi_MR>L^Ca%hP(yu$bdXs3TH&) zma+T^Ewla}inzsKa%!LDaL&Be6^HY(p7$?-fsR(lOnOLeYGu$>iQOBG9mR+RoIswhj#oET!_$DdmV=z ev { + } + + /** + * Instantiates a new base view template. + */ + public BaseViewTemplate() { + initWidget(uiBinder.createAndBindUi(this)); + } + + /** + * Adds the to top. + * + * @param widget the widget + */ + public void addToTop(Widget widget){ + top_container.add(widget); + } + + /** + * Adds the to middle. + * + * @param widget the widget + */ + public void addToMiddle(Widget widget){ + base_container.add(widget); + } + + /** + * Adds the to bottom. + * + * @param widget the widget + */ + public void addToBottom(Widget widget){ + bottom_container.add(widget); + } +} diff --git a/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/view/BaseViewTemplate.ui.xml b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/view/BaseViewTemplate.ui.xml new file mode 100644 index 0000000..03a8f04 --- /dev/null +++ b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/view/BaseViewTemplate.ui.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/view/CkanFramePanel.java b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/view/CkanFramePanel.java new file mode 100644 index 0000000..98ab1d9 --- /dev/null +++ b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/view/CkanFramePanel.java @@ -0,0 +1,67 @@ +/** + * + */ +package org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.view; + +import com.google.gwt.dom.client.Style.Unit; +import com.google.gwt.event.dom.client.LoadEvent; +import com.google.gwt.event.dom.client.LoadHandler; +import com.google.gwt.user.client.ui.FlowPanel; +import com.google.gwt.user.client.ui.Frame; + + +/** + * The Class CkanFramePanel. + * + * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it + * Jun 9, 2016 + */ +public class CkanFramePanel extends FlowPanel{ + + private Frame frame; + + /** + * Instantiates a new ckan frame panel. + */ + public CkanFramePanel() { + + } + + /** + * Instance frame. + * + * @param ckanUrlConnector the ckan url connector + * @return the frame + */ + public Frame instanceFrame(String ckanUrlConnector) { + + frame = new Frame(ckanUrlConnector); + frame.getElement().getStyle().setBorderWidth(0, Unit.PX); +// frame.getElement().setPropertyString("frameBorder", "0"); + frame.addLoadHandler(new LoadHandler() { + + @Override + public void onLoad(LoadEvent arg0) { + + /*NodeList listHeaders = Document.get().getElementsByTagName("header"); + + if(listHeaders!=null){ + GWT.log("List Header by tag name is/are: "+listHeaders.getLength() +", hidden.."); + for (int i = 0; i < listHeaders.getLength(); i++) { + Element header = listHeaders.getItem(i); + header.getStyle().setVisibility(Visibility.HIDDEN); + } + }else + GWT.log("List Header by tag name is null");*/ + } + }); + add(frame); + return frame; + } + /** + * @return + */ + public Frame getFrame() { + return frame; + } +} diff --git a/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/view/CkanMetadataManagementPanel.java b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/view/CkanMetadataManagementPanel.java new file mode 100644 index 0000000..35c1af9 --- /dev/null +++ b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/view/CkanMetadataManagementPanel.java @@ -0,0 +1,85 @@ +/** + * + */ +package org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.view; + +import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.event.InsertMetadataEvent; + +import com.github.gwtbootstrap.client.ui.AlertBlock; +import com.github.gwtbootstrap.client.ui.Button; +import com.github.gwtbootstrap.client.ui.constants.AlertType; +import com.github.gwtbootstrap.client.ui.constants.ButtonType; +import com.google.gwt.dom.client.Style.Unit; +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.ui.FlowPanel; + + +/** + * The Class CkanMetadataManagementPanel. + * + * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it + * Jun 9, 2016 + */ +public class CkanMetadataManagementPanel extends FlowPanel{ + + private AlertBlock nav = new AlertBlock(); + private Button insertMeta = new Button("Insert Metadata"); + private Button editMeta = new Button("Edit Metadata"); + private HandlerManager eventBus; + + /** + * Instantiates a new ckan metadata management panel. + * @param eventBus + */ + public CkanMetadataManagementPanel(HandlerManager eventBus){ + this.eventBus = eventBus; +// this.getElement().getStyle().setPaddingTop(H_OFFSET, Unit.PX); +// this.getElement().getStyle().setPaddingBottom(H_OFFSET, Unit.PX); + insertMeta.setType(ButtonType.LINK); + editMeta.setType(ButtonType.LINK); + nav.add(insertMeta); + nav.add(editMeta); + nav.setClose(false); + nav.setType(AlertType.INFO); + nav.getElement().getStyle().setMarginBottom(0, Unit.PX); + nav.getElement().getStyle().setBackgroundColor("#FFF"); + addHandlers(); + add(nav); + } + + /** + * + */ + private void addHandlers() { + + insertMeta.addClickHandler(new ClickHandler() { + + @Override + public void onClick(ClickEvent event) { + + eventBus.fireEvent(new InsertMetadataEvent()); + } + }); + + editMeta.addClickHandler(new ClickHandler() { + + @Override + public void onClick(ClickEvent event) { + + eventBus.fireEvent(new InsertMetadataEvent()); + } + }); + + } + + /** + * Gets the current height. + * + * @return the current height + */ + public int getCurrentHeight(){ + return this.getOffsetHeight(); + } +} diff --git a/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/view/GCubeCkanDataCatalogPanel.java b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/view/GCubeCkanDataCatalogPanel.java new file mode 100644 index 0000000..9997b40 --- /dev/null +++ b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/view/GCubeCkanDataCatalogPanel.java @@ -0,0 +1,175 @@ +/** + * + */ +package org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.view; + +import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.GCubeCkanDataCatalog; +import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.resource.CkanPortletResources; +import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.shared.CkanRole; + +import com.google.gwt.core.shared.GWT; +import com.google.gwt.event.logical.shared.ResizeEvent; +import com.google.gwt.event.logical.shared.ResizeHandler; +import com.google.gwt.event.shared.HandlerManager; +import com.google.gwt.user.client.Window; +import com.google.gwt.user.client.rpc.AsyncCallback; +import com.google.gwt.user.client.ui.Frame; +import com.google.gwt.user.client.ui.Image; +import com.google.gwt.user.client.ui.RootPanel; +import com.google.gwt.user.client.ui.ScrollPanel; + + +/** + * The Class GCubeCkanDataCatalogPanel. + * + * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it + * Jun 9, 2016 + */ +public class GCubeCkanDataCatalogPanel extends BaseViewTemplate{ + + private CkanMetadataManagementPanel managementPanel; + private ScrollPanel centerScrollable = new ScrollPanel(); + private CkanFramePanel ckanFramePanel = new CkanFramePanel(); + private Image loading = new Image(CkanPortletResources.ICONS.loading()); + private RootPanel rootPanel; + private HandlerManager eventBus; + + /** + * Instantiates a new g cube ckan data catalog panel. + * + * @param rootPanel the root panel + * @param eventManager the event manager + */ + public GCubeCkanDataCatalogPanel(RootPanel rootPanel, HandlerManager eventManager){ + this.rootPanel = rootPanel; + this.eventBus = eventManager; + managementPanel = new CkanMetadataManagementPanel(eventBus); + initPanel(); + GCubeCkanDataCatalog.service.getCKanConnector(new AsyncCallback() { + + @Override + public void onSuccess(String ckanUrlConnector) { + + instanceCkanFrame(ckanUrlConnector); + GCubeCkanDataCatalogPanel.this.rootPanel.remove(loading); + updateSize(); + } + + @Override + public void onFailure(Throwable caught) { + GCubeCkanDataCatalogPanel.this.rootPanel.remove(loading); + Window.alert("Sorry, An error occurred during contacting Gcube Ckan Data Catalogue!"); + } + }); + + + //MANAGE CKAN MANAGEMENT PANEL ACCORDING TO MY ROLE + GCubeCkanDataCatalog.service.getMyRole(new AsyncCallback() { + + @Override + public void onFailure(Throwable caught) { + } + + @Override + public void onSuccess(CkanRole result) { + + switch (result) { + case ADMIN: + setTopPanelVisible(true); + break; + case EDITOR: + setTopPanelVisible(true); + break; + case MEMBER: + setTopPanelVisible(false); + break; + case SYSADMIN: + setTopPanelVisible(true); + break; + default: + break; + } + } + }); + + Window.addResizeHandler(new ResizeHandler() { + + @Override + public void onResize(ResizeEvent event) { + + GWT.log("onWindowResized width: " + event.getWidth() + " height: " + event.getHeight()); + updateSize(); + } + }); + + rootPanel.add(loading); + rootPanel.add(this); + updateSize(); + + } + + /** + * Gets the top panel height. + * + * @return the top panel height + */ + public int getTopPanelHeight(){ + + if(managementPanel.isVisible()) + return managementPanel.getCurrentHeight(); + + return 0; + } + + /** + * Sets the top panel visible. + * + * @param bool the new top panel visible + */ + public void setTopPanelVisible(boolean bool){ + managementPanel.setVisible(bool); + updateSize(); + + } + + /** + * Instance ckan frame. + * + * @param ckanUrlConnector the ckan url connector + * @return the frame + */ + private Frame instanceCkanFrame(String ckanUrlConnector){ + + return ckanFramePanel.instanceFrame(ckanUrlConnector); + + } + + /** + * Inits the panel. + */ + private void initPanel() { + setTopPanelVisible(false); + addToTop(managementPanel); + centerScrollable.add(ckanFramePanel); + addToMiddle(centerScrollable); + } + + /** + * Update window size. + */ + public void updateSize(){ + + RootPanel workspace = rootPanel; + int topBorder = workspace.getAbsoluteTop(); + int leftBorder = workspace.getAbsoluteLeft(); + int footer = 0; //85 footer is bottombar + sponsor + int rightScrollBar = 0; + int rootHeight = Window.getClientHeight() - topBorder - 5 - footer;// - ((footer == null)?0:(footer.getOffsetHeight()-15)); + int rootWidth = Window.getClientWidth() - 2* leftBorder - rightScrollBar; + GWT.log("New iFrame size w: "+rootWidth + " h: "+rootHeight); + this.setSize(rootWidth+"px",rootHeight+"px"); + int height = rootHeight - getTopPanelHeight(); + if(ckanFramePanel.getFrame()!=null) + ckanFramePanel.getFrame().setSize(rootWidth+"px", height+"px"); + } +} diff --git a/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/portlet/GCubeCkanDataCatalogPortlet.java b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/portlet/GCubeCkanDataCatalogPortlet.java new file mode 100644 index 0000000..70d0206 --- /dev/null +++ b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/portlet/GCubeCkanDataCatalogPortlet.java @@ -0,0 +1,46 @@ +package org.gcube.portlets.gcubeckan.gcubeckandatacatalog.portlet; + +import java.io.IOException; + +import javax.portlet.GenericPortlet; +import javax.portlet.PortletException; +import javax.portlet.PortletRequestDispatcher; +import javax.portlet.RenderRequest; +import javax.portlet.RenderResponse; + +import org.gcube.portal.custom.scopemanager.scopehelper.ScopeHelper; + + +/** + * The Class GCubeCkanDataCatalogPortlet. + * + * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it + * Apr 12, 2016 + */ +public class GCubeCkanDataCatalogPortlet extends GenericPortlet{ + + /** + * JSP folder name + */ + public static final String JSP_FOLDER = "/WEB-INF/jsp/"; + + /** + * + */ + public static final String VIEW_JSP = JSP_FOLDER + "GCubeCkanDataCatalogPortlet_view.jsp"; + + /** + * Do view. + * + * @param request . + * @param response . + * @throws PortletException . + * @throws IOException . + */ + public void doView(RenderRequest request, RenderResponse response) throws PortletException, IOException { + System.out.println("LOADING ********* FROM "+VIEW_JSP); + ScopeHelper.setContext(request, ScopeHelper.USERNAME_ATTRIBUTE); + PortletRequestDispatcher rd = getPortletContext().getRequestDispatcher(VIEW_JSP); + rd.include(request,response); + } +} diff --git a/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/server/GcoreEndpointReader.java b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/server/GcoreEndpointReader.java new file mode 100644 index 0000000..6a538f2 --- /dev/null +++ b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/server/GcoreEndpointReader.java @@ -0,0 +1,85 @@ +/** + * + */ +package org.gcube.portlets.gcubeckan.gcubeckandatacatalog.server; + +import static org.gcube.resources.discovery.icclient.ICFactory.client; +import static org.gcube.resources.discovery.icclient.ICFactory.queryFor; + +import java.util.List; + +import org.gcube.common.resources.gcore.GCoreEndpoint; +import org.gcube.common.scope.api.ScopeProvider; +import org.gcube.resources.discovery.client.api.DiscoveryClient; +import org.gcube.resources.discovery.client.queries.api.SimpleQuery; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + + +/** + * + * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it + * Jun 10, 2016 + */ +public class GcoreEndpointReader { + + private static final String ckanResource = "org.gcube.data.access.ckanconnector.CkanConnector"; + private static final String serviceName = "CkanConnector"; + private static final String serviceClass = "DataAccess"; + + private static Logger logger = LoggerFactory.getLogger(GcoreEndpointReader.class); + private String ckanResourceEntyName; + /** + * + */ + public GcoreEndpointReader(String scope) { + + try{ + + logger.info("set scope "+scope); + ScopeProvider.instance.set(scope); + + SimpleQuery query = queryFor(GCoreEndpoint.class); + query.addCondition(String.format("$resource/Profile/ServiceClass/text() eq '%s'",serviceClass)); + query.addCondition("$resource/Profile/DeploymentData/Status/text() eq 'ready'"); + query.addCondition(String.format("$resource/Profile/ServiceName/text() eq '%s'",serviceName)); + query.setResult("$resource/Profile/AccessPoint/RunningInstanceInterfaces//Endpoint[@EntryName/string() eq \""+ckanResource+"\"]/text()"); + + logger.debug("submitting quey "+query.toString()); + + DiscoveryClient client = client(); + List endpoints = client.submit(query); + if (endpoints == null || endpoints.isEmpty()) throw new Exception("Cannot retrieve the GCoreEndpoint serviceName: "+serviceName +", serviceClass: " +serviceClass +", in scope: "+scope); + + + this.ckanResourceEntyName = endpoints.get(0); + if(ckanResourceEntyName==null) + throw new Exception("Endpoint:"+ckanResource+", is null for serviceName: "+serviceName +", serviceClass: " +serviceClass +", in scope: "+scope); + + logger.info("found entyname "+ckanResourceEntyName+" for ckanResource: "+ckanResource); + + /*Group accessPoints = se.profile().endpoints(); + if(accessPoints.size()==0) throw new Exception("Endpoint in serviceName serviceName: "+serviceName +", serviceClass: " +serviceClass +", in scope: "+scope +" not found"); + + Endpoint ep = accessPoints.iterator().next(); + + String epName = ep.name(); + + System.out.println(epName);*/ + + }catch(Exception e){ + logger.error("An error occurred during GCoreEndpoint discovery, serviceName: "+serviceName +", serviceClass: " +serviceClass +", in scope: "+scope +" not found", e); + }finally{ + logger.info("scope provider reset"); + ScopeProvider.instance.reset(); + } + } + + /** + * @return the ckanResourceEntyName + */ + public String getCkanResourceEntyName() { + + return ckanResourceEntyName; + } +} diff --git a/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/server/GcubeCkanDataCatalogServiceImpl.java b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/server/GcubeCkanDataCatalogServiceImpl.java new file mode 100644 index 0000000..fb71708 --- /dev/null +++ b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/server/GcubeCkanDataCatalogServiceImpl.java @@ -0,0 +1,154 @@ +package org.gcube.portlets.gcubeckan.gcubeckandatacatalog.server; + +import static org.gcube.common.authorization.client.Constants.authorizationService; + +import java.util.ArrayList; +import java.util.List; + +import javax.servlet.http.HttpSession; + +import org.gcube.application.framework.core.session.ASLSession; +import org.gcube.application.framework.core.session.SessionManager; +import org.gcube.common.scope.api.ScopeProvider; +import org.gcube.portal.custom.scopemanager.scopehelper.ScopeHelper; +import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.GcubeCkanDataCatalogService; +import org.gcube.portlets.gcubeckan.gcubeckandatacatalog.shared.CkanRole; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.google.gwt.user.server.rpc.RemoteServiceServlet; + +/** + * The server side implementation of the RPC service. + * + * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it + * Jun 10, 2016 + */ +@SuppressWarnings("serial") +public class GcubeCkanDataCatalogServiceImpl extends RemoteServiceServlet implements GcubeCkanDataCatalogService { + + + private static final String PORT_HTTP = ":80"; + private static final String PORT_HTTPS = ":443"; + private static final String GCUBE_TOKEN = "gcube-token"; + private static final String HTTPS = "https"; + private static final String HTTP = "http"; + public static String CKANCONNECTORCONTEXT = "CkanConnectorContext"; + public static final String USERNAME_ATTRIBUTE = ScopeHelper.USERNAME_ATTRIBUTE; + private static Logger logger = LoggerFactory.getLogger(GcubeCkanDataCatalogServiceImpl.class); + private final static String DEFAULT_ROLE = "OrganizationMember"; + + private final static String TEST_USER = "francesco.mangiacrapa"; + private final static String TEST_SCOPE = "/gcube/devsec/devVRE"; + private final static String TEST_SEC_TOKEN = "4620e6d0-2313-4f48-9d54-eb3efd01a810"; +// private final static String TEST_SEC_TOKEN = "f539884c-8697-4ac0-9bbf-2f4d595281f5"; + + /* (non-Javadoc) + * @see org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.GcubeCkanDataCatalogService#getCKanConnector() + */ + @Override + public String getCKanConnector() throws Exception{ + logger.trace("getCKanConnector..."); + + try{ + String ckanContext = getServletContext().getInitParameter(CKANCONNECTORCONTEXT); + logger.debug(CKANCONNECTORCONTEXT + " is: "+ckanContext); + ASLSession session = getASLSession(this.getThreadLocalRequest().getSession()); + GcoreEndpointReader ckanEndPoint = SessionUtil.getCkanEndPoint(session); + String ckanConnectorUri = ckanEndPoint.getCkanResourceEntyName(); + logger.debug(ckanConnectorUri + "is : "+ckanConnectorUri); + ckanConnectorUri = ckanConnectorUri.startsWith(HTTP) && !ckanConnectorUri.startsWith(HTTPS)?ckanConnectorUri.replaceFirst(HTTP, HTTPS):ckanConnectorUri; + ckanConnectorUri = ckanConnectorUri.contains(PORT_HTTP)?ckanConnectorUri.replace(PORT_HTTP, PORT_HTTPS):ckanConnectorUri; + ckanConnectorUri+=ckanContext; + logger.debug("CKanConnector URI + Context: "+ckanConnectorUri); + logger.debug("adding gcube token parameter..."); + if(SessionUtil.isIntoPortal()){ + ckanConnectorUri+="?"+GCUBE_TOKEN+"="+getGcubeSecurityToken(); + }else{ + logger.warn("******** Using TEST_USER security token!!!"); + ckanConnectorUri+="?"+GCUBE_TOKEN+"="+TEST_SEC_TOKEN; + } + logger.info("returning ckanConnectorUri: "+ckanConnectorUri); + return ckanConnectorUri; +// return "http://ckan-d-d4s.d4science.org"; + }catch(Exception e ){ + String message = "Sorry an error occurred during contacting gCube Ckan Data Catalogue"; + logger.error(message, e); + throw new Exception(message); + } + } + + /** + * Gets the gcube security token. + * + * @return the gcube security token + */ + protected String getGcubeSecurityToken() { + HttpSession httpSession = this.getThreadLocalRequest().getSession(); + ASLSession session = getASLSession(httpSession); + logger.debug("Get security token return: "+session.getSecurityToken()); + + if(session.getSecurityToken()==null || session.getSecurityToken().isEmpty()){ + logger.warn("Security token retured from ASL is null or empty, I'm setting security token..."); + setAuthorizationToken(session); + } + + return session.getSecurityToken(); + } + + + /** + * Temporary method to set the authorization token. + * + * @param session the new authorization token + */ + private static void setAuthorizationToken(ASLSession session) { + String username = session.getUsername(); + String scope = session.getScope(); + ScopeProvider.instance.set(scope); + logger.debug("calling service token on scope " + scope); + List userRoles = new ArrayList(); + userRoles.add(DEFAULT_ROLE); + session.setSecurityToken(null); + String token = authorizationService().build().generate(session.getUsername(), userRoles); + logger.debug("received token: "+token); + session.setSecurityToken(token); + logger.info("Security token set in session for: "+username + " on " + scope); + } + + /** + * Gets the ASL session. + * + * @param httpSession the http session + * @return the ASL session + */ + protected ASLSession getASLSession(HttpSession httpSession) + { + String sessionID = httpSession.getId(); + String user = (String) httpSession.getAttribute(USERNAME_ATTRIBUTE); + + if (user == null) { + + logger.warn("****** STARTING IN TEST MODE - NO USER FOUND *******"); + //for test only + user = TEST_USER; + httpSession.setAttribute(USERNAME_ATTRIBUTE, user); + ASLSession session = SessionManager.getInstance().getASLSession(sessionID, user); + session.setScope(TEST_SCOPE); + //session.setScope("/gcube/devsec/devVRE"); + + return session; + } else logger.trace("user found in session "+user); + return SessionManager.getInstance().getASLSession(sessionID, user); + } + + + /* (non-Javadoc) + * @see org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.GcubeCkanDataCatalogService#getMyRole() + */ + @Override + public CkanRole getMyRole() throws Exception{ + //TODO READ FROM IS + return CkanRole.ADMIN; + } +} diff --git a/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/server/SessionUtil.java b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/server/SessionUtil.java new file mode 100644 index 0000000..31fe329 --- /dev/null +++ b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/server/SessionUtil.java @@ -0,0 +1,59 @@ +/** + * + */ +package org.gcube.portlets.gcubeckan.gcubeckandatacatalog.server; + +import org.gcube.application.framework.core.session.ASLSession; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.liferay.portal.service.UserLocalServiceUtil; + + +/** + * The Class SessionUtil. + * + * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it + * Jun 10, 2016 + */ +public class SessionUtil { + + public static final String CKAN_END_POINT = "CKAN_END_POINT"; + + private static Logger logger = LoggerFactory.getLogger(SessionUtil.class); + + /** + * Gets the ckan end point. + * + * @param session the session + * @return the ckan end point + */ + public static GcoreEndpointReader getCkanEndPoint(ASLSession session){ + + GcoreEndpointReader ckanEndPoint = (GcoreEndpointReader) session.getAttribute(CKAN_END_POINT); + + if(ckanEndPoint==null){ + logger.debug("GcoreEndpointReader is null, instancing new.."); + ckanEndPoint = new GcoreEndpointReader(session.getScope()); + session.setAttribute(CKAN_END_POINT, ckanEndPoint); + } + logger.debug("returning: "+ckanEndPoint); + return ckanEndPoint; + } + + /** + * Checks if is into portal. + * + * @return true, if is into portal + */ + public static boolean isIntoPortal() { + try { + UserLocalServiceUtil.getService(); + return true; + } + catch (Exception ex) { + logger.trace("Development Mode ON"); + return false; + } + } +} diff --git a/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/shared/CkanRole.java b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/shared/CkanRole.java new file mode 100644 index 0000000..88b542d --- /dev/null +++ b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/shared/CkanRole.java @@ -0,0 +1,18 @@ +/** + * + */ +package org.gcube.portlets.gcubeckan.gcubeckandatacatalog.shared; + + +/** + * + * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it + * Jun 9, 2016 + */ +public enum CkanRole { + + MEMBER, + EDITOR, + ADMIN, + SYSADMIN +} diff --git a/src/main/resources/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/GCubeCkanDataCatalog.gwt.xml b/src/main/resources/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/GCubeCkanDataCatalog.gwt.xml new file mode 100644 index 0000000..715ff51 --- /dev/null +++ b/src/main/resources/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/GCubeCkanDataCatalog.gwt.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/Messages_fr.properties b/src/main/resources/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/Messages_fr.properties new file mode 100644 index 0000000..b4a7627 --- /dev/null +++ b/src/main/resources/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/Messages_fr.properties @@ -0,0 +1,2 @@ +sendButton = Envoyer +nameField = Entrez votre nom \ No newline at end of file diff --git a/src/main/webapp/GCubeCkanDataCatalog.css b/src/main/webapp/GCubeCkanDataCatalog.css new file mode 100644 index 0000000..624082d --- /dev/null +++ b/src/main/webapp/GCubeCkanDataCatalog.css @@ -0,0 +1,39 @@ +/** Add css rules here for your application. */ + + +body { + padding-top: 0px !important; /** OVERRIDE GWT BOOTSTRAP PADDING TOP TO 50px*/ +} + + +/** Example rules used by the template application (remove for your app) */ +h1 { + font-size: 2em; + font-weight: bold; + color: #777777; + margin: 40px 0px 70px; + text-align: center; +} + +.sendButton { + display: block; + font-size: 16pt; +} + +/** Most GWT widgets already have a style name defined */ +.gwt-DialogBox { + width: 400px; +} + +.dialogVPanel { + margin: 5px; +} + +.serverResponseLabelError { + color: red; +} + +/** Set ids using widget.getElement().setId("idOfElement") */ +#closeButton { + margin: 15px 6px 6px; +} diff --git a/src/main/webapp/GCubeCkanDataCatalog.html b/src/main/webapp/GCubeCkanDataCatalog.html new file mode 100644 index 0000000..b025002 --- /dev/null +++ b/src/main/webapp/GCubeCkanDataCatalog.html @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/src/main/webapp/WEB-INF/jsp/GCubeCkanDataCatalogPortlet_view.jsp b/src/main/webapp/WEB-INF/jsp/GCubeCkanDataCatalogPortlet_view.jsp new file mode 100644 index 0000000..2403d9b --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/GCubeCkanDataCatalogPortlet_view.jsp @@ -0,0 +1,12 @@ +<%@page contentType="text/html"%> +<%@page pageEncoding="UTF-8"%> + +<%-- Uncomment below lines to add portlet taglibs to jsp +<%@ page import="javax.portlet.*"%> +<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet"%> + + +--%> + + +
\ No newline at end of file diff --git a/src/main/webapp/WEB-INF/liferay-display.xml b/src/main/webapp/WEB-INF/liferay-display.xml new file mode 100644 index 0000000..84a02a9 --- /dev/null +++ b/src/main/webapp/WEB-INF/liferay-display.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/liferay-plugin-package.properties b/src/main/webapp/WEB-INF/liferay-plugin-package.properties new file mode 100644 index 0000000..46f2803 --- /dev/null +++ b/src/main/webapp/WEB-INF/liferay-plugin-package.properties @@ -0,0 +1,9 @@ +name=GCubeCkanDataCatalogPortlet +module-group-id=liferay +module-incremental-version=2 +tags= +short-description= +change-log= +page-url=http://www.gcube-system.org +author=gCube +licenses=EUPL \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/liferay-portlet.xml b/src/main/webapp/WEB-INF/liferay-portlet.xml new file mode 100644 index 0000000..b79b87b --- /dev/null +++ b/src/main/webapp/WEB-INF/liferay-portlet.xml @@ -0,0 +1,11 @@ + + + + + + GCubeCkanDataCatalogPortlet + false + false + false + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/portlet.xml b/src/main/webapp/WEB-INF/portlet.xml new file mode 100644 index 0000000..8c1ff80 --- /dev/null +++ b/src/main/webapp/WEB-INF/portlet.xml @@ -0,0 +1,18 @@ + + + + GCube-Ckan Data Catalog Portlet + GCubeCkanDataCatalogPortlet + GCubeCkanDataCatalogPortlet + org.gcube.portlets.gcubeckan.gcubeckandatacatalog.portlet.GCubeCkanDataCatalogPortlet + 0 + + text/html + VIEW + + + GCubeCkanDataCatalogPortlet + GCubeCkanDataCatalogPortlet + + + diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000..eead61a --- /dev/null +++ b/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,32 @@ + + + + + + + CkanConnectorContext + + /gcube/service/connect + + + + + gcubeckandatacatalogservice + org.gcube.portlets.gcubeckan.gcubeckandatacatalog.server.GcubeCkanDataCatalogServiceImpl + + + + gcubeckandatacatalogservice + /gCubeCkanDataCatalog/ckandatacatalogue + + + + + + + GCubeCkanDataCatalog.html + + + diff --git a/src/test/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/GwtTestGCubeCkanDataCatalog.java b/src/test/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/GwtTestGCubeCkanDataCatalog.java new file mode 100644 index 0000000..17a830c --- /dev/null +++ b/src/test/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/GwtTestGCubeCkanDataCatalog.java @@ -0,0 +1,26 @@ +package org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client; + +import com.google.gwt.junit.client.GWTTestCase; + +/** + * GWT JUnit integration tests must extend GWTTestCase. + * Using "GwtTest*" naming pattern exclude them from running with + * surefire during the test phase. + * + * If you run the tests using the Maven command line, you will have to + * navigate with your browser to a specific url given by Maven. + * See https://gwt-maven-plugin.github.io/gwt-maven-plugin/user-guide/testing.html + * for details. + */ +public class GwtTestGCubeCkanDataCatalog extends GWTTestCase { + + /** + * Must refer to a valid module that sources this class. + */ + public String getModuleName() { + return "org.gcube.portlets.gcubeckan.gcubeckandatacatalog.GCubeCkanDataCatalogJUnit"; + } + + + +} diff --git a/src/test/resources/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/GCubeCkanDataCatalogJUnit.gwt.xml b/src/test/resources/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/GCubeCkanDataCatalogJUnit.gwt.xml new file mode 100644 index 0000000..fc82cfd --- /dev/null +++ b/src/test/resources/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/GCubeCkanDataCatalogJUnit.gwt.xml @@ -0,0 +1,9 @@ + + + + + + + + +