commit d7a9786971c4cb56fc43b6fdc6383dd4067f0e9d Author: Francesco Mangiacrapa Date: Mon Jun 13 07:48:29 2016 +0000 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 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 0000000..cb630e1 Binary files /dev/null and b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/resource/loader.gif differ 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 0000000..3f4738b Binary files /dev/null and b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/resource/loading.gif differ diff --git a/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/view/BaseViewTemplate.java b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/view/BaseViewTemplate.java new file mode 100644 index 0000000..334c754 --- /dev/null +++ b/src/main/java/org/gcube/portlets/gcubeckan/gcubeckandatacatalog/client/view/BaseViewTemplate.java @@ -0,0 +1,73 @@ +/** + * + */ +package org.gcube.portlets.gcubeckan.gcubeckandatacatalog.client.view; + +import com.github.gwtbootstrap.client.ui.FluidRow; +import com.google.gwt.core.client.GWT; +import com.google.gwt.uibinder.client.UiBinder; +import com.google.gwt.uibinder.client.UiField; +import com.google.gwt.user.client.ui.Composite; +import com.google.gwt.user.client.ui.Widget; + +/** + * The Class BaseViewTemplate. + * + * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it + * Feb 19, 2015 + */ +public class BaseViewTemplate extends Composite{ + + @UiField + FluidRow top_container; + @UiField + FluidRow base_container; + @UiField + FluidRow bottom_container; + + + private static BaseViewTemplateUiBinder uiBinder = GWT.create(BaseViewTemplateUiBinder.class); + + /** + * The Interface BaseViewTemplateUiBinder. + * + * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it + * Feb 19, 2015 + */ + interface BaseViewTemplateUiBinder extends UiBinder { + } + + /** + * 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 @@ + + + + + + + + +