diff --git a/geoportal-service/enunciate.xml b/geoportal-service/enunciate.xml new file mode 100644 index 0000000..c8e07dd --- /dev/null +++ b/geoportal-service/enunciate.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/geoportal-service/pom.xml b/geoportal-service/pom.xml index 40957e7..5dd0349 100644 --- a/geoportal-service/pom.xml +++ b/geoportal-service/pom.xml @@ -17,7 +17,7 @@ https://code-repo.d4science.org/gCubeSystem 1.0 - + 2.14.0 @@ -90,14 +90,29 @@ - - + + + com.webcohesion.enunciate + enunciate-core-annotations + ${enunciate.version} + provided + + + com.webcohesion.enunciate + enunciate-rt-util + ${enunciate.version} + provided + javax.servlet javax.servlet-api - 3.0.1 + 3.1.0 + provided + + + javax.ws.rs javax.ws.rs-api @@ -115,6 +130,8 @@ + + @@ -169,4 +186,51 @@ + + + + + + com.webcohesion.enunciate + enunciate-maven-plugin + ${enunciate.version} + + + + + assemble + + assemble + + + + + + + + org.apache.maven.plugins + maven-resources-plugin + 2.5 + + + copy-enunciate-docs + process-resources + + copy-resources + + + target + + + ${project.build.directory}/${project.artifactId}-${project.version}/docs + ${project.build.directory}/docs + true + + + + + + + + \ No newline at end of file diff --git a/geoportal-service/src/main/java/org/gcube/application/geoportal/service/rest/DocsGenerator.java b/geoportal-service/src/main/java/org/gcube/application/geoportal/service/rest/DocsGenerator.java new file mode 100644 index 0000000..dd10c02 --- /dev/null +++ b/geoportal-service/src/main/java/org/gcube/application/geoportal/service/rest/DocsGenerator.java @@ -0,0 +1,43 @@ +package org.gcube.application.geoportal.service.rest; + +import lombok.extern.slf4j.Slf4j; + +import javax.servlet.http.HttpServletRequest; +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.WebApplicationException; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.Response; +import java.io.File; +import java.io.FileInputStream; +import java.io.InputStream; + +@Path("docs") +@Slf4j +public class DocsGenerator { + + @GET + @Path("/{any: .*}") + public InputStream toDoc(@Context HttpServletRequest req) throws WebApplicationException { + log.info(DocsGenerator.class.getSimpleName() + " toDoc called"); + + String pathInfo = req.getPathInfo(); + log.debug("pathInfo {}", pathInfo); + try { + + if (pathInfo.endsWith("/docs/")) { + pathInfo += "index.html"; + } + + log.info("going to {}", pathInfo); + + String realPath = req.getServletContext().getRealPath(pathInfo); + return new FileInputStream(new File(realPath)); + + } catch (Exception e) { + //MANAGE THE EXCEPTION + log.error("Unexpected exception ",e); + throw new WebApplicationException("Unexpected Exception : "+e.getMessage(), Response.Status.INTERNAL_SERVER_ERROR); + } + } +} diff --git a/geoportal-service/src/main/java/org/gcube/application/geoportal/service/rest/Plugins.java b/geoportal-service/src/main/java/org/gcube/application/geoportal/service/rest/Plugins.java index 3d794a0..7d8713c 100644 --- a/geoportal-service/src/main/java/org/gcube/application/geoportal/service/rest/Plugins.java +++ b/geoportal-service/src/main/java/org/gcube/application/geoportal/service/rest/Plugins.java @@ -1,6 +1,8 @@ package org.gcube.application.geoportal.service.rest; +import com.webcohesion.enunciate.metadata.rs.RequestHeader; +import com.webcohesion.enunciate.metadata.rs.RequestHeaders; import lombok.extern.slf4j.Slf4j; import org.gcube.application.cms.implementations.ImplementationProvider; import org.gcube.application.cms.plugins.Plugin; @@ -17,6 +19,10 @@ import java.util.Map; @Path(InterfaceConstants.Methods.PLUGINS) @Slf4j +@RequestHeaders({ + @RequestHeader( name = "Authorization", description = "Bearer token, see https://dev.d4science.org/how-to-access-resources"), + @RequestHeader( name = "Content-Type", description = "application/json") +}) public class Plugins { @GET diff --git a/geoportal-service/src/main/java/org/gcube/application/geoportal/service/rest/ProfiledDocuments.java b/geoportal-service/src/main/java/org/gcube/application/geoportal/service/rest/ProfiledDocuments.java index f0a8927..fc91570 100644 --- a/geoportal-service/src/main/java/org/gcube/application/geoportal/service/rest/ProfiledDocuments.java +++ b/geoportal-service/src/main/java/org/gcube/application/geoportal/service/rest/ProfiledDocuments.java @@ -1,5 +1,7 @@ package org.gcube.application.geoportal.service.rest; +import com.webcohesion.enunciate.metadata.rs.RequestHeader; +import com.webcohesion.enunciate.metadata.rs.RequestHeaders; import lombok.extern.slf4j.Slf4j; import org.bson.Document; import org.gcube.application.cms.implementations.ImplementationProvider; @@ -24,6 +26,10 @@ import java.util.List; @Path(InterfaceConstants.Methods.PROJECTS+"/{"+InterfaceConstants.Parameters.UCID +"}") @Slf4j +@RequestHeaders({ + @RequestHeader( name = "Authorization", description = "Bearer token, see https://dev.d4science.org/how-to-access-resources"), + @RequestHeader( name = "Content-Type", description = "application/json") +}) public class ProfiledDocuments { private ProfiledMongoManager manager; diff --git a/geoportal-service/src/main/java/org/gcube/application/geoportal/service/rest/UseCaseDescriptors.java b/geoportal-service/src/main/java/org/gcube/application/geoportal/service/rest/UseCaseDescriptors.java index 9572457..c0f7015 100644 --- a/geoportal-service/src/main/java/org/gcube/application/geoportal/service/rest/UseCaseDescriptors.java +++ b/geoportal-service/src/main/java/org/gcube/application/geoportal/service/rest/UseCaseDescriptors.java @@ -1,5 +1,7 @@ package org.gcube.application.geoportal.service.rest; +import com.webcohesion.enunciate.metadata.rs.RequestHeader; +import com.webcohesion.enunciate.metadata.rs.RequestHeaders; import lombok.extern.slf4j.Slf4j; import org.gcube.application.cms.implementations.ImplementationProvider; import org.gcube.application.cms.serialization.Serialization; @@ -13,6 +15,10 @@ import javax.ws.rs.core.Response; @Path(InterfaceConstants.Methods.UCD) @Slf4j +@RequestHeaders({ + @RequestHeader( name = "Authorization", description = "Bearer token, see https://dev.d4science.org/how-to-access-resources"), + @RequestHeader( name = "Content-Type", description = "application/json") +}) public class UseCaseDescriptors { diff --git a/geoportal-service/src/main/webapp/WEB-INF/gcube-app.xml b/geoportal-service/src/main/webapp/WEB-INF/gcube-app.xml index ced0697..a31e7d1 100644 --- a/geoportal-service/src/main/webapp/WEB-INF/gcube-app.xml +++ b/geoportal-service/src/main/webapp/WEB-INF/gcube-app.xml @@ -4,5 +4,9 @@ 1.0.0 REST service for GeoPortal + + + /docs/* +