uri-resolver/src/main/java/org/gcube/datatransfer/resolver/gis/GeonetworkInstance.java

196 lines
5.0 KiB
Java

package org.gcube.datatransfer.resolver.gis;
import java.util.HashMap;
import java.util.Map;
import org.gcube.spatial.data.geonetwork.GeoNetwork;
import org.gcube.spatial.data.geonetwork.GeoNetworkPublisher;
import org.gcube.spatial.data.geonetwork.LoginLevel;
import org.gcube.spatial.data.geonetwork.configuration.Configuration;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
*
* @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it
* @Oct 7, 2014
*
*/
public class GeonetworkInstance {
private GeoNetworkPublisher geonetworkPublisher = null;
private String geoNetworkUrl;
private String geoNetworkUser = "";
private String geoNetworkPwd = "";
private String scope = "noscope";
public GeonetworkInstance(){} //FOR SERIALIZATION
private Logger logger = LoggerFactory.getLogger(GeonetworkInstance.class);
/**
*
* @param scope
*/
public GeonetworkInstance(String scope){
this.scope = scope;
}
/**
* Creates a new configuration for Gis publisher with parameters passed in input. By default executes the login as user passed in input on geonetwork instance
* @param scope
* @param geoNetworkUrl
* @param user
* @param pwd
* @param geoserverUrl
* @param geoserverUser
* @param geoserverPwd
* @param httpSession
* @throws Exception
*/
public GeonetworkInstance(String scope, String geoNetworkUrl, String user, String pwd, boolean authenticate) throws Exception {
logger.trace("Instancing GeonetworkInstance with specific parameters");
this.geoNetworkUser = user;
this.geoNetworkPwd = pwd;
this.geoNetworkUrl = geoNetworkUrl;
this.scope = scope;
try {
createInstance(authenticate);
} catch (Exception e) {
String message = "Sorry, an error occurred in instancing geonetwork";
logger.warn(message, e);
throw new Exception(message);
}
}
/**
*
* @param authenticate
* @throws Exception
*/
private void createInstance(boolean authenticate) throws Exception {
this.geonetworkPublisher = GeoNetwork.get(new GeonetworkConfiguration());
authenticateOnGeoenetwork(authenticate);
}
/**
*
* @param authenticate
* @throws Exception
*/
public void authenticateOnGeoenetwork(boolean authenticate) throws Exception {
logger.trace("authenticating.. geonetworkPublisher is null? "+(this.geonetworkPublisher==null));
if(geonetworkPublisher==null){
logger.trace("skipping authentication.. please createInstace");
return;
}
if (authenticate){
this.geonetworkPublisher.login(LoginLevel.DEFAULT);
logger.trace("authentication on geonetwork completed");
}
}
/**
* Creates a new configuration for Gis publisher with parameter passed in input. Executes the login on geonetwork instance if authenticate param is true, no otherwise
*
* @param geoNetworkUrl
* @param user
* @param pwd
* @throws Exception
*/
public GeonetworkInstance(String geoNetworkUrl, String user, String pwd, boolean authenticate) throws Exception {
try {
this.geoNetworkUrl = geoNetworkUrl;
this.geoNetworkUser = user;
this.geoNetworkPwd = pwd;
createInstance(authenticate);
} catch (Exception e) {
logger.error("Sorry, an error occurred in getting geonetwork instance",e);
throw new Exception("Sorry, an error occurred in getting geonetwork instance",e);
}
}
public class GeonetworkConfiguration implements Configuration {
public Map<LoginLevel,String> pwds=new HashMap<LoginLevel, String>();
public Map<LoginLevel,String> usrs=new HashMap<LoginLevel, String>();
@Override
public String getGeoNetworkEndpoint() {
logger.trace("geoNetworkUrl is: "+geoNetworkUrl);
return geoNetworkUrl;
}
@Override
public Map<LoginLevel, String> getGeoNetworkPasswords() {
pwds.put(LoginLevel.DEFAULT, geoNetworkPwd);
logger.trace("geoNetworkPwd is: "+geoNetworkPwd);
return pwds;
}
@Override
public Map<LoginLevel, String> getGeoNetworkUsers() {
usrs.put(LoginLevel.DEFAULT, geoNetworkUser);
logger.trace("geoNetworkUser is: "+geoNetworkUser);
return usrs;
}
@Override
public int getScopeGroup() {
return 2;
}
}
public GeoNetworkPublisher getGeonetworkPublisher() {
return geonetworkPublisher;
}
public String getGeoNetworkUrl() {
return geoNetworkUrl;
}
public String getGeoNetworkUser() {
return geoNetworkUser;
}
public String getGeoNetworkPwd() {
return geoNetworkPwd;
}
public String getScope() {
return scope;
}
public void setScope(String scope) {
this.scope = scope;
}
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append("GeonetworkInstance [geonetworkPublisher=");
builder.append(geonetworkPublisher);
builder.append(", geoNetworkUrl=");
builder.append(geoNetworkUrl);
builder.append(", geoNetworkUser=");
builder.append(geoNetworkUser);
builder.append(", geoNetworkPwd=");
builder.append(geoNetworkPwd);
builder.append(", scope=");
builder.append(scope);
builder.append(", logger=");
builder.append(logger);
builder.append("]");
return builder.toString();
}
}