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