/** * */ 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; } }