diff --git a/distro/changelog.xml b/distro/changelog.xml
index d16f593..5a672ba 100644
--- a/distro/changelog.xml
+++ b/distro/changelog.xml
@@ -94,7 +94,14 @@
- [Task #9538] Geonetwork-Uri Resolver enhancement: provide new filters and improve current ones
+ [Task #9538] Geonetwork-Uri Resolver enhancement: provide new
+ filters and improve current ones
+
+
+
+ [Task #10070] Catalogue Resolver enhancement: resolve
+ public/private items to public/private catalogue
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index f8f9141..ccaec7d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -8,7 +8,7 @@
org.gcube.data.transfer
uri-resolver
- 1.14.0-SNAPSHOT
+ 1.15.0-SNAPSHOT
war
The URI Resolver is an HTTP URI resolver implemented as an HTTP servlet which gives access trough HTTP to different protocols URIs.
@@ -22,7 +22,7 @@
distro
1.7
1.8
-
+
@@ -98,6 +98,12 @@
2.6
+
+ org.gcube.common
+ authorization-client
+ [2.0.0-SNAPSHOT, 3.0.0-SNAPSHOT)
+
+
org.w3c
@@ -106,6 +112,13 @@
compile
+
+ org.gcube.data-catalogue
+ ckan-util-library
+ [2.0.0-SNAPSHOT, 3.0.0-SNAPSHOT)
+ compile
+
+
diff --git a/src/main/java/org/gcube/datatransfer/resolver/catalogue/CatalogueResolver.java b/src/main/java/org/gcube/datatransfer/resolver/catalogue/CatalogueResolver.java
index a32046e..fa9ecbb 100644
--- a/src/main/java/org/gcube/datatransfer/resolver/catalogue/CatalogueResolver.java
+++ b/src/main/java/org/gcube/datatransfer/resolver/catalogue/CatalogueResolver.java
@@ -21,7 +21,8 @@ import org.gcube.datatransfer.resolver.ResourceCatalogueCodes;
import org.gcube.datatransfer.resolver.UriResolverRewriteFilter;
import org.gcube.datatransfer.resolver.applicationprofile.ApplicationProfileNotFoundException;
import org.gcube.datatransfer.resolver.catalogue.resource.ApplicationProfileReaderForCatalogueResolver;
-import org.gcube.datatransfer.resolver.catalogue.resource.CkanPorltetApplicationProfile;
+import org.gcube.datatransfer.resolver.catalogue.resource.CkanCatalogueConfigurationsReader;
+import org.gcube.datatransfer.resolver.catalogue.resource.GatewayCKANCatalogueReference;
import org.gcube.datatransfer.resolver.catalogue.resource.UpdateApplicationProfileCatalogueResolver;
import org.gcube.datatransfer.resolver.scope.ScopeUtil;
import org.json.JSONArray;
@@ -30,6 +31,8 @@ import org.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import eu.trentorise.opendata.jackan.model.CkanDataset;
+
/**
* The Class GisResolver.
@@ -200,14 +203,35 @@ public class CatalogueResolver extends HttpServlet{
try{
logger.info("Setting scope "+scope+ " to search Ckan Portlet URL from IS");
ScopeProvider.instance.set(scope);
- ckanPorltetUrl = CkanPorltetApplicationProfile.getPortletUrlFromInfrastrucure();
+ GatewayCKANCatalogueReference ckanCatalogueReference = CkanCatalogueConfigurationsReader.loadCatalogueEndPoints();
+
+ //IS THE PRODUCT PLUBLIC OR PRIVATE?
+ //USING ACCESS TO PUBLIC PORTLET IF THE ITEM IS PUBLIC, OTHERWISE ACCESS TO PRIVATE PORTLET
+ ckanPorltetUrl = ckanCatalogueReference.getPrivatePortletURL();
+ String datasetName = cer.getValueOfParameter(CatalogueRequestParameter.ENTITY_NAME.getKey());
+ if(ckanCatalogueReference.getCkanURL()!=null){
+ try{
+ CkanDataset dataset = CkanCatalogueConfigurationsReader.getDataset(datasetName, ckanCatalogueReference.getCkanURL());
+ if(dataset!=null){
+ ckanPorltetUrl = ckanCatalogueReference.getPublicPortletURL();
+ logger.info("The dataset "+datasetName+" is a public item using public access to CKAN portlet: "+ckanPorltetUrl);
+ }
+ }catch(Exception e){
+ logger.warn("Error on checking if dataset: "+datasetName+" is private or not", e);
+ ckanPorltetUrl = ckanCatalogueReference.getPublicPortletURL();
+ }
+ }
+
+
if(ckanPorltetUrl == null || ckanPorltetUrl.isEmpty()){
- sendError(resp, HttpStatus.SC_INTERNAL_SERVER_ERROR, "An error occurred during discovery Data Catalogue URL, try again later");
+ sendError(resp, HttpStatus.SC_INTERNAL_SERVER_ERROR, "An error occurred during discovery the resource: "+CkanCatalogueConfigurationsReader.APPLICATION_PROFILE_NAME+" in the scope: "+scope+", try again later");
return;
}
+
+
}catch(Exception e){
- logger.error("An error occurred during discovery Data Catalogue URL: ",e);
- sendError(resp, HttpStatus.SC_INTERNAL_SERVER_ERROR, "An error occurred during discovery Data Catalogue URL, try again later");
+ logger.error("Error during discovery the resource: "+CkanCatalogueConfigurationsReader.APPLICATION_PROFILE_NAME+" in the scope: "+scope, e);
+ sendError(resp, HttpStatus.SC_INTERNAL_SERVER_ERROR, "An error occurred during discovery the resource: "+CkanCatalogueConfigurationsReader.APPLICATION_PROFILE_NAME+" in the scope: "+scope+", try again later");
return;
}finally{
@@ -227,6 +251,7 @@ public class CatalogueResolver extends HttpServlet{
buildPath+= PATH_SEPARATOR+cer.getValueOfParameter(CatalogueRequestParameter.ENTITY_CONTEXT.getKey()) + PATH_SEPARATOR;
buildPath+=cer.getValueOfParameter(CatalogueRequestParameter.ENTITY_NAME.getKey());
+
String finalUrl = ckanPorltetUrl+"?"+buildPath;
logger.info("Builded final URL: "+finalUrl);
resp.sendRedirect(resp.encodeRedirectURL(finalUrl));
@@ -511,7 +536,7 @@ public class CatalogueResolver extends HttpServlet{
public static void main(String[] args) {
try{
- String scope = "d4science.research";
+ String scope = "/d4science.research-infrastructures.eu";
ApplicationProfileReaderForCatalogueResolver appPrCatResolver = new ApplicationProfileReaderForCatalogueResolver(scope, true);
logger.info("Reosurce for Catalogue Resolver: "+appPrCatResolver);
}catch(Exception e){
diff --git a/src/main/java/org/gcube/datatransfer/resolver/catalogue/endpoint/CatalogueServiceEndpointReader.java b/src/main/java/org/gcube/datatransfer/resolver/catalogue/endpoint/CatalogueServiceEndpointReader.java
new file mode 100644
index 0000000..cb7908c
--- /dev/null
+++ b/src/main/java/org/gcube/datatransfer/resolver/catalogue/endpoint/CatalogueServiceEndpointReader.java
@@ -0,0 +1,139 @@
+/**
+ *
+ */
+package org.gcube.datatransfer.resolver.catalogue.endpoint;
+
+import static org.gcube.resources.discovery.icclient.ICFactory.clientFor;
+import static org.gcube.resources.discovery.icclient.ICFactory.queryFor;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.gcube.common.resources.gcore.ServiceEndpoint;
+import org.gcube.common.scope.api.ScopeProvider;
+import org.gcube.datacatalogue.ckanutillibrary.server.DataCatalogueImpl;
+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;
+
+
+/**
+ * The Class CatalogueServiceEndpointReader.
+ *
+ * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it
+ * Apr 20, 2018
+ */
+public class CatalogueServiceEndpointReader {
+
+ // data catalogue info
+ private final static String RUNTIME_CATALOGUE_RESOURCE_NAME = "CKanDataCatalogue";
+ private final static String PLATFORM_CATALOGUE_NAME = "Tomcat";
+ private final static String CKAN_IS_ROOT_MASTER = "IS_ROOT_MASTER";
+ private static final Logger logger = LoggerFactory.getLogger(CatalogueServiceEndpointReader.class);
+
+
+ /** A map to cache couple SCOPE - THE CKAN PORTLET URL OPERATING IN THE SCOPE*/
+ private static Map cacheCkanDataCatalogue = new HashMap();
+
+
+ /**
+ * Instantiates a new catalogue service endpoint reader.
+ */
+ public CatalogueServiceEndpointReader(){
+ }
+
+
+ /**
+ * Retrieve endpoints information from IS for DataCatalogue URL.
+ *
+ * @return list of endpoints for ckan data catalogue
+ * @throws Exception the exception
+ */
+ public static List getConfigurationFromISFORCatalogueUrl() throws Exception{
+
+ logger.info("Searching SE "+RUNTIME_CATALOGUE_RESOURCE_NAME+" configurations in the scope: "+ScopeProvider.instance.get());
+
+ SimpleQuery query = queryFor(ServiceEndpoint.class);
+ query.addCondition("$resource/Profile/Name/text() eq '"+ RUNTIME_CATALOGUE_RESOURCE_NAME +"'");
+ query.addCondition("$resource/Profile/Platform/Name/text() eq '"+ PLATFORM_CATALOGUE_NAME +"'");
+ query.addVariable("$prop", "$resource/Profile/AccessPoint/Properties/Property")
+ .addCondition("$prop/Name/text() eq '"+CKAN_IS_ROOT_MASTER+"'")
+ .addCondition("$prop/Value/text() eq 'true'");
+
+ logger.info("Performing query 1 with property '"+CKAN_IS_ROOT_MASTER+"': "+query);
+
+ DiscoveryClient client = clientFor(ServiceEndpoint.class);
+ List toReturn = client.submit(query);
+
+ logger.info("The query 1 returned "+toReturn.size()+ " ServiceEndpoint/s");
+
+ if(toReturn.size()==0){
+ logger.info("NO "+RUNTIME_CATALOGUE_RESOURCE_NAME+" having "+CKAN_IS_ROOT_MASTER+" property");
+ query = queryFor(ServiceEndpoint.class);
+ query.addCondition("$resource/Profile/Name/text() eq '"+ RUNTIME_CATALOGUE_RESOURCE_NAME +"'");
+ query.addCondition("$resource/Profile/Platform/Name/text() eq '"+ PLATFORM_CATALOGUE_NAME +"'");
+ logger.info("Performing query 2: "+query);
+ client = clientFor(ServiceEndpoint.class);
+ toReturn = client.submit(query);
+ logger.info("The query 2 returned "+toReturn.size()+ " ServiceEndpoint/s");
+ }
+
+ return toReturn;
+
+
+ }
+
+
+ /**
+ * Gets the catalogue url.
+ *
+ * @return the catalogue url
+ */
+ public static String getCatalogueUrl() {
+ String scope = ScopeProvider.instance.get();
+ logger.debug("Getting Catalogue URL for scope: "+scope +" read from ScopeProvider");
+ String catalogueURLForScope = cacheCkanDataCatalogue.get(scope);
+
+ if(catalogueURLForScope==null){
+ logger.debug("Catalogue URL not found in cache, loading from IS");
+
+ try{
+ logger.debug("Instancing again the scope provider with scope value: "+scope);
+ ScopeProvider.instance.set(scope);
+ DataCatalogueImpl utilCKAN = new DataCatalogueImpl(scope);
+ catalogueURLForScope = utilCKAN.getCatalogueUrl();
+ if(catalogueURLForScope==null)
+ throw new Exception("No cataluge url found in the scope: "+scope);
+
+ cacheCkanDataCatalogue.put(scope, catalogueURLForScope);
+ }catch(Exception e){
+ logger.error("Error on getting the catalogue url in the scope: "+scope, e);
+ }
+
+ }
+ logger.info("Returning Catalogue URL: "+catalogueURLForScope +" for the scope: "+scope);
+ return catalogueURLForScope;
+ }
+
+
+// /**
+// * The main method.
+// *
+// * @param args the arguments
+// */
+// public static void main(String[] args) {
+//
+// String scope = "/d4science.research-infrastructures.eu/gCubeApps/BiodiversityLab";
+// ScopeProvider.instance.set(scope);
+// try {
+// String catalogueURL = CatalogueServiceEndpointReader.getCatalogueUrl(scope);
+// System.out.println(catalogueURL);
+// }
+// catch (Exception e) {
+// // TODO Auto-generated catch block
+// e.printStackTrace();
+// }
+// }
+}
diff --git a/src/main/java/org/gcube/datatransfer/resolver/catalogue/resource/CkanCatalogueConfigurationsReader.java b/src/main/java/org/gcube/datatransfer/resolver/catalogue/resource/CkanCatalogueConfigurationsReader.java
new file mode 100644
index 0000000..3550386
--- /dev/null
+++ b/src/main/java/org/gcube/datatransfer/resolver/catalogue/resource/CkanCatalogueConfigurationsReader.java
@@ -0,0 +1,198 @@
+/**
+ *
+ */
+
+package org.gcube.datatransfer.resolver.catalogue.resource;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+import static org.gcube.resources.discovery.icclient.ICFactory.client;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.StringReader;
+import java.net.URI;
+import java.util.List;
+import java.util.Properties;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+
+import org.gcube.common.resources.gcore.utils.XPathHelper;
+import org.gcube.common.scope.api.ScopeProvider;
+import org.gcube.datatransfer.resolver.applicationprofile.ApplicationProfileNotFoundException;
+import org.gcube.datatransfer.resolver.catalogue.endpoint.CatalogueServiceEndpointReader;
+import org.gcube.resources.discovery.client.api.DiscoveryClient;
+import org.gcube.resources.discovery.client.queries.api.Query;
+import org.gcube.resources.discovery.client.queries.impl.QueryBox;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.w3c.dom.Node;
+import org.xml.sax.InputSource;
+
+import eu.trentorise.opendata.jackan.CkanClient;
+import eu.trentorise.opendata.jackan.exceptions.CkanException;
+import eu.trentorise.opendata.jackan.model.CkanDataset;
+
+
+/**
+ * The Class CkanCatalogueConfigurationsReader.
+ *
+ * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it
+ * Apr 20, 2018
+ */
+public class CkanCatalogueConfigurationsReader {
+
+ private static final Logger logger = LoggerFactory.getLogger(CkanCatalogueConfigurationsReader.class);
+ public final static String APPLICATION_PROFILE_NAME = "CkanPortlet";
+ private static final String DATACATALOGUECONFIGURATION_PROPERTIES = "datacatalogueconfiguration.properties";
+
+
+
+ /**
+ * Load catalogue end points.
+ *
+ * @return the gateway ckan catalogue reference
+ * @throws Exception the exception
+ */
+ public static GatewayCKANCatalogueReference loadCatalogueEndPoints() throws Exception{
+ GatewayCKANCatalogueReference links = new GatewayCKANCatalogueReference();
+ links.setScope(ScopeProvider.instance.get());
+
+ String privatePortletURL = getPortletUrlForScopeFromIS();
+ links.setPrivatePortletURL(privatePortletURL);
+
+ //Building public URL from private portlet URL
+ try{
+ URI toURL = new URI(privatePortletURL);
+ String publicURL = privatePortletURL.startsWith("https://")?"https://"+toURL.getHost():"http://"+toURL.getHost();
+ String realiveURLToPublicCtlg = getRelativeURLToCatalogue();
+ links.setPublicPortletURL(publicURL+"/"+realiveURLToPublicCtlg);
+ }catch(Exception e){
+ logger.warn("Erron on generating public catalogue URL from private URL: "+privatePortletURL, e);
+ }
+
+ //Getting the CKAN Portet URL for current scope
+ try{
+ String ckanPortletURL = CatalogueServiceEndpointReader.getCatalogueUrl();
+ links.setCkanURL(ckanPortletURL);
+ }catch(Exception e){
+ logger.warn("Erron on getting CKAN Porlet URL for scope: "+ScopeProvider.instance.get(), e);
+ }
+
+ return links;
+ }
+
+
+ /**
+ * Retrieve a ckan dataset given its id. The CkanClient is used, without api key. The result is null also when the dataset is private.
+ * @param datasetIdorName
+ * @param catalogueURL
+ * @return
+ * @throws Exception
+ */
+ public static CkanDataset getDataset(String datasetIdorName, String catalogueURL) throws Exception{
+ logger.info("Performing request GET CKAN dataset with id: " + datasetIdorName);
+
+ // checks
+ checkNotNull(datasetIdorName);
+ checkArgument(!datasetIdorName.isEmpty());
+ try{
+ CkanClient client = new CkanClient(catalogueURL);
+ return client.getDataset(datasetIdorName);
+ }catch(CkanException e){
+ logger.info("Getting dataset "+datasetIdorName+" thrown a CkanException, returning null");
+ return null;
+ }
+
+ }
+
+ /**
+ * Gets the portlet url for scope from is.
+ *
+ * @return the portlet url for scope from is
+ * @throws Exception the exception
+ */
+ private static String getPortletUrlForScopeFromIS() throws Exception {
+
+ String scope = ScopeProvider.instance.get();
+ logger.debug("Trying to fetch applicationProfile profile from the infrastructure for " +
+ APPLICATION_PROFILE_NAME + " scope: " + scope);
+ try {
+ Query q =
+ new QueryBox(
+ "for $profile in collection('/db/Profiles/GenericResource')//Resource " +
+ "where $profile/Profile/SecondaryType/string() eq 'ApplicationProfile' and $profile/Profile/Name/string() " +
+ " eq '" +
+ APPLICATION_PROFILE_NAME +
+ "'" +
+ "return $profile");
+ DiscoveryClient client = client();
+ List appProfile = client.submit(q);
+ if (appProfile == null || appProfile.size() == 0)
+ throw new ApplicationProfileNotFoundException(
+ "Your applicationProfile is not registered in the infrastructure");
+ else {
+ String elem = appProfile.get(0);
+ DocumentBuilder docBuilder =
+ DocumentBuilderFactory.newInstance().newDocumentBuilder();
+ Node node = docBuilder.parse(new InputSource(new StringReader(elem))).getDocumentElement();
+ XPathHelper helper = new XPathHelper(node);
+ List currValue = null;
+ currValue =
+ helper.evaluate("/Resource/Profile/Body/url/text()");
+ if (currValue != null && currValue.size() > 0) {
+ logger.debug("CKAN Portlet url found is " + currValue.get(0));
+ return currValue.get(0);
+ }
+ }
+ }
+ catch (Exception e) {
+ throw new Exception("Error while trying to fetch applicationProfile profile for name "+APPLICATION_PROFILE_NAME+"from the infrastructure, using scope: "+scope);
+ }
+
+ return null;
+ }
+
+ /**
+ * Gets the relative url to catalogue.
+ *
+ * @return the relative url to catalogue
+ */
+ private static String getRelativeURLToCatalogue(){
+ Properties prop = new Properties();
+ String relativeURLToCatalogue = null;
+ try {
+ InputStream in = CkanCatalogueConfigurationsReader.class.getResourceAsStream(DATACATALOGUECONFIGURATION_PROPERTIES);
+ // load a properties file
+ prop.load(in);
+ // get the property value
+ relativeURLToCatalogue = prop.getProperty("PORTAL_RELATIVE_URL_TO_CATALOGUE");
+
+ if(relativeURLToCatalogue==null || relativeURLToCatalogue.isEmpty())
+ return "catalogue";
+
+ } catch (IOException e) {
+ logger.error("An error occurred on read property file: "+DATACATALOGUECONFIGURATION_PROPERTIES, e);
+ }
+ return relativeURLToCatalogue;
+ }
+
+// /**
+// * The main method.
+// *
+// * @param args the arguments
+// */
+// public static void main(String[] args) {
+//
+// ScopeProvider.instance.set("/gcube/devsec/devVRE");
+// try {
+// GatewayCKANCatalogueReference links = CkanCatalogueConfigurationsReader.loadCatalogueEndPoints();
+// System.out.println(links);
+// }
+// catch (Exception e) {
+// // TODO Auto-generated catch block
+// e.printStackTrace();
+// }
+// }
+}
diff --git a/src/main/java/org/gcube/datatransfer/resolver/catalogue/resource/CkanPorltetApplicationProfile.java b/src/main/java/org/gcube/datatransfer/resolver/catalogue/resource/CkanPorltetApplicationProfile.java
index 6866368..97f1c9c 100644
--- a/src/main/java/org/gcube/datatransfer/resolver/catalogue/resource/CkanPorltetApplicationProfile.java
+++ b/src/main/java/org/gcube/datatransfer/resolver/catalogue/resource/CkanPorltetApplicationProfile.java
@@ -1,84 +1,84 @@
-/**
- *
- */
-
-package org.gcube.datatransfer.resolver.catalogue.resource;
-
-import static org.gcube.resources.discovery.icclient.ICFactory.client;
-
-import java.io.StringReader;
-import java.util.List;
-
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-
-import org.gcube.common.resources.gcore.utils.XPathHelper;
-import org.gcube.common.scope.api.ScopeProvider;
-import org.gcube.datatransfer.resolver.applicationprofile.ApplicationProfileNotFoundException;
-import org.gcube.resources.discovery.client.api.DiscoveryClient;
-import org.gcube.resources.discovery.client.queries.api.Query;
-import org.gcube.resources.discovery.client.queries.impl.QueryBox;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.w3c.dom.Node;
-import org.xml.sax.InputSource;
-
-
-/**
- * The Class CkanPorltetApplicationProfile.
- *
- * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it
- * May 16, 2017
- */
-public class CkanPorltetApplicationProfile {
-
- private static final Logger logger = LoggerFactory.getLogger(CkanPorltetApplicationProfile.class);
- private final static String APPLICATION_PROFILE_NAME = "CkanPortlet";
-
- /**
- * Gets the portlet url from infrastrucure.
- *
- * @return the portlet url from infrastrucure
- * @throws Exception the exception
- */
- public static String getPortletUrlFromInfrastrucure() throws Exception {
-
- String scope = ScopeProvider.instance.get();
- logger.debug("Trying to fetch applicationProfile profile from the infrastructure for " +
- APPLICATION_PROFILE_NAME + " scope: " + scope);
- try {
- Query q =
- new QueryBox(
- "for $profile in collection('/db/Profiles/GenericResource')//Resource " +
- "where $profile/Profile/SecondaryType/string() eq 'ApplicationProfile' and $profile/Profile/Name/string() " +
- " eq '" +
- APPLICATION_PROFILE_NAME +
- "'" +
- "return $profile");
- DiscoveryClient client = client();
- List appProfile = client.submit(q);
- if (appProfile == null || appProfile.size() == 0)
- throw new ApplicationProfileNotFoundException(
- "Your applicationProfile is not registered in the infrastructure");
- else {
- String elem = appProfile.get(0);
- DocumentBuilder docBuilder =
- DocumentBuilderFactory.newInstance().newDocumentBuilder();
- Node node = docBuilder.parse(new InputSource(new StringReader(elem))).getDocumentElement();
- XPathHelper helper = new XPathHelper(node);
- List currValue = null;
- currValue =
- helper.evaluate("/Resource/Profile/Body/url/text()");
- if (currValue != null && currValue.size() > 0) {
- logger.debug("CKAN Portlet url found is " + currValue.get(0));
- return currValue.get(0);
- }
- }
- }
- catch (Exception e) {
- throw new Exception("Error while trying to fetch applicationProfile profile for name "+APPLICATION_PROFILE_NAME+"from the infrastructure, using scope: "+scope);
- }
-
- return null;
- }
-}
+///**
+// *
+// */
+//
+//package org.gcube.datatransfer.resolver.catalogue.resource;
+//
+//import static org.gcube.resources.discovery.icclient.ICFactory.client;
+//
+//import java.io.StringReader;
+//import java.util.List;
+//
+//import javax.xml.parsers.DocumentBuilder;
+//import javax.xml.parsers.DocumentBuilderFactory;
+//
+//import org.gcube.common.resources.gcore.utils.XPathHelper;
+//import org.gcube.common.scope.api.ScopeProvider;
+//import org.gcube.datatransfer.resolver.applicationprofile.ApplicationProfileNotFoundException;
+//import org.gcube.resources.discovery.client.api.DiscoveryClient;
+//import org.gcube.resources.discovery.client.queries.api.Query;
+//import org.gcube.resources.discovery.client.queries.impl.QueryBox;
+//import org.slf4j.Logger;
+//import org.slf4j.LoggerFactory;
+//import org.w3c.dom.Node;
+//import org.xml.sax.InputSource;
+//
+//
+///**
+// * The Class CkanPorltetApplicationProfile.
+// *
+// * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it
+// * May 16, 2017
+// */
+//public class CkanPorltetApplicationProfile {
+//
+// private static final Logger logger = LoggerFactory.getLogger(CkanPorltetApplicationProfile.class);
+// private final static String APPLICATION_PROFILE_NAME = "CkanPortlet";
+//
+// /**
+// * Gets the portlet url from infrastrucure.
+// *
+// * @return the portlet url from infrastrucure
+// * @throws Exception the exception
+// */
+// public static String getPortletUrlFromInfrastrucure() throws Exception {
+//
+// String scope = ScopeProvider.instance.get();
+// logger.debug("Trying to fetch applicationProfile profile from the infrastructure for " +
+// APPLICATION_PROFILE_NAME + " scope: " + scope);
+// try {
+// Query q =
+// new QueryBox(
+// "for $profile in collection('/db/Profiles/GenericResource')//Resource " +
+// "where $profile/Profile/SecondaryType/string() eq 'ApplicationProfile' and $profile/Profile/Name/string() " +
+// " eq '" +
+// APPLICATION_PROFILE_NAME +
+// "'" +
+// "return $profile");
+// DiscoveryClient client = client();
+// List appProfile = client.submit(q);
+// if (appProfile == null || appProfile.size() == 0)
+// throw new ApplicationProfileNotFoundException(
+// "Your applicationProfile is not registered in the infrastructure");
+// else {
+// String elem = appProfile.get(0);
+// DocumentBuilder docBuilder =
+// DocumentBuilderFactory.newInstance().newDocumentBuilder();
+// Node node = docBuilder.parse(new InputSource(new StringReader(elem))).getDocumentElement();
+// XPathHelper helper = new XPathHelper(node);
+// List currValue = null;
+// currValue =
+// helper.evaluate("/Resource/Profile/Body/url/text()");
+// if (currValue != null && currValue.size() > 0) {
+// logger.debug("CKAN Portlet url found is " + currValue.get(0));
+// return currValue.get(0);
+// }
+// }
+// }
+// catch (Exception e) {
+// throw new Exception("Error while trying to fetch applicationProfile profile for name "+APPLICATION_PROFILE_NAME+"from the infrastructure, using scope: "+scope);
+// }
+//
+// return null;
+// }
+//}
diff --git a/src/main/java/org/gcube/datatransfer/resolver/catalogue/resource/GatewayCKANCatalogueReference.java b/src/main/java/org/gcube/datatransfer/resolver/catalogue/resource/GatewayCKANCatalogueReference.java
new file mode 100644
index 0000000..fe05f97
--- /dev/null
+++ b/src/main/java/org/gcube/datatransfer/resolver/catalogue/resource/GatewayCKANCatalogueReference.java
@@ -0,0 +1,140 @@
+/**
+ *
+ */
+package org.gcube.datatransfer.resolver.catalogue.resource;
+
+import java.io.Serializable;
+
+
+/**
+ *
+ * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it
+ * Nov 23, 2017
+ */
+public class GatewayCKANCatalogueReference implements Serializable{
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+
+ private String privatePortletURL;
+ private String publicPortletURL;
+ private String scope;
+ private String ckanURL;
+
+ /**
+ *
+ */
+ public GatewayCKANCatalogueReference() {
+
+ }
+
+ /**
+ * @param privatePortletURL
+ * @param publicPortletURL
+ * @param ckanURL
+ * @param scope
+ */
+ public GatewayCKANCatalogueReference(String scope,
+ String privatePortletURL, String publicPortletURL, String ckanURL) {
+ this.scope = scope;
+ this.privatePortletURL = privatePortletURL;
+ this.publicPortletURL = publicPortletURL;
+ this.ckanURL = ckanURL;
+ }
+
+
+ /**
+ * @return the ckanURL
+ */
+ public String getCkanURL() {
+
+ return ckanURL;
+ }
+
+
+ /**
+ * @param ckanURL the ckanURL to set
+ */
+ public void setCkanURL(String ckanURL) {
+
+ this.ckanURL = ckanURL;
+ }
+
+ /**
+ * @return the privatePortletURL
+ */
+ public String getPrivatePortletURL() {
+
+ return privatePortletURL;
+ }
+
+
+ /**
+ * @return the publicPortletURL
+ */
+ public String getPublicPortletURL() {
+
+ return publicPortletURL;
+ }
+
+
+ /**
+ * @return the scope
+ */
+ public String getScope() {
+
+ return scope;
+ }
+
+
+ /**
+ * @param privatePortletURL the privatePortletURL to set
+ */
+ public void setPrivatePortletURL(String privatePortletURL) {
+
+ this.privatePortletURL = privatePortletURL;
+ }
+
+
+ /**
+ * @param publicPortletURL the publicPortletURL to set
+ */
+ public void setPublicPortletURL(String publicPortletURL) {
+
+ this.publicPortletURL = publicPortletURL;
+ }
+
+
+ /**
+ * @param scope the scope to set
+ */
+ public void setScope(String scope) {
+
+ this.scope = scope;
+ }
+
+
+
+ /* (non-Javadoc)
+ * @see java.lang.Object#toString()
+ */
+ @Override
+ public String toString() {
+
+ StringBuilder builder = new StringBuilder();
+ builder.append("GatewayCatalogueReference [privatePortletURL=");
+ builder.append(privatePortletURL);
+ builder.append(", publicPortletURL=");
+ builder.append(publicPortletURL);
+ builder.append(", scope=");
+ builder.append(scope);
+ builder.append(", ckanURL=");
+ builder.append(ckanURL);
+ builder.append("]");
+ return builder.toString();
+ }
+
+
+}
diff --git a/src/main/java/org/gcube/datatransfer/resolver/catalogue/resource/datacatalogueconfiguration.properties b/src/main/java/org/gcube/datatransfer/resolver/catalogue/resource/datacatalogueconfiguration.properties
new file mode 100644
index 0000000..c4729dc
--- /dev/null
+++ b/src/main/java/org/gcube/datatransfer/resolver/catalogue/resource/datacatalogueconfiguration.properties
@@ -0,0 +1,7 @@
+# Property files
+#
+# author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it
+# created 11/2017
+#
+
+PORTAL_RELATIVE_URL_TO_CATALOGUE = catalogue
\ No newline at end of file