290 lines
8.7 KiB
Java
290 lines
8.7 KiB
Java
package org.acme;
|
|
|
|
import static java.lang.String.format;
|
|
import static org.gcube.resources.discovery.icclient.ICFactory.client;
|
|
import static org.gcube.resources.discovery.icclient.ICFactory.clientFor;
|
|
import static org.gcube.resources.discovery.icclient.ICFactory.queryFor;
|
|
|
|
import java.io.StringReader;
|
|
import java.net.URI;
|
|
import java.util.List;
|
|
|
|
import javax.xml.bind.annotation.XmlElement;
|
|
import javax.xml.bind.annotation.XmlElementRef;
|
|
import javax.xml.bind.annotation.XmlRootElement;
|
|
|
|
import org.gcube.common.authorization.library.provider.SecurityTokenProvider;
|
|
import org.gcube.common.resources.gcore.GCoreEndpoint;
|
|
import org.gcube.common.resources.gcore.GenericResource;
|
|
import org.gcube.common.resources.gcore.HostingNode;
|
|
import org.gcube.common.resources.gcore.Resource;
|
|
import org.gcube.common.resources.gcore.Resources;
|
|
import org.gcube.common.resources.gcore.ServiceEndpoint;
|
|
import org.gcube.common.resources.gcore.ServiceEndpoint.AccessPoint;
|
|
import org.gcube.common.resources.gcore.ServiceInstance;
|
|
import org.gcube.common.resources.gcore.Software;
|
|
import org.gcube.common.scope.api.ScopeProvider;
|
|
import org.gcube.resources.discovery.client.api.DiscoveryClient;
|
|
import org.gcube.resources.discovery.client.api.ResultParser;
|
|
import org.gcube.resources.discovery.client.queries.api.Query;
|
|
import org.gcube.resources.discovery.client.queries.api.SimpleQuery;
|
|
import org.gcube.resources.discovery.client.queries.impl.XQuery;
|
|
import org.gcube.resources.discovery.icclient.ICFactory;
|
|
import org.junit.BeforeClass;
|
|
import org.junit.Test;
|
|
|
|
public class APIClient {
|
|
|
|
@BeforeClass
|
|
public static void setup() {
|
|
|
|
ScopeProvider.instance.set("/gcube/devNext");
|
|
}
|
|
|
|
|
|
@Test
|
|
public void allServiceEndpoints() {
|
|
|
|
|
|
//pick a predefined query
|
|
Query query = queryFor(ServiceEndpoint.class);
|
|
|
|
//pick a client that knows how to parse those resources
|
|
DiscoveryClient<ServiceEndpoint> client = clientFor(ServiceEndpoint.class);
|
|
|
|
//execute query in current scope
|
|
List<ServiceEndpoint> resources = client.submit(query);
|
|
|
|
System.out.println(resources);
|
|
|
|
}
|
|
|
|
@Test
|
|
public void testThredds() throws Exception{
|
|
//ScopeProvider.instance.set("/gcube/devNext/NextNext");
|
|
SecurityTokenProvider.instance.set("52b59669-ccde-46d2-a4da-108b9e941f7c-98187548");
|
|
SimpleQuery query = queryFor(GCoreEndpoint.class);
|
|
query.addCondition("$resource/Profile/ServiceClass/string() eq 'DataAccess' ");
|
|
query.setResult("$resource/Profile/ServiceName/text()");
|
|
DiscoveryClient<String> client = client();
|
|
List<String> resources = client.submit(query);
|
|
if (resources==null || resources.size()==0){
|
|
throw new Exception("No resource named StatisticalManagerAlgorithm available in scope ");
|
|
}
|
|
|
|
System.out.println("found resources "+resources.size());
|
|
|
|
}
|
|
|
|
@Test
|
|
public void someServiceEndpoints() {
|
|
|
|
|
|
XQuery query = queryFor(ServiceEndpoint.class);
|
|
query.addCondition("$resource/Profile/Category/text() eq 'Database'");
|
|
query.setResult("$resource/Profile/AccessPoint/Interface/Endpoint/text()");
|
|
|
|
DiscoveryClient<String> client = client();
|
|
|
|
List<String> resources = client.submit(query);
|
|
|
|
System.out.println(resources);
|
|
|
|
}
|
|
|
|
@Test
|
|
public void someServiceEndpointAddresses() {
|
|
|
|
|
|
XQuery query = queryFor(ServiceEndpoint.class);
|
|
query.addCondition("$resource/Profile/Category/text() eq 'Database'");
|
|
query.setResult("$resource/Profile/AccessPoint/Interface/Endpoint/text()");
|
|
|
|
DiscoveryClient<String> client = client();
|
|
|
|
List<String> addresses = client.submit(query);
|
|
|
|
System.out.println(addresses);
|
|
|
|
}
|
|
|
|
@Test
|
|
public void someGCoreServiceEndpointAddresses() {
|
|
|
|
|
|
XQuery query = queryFor(GCoreEndpoint.class);
|
|
query.addCondition("$resource/Profile/ServiceClass/text() eq 'DataAccess'");
|
|
query.addCondition("$resource/Profile/ServiceName/text() eq 'tree-manager-service'");
|
|
query.addVariable("$entry","$resource/Profile/AccessPoint/RunningInstanceInterfaces/Endpoint");
|
|
query.addCondition("$entry/@EntryName/string() eq 'gcube/data/tm/binder'");
|
|
query.setResult("$entry/text()");
|
|
|
|
DiscoveryClient<String> client = client();
|
|
|
|
List<String> addresses = client.submit(query);
|
|
|
|
System.out.println(addresses);
|
|
|
|
}
|
|
|
|
@Test
|
|
public void someCustomServiceEndpointResults() {
|
|
|
|
|
|
XQuery query = queryFor(ServiceEndpoint.class);
|
|
query.addCondition("$resource/Profile/Category/text() eq 'Database'");
|
|
query.setResult("<perfect>" +
|
|
"<id>{$resource/ID/text()}</id>" +
|
|
"{$resource/Profile/AccessPoint}" +
|
|
"</perfect>");
|
|
|
|
DiscoveryClient<PerfectResult> client = clientFor(PerfectResult.class);
|
|
|
|
List<PerfectResult> results = client.submit(query);
|
|
|
|
for (PerfectResult result : results) {
|
|
System.out.println(result.id+":"+result.ap);
|
|
}
|
|
|
|
}
|
|
|
|
@XmlRootElement(name="perfect")
|
|
private static class PerfectResult {
|
|
|
|
@XmlElement(name="id")
|
|
String id;
|
|
|
|
@XmlElementRef
|
|
AccessPoint ap;
|
|
}
|
|
|
|
|
|
@Test
|
|
public void getResources() {
|
|
|
|
XQuery query = ICFactory.queryFor(Resource.class);
|
|
query.addCondition(String.format("$resource/ID/text() eq '%s'","bdaccb35-7f27-45a6-8ca9-11d467cb9233"));
|
|
query.setResult("<Ret>{$resource/Type}{$resource}</Ret>");
|
|
DiscoveryClient<? extends Resource> client = ICFactory.clientWith(new ResourceParser());
|
|
List<? extends Resource> resources = client.submit(query);
|
|
resources.forEach(res-> System.out.println(res.id()));
|
|
|
|
}
|
|
|
|
public static class ResourceParser implements ResultParser<Resource>{
|
|
|
|
private enum ResourceType {
|
|
GenericResource(GenericResource.class),
|
|
RuntimeResource(ServiceEndpoint.class),
|
|
RunningInstance(GCoreEndpoint.class),
|
|
Service(Software.class),
|
|
GHN(HostingNode.class);
|
|
|
|
private Class<? extends Resource> managerClass;
|
|
|
|
ResourceType(Class<? extends Resource> managerClass) {
|
|
this.managerClass = managerClass;
|
|
}
|
|
|
|
public Class<? extends Resource> getManagerClass(){
|
|
return this.managerClass;
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public Resource parse(String res) throws Exception {
|
|
String type = res.replaceAll("<Ret>\\s*<Type>([^<]*).*", "$1");
|
|
String resource = res.replaceAll(".*(<Resource.*>.*</Resource>).*", "$1");
|
|
Class<? extends Resource> classForUnmrshalling= ResourceType.valueOf(type).getManagerClass();
|
|
return Resources.unmarshal(classForUnmrshalling, new StringReader(resource));
|
|
}
|
|
|
|
}
|
|
|
|
@Test
|
|
public void someServiceEndpointsAccessData() {
|
|
|
|
|
|
XQuery query = queryFor(ServiceEndpoint.class);
|
|
query.addCondition("$resource/Profile/Category/text() eq 'Database'")
|
|
.setResult("$resource/Profile/AccessPoint");
|
|
|
|
DiscoveryClient<AccessPoint> client = clientFor(AccessPoint.class);
|
|
|
|
List<AccessPoint> accesspoints = client.submit(query);
|
|
|
|
for (AccessPoint point : accesspoints) {
|
|
System.out.println(point.name()+":"+point.address());
|
|
}
|
|
|
|
}
|
|
|
|
@Test
|
|
public void someServiceInstances() {
|
|
|
|
|
|
|
|
XQuery query = queryFor(ServiceInstance.class);
|
|
query.addCondition("$resource/Data/gcube:ServiceClass/text() eq 'DataAccess'").
|
|
addCondition("$resource/Data/gcube:ServiceName/text() eq 'tree-manager-service'");
|
|
|
|
DiscoveryClient<ServiceInstance> client = clientFor(ServiceInstance.class);
|
|
|
|
List<ServiceInstance> props = client.submit(query);
|
|
|
|
System.out.println(props);
|
|
}
|
|
|
|
@Test
|
|
public void someServiceInstanceReferences() {
|
|
|
|
|
|
XQuery query = queryFor(ServiceInstance.class);
|
|
query.addCondition("$resource/Data/gcube:ServiceClass/text() eq 'DataAccess'").
|
|
addCondition("$resource/Data/gcube:ServiceName/text() eq 'tree-manager-service'")
|
|
.addCondition(format("$resource/Source/text()[ends-with(.,'%1s')]","gcube/data/tm/binder"));
|
|
|
|
DiscoveryClient<ServiceInstance> client = clientFor(ServiceInstance.class);
|
|
|
|
List<ServiceInstance> refs = client.submit(query);
|
|
|
|
System.out.println(refs);
|
|
|
|
}
|
|
|
|
@Test
|
|
public void someServiceInstanceProperties() {
|
|
|
|
|
|
XQuery query = queryFor(ServiceInstance.class);
|
|
query.addNamespace("tm",URI.create("http://gcube-system.org/namespaces/data/tm")).
|
|
addCondition("$resource/Data/tm:Plugin/name/text() eq 'species-tree-plugin'");
|
|
|
|
DiscoveryClient<ServiceInstance> client = clientFor(ServiceInstance.class);
|
|
|
|
List<ServiceInstance> props = client.submit(query);
|
|
|
|
System.out.println(props);
|
|
|
|
}
|
|
|
|
@Test
|
|
public void someServiceEndpointsProperties() {
|
|
|
|
|
|
XQuery query = queryFor(ServiceEndpoint.class);
|
|
query.addVariable("$prop", "$resource/Profile/AccessPoint/Properties/Property").
|
|
addCondition("$prop/Name/text() eq 'dbname'").
|
|
addCondition("$prop/Value/text() eq 'timeseries'").
|
|
setResult("$resource/Profile/AccessPoint/Interface/Endpoint/text()");
|
|
|
|
DiscoveryClient<String> client = client();
|
|
|
|
List<String> props = client.submit(query);
|
|
|
|
System.out.println(props);
|
|
|
|
}
|
|
|
|
}
|