diff --git a/pom.xml b/pom.xml index 2c73844..9054b78 100644 --- a/pom.xml +++ b/pom.xml @@ -27,6 +27,8 @@ ${project.basedir}/src/main/webapp/WEB-INF ${project.basedir}/distro + 1.8 + 1.8 @@ -104,7 +106,7 @@ org.projectlombok lombok - 1.14.8 + 1.18.2 diff --git a/src/main/java/org/gcube/informationsystem/icproxy/resources/ServiceEndpointResource.java b/src/main/java/org/gcube/informationsystem/icproxy/resources/ServiceEndpointResource.java index fb20b48..618d587 100644 --- a/src/main/java/org/gcube/informationsystem/icproxy/resources/ServiceEndpointResource.java +++ b/src/main/java/org/gcube/informationsystem/icproxy/resources/ServiceEndpointResource.java @@ -5,6 +5,7 @@ import static org.gcube.resources.discovery.icclient.ICFactory.clientFor; import static org.gcube.resources.discovery.icclient.ICFactory.queryFor; import java.util.List; +import java.util.Objects; import javax.validation.constraints.NotNull; import javax.ws.rs.GET; @@ -15,10 +16,11 @@ import javax.ws.rs.core.MediaType; import lombok.extern.slf4j.Slf4j; -import org.gcube.common.resources.gcore.ServiceEndpoint; +import org.gcube.common.resources.gcore.*; 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.gcube.resources.discovery.client.queries.impl.XQuery; @Slf4j @Path("ServiceEndpoint") @@ -51,6 +53,39 @@ public class ServiceEndpointResource { return endpoints; } + @GET + @Path("/{category}/{name}/{ap}") + @Produces(MediaType.TEXT_XML) + public String retrieve(@NotNull @PathParam("name") String resourceName, + @NotNull @PathParam("category") String resourceCategory, + @NotNull @PathParam("ap") String accessPoint) { + log.info("ServiceEndpoint called with category {}, name {} and accessPoint {} in scope {}",resourceCategory, resourceName, accessPoint, ScopeProvider.instance.get()); +// SimpleQuery query = getQuery(resourceName, resourceCategory); +// query.setResult("$resource/Profile/AccessPoint/Interface/Endpoint[@EntryName='"+accessPoint+"'"); +//// DiscoveryClient client = clientFor(ServiceEndpoint.class); +// DiscoveryClient client = client(); +//// List endpoints = client.submit(query); +// log.debug("retrieved endpoint is "+endpoints); +// if (Objects.nonNull(endpoints)) +// return endpoints.get(0).toString(); +// else +// log.warn("endpoint not found with following coordinates: {} {} and accesspoint: {}", resourceCategory, resourceName,accessPoint); +// return null; + + + XQuery query=queryFor(ServiceEndpoint.class); + query.addCondition(String.format("$resource/Profile/Name/text() eq '%s'",resourceName)); + query.addCondition(String.format("$resource/Profile/Category/text() eq '%s'",resourceCategory)); + query.setResult("$resource/Profile/AccessPoint/Interface/Endpoint[@EntryName='"+accessPoint+"']/text()"); + DiscoveryClient client = client(); + List accessList= client.submit(query); + if (Objects.nonNull(accessList)) + return accessList.get(0).toString(); + else + log.warn("endpoint not found with following coordinates: {} {} and accesspoint: {}", resourceCategory, resourceName,accessPoint); + return null; + } + @GET @Path("/{category}/{name}/Result/{result:([^$\\?]+)}") @Produces(MediaType.TEXT_XML) @@ -90,5 +125,21 @@ public class ServiceEndpointResource { query.addCondition(String.format("$resource/Profile/Category/text() eq '%s'",resourceCategory)); return query; } - + + public static XQuery getSpecificXQuery(T resource) { + XQuery query = null; + if(resource.type().toString().equalsIgnoreCase("RuntimeResource")){ + query = queryFor(ServiceEndpoint.class); + }else if(resource.type().toString().equalsIgnoreCase("GenericResource")){ + query = queryFor(GenericResource.class); + }else if(resource.type().toString().equalsIgnoreCase("RunningInstance")){ + query = queryFor(GCoreEndpoint.class); + }else if(resource.type().toString().equalsIgnoreCase("GHN")){ + query = queryFor(HostingNode.class); + }else{ + throw new RuntimeException("The following resource type is not managed: "+resource); + } + return query; + } + } diff --git a/src/test/java/org/gcube/informationsystem/icproxy/TestCall.java b/src/test/java/org/gcube/informationsystem/icproxy/TestCall.java index bf68e34..71f64bf 100644 --- a/src/test/java/org/gcube/informationsystem/icproxy/TestCall.java +++ b/src/test/java/org/gcube/informationsystem/icproxy/TestCall.java @@ -2,6 +2,8 @@ package org.gcube.informationsystem.icproxy; import javax.ws.rs.core.Application; +import org.gcube.common.authorization.library.provider.SecurityTokenProvider; +import org.gcube.common.scope.api.ScopeProvider; import org.gcube.informationsystem.icproxy.resources.GCoreEndpointResource; import org.gcube.informationsystem.icproxy.resources.GenericResourceResource; import org.gcube.informationsystem.icproxy.resources.HostingNodeResource; @@ -16,6 +18,7 @@ public class TestCall extends JerseyTest{ @Override protected Application configure() { return new ResourceConfig(ICResource.class,GCoreEndpointResource.class, ServiceEndpointResource.class, HostingNodeResource.class, GenericResourceResource.class); + } @Test @@ -34,8 +37,8 @@ public class TestCall extends JerseyTest{ @Test public void gcoreEndpointWithResult() { - - + + final String ret = target("GCoreEndpoint").path("DataAnalysis") .queryParam("result","/Profile/AccessPoint/RunningInstanceInterfaces//Endpoint[@EntryName/string() eq \"querymanager\"]") .queryParam("scope", "/gcube/devsec").request().get(String.class); @@ -44,12 +47,24 @@ public class TestCall extends JerseyTest{ @Test public void serviceEndpoint() { + ScopeProvider.instance.set("/gcube/devsec"); + //SecurityTokenProvider.instance.set("/gcube/devsec"); final String ret = target("ServiceEndpoint").path("BiodiversityRepository").path("CatalogueOfLife").queryParam("scope", "/gcube/devsec").request().get(String.class); System.out.println(ret); } + + + @Test + public void serviceEndpointAP() { + ScopeProvider.instance.set("/gcube/devsec"); + //SecurityTokenProvider.instance.set("/gcube/devsec"); + final String ret = target("ServiceEndpoint").path("Storage").path("StorageManager").path("server1").queryParam("scope", "/gcube/devsec").request().get(String.class); + System.out.println(ret); + } @Test public void hostingNode() { + ScopeProvider.instance.set("/gcube/devsec"); final String ret = target("HostingNode").queryParam("scope", "/gcube/devsec").request().get(String.class); System.out.println(ret); } @@ -62,7 +77,8 @@ public class TestCall extends JerseyTest{ @Test public void getById() { - final String ret = target("/").path("92ee1020-5604-11e3-8182-e7053f61b8fe").queryParam("scope", "/gcube/devsec").request().get(String.class); + ScopeProvider.instance.set("/gcube/devsec"); + final String ret = target("/").path("aab08cf4-ed27-406c-b4a2-89888300976f").queryParam("scope", "/gcube/devsec").request().get(String.class); System.out.println(ret); }