diff --git a/.classpath b/.classpath new file mode 100644 index 0000000..fa936d6 --- /dev/null +++ b/.classpath @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/.project b/.project new file mode 100644 index 0000000..f0af028 --- /dev/null +++ b/.project @@ -0,0 +1,42 @@ + + + uri-resolver + + + + + + org.eclipse.wst.jsdt.core.javascriptValidator + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.wst.common.project.facet.core.builder + + + + + org.eclipse.wst.validation.validationbuilder + + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.eclipse.jem.workbench.JavaEMFNature + org.eclipse.wst.common.modulecore.ModuleCoreNature + org.eclipse.jdt.core.javanature + org.eclipse.m2e.core.maven2Nature + org.eclipse.wst.common.project.facet.core.nature + org.eclipse.wst.jsdt.core.jsNature + + diff --git a/.settings/.jsdtscope b/.settings/.jsdtscope new file mode 100644 index 0000000..b46b920 --- /dev/null +++ b/.settings/.jsdtscope @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..ca7f8ec --- /dev/null +++ b/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,7 @@ +#Tue Mar 12 14:16:46 CET 2013 +eclipse.preferences.version=1 +encoding//src/main/java=UTF-8 +encoding//src/main/resources=UTF-8 +encoding//src/test/java=UTF-8 +encoding//src/test/resources=UTF-8 +encoding/=UTF-8 diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..feea7dd --- /dev/null +++ b/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,9 @@ +#Tue Mar 12 14:16:46 CET 2013 +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6 +org.eclipse.jdt.core.compiler.compliance=1.6 +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.source=1.6 diff --git a/.settings/org.eclipse.m2e.core.prefs b/.settings/org.eclipse.m2e.core.prefs new file mode 100644 index 0000000..e8e32dd --- /dev/null +++ b/.settings/org.eclipse.m2e.core.prefs @@ -0,0 +1,5 @@ +#Tue Mar 12 14:16:46 CET 2013 +activeProfiles= +eclipse.preferences.version=1 +resolveWorkspaceProjects=true +version=1 diff --git a/.settings/org.eclipse.wst.common.component b/.settings/org.eclipse.wst.common.component new file mode 100644 index 0000000..1d41732 --- /dev/null +++ b/.settings/org.eclipse.wst.common.component @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/.settings/org.eclipse.wst.common.project.facet.core.xml b/.settings/org.eclipse.wst.common.project.facet.core.xml new file mode 100644 index 0000000..32b6a42 --- /dev/null +++ b/.settings/org.eclipse.wst.common.project.facet.core.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/.settings/org.eclipse.wst.jsdt.ui.superType.container b/.settings/org.eclipse.wst.jsdt.ui.superType.container new file mode 100644 index 0000000..3bd5d0a --- /dev/null +++ b/.settings/org.eclipse.wst.jsdt.ui.superType.container @@ -0,0 +1 @@ +org.eclipse.wst.jsdt.launching.baseBrowserLibrary \ No newline at end of file diff --git a/.settings/org.eclipse.wst.jsdt.ui.superType.name b/.settings/org.eclipse.wst.jsdt.ui.superType.name new file mode 100644 index 0000000..05bd71b --- /dev/null +++ b/.settings/org.eclipse.wst.jsdt.ui.superType.name @@ -0,0 +1 @@ +Window \ No newline at end of file diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..502553f --- /dev/null +++ b/pom.xml @@ -0,0 +1,59 @@ + + 4.0.0 + + maven-parent + org.gcube.tools + 1.0.0 + + org.gcube.datat.transfer + uri-resolver + 1.0.0-SNAPSHOT + war + + + junit + junit + 4.8.2 + test + + + org.gcube.contentmanagement + storage-manager-wrapper + [2.0.0-SNAPSHOT, 3.0.0-SNAPSHOT) + + + + org.gcube.contentmanagement + storage-manager-core + [2.0.0-SNAPSHOT,3.0.0-SNAPSHOT) + + + slf4j-nop + org.slf4j + + + + + javax.servlet + javax.servlet-api + 3.0.1 + + + log4j + log4j + 1.2.16 + test + + + org.slf4j + slf4j-log4j12 + 1.6.4 + test + + + commons-io + commons-io + 1.2 + + + \ No newline at end of file diff --git a/src/main/java/org/gcube/datatransfer/resolver/http/HttpResolver.java b/src/main/java/org/gcube/datatransfer/resolver/http/HttpResolver.java new file mode 100644 index 0000000..ea00243 --- /dev/null +++ b/src/main/java/org/gcube/datatransfer/resolver/http/HttpResolver.java @@ -0,0 +1,94 @@ +package org.gcube.datatransfer.resolver.http; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.net.URL; +import java.net.URLConnection; + + +import javax.servlet.ServletConfig; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.apache.commons.io.IOUtils; +import org.gcube.contentmanager.storageclient.model.protocol.smp.Handler; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + + + +/** + * + * @author andrea + * + */ +public class HttpResolver extends HttpServlet { + + private static final long serialVersionUID = 1L; + + /** The logger. */ + private static final Logger logger = LoggerFactory.getLogger(HttpResolver.class); + + public void init(ServletConfig conf) throws ServletException { + + super.init(conf); + + } + + protected void doGet(HttpServletRequest request, + HttpServletResponse response) throws IOException { + + logger.info("The http session id is: " + request.getSession().getId()); + String uri = request.getParameter("smp-uri"); + + uri = uri.replace(" ","+"); + + logger.debug("URI = "+ uri); + + try { + + if (uri == null || uri.equals("")) { + // the document has not id - not found + response.sendError(404); + return; + } + + OutputStream out = response.getOutputStream(); + Handler.activateProtocol(); + String name = ""; + response.addHeader("content_name", name); + response.addHeader("Content-Name", name); + + response.addHeader("content-disposition", "attachment; filename=" +name); + response.setContentType("unknown/unknown"); + + logger.info("About to get object"); + URL url = new URL(uri); + URLConnection uc = null; + InputStream in = null; + try { + uc = ( URLConnection ) url.openConnection ( ); + in = uc.getInputStream(); + } + catch(Exception e){ + e.printStackTrace(); + } + + + IOUtils.copy(in, out); + logger.info("Printing outToString: " + out.toString()); + out.flush(); + out.close(); + in.close(); + + } catch (Exception e) { + e.printStackTrace(); + logger.error("Exception:", e); + } + + } + +} \ No newline at end of file diff --git a/src/main/resources/log4j.properties b/src/main/resources/log4j.properties new file mode 100644 index 0000000..74ea2d7 --- /dev/null +++ b/src/main/resources/log4j.properties @@ -0,0 +1,12 @@ +# Set root category priority to WARN and its only appender to A1. +log4j.rootCategory=DEBUG, A0 + +log4j.appender.A0=org.apache.log4j.ConsoleAppender +log4j.appender.A0.layout=org.apache.log4j.PatternLayout +log4j.appender.A0.layout.ConversionPattern=%d{HH:mm:ss,SSS} %-5p %c{2} [%t,%M:%L] %m%n + +log4j.appender.A1=org.apache.log4j.ConsoleAppender +log4j.appender.A1.layout=org.apache.log4j.PatternLayout +log4j.appender.A1.layout.ConversionPattern= %d{HH:mm:ss,SSS} %-5p %c{2} [%t,%M:%L] %m%n +log4j.category.org.gcube=DEBUG,A1 +log4j.additivity.org.gcube=false \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000..34bcc4e --- /dev/null +++ b/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,18 @@ + + +http resolver + + + smp + smp + org.gcube.datatransfer.resolver.http.HttpResolver + true + + + smp + /smp + + + diff --git a/src/main/webapp/index.jsp b/src/main/webapp/index.jsp new file mode 100644 index 0000000..06abbbe --- /dev/null +++ b/src/main/webapp/index.jsp @@ -0,0 +1,5 @@ + + +

