ecological-engine-geospatia.../src/main/java/org/gcube/dataanalysis/geo/meta/features/FeaturesManager.java

142 lines
4.1 KiB
Java

package org.gcube.dataanalysis.geo.meta.features;
import it.geosolutions.geonetwork.util.GNSearchRequest;
import it.geosolutions.geonetwork.util.GNSearchResponse;
import org.gcube.common.scope.api.ScopeProvider;
import org.gcube.spatial.data.geonetwork.GeoNetwork;
import org.gcube.spatial.data.geonetwork.GeoNetworkReader;
import org.opengis.metadata.Metadata;
import org.opengis.metadata.citation.OnlineResource;
import org.opengis.metadata.distribution.DigitalTransferOptions;
public class FeaturesManager {
private String geonetworkUrl = "http://geoserver-dev.d4science-ii.research-infrastructures.eu/geonetwork/";
private String geonetworkUser = "admin";
private String geonetworkPwd = "admin";
private String scope = "/gcube/devsec";
public String getScope() {
return scope;
}
public void setScope(String scope) {
this.scope = scope;
}
private String searchInUrl(Metadata meta, String criterion) {
String link = null;
for (DigitalTransferOptions option : meta.getDistributionInfo().getTransferOptions()) {
for (OnlineResource resource : option.getOnLines()) {
String tlink = resource.getLinkage().toString();
if (tlink.toLowerCase().contains(criterion.toLowerCase())) {
link = tlink;
break;
}
}
}
if (link == null)
System.out.println("NO ONLINE LINK WAS FOUND ACCORDING TO THE CRITERION :" + criterion);
return link;
}
public String getWFSLink(Metadata meta) {
return searchInUrl(meta, "service=wfs");
}
// retrieves the wms link
public String getWMSLink(Metadata meta) {
return searchInUrl(meta, "service=wms");
}
public String getWCSLink(Metadata meta) {
return searchInUrl(meta, "service=wcs");
}
public String getOpenDapLink(Metadata meta) {
return searchInUrl(meta, "/dodsC");
}
public String getThreddsLink(Metadata meta) {
return searchInUrl(meta, "catalog.xml");
}
public String getLayerName(Metadata meta) {
String wmslink = getWMSLink(meta);
String layer = null;
String finder = "layers=";
if (wmslink != null) {
int idxfinder = wmslink.indexOf(finder);
if (idxfinder > 0) {
wmslink = wmslink.substring(idxfinder);
int andIdx = wmslink.indexOf("&");
if (andIdx < 0)
andIdx = wmslink.length();
layer = wmslink.substring(finder.length(), andIdx).trim();
}
}
return layer;
}
public boolean isThreddsFile(Metadata meta) {
return (getOpenDapLink(meta) != null);
}
public Metadata getGNInfobyTitle(String info) throws Exception {
ScopeProvider.instance.set(scope);
GeoNetworkReader gn = GeoNetwork.get();
// Form query object
gn.login();
GNSearchRequest req = new GNSearchRequest();
req.addParam(GNSearchRequest.Param.title, info);
GNSearchResponse resp = gn.query(req);
Metadata meta = null;
if (resp.getCount() != 0)
for (GNSearchResponse.GNMetadata metadata : resp) {
meta = gn.getById(metadata.getUUID());
break;
}
return meta;
}
public String getGeonetworkUrl() {
return geonetworkUrl;
}
public void setGeonetworkUrl(String geonetworkUrl) {
this.geonetworkUrl = geonetworkUrl;
}
public String getGeonetworkUser() {
return geonetworkUser;
}
public void setGeonetworkUser(String geonetworkUser) {
this.geonetworkUser = geonetworkUser;
}
public String getGeonetworkPwd() {
return geonetworkPwd;
}
public void setGeonetworkPwd(String geonetworkPwd) {
this.geonetworkPwd = geonetworkPwd;
}
public static void main(String args[]) throws Exception {
// String title = "temperature (04091217ruc.nc)";
// String title = "Bathymetry";
String title = "FAO aquatic species distribution map of Melanogrammus aeglefinus";
FeaturesManager fm = new FeaturesManager();
Metadata meta = fm.getGNInfobyTitle(title);
System.out.println("is file? " + fm.isThreddsFile(meta));
System.out.println("opendap: " + fm.getOpenDapLink(meta));
System.out.println("wcs:" + fm.getWCSLink(meta));
System.out.println("wms:" + fm.getWMSLink(meta));
System.out.println("thredds:" + fm.getThreddsLink(meta));
}
}