diff --git a/distro/changelog.xml b/distro/changelog.xml
index 233af22..4fc7bd6 100644
--- a/distro/changelog.xml
+++ b/distro/changelog.xml
@@ -42,4 +42,9 @@
[Feature #4000] URI Resolver - must support HEAD request
+
+ [Feature #4207] ri Resolver upgrade: it must support new Geonetwork Manager
+
+
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index af53ebe..0d3361f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -8,7 +8,7 @@
org.gcube.data.transfer
uri-resolver
- 1.6.0-SNAPSHOT
+ 1.7.0-SNAPSHOT
war
The URI Resolver is an HTTP URI resolver implemented as an HTTP servlet which gives access trough HTTP to different protocols URIs.
@@ -64,7 +64,7 @@
org.gcube.spatial.data
geonetwork
- [2.0.0-SNAPSHOT, 3.0.0-SNAPSHOT)
+ [3.0.0-SNAPSHOT, 4.0.0-SNAPSHOT)
compile
@@ -97,11 +97,6 @@
-
- log4j
- log4j
- 1.2.16
-
org.slf4j
slf4j-log4j12
diff --git a/src/main/java/org/gcube/datatransfer/resolver/gis/GeonetowrkAccessParameter.java b/src/main/java/org/gcube/datatransfer/resolver/gis/GeonetowrkAccessParameter.java
deleted file mode 100644
index a020cce..0000000
--- a/src/main/java/org/gcube/datatransfer/resolver/gis/GeonetowrkAccessParameter.java
+++ /dev/null
@@ -1,61 +0,0 @@
-package org.gcube.datatransfer.resolver.gis;
-
-import org.gcube.datatransfer.resolver.gis.entity.ServerParameters;
-import org.gcube.datatransfer.resolver.gis.exception.GeonetworkInstanceException;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- *
- * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it
- * @Apr 29, 2013
- *
- */
-public class GeonetowrkAccessParameter implements GeonetworkServiceInterface{
-
-
- protected static Logger logger = LoggerFactory.getLogger(GeonetowrkAccessParameter.class);
-
- protected GeonetworkInstance geonetworkInstance;
-
- protected String scope;
-
- protected ServerParameters serverParam;
-
-
- /**
- * @param serverParam
- */
- public GeonetowrkAccessParameter(String scope, ServerParameters serverParam) {
- this.scope = scope;
- this.serverParam = serverParam;
- }
-
- /**
- * @param geonetworkInstance
- * @return
- */
- public GeonetworkInstance getGeonetworkInstance(boolean authenticate) throws GeonetworkInstanceException {
- return instanceGeonetwork(authenticate);
- }
-
- private GeonetworkInstance instanceGeonetwork(boolean authenticate) throws GeonetworkInstanceException{
-
- if(scope == null || scope.isEmpty())
- throw new GeonetworkInstanceException("Scope is null");
-
- if(serverParam.getUrl() == null || serverParam.getUrl().isEmpty())
- throw new GeonetworkInstanceException("Geonetwork url is null or empty");
-
- if(geonetworkInstance==null)
- geonetworkInstance = new GeonetworkInstance(scope, serverParam.getUrl(), serverParam.getUser(), serverParam.getPassword(), authenticate);
-
- return geonetworkInstance;
-
-
- }
-
- public String getScope() {
- return scope;
- }
-}
diff --git a/src/main/java/org/gcube/datatransfer/resolver/gis/GeonetworkAccessParameter.java b/src/main/java/org/gcube/datatransfer/resolver/gis/GeonetworkAccessParameter.java
new file mode 100644
index 0000000..2ed127c
--- /dev/null
+++ b/src/main/java/org/gcube/datatransfer/resolver/gis/GeonetworkAccessParameter.java
@@ -0,0 +1,135 @@
+package org.gcube.datatransfer.resolver.gis;
+
+import org.gcube.datatransfer.resolver.gis.entity.ServerParameters;
+import org.gcube.datatransfer.resolver.gis.exception.GeonetworkInstanceException;
+import org.gcube.spatial.data.geonetwork.LoginLevel;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+/**
+ * The Class GeonetworkAccessParameter.
+ *
+ * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it
+ * Jun 9, 2016
+ */
+public class GeonetworkAccessParameter implements GeonetworkServiceInterface{
+
+
+ protected static Logger logger = LoggerFactory.getLogger(GeonetworkAccessParameter.class);
+
+ protected GeonetworkInstance geonetworkInstance;
+
+ protected String scope;
+
+ protected ServerParameters serverParam;
+
+ /**
+ * The Enum GeonetworkLoginLevel.
+ *
+ * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it
+ * Jun 9, 2016
+ */
+ public static enum GeonetworkLoginLevel {
+ DEFAULT,
+ SCOPE,
+ PRIVATE,
+ CKAN,
+ ADMIN
+ }
+
+ /**
+ * Instantiates a new geonetowrk access parameter.
+ *
+ * @param scope the scope
+ * @param serverParam the server param
+ */
+ public GeonetworkAccessParameter(String scope, ServerParameters serverParam) {
+ this.scope = scope;
+ this.serverParam = serverParam;
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.gcube.datatransfer.resolver.gis.GeonetworkServiceInterface#getGeonetworkInstance(boolean, org.gcube.datatransfer.resolver.gis.GeonetowrkAccessParameter.GeonetworkLoginLevel)
+ */
+ public GeonetworkInstance getGeonetworkInstance(boolean authenticate, GeonetworkLoginLevel loginLevel) throws GeonetworkInstanceException {
+ return instanceGeonetwork(authenticate, loginLevel);
+ }
+
+ /**
+ * Instance geonetwork.
+ *
+ * @param authenticate the authenticate
+ * @param loginLevel the login level
+ * @return the geonetwork instance
+ * @throws GeonetworkInstanceException the geonetwork instance exception
+ */
+ private GeonetworkInstance instanceGeonetwork(boolean authenticate, GeonetworkLoginLevel loginLevel) throws GeonetworkInstanceException{
+
+ if(scope == null || scope.isEmpty())
+ throw new GeonetworkInstanceException("Scope is null");
+
+ if(serverParam.getUrl() == null || serverParam.getUrl().isEmpty())
+ throw new GeonetworkInstanceException("Geonetwork url is null or empty");
+
+ LoginLevel level = toLoginLevel(loginLevel);
+ if(geonetworkInstance==null)
+ geonetworkInstance = new GeonetworkInstance(scope, authenticate, level);
+
+ return geonetworkInstance;
+
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.gcube.datatransfer.resolver.gis.GeonetworkServiceInterface#getGeonetworkInstance()
+ */
+ @Override
+ public GeonetworkInstance getGeonetworkInstance()
+ throws Exception {
+
+ if(scope == null || scope.isEmpty())
+ throw new GeonetworkInstanceException("Scope is null");
+
+ if(serverParam.getUrl() == null || serverParam.getUrl().isEmpty())
+ throw new GeonetworkInstanceException("Geonetwork url is null or empty");
+
+ if(geonetworkInstance==null)
+ geonetworkInstance = new GeonetworkInstance(scope, false, null);
+
+ return geonetworkInstance;
+ }
+
+ /* (non-Javadoc)
+ * @see org.gcube.datatransfer.resolver.gis.GeonetworkServiceInterface#getScope()
+ */
+ public String getScope() {
+ return scope;
+ }
+
+
+ /**
+ * To login level.
+ *
+ * @param loginLevel the login level
+ * @return the login level
+ */
+ public static final LoginLevel toLoginLevel(GeonetworkLoginLevel loginLevel){
+
+ switch (loginLevel) {
+ case ADMIN:
+ return LoginLevel.ADMIN;
+ case CKAN:
+ return LoginLevel.CKAN;
+ case DEFAULT:
+ return LoginLevel.DEFAULT;
+ case PRIVATE:
+ return LoginLevel.PRIVATE;
+ case SCOPE:
+ return LoginLevel.SCOPE;
+ }
+ return null;
+
+ }
+}
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 5deb930..5bfc41a 100644
--- a/src/main/java/org/gcube/datatransfer/resolver/gis/GeonetworkInstance.java
+++ b/src/main/java/org/gcube/datatransfer/resolver/gis/GeonetworkInstance.java
@@ -1,200 +1,164 @@
package org.gcube.datatransfer.resolver.gis;
-import java.util.HashMap;
-import java.util.Map;
-
+import org.gcube.common.scope.api.ScopeProvider;
import org.gcube.datatransfer.resolver.gis.exception.GeonetworkInstanceException;
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.AuthorizationException;
-import org.gcube.spatial.data.geonetwork.configuration.Configuration;
+import org.gcube.spatial.data.geonetwork.model.faults.AuthorizationException;
+import org.gcube.spatial.data.geonetwork.model.faults.MissingConfigurationException;
+import org.gcube.spatial.data.geonetwork.model.faults.MissingServiceEndpointException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+
+
/**
- *
- * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it
- * @Oct 7, 2014
+ * The Class GeonetworkInstance.
*
+ * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it
+ * Jun 9, 2016
*/
public class GeonetworkInstance {
private GeoNetworkPublisher geonetworkPublisher = null;
- private String geoNetworkUrl;
- private String geoNetworkUser = "";
- private String geoNetworkPwd = "";
-
- private String scope = "noscope";
-
+
+ /**
+ * Instantiates a new geonetwork instance.
+ */
public GeonetworkInstance(){} //FOR SERIALIZATION
-
+
private Logger logger = LoggerFactory.getLogger(GeonetworkInstance.class);
+ private String scope;
/**
- *
- * @param scope
+ * Instantiates a new geonetwork instance.
+ *
+ * @param scope the scope
+ * @throws GeonetworkInstanceException the geonetwork instance exception
*/
- public GeonetworkInstance(String scope){
- this.scope = scope;
+ public GeonetworkInstance(String scope) throws GeonetworkInstanceException{
+ this(scope, false, null);
}
-
- /**
- * 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 GeonetworkInstanceException {
- 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 GeonetworkInstanceException(message);
- }
- }
-
- /**
- *
- * @param authenticate
- * @throws Exception
- */
- private void createInstance(boolean authenticate) throws GeonetworkInstanceException {
- this.geonetworkPublisher = GeoNetwork.get(new GeonetworkConfiguration());
- authenticateOnGeoenetwork(authenticate);
- }
-
- /**
- *
- * @param authenticate
- * @throws Exception
- */
- public void authenticateOnGeoenetwork(boolean authenticate) throws GeonetworkInstanceException {
-
- logger.trace("authenticating.. geonetworkPublisher is null? "+(this.geonetworkPublisher==null));
- if(geonetworkPublisher==null){
- logger.trace("skipping authentication.. please createInstace");
- return;
- }
-
- if (authenticate){
- try {
- this.geonetworkPublisher.login(LoginLevel.DEFAULT);
- } catch (AuthorizationException e) {
- logger.error("authentication on geonetwork failed ",e);
- throw new GeonetworkInstanceException("Geonetwork authentication failed");
- }
- 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
+ * Use scope found in ScopeProvider
+ * @param authenticate the authenticate
+ * @param level the level
+ * @throws Exception the exception
*/
- public GeonetworkInstance(String geoNetworkUrl, String user, String pwd, boolean authenticate) throws Exception {
+ public GeonetworkInstance(boolean authenticate, LoginLevel level) throws Exception {
try {
- this.geoNetworkUrl = geoNetworkUrl;
- this.geoNetworkUser = user;
- this.geoNetworkPwd = pwd;
-
- createInstance(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);
}
}
-
- public class GeonetworkConfiguration implements Configuration {
-
- public Map pwds=new HashMap();
- public Map usrs=new HashMap();
-
- @Override
- public String getGeoNetworkEndpoint() {
- logger.trace("geoNetworkUrl is: "+geoNetworkUrl);
- return geoNetworkUrl;
- }
-
- @Override
- public Map getGeoNetworkPasswords() {
- pwds.put(LoginLevel.DEFAULT, geoNetworkPwd);
- logger.trace("geoNetworkPwd is: "+geoNetworkPwd);
- return pwds;
- }
-
- @Override
- public Map getGeoNetworkUsers() {
- usrs.put(LoginLevel.DEFAULT, geoNetworkUser);
- logger.trace("geoNetworkUser is: "+geoNetworkUser);
- return usrs;
- }
-
- @Override
- public int getScopeGroup() {
- return 2;
+ /**
+ * Instantiates a new geonetwork instance.
+ * set the scope provider to input scope
+ * @param scope the scope
+ * @param authenticate the authenticate
+ * @param level the level
+ * @throws GeonetworkInstanceException the geonetwork instance exception
+ */
+ public GeonetworkInstance(String scope, boolean authenticate, LoginLevel level) throws GeonetworkInstanceException {
+ logger.trace("Instancing GeonetworkInstance with specific parameters");
+ this.scope = scope;
+ try {
+ ScopeProvider.instance.set(scope);
+ logger.info("setting scope "+scope);
+ createInstanceGeonetworkPublisher(authenticate, level);
+ } catch (Exception e) {
+ String message = "Sorry, an error occurred in instancing geonetwork";
+ logger.warn(message, e);
+ throw new GeonetworkInstanceException(message);
+ }finally{
+ logger.info("resetting scope");
+ ScopeProvider.instance.reset();
}
}
+ /**
+ * Creates the instance geonetwork publisher.
+ *
+ * @param authenticate the authenticate
+ * @param level the level
+ * @throws Exception the exception
+ */
+ private void createInstanceGeonetworkPublisher(boolean authenticate, LoginLevel level) throws Exception {
+ this.geonetworkPublisher = GeoNetwork.get();
+ if(authenticate && level!=null)
+ authenticateOnGeoenetwork(level);
+ }
+
+ /**
+ * Authenticate on geoenetwork.
+ *
+ * @param level the level
+ * @throws GeonetworkInstanceException the geonetwork instance exception
+ */
+ private void authenticateOnGeoenetwork(LoginLevel level) throws GeonetworkInstanceException {
+
+ logger.trace("authenticating.. geonetworkPublisher is null? "+(this.geonetworkPublisher==null));
+ if(geonetworkPublisher==null){
+ logger.trace("skipping authentication.. please createInstace");
+ return;
+ }
+
+ try {
+ try {
+ this.geonetworkPublisher.login(level);
+ }
+ catch (MissingConfigurationException | MissingServiceEndpointException e) {
+ logger.error("MissingConfigurationException | MissingServiceEndpointException exception ", e);
+ throw new GeonetworkInstanceException("Geonetwork authentication failed");
+ }
+ } catch (AuthorizationException e) {
+ logger.error("AuthorizationException ",e);
+ throw new GeonetworkInstanceException("Geonetwork authentication failed");
+ }
+ logger.trace("authentication on geonetwork completed");
+
+ }
+
+
+
+
+ /**
+ * Gets the geonetwork publisher.
+ *
+ * @return the geonetwork publisher
+ */
public GeoNetworkPublisher getGeonetworkPublisher() {
return geonetworkPublisher;
}
- public String getGeoNetworkUrl() {
- return geoNetworkUrl;
- }
-
- public String getGeoNetworkUser() {
- return geoNetworkUser;
- }
-
- public String getGeoNetworkPwd() {
- return geoNetworkPwd;
- }
+ /**
+ * Gets the scope.
+ *
+ * @return the scope
+ */
public String getScope() {
+
return scope;
}
- public void setScope(String scope) {
- this.scope = scope;
- }
-
+ /* (non-Javadoc)
+ * @see java.lang.Object#toString()
+ */
@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();
}
diff --git a/src/main/java/org/gcube/datatransfer/resolver/gis/GeonetworkServiceInterface.java b/src/main/java/org/gcube/datatransfer/resolver/gis/GeonetworkServiceInterface.java
index 89af619..2c5a9aa 100644
--- a/src/main/java/org/gcube/datatransfer/resolver/gis/GeonetworkServiceInterface.java
+++ b/src/main/java/org/gcube/datatransfer/resolver/gis/GeonetworkServiceInterface.java
@@ -3,6 +3,8 @@
*/
package org.gcube.datatransfer.resolver.gis;
+import org.gcube.datatransfer.resolver.gis.GeonetworkAccessParameter.GeonetworkLoginLevel;
+
/**
* The Interface GeonetworkServiceInterface.
*
@@ -15,10 +17,21 @@ public interface GeonetworkServiceInterface {
* Gets the geonetwork instance.
*
* @param authenticate the authenticate
+ * @param loginLevel the login level
* @return the geonetwork instance
* @throws Exception the exception
*/
- public GeonetworkInstance getGeonetworkInstance(boolean authenticate) throws Exception;
+ public GeonetworkInstance getGeonetworkInstance(boolean authenticate, GeonetworkLoginLevel loginLevel) throws Exception;
+
+
+
+ /**
+ * Gets the geonetwork instance.
+ *
+ * @return the geonetwork instance
+ * @throws Exception the exception
+ */
+ public GeonetworkInstance getGeonetworkInstance() throws Exception;
/**
* Gets the scope.
diff --git a/src/main/java/org/gcube/datatransfer/resolver/gis/GisResolver.java b/src/main/java/org/gcube/datatransfer/resolver/gis/GisResolver.java
index 3df4097..24564e6 100644
--- a/src/main/java/org/gcube/datatransfer/resolver/gis/GisResolver.java
+++ b/src/main/java/org/gcube/datatransfer/resolver/gis/GisResolver.java
@@ -21,6 +21,7 @@ import org.apache.commons.io.IOUtils;
import org.gcube.datatransfer.resolver.applicationprofile.ApplicationProfileReader;
import org.gcube.datatransfer.resolver.applicationprofile.ScopeUtil;
import org.gcube.datatransfer.resolver.gis.GeoRuntimeReader.GEO_SERVICE;
+import org.gcube.datatransfer.resolver.gis.GeonetworkAccessParameter.GeonetworkLoginLevel;
import org.gcube.datatransfer.resolver.gis.entity.ServerParameters;
import org.gcube.datatransfer.resolver.gis.exception.GeonetworkInstanceException;
import org.gcube.datatransfer.resolver.gis.exception.IllegalArgumentException;
@@ -280,8 +281,8 @@ public class GisResolver extends HttpServlet{
protected String getLayerWmsRequest(String scope, String gisUUID, ServerParameters geonetworkParams) throws Exception{
try {
- GeonetworkServiceInterface gntwAccess = new GeonetowrkAccessParameter(scope, geonetworkParams);
- return MetadataConverter.getWMSOnLineResource(gntwAccess.getGeonetworkInstance(true), gisUUID);
+ GeonetworkServiceInterface gntwAccess = new GeonetworkAccessParameter(scope, geonetworkParams);
+ return MetadataConverter.getWMSOnLineResource(gntwAccess.getGeonetworkInstance(true, GeonetworkLoginLevel.DEFAULT), gisUUID);
}catch (GeonetworkInstanceException e){
logger.error("An error occurred when instancing geonetowrk gis layer with UUID "+gisUUID, e);
throw new IllegalArgumentException("Sorry, An error occurred when instancing geonetwork with UUID: "+gisUUID);
diff --git a/src/main/java/org/gcube/datatransfer/resolver/gis/exception/GeonetworkInstanceException.java b/src/main/java/org/gcube/datatransfer/resolver/gis/exception/GeonetworkInstanceException.java
index 6baf726..20d0353 100644
--- a/src/main/java/org/gcube/datatransfer/resolver/gis/exception/GeonetworkInstanceException.java
+++ b/src/main/java/org/gcube/datatransfer/resolver/gis/exception/GeonetworkInstanceException.java
@@ -1,9 +1,9 @@
/**
- *
+ *
*/
package org.gcube.datatransfer.resolver.gis.exception;
-import org.gcube.spatial.data.geonetwork.configuration.AuthorizationException;
+import org.gcube.spatial.data.geonetwork.model.faults.AuthorizationException;
/**
@@ -22,7 +22,7 @@ public class GeonetworkInstanceException extends Exception {
public GeonetworkInstanceException() {
super();
}
-
+
/**
* Instantiates a new geonetwork instance exception.
*
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 41ab8f8..22be5cb 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
@@ -26,14 +26,17 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.io.IOUtils;
+import org.gcube.common.scope.api.ScopeProvider;
import org.gcube.datatransfer.resolver.gis.GeoRuntimeReader;
import org.gcube.datatransfer.resolver.gis.GeoRuntimeReader.GEO_SERVICE;
-import org.gcube.datatransfer.resolver.gis.GeonetowrkAccessParameter;
+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.MetadataConverter;
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.spatial.data.geonetwork.configuration.Configuration;
+import org.gcube.spatial.data.geonetwork.model.Account;
+import org.gcube.spatial.data.geonetwork.model.Account.Type;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -249,6 +252,17 @@ public class GeonetworkResolver extends HttpServlet{
try {
ServerParameters geonetworkParams = getGeonetworkCachedServerParameters(scope);
+
+ GeonetworkServiceInterface gntwAccess = new GeonetworkAccessParameter(scope, geonetworkParams);
+ GeonetworkInstance gnInstance = gntwAccess.getGeonetworkInstance();
+
+ ScopeProvider.instance.set(scope);
+ logger.info("set scope provider "+scope);
+ Configuration config = gnInstance.getGeonetworkPublisher().getConfiguration();
+ Account account=config.getScopeConfiguration().getAccounts().get(Type.CKAN);
+ logger.info("CKAN user is: "+account.getUser());
+// return MetadataConverter.getWMSOnLineResource(gntwAccess.getGeonetworkInstance(true), gisUUID);
+
HTTPCallsUtils httpUtils = new HTTPCallsUtils();
logger.info("Parameters..");
for (Enumeration e = req.getParameterNames(); e.hasMoreElements();){
@@ -261,8 +275,11 @@ public class GeonetworkResolver extends HttpServlet{
// logger.debug("doPost read body request: "+readBody);
ByteArrayOutputStream byteArray = new ByteArrayOutputStream();
- boolean authorized = GNAuthentication.login(httpUtils, geonetworkParams.getUrl(), geonetworkParams.getUser(), geonetworkParams.getPassword());
- logger.trace("Authorized on "+geonetworkParams +" ? "+authorized);
+ if(account.getUser()!=null){
+ boolean authorized = GNAuthentication.login(httpUtils, geonetworkParams.getUrl(), account.getUser(), account. getPassword());
+ logger.trace("Authorized on "+geonetworkParams +" ? "+authorized);
+ }else
+ logger.info("Skipping authentication ckan user is null");
// SPECIFIC HANDLER FOR GEONETWORK REQUEST: /srv/en/mef.export
String gnCSWlURL;
@@ -322,6 +339,9 @@ public class GeonetworkResolver extends HttpServlet{
String error = "Sorry, an error occurred on resolving geonetwork request with scope "+scope+". Please, contact support!";
sendError(resp, HttpServletResponse.SC_INTERNAL_SERVER_ERROR, error);
return;
+ }finally{
+ ScopeProvider.instance.reset();
+ logger.info("scope provider reset");
}
}
@@ -340,8 +360,8 @@ public class GeonetworkResolver extends HttpServlet{
logger.info("Tentative for recovering geonetwork server parameters from cache with scope: "+scope);
ServerParameters serverParam = cacheGNServerParams.get(scope);
- if(serverParam==null){
- logger.info("Cache having null Geonetwork server parameters, reading from IS..");
+ if(serverParam==null || serverParam.getPassword()!=null){
+ logger.info("Cache having null Geonetwork server parameters or password 'null', reading from IS..");
GeoRuntimeReader reader = new GeoRuntimeReader();
try {
serverParam = reader.retrieveGisParameters(scope, GEO_SERVICE.GEONETWORK);
@@ -383,29 +403,6 @@ public class GeonetworkResolver extends HttpServlet{
logger.info("Reset of Cache Geonetwork server params perfomed!");
}
- /**
- * Gets the layer wms request.
- *
- * @param scope the scope
- * @param gisUUID the gis uuid
- * @param geonetworkParams the geonetwork params
- * @return the layer wms request
- * @throws Exception the exception
- */
- protected String getLayerWmsRequest(String scope, String gisUUID, ServerParameters geonetworkParams) throws Exception{
-
- try {
- GeonetworkServiceInterface gntwAccess = new GeonetowrkAccessParameter(scope, geonetworkParams);
- return MetadataConverter.getWMSOnLineResource(gntwAccess.getGeonetworkInstance(true), gisUUID);
- }catch (GeonetworkInstanceException e){
- logger.error("An error occurred when instancing geonetowrk gis layer with UUID "+gisUUID, e);
- throw new IllegalArgumentException("Sorry, An error occurred when instancing geonetwork with UUID: "+gisUUID);
- } catch (Exception e) {
- logger.error("An error occurred when retrieving gis layer with UUID "+gisUUID, e);
- throw new IllegalArgumentException("Sorry, An error occurred when retrieving gis layer with UUID "+gisUUID);
- }
- }
-
/**
* Send error.
*