The SM URI resolver

+ + diff --git a/src/test/org/gcube/datatransfer/uriresolver/test/TestURI.java b/src/test/org/gcube/datatransfer/uriresolver/test/TestURI.java new file mode 100644 index 0000000..fa1cf8e --- /dev/null +++ b/src/test/org/gcube/datatransfer/uriresolver/test/TestURI.java @@ -0,0 +1,37 @@ +package org.gcube.datatransfer.uriresolver.test; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.net.URL; + +import junit.framework.Assert; + +import org.apache.commons.io.IOUtils; +import org.gcube.contentmanager.storageclient.model.protocol.smp.Handler; +import org.junit.Test; + +public class TestURI { + + @Test + public void testGetInputStreamFromSMP() throws IOException{ + Handler.activateProtocol(); + URL url = new URL("smp://Wikipedia_logo_silver.png?5ezvFfBOLqaqBlwCEtAvz4ch5BUu1ag3yftpCvV+gayz9bAtSsnO1/sX6pemTKbDe0qbchLexXeWgGcJlskYE8td9QSDXSZj5VSl9kdN9SN0/LRYaWUZuP4Q1J7lEiwkU4GKPsiD6PDRVcT4QAqTEy5hSIbr6o4Y"); + Assert.assertNotNull(url.openConnection().getInputStream()); + + } + + @Test + public void testGetInputStreamFromHTTP() throws IOException{ + + URL url = new URL("http://localhost:8080/uri-resolver/smp?smp-uri=smp://Wikipedia_logo_silver.png?5ezvFfBOLqaqBlwCEtAvz4ch5BUu1ag3yftpCvV+gayz9bAtSsnO1/sX6pemTKbDe0qbchLexXeWgGcJlskYE8td9QSDXSZj5VSl9kdN9SN0/LRYaWUZuP4Q1J7lEiwkU4GKPsiD6PDRVcT4QAqTEy5hSIbr6o4Y"); + FileOutputStream out = new FileOutputStream(new File("/Users/andrea/test1")); + InputStream in = url.openConnection().getInputStream(); + IOUtils.copy(in, out); + out.close(); + in.close(); + } + + +}