Difference between revisions of "GIS Interface"
(→Interaction with the Spatial Data Infrastructure) |
(→Using the library) |
||
Line 49: | Line 49: | ||
=Using the library= | =Using the library= | ||
− | Functionalities of this library can be exploited using ''org.gcube.spatial.data.gis.GISInterface'' instance methods. | + | ==Instantiating the library== |
+ | Functionalities of this library can be exploited using ''org.gcube.spatial.data.gis.GISInterface'' instance methods. At instantiation time, the caller decides the GeoServer pool that should be used by the library, either by declaring one or by using default behavior. This is done by calling the static method ''public static GISInterface get(AbstractGeoServerDescriptor... toUsePool)''. | ||
+ | Please note that default behavior should be preferred in order to correctly interact with the '''SDI''. | ||
+ | |||
+ | ===Default Pool behavior=== | ||
+ | The default behavior of the library is to gather and cache SDI configuration from the IS. This is obtained by simply calling the static method ''public static GISInterface get(AbstractGeoServerDescriptor... toUsePool)'' with no arguments. | ||
+ | See[Configuration] for cache configuration details. | ||
+ | |||
+ | ===Explicit Pool behavior=== | ||
+ | In same cases, like test runs, caller might want to explicit the GeoServer pool in order to force the library to interact with a specific set of GeoServer instances. This is done by calling the static method ''public static GISInterface get(AbstractGeoServerDescriptor... toUsePool)'' with the set of wanted GeoServer instances. The library will avoid interacting with the IS in order to get instances, ensuring the solely use of declared pool. | ||
+ | |||
+ | ===AbstractGeoServerDescriptor Class=== | ||
==Read API== | ==Read API== |
Revision as of 17:50, 17 February 2017
The GIS-Interface is a java library which exposes methods to access / modify and publish spatial data and related metadata. The library is designed to rely on GeoNetwork and GeoServer registered in the infrastructure.
The library relies on org.gcube.spatial-data.geonetwork (see GeoNetwork library) to interact with geonetwork. Interaction with GeoServer REST interface is based on functionalities exposed by geoserver-manager, developed by GeoSolutions under MIT License.
The library
Module description
The library is a maven artifact with the following coordinates :
<groupId>org.gcube.spatial.data</groupId> <artifactId>gis-interface</artifactId>
It relies on the GeoNetwork library for the interaction with GeoNetwork servers, and exploits functionalities implemented by geosolution's library :
<groupId>it.geosolutions</groupId> <artifactId>geoserver-manager</artifactId> <version>1.5.2</version>
Key Features
- Transparent handling of multiple GeoServer instances;
The library is designed to operate on a pool of GeoServer instances in order to provide load-balancing.
- Automatic handling of SDI configuration and resources
By interacting with both IS and registered GeoServer instances, the library is capable of managing this resources transparently to the caller application.
- Contextual publication of metadata along with data publication
Data publication is always performed along metadata publication, enriching such metadata with generated information (i.e. online resources)
Interaction with the Spatial Data Infrastructure
The library relies on the interfaces inside the package it.geosolutions.geoserver.rest to interact with the REST interface of a given GeoServer instance. While GET methods are offered to clients just by letting them access an instance of GeoServerRESTReader class, PUT (for creating, modifying and deleting purposes) methods are redefined and offered by the class GISInterface. This lets the library coordinate the modification of both data/metadata thus granting consistency inside the SDI.
GeoServer Pool
The library operates over a pool of GeoServer instances in order to:
- balance load on instances
- ensure coherence on SDI configuration
The pool can be either declared by the caller or automatically retrieved from the IS using caller's thread identity. See Instantiating the library for more information.
Using the library
Instantiating the library
Functionalities of this library can be exploited using org.gcube.spatial.data.gis.GISInterface instance methods. At instantiation time, the caller decides the GeoServer pool that should be used by the library, either by declaring one or by using default behavior. This is done by calling the static method public static GISInterface get(AbstractGeoServerDescriptor... toUsePool).
Please note that default behavior should be preferred in order to correctly interact with the 'SDI.
Default Pool behavior
The default behavior of the library is to gather and cache SDI configuration from the IS. This is obtained by simply calling the static method public static GISInterface get(AbstractGeoServerDescriptor... toUsePool) with no arguments. See[Configuration] for cache configuration details.
Explicit Pool behavior
In same cases, like test runs, caller might want to explicit the GeoServer pool in order to force the library to interact with a specific set of GeoServer instances. This is done by calling the static method public static GISInterface get(AbstractGeoServerDescriptor... toUsePool) with the set of wanted GeoServer instances. The library will avoid interacting with the IS in order to get instances, ensuring the solely use of declared pool.
AbstractGeoServerDescriptor Class
Read API
GeoServerRESTReader
To access and read data from a GeoServer instance, one needs to get an instance of it.geosolutions.geoserver.rest.GeoServerRESTReader in one of the following ways :
//Use the most unload GeoServer from infrastructure, after refreshing cached list GISInterface.get().getGeoServerReader(ResearchMethod.MOSTUNLOAD, true); //Get Access to a particular GeoServer instance GISInterface.get().getGeoServerReader("url","user","password"); //Get Access to a particular GeoServer instance without authentication GISInterface.get().getGeoServerReader("url");
GeoServerDescriptor
Information on the available GeoServer instances in the current scope are mapped in GeoServerDescriptor beans that can be obtained with the following methods :
//Get full ordered set of available GeoServers GISInterface.get().getGeoServerDescriptorSet(boolean forceRefresh) //Get current selected GeoServer GISInterface.get().getCurrentGeoServerDescriptor()
Publish API
To modify both data and metadata registered in the SDI, one should use the instance methods exposed by the class GISInterface. This grants the client a complete interaction with both GeoServer and GeoNetwork servers, assuring consistency between data and metadata. The following code shows how to publish a layer from a table already created on a postgis database. Please note that the Database must already be registered onto the GeoServer instance as a store inside the workspace the user is willing to publish the layer into.
import it.geosolutions.geoserver.rest.encoder.GSLayerEncoder; import it.geosolutions.geoserver.rest.encoder.feature.GSFeatureTypeEncoder; ... String scope="..."; String toPublishTable="..."; String datastore="..."; String defaultStyle="..."; String workspace="..."; //Setup geoserver publishing parameters GSFeatureTypeEncoder fte=new GSFeatureTypeEncoder(); fte.setEnabled(true); fte.setLatLonBoundingBox(-180.0, -90.0, 180.0, 90.0, crs); fte.setName(toPublishTable); fte.setNativeCRS(crs); GSLayerEncoder le=new GSLayerEncoder(); le.setDefaultStyle(defaultStyle); le.setEnabled(true); //GCubeISOMetadata class belongs to org.gcube.spatial.data.geonetwork. Please refer to metadata generation in this page for further information //Generate metadata for the layer to be published ScopeProvider.instance.set(scope); GcubeISOMetadata meta=new GcubeISOMetadata(); meta.set.. ... GISInterface gis=GISInterface.get(); PublishResponse resp=gis.publishDBTable(workspace, datastore, fte, le, meta.getMetadata(), "datasets", "_none_", LoginLevel.DEFAULT);
GS Parameters
We decided not to override some parameter classes like GSLayerEncoder and GSFeatureTypeEncoder. So please refer to the geoserver-manager library's official documentation.
Metadata generation and publishing
Publishing of GIS metadata is made using org.gcube.spatial.data.geonetwork library. The library exposes facilities to help developers define layers metadata compliant with gCube SDI policies, especially the class org.gcube.spatial.data.geonetwork.iso.GcubeISOMetadata. Please refer to GeoNetwork library for further details.
Report classes
The results, status and contingent error messages of modifying operations are wrapped into the classes org.gcube.spatial.data.gis.model.report.PublishResponse and org.gcube.spatial.data.gis.model.report.DeleteReponse, both extending org.gcube.spatial.data.gis.model.report.Report class. Please refere to their javadoc pages for further information.