Difference between revisions of "ExistClient"

From Gcube Wiki
Jump to: navigation, search
(Implementation Overview)
(Usage Examples)
Line 76: Line 76:
 
</pre>
 
</pre>
  
 +
Predefined query example:
  
 +
<pre>
  
 +
GCUBEGenericQuery query = client.getQuery("GCUBEResourceQuery");
 +
for (XMLResult result : client.execute(query,scope)) logger.debug(result.evaluate("/ID/text()"));//displays a singleton list
 +
//a bit of customisation goes a long way whilst keeping the previous abstractions
 +
query.addParameters(new QueryParameter("RESULT","$result/Type"));
 +
for (XMLResult result : client.execute(query, scope)) logger.debug(result.evaluate("/Type/text()"));
 +
 +
//specialise to GCUBE Running Instances (NB. queries can be composed incrementally, possibly by different objects in different methods)
 +
query.addParameters(new QueryParameter("TYPE",GCUBERunningInstance.TYPE));
 +
for (XMLResult result : client.execute(query,scope)) logger.debug(result.evaluate("/Type/text()"));
 +
//introduce a filter (NB. parameters can be added in batches)
 +
query.addParameters(new QueryParameter("TYPE",GCUBERunningInstance.TYPE), //ovverride previous setting
 +
    new QueryParameter("FILTER","$result/Profile/ServiceClass/string() eq 'Annotation'"),
 +
    new QueryParameter ("RESULT", "$result/Profile/Description")); //any Xquery condition on $result would do
 +
for (XMLResult result : client.execute(query,scope)) logger.debug(result.evaluate("//Description")); //displays a singleton list
 +
 +
</pre>
  
 
You can use a predefined ISQuery Object as well:
 
You can use a predefined ISQuery Object as well:

Revision as of 17:51, 23 May 2008

Introduction

The ExistClient is a Java library that implements the ISClient interface provided by the gCoreFramework. This library allow the developer to execute queries on the Information System.


Implementation Overview

The ExistClient implements all the query defined in the ISClient Interface:


Queries over GCUBEResource:

  • GCUBECollectionQuery
  • GCUBECSInstanceQuery
  • GCUBECSQuery
  • GCUBEExternalRIQuery
  • GCUBEGenericResourceQuery
  • GCUBEGHNQuery
  • GCUBEMCollectionQuery
  • GCUBERIQuery
  • GCUBEServiceQuery
  • GCUBETPQuery
  • GCUBEVREQuery

This queries returns a List of specialized GCUBEResource.


Queries over GCUBEWSResource:

  • WSResourceQuery

This query returns a List of RPDocument. The RPDocument object allows developer to retrieve the informations on WSResourceProperties or to exceute XPath .


The ExistClient also offers the possibility to execute custom queries: GCUBEGenericQuery. GCUBEGenericQuery allows the developer to set the query expression to execute and to use a predefined set of queries which he should set some parameters on listed below:

  • GCUBEResourceQuery
  • GCUBEWSResourceQuery
  • RIEndpoint
  • RIOnGHN
  • RISpecificData
  • GHNIDFromHostName
  • InternalCollections
  • UserCollectionIDsFromSchemaURI
  • MCollectionIDForCollection
  • MCollectionFormatsForCollection
  • MCollectionIDFromCollectionIDAndRole
  • MCollectionIDFromFormatLanguage
  • MCollectionIDFromFormatLanguage
  • MCollectionIDFromName
  • MCollectionIDFromSchemaURI


This kind of queries returns a List of XMLResult. The XMLResult object allows the developer to explore the contained document with XPaths.

Usage Examples

The ISclient reference implementation makes use of Xquery Technology to query over the underneath Exist database. Client/services can prepare a custom xQuery over the DB and use the Generic Query object to excecute it and going through the result with an XPath:



GCUBEGenericQuery query = client.getQuery(GCUBEGenericQuery.class);
query.setExpression("for $Profile in collection(\"/db/Profiles\")//Document/Data/child::*[local-name()='Profile']/Resource return $Profile/UniqueID");
List<XMLResult> result =client.execute(query, scope);
for (String resultItem :result ) {
System.out.println(resultItem.evaluate("an XPath ... ")); 
System.out.println(resultItem.toString());
}

Predefined query example:


GCUBEGenericQuery query = client.getQuery("GCUBEResourceQuery");
for (XMLResult result : client.execute(query,scope)) logger.debug(result.evaluate("/ID/text()"));//displays a singleton list
//a bit of customisation goes a long way whilst keeping the previous abstractions
query.addParameters(new QueryParameter("RESULT","$result/Type"));
for (XMLResult result : client.execute(query, scope)) logger.debug(result.evaluate("/Type/text()"));

//specialise to GCUBE Running Instances (NB. queries can be composed incrementally, possibly by different objects in different methods)
query.addParameters(new QueryParameter("TYPE",GCUBERunningInstance.TYPE)); 
for (XMLResult result : client.execute(query,scope)) logger.debug(result.evaluate("/Type/text()"));
//introduce a filter (NB. parameters can be added in batches) 
query.addParameters(new QueryParameter("TYPE",GCUBERunningInstance.TYPE), //ovverride previous setting
     new QueryParameter("FILTER","$result/Profile/ServiceClass/string() eq 'Annotation'"),
     new QueryParameter ("RESULT", "$result/Profile/Description")); //any Xquery condition on $result would do
for (XMLResult result : client.execute(query,scope)) logger.debug(result.evaluate("//Description")); //displays a singleton list

You can use a predefined ISQuery Object as well:


GCUBEWSResourceEPRFromRPValuesAndNamespaceQuery query = client.getQuery(GCUBEWSResourceEPRFromRPValuesAndNamespaceQuery.class); 
GCUBEWSProperty property = new GCUBEWSProperty("IndexTypeName","index_type_string_string");

GCUBEWSProperty property2 = new GCUBEWSProperty("IndexID","999ba610-e9fb-11dc-b51b-84732c1e88f2");

ArrayList <GCUBEWSProperty> properties = new ArrayList();
properties.add(property);
properties.add(property2);
query.setPropertiesValuesAndNamespace(properties, "http://gcube-system.org/namespaces/index/ForwardIndexManagementService");
				
List<EndpointReferenceType> result = client.execute(query, scope);
				
for (EndpointReferenceType resultItem :result ) {
System.out.println(resultItem.toString());
	
}