diff --git a/pom.xml b/pom.xml
index b7ce851..7502af2 100644
--- a/pom.xml
+++ b/pom.xml
@@ -20,7 +20,10 @@
distro
+ 1.7
+ 1.8
+
diff --git a/src/main/java/org/gcube/datatransfer/resolver/gis/GeonetworkInstance.java b/src/main/java/org/gcube/datatransfer/resolver/gis/GeonetworkInstance.java
index 2b23c7f..c22f649 100644
--- a/src/main/java/org/gcube/datatransfer/resolver/gis/GeonetworkInstance.java
+++ b/src/main/java/org/gcube/datatransfer/resolver/gis/GeonetworkInstance.java
@@ -59,7 +59,7 @@ public class GeonetworkInstance {
public GeonetworkInstance(boolean authenticate, LoginLevel level) throws Exception {
try {
this.level = level;
- createInstanceGeonetworkPublisher(authenticate);
+ createInstanceGeonetworkPublisher(authenticate, level);
} 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);
@@ -86,7 +86,7 @@ public class GeonetworkInstance {
try {
ScopeProvider.instance.set(scope);
logger.info("setting scope "+scope);
- createInstanceGeonetworkPublisher(authenticate);
+ createInstanceGeonetworkPublisher(authenticate, level);
if(this.type!=null){
Configuration config = geonetworkPublisher.getConfiguration();
this.account=config.getScopeConfiguration().getAccounts().get(type);
@@ -115,11 +115,11 @@ public class GeonetworkInstance {
* @param type the type
* @throws Exception the exception
*/
- private void createInstanceGeonetworkPublisher(boolean authenticate) throws Exception {
+ private void createInstanceGeonetworkPublisher(boolean authenticate, LoginLevel level) throws Exception {
logger.debug("creating new geonetworkPublisher..");
this.geonetworkPublisher = GeoNetwork.get();
if(authenticate && this.level!=null)
- authenticateOnGeoenetwork(this.level);
+ authenticateOnGeoenetwork(level);
}
/**
diff --git a/src/main/java/org/gcube/datatransfer/resolver/gis/geonetwork/GeonetworkResolver.java b/src/main/java/org/gcube/datatransfer/resolver/gis/geonetwork/GeonetworkResolver.java
index f8fc8fa..033f597 100644
--- a/src/main/java/org/gcube/datatransfer/resolver/gis/geonetwork/GeonetworkResolver.java
+++ b/src/main/java/org/gcube/datatransfer/resolver/gis/geonetwork/GeonetworkResolver.java
@@ -24,12 +24,10 @@ import javax.servlet.http.HttpServletResponse;
import org.apache.commons.io.IOUtils;
import org.gcube.common.scope.api.ScopeProvider;
import org.gcube.datatransfer.resolver.UriResolverRewriteFilter;
-import org.gcube.datatransfer.resolver.gis.GeoRuntimeReader;
-import org.gcube.datatransfer.resolver.gis.GeoRuntimeReader.GEO_SERVICE;
import org.gcube.datatransfer.resolver.gis.GeonetworkAccessParameter;
import org.gcube.datatransfer.resolver.gis.GeonetworkInstance;
import org.gcube.datatransfer.resolver.gis.GeonetworkServiceInterface;
-import org.gcube.datatransfer.resolver.gis.entity.ServerParameters;
+import org.gcube.datatransfer.resolver.gis.exception.GeonetworkInstanceException;
import org.gcube.datatransfer.resolver.gis.exception.IllegalArgumentException;
import org.gcube.datatransfer.resolver.gis.geonetwork.HTTPCallsUtils.HttpResponse;
import org.gcube.datatransfer.resolver.gis.util.GetResponseRecordFilter;
@@ -79,7 +77,7 @@ public class GeonetworkResolver extends HttpServlet{
/** The logger. */
private static final Logger logger = LoggerFactory.getLogger(GeonetworkResolver.class);
- protected Map cacheGNServerParams; //A cache: scope - geonetwork parameters
+ protected Map cacheGNInstances; //A cache: scope - GeonetworkInstance
private Timer timer;
@@ -100,7 +98,7 @@ public class GeonetworkResolver extends HttpServlet{
@Override
public void run() {
logger.info("Resetting Geonetwork configuratiors cache...");
- resetCacheServerParameters();
+ resetCacheGeonetworkInstances();
}
}, CACHE_RESET_DELAY, CACHE_RESET_TIME);
}
@@ -124,7 +122,7 @@ public class GeonetworkResolver extends HttpServlet{
}
if(resetCache!=null && Boolean.parseBoolean(resetCache)){
- resetCacheServerParameters();
+ resetCacheGeonetworkInstances();
}
if(resetScope!=null && Boolean.parseBoolean(resetScope)){
@@ -135,8 +133,9 @@ public class GeonetworkResolver extends HttpServlet{
try {
// ServerParameters geonetworkParams = getGeonetworkCachedServerParameters(scopeValue);
- GeonetworkServiceInterface gntwAccess = new GeonetworkAccessParameter(scopeValue);
- GeonetworkInstance gnInstance = gntwAccess.getGeonetworkInstance();
+ GeonetworkInstance gnInstance = getGeonetworkInstanceForScope(scopeValue);
+// GeonetworkServiceInterface gntwAccess = new GeonetworkAccessParameter(scopeValue);
+// GeonetworkInstance gnInstance = gntwAccess.getGeonetworkInstance();
HTTPCallsUtils httpUtils = new HTTPCallsUtils();
Configuration config = gnInstance.getGeonetworkPublisher().getConfiguration();
String geonetworkUrl = config.getGeoNetworkEndpoint();
@@ -180,11 +179,6 @@ public class GeonetworkResolver extends HttpServlet{
sendError(resp, response.getStatus(), "Sorry, an error occurred on resolving geonetwork request with scope "+scopeValue);
}
- } catch (IllegalArgumentException e){
- logger.error("IllegalArgumentException:", e);
- sendError(resp, HttpServletResponse.SC_BAD_REQUEST, "Illegal argument to carry out the request!");
- return;
-
} catch (Exception e) {
logger.error("Exception:", e);
String error = "Sorry, an error occurred on resolving geonetwork request with scope "+scopeValue+". Please, contact support!";
@@ -400,40 +394,51 @@ public class GeonetworkResolver extends HttpServlet{
}
}
+
+
/**
- * Gets the geonetwork cached server parameters.
+ * Gets the geonetwork instance for scope.
*
* @param scope the scope
- * @return the geonetwork cached server parameters
+ * @return the geonetwork instance for scope
* @throws Exception the exception
*/
- protected ServerParameters getGeonetworkCachedServerParameters(String scope) throws Exception{
+ protected GeonetworkInstance getGeonetworkInstanceForScope(String scope) throws Exception{
- if(cacheGNServerParams==null)
- resetCacheServerParameters();
+ if(cacheGNInstances==null)
+ resetCacheGeonetworkInstances();
- logger.info("Tentative for recovering geonetwork server parameters from cache with scope: "+scope);
- ServerParameters serverParam = cacheGNServerParams.get(scope);
+ logger.info("Attempt to get geonetwork instance from GeonetworkInstance cache for scope: "+scope);
+ GeonetworkInstance geoInstance = cacheGNInstances.get(scope);
- if(serverParam==null || serverParam.getPassword()!=null){
- logger.info("Cache having null Geonetwork server parameters or password 'null', reading from IS..");
- GeoRuntimeReader reader = new GeoRuntimeReader();
+ if(geoInstance==null){
+ logger.info("Cache having null GeonetworkInstance for scope "+scope+", reading by Geonetwork library...");
try {
- serverParam = reader.retrieveGisParameters(scope, GEO_SERVICE.GEONETWORK);
- cacheGNServerParams.put(scope, serverParam);
- logger.info("Updated Cache for Geonetwork server parameters! Scope "+scope+" linking "+serverParam);
+ geoInstance = discoveryGeonetworkInstance(scope);
+ cacheGNInstances.put(scope, geoInstance);
+ logger.info("Updated GeonetworkInstance Cache adding couple: Scope "+scope+" - GeonetworkInstance "+geoInstance);
} catch (Exception e) {
- logger.error("An error occurred on reading application profile to "+GEO_SERVICE.GEONETWORK, e);
- throw new Exception("Sorry, An error occurred on reading configuration to "+GEO_SERVICE.GEONETWORK);
+ logger.error("An error occurred on reading GeonetworkInstance for scope "+scope, e);
+ throw new Exception("Sorry, An error occurred on reading GeonetworkInstance for scope "+scope);
}
}else
- logger.info("Cache gis server param is not null using it");
+ logger.info("GeonetworkInstance cache for scope: "+scope+" is not null using it: "+geoInstance);
- logger.info("returning geonetworkParams "+serverParam);
-
- return serverParam;
+ return geoInstance;
}
+ /**
+ * Discovery geonetwork instance.
+ *
+ * @param scope the scope
+ * @return the geonetwork instance
+ * @throws GeonetworkInstanceException the geonetwork instance exception
+ */
+ private GeonetworkInstance discoveryGeonetworkInstance(String scope) throws GeonetworkInstanceException{
+
+ GeonetworkAccessParameter gntwAccess = new GeonetworkAccessParameter(scope);
+ return gntwAccess.getGeonetworkInstance(true, null);
+ }
/**
@@ -442,8 +447,8 @@ public class GeonetworkResolver extends HttpServlet{
* @param scope the scope
*/
private void resetCacheServerParameterForScope(String scope){
- if(cacheGNServerParams!=null && cacheGNServerParams.get(scope)!=null){
- cacheGNServerParams.remove(scope);
+ if(cacheGNInstances!=null && cacheGNInstances.get(scope)!=null){
+ cacheGNInstances.remove(scope);
logger.info("Reset of "+scope+" in Cache Geonetwork server params perfomed!");
}else
logger.info("Reset of "+scope+" in Cache Geonetwork skipped, scope not exists!");
@@ -451,11 +456,11 @@ public class GeonetworkResolver extends HttpServlet{
/**
- * Reset cache server parameters.
+ * Reset cache geonetwork instances.
*/
- private void resetCacheServerParameters(){
- cacheGNServerParams = new HashMap();
- logger.info("Reset of Cache Geonetwork server params perfomed!");
+ private void resetCacheGeonetworkInstances(){
+ cacheGNInstances = new HashMap();
+ logger.info("Reset of Cache GeonetworkInstance perfomed!");
}
/**