diff --git a/gazelle-proxy-ejb/pom.xml b/gazelle-proxy-ejb/pom.xml index c8b0a1f0fe2571e84a55837824872b04c319d2e3..5b1da27f04473ecc4f39e75d8b974139c4c537e6 100644 --- a/gazelle-proxy-ejb/pom.xml +++ b/gazelle-proxy-ejb/pom.xml @@ -113,5 +113,12 @@ <groupId>net.ihe.gazelle.simulators.tls</groupId> <artifactId>TLSSimulator-pki-jar</artifactId> </dependency> + + <dependency> + <groupId>commons-httpclient</groupId> + <artifactId>commons-httpclient</artifactId> + <version>3.1</version> + </dependency> + </dependencies> </project> diff --git a/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/action/MessageBean.java b/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/action/MessageBean.java index 960fe5c3c3170c8be90d4d02d69b6212e1079ecd..0c9bef831d317a462dc57cae131d05cc943c78d6 100644 --- a/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/action/MessageBean.java +++ b/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/action/MessageBean.java @@ -1,5 +1,7 @@ package net.ihe.gazelle.proxy.action; +import java.io.IOException; +import java.net.URLEncoder; import java.util.Map; import javax.faces.context.ExternalContext; @@ -14,8 +16,16 @@ import net.ihe.gazelle.proxy.model.message.AbstractMessage; import net.ihe.gazelle.proxy.model.message.HL7Message; import net.ihe.gazelle.proxy.model.message.HTTPMessage; import net.ihe.gazelle.proxy.model.message.SyslogMessage; - -import org.apache.commons.lang.ArrayUtils; +import net.ihe.gazelle.proxy.util.Preferences; + +import org.apache.commons.httpclient.HttpClient; +import org.apache.commons.httpclient.HttpStatus; +import org.apache.commons.httpclient.methods.PostMethod; +import org.apache.commons.httpclient.methods.multipart.ByteArrayPartSource; +import org.apache.commons.httpclient.methods.multipart.FilePart; +import org.apache.commons.httpclient.methods.multipart.MultipartRequestEntity; +import org.apache.commons.httpclient.methods.multipart.Part; +import org.apache.commons.httpclient.methods.multipart.PartSource; import org.apache.commons.lang.StringEscapeUtils; import org.apache.tika.mime.MediaType; import org.jboss.seam.ScopeType; @@ -104,7 +114,7 @@ public class MessageBean { public void downloadFile(boolean inline) { try { HttpServletResponse response = (HttpServletResponse) extCtx.getResponse(); - byte[] bytes = ArrayUtils.clone(message.getMessageReceived()); + byte[] bytes = message.getMessageReceived(); ServletOutputStream servletOutputStream = response.getOutputStream(); response.setContentType("text/plain"); response.setContentLength(bytes.length); @@ -157,4 +167,38 @@ public class MessageBean { String result = StringEscapeUtils.escapeHtml(source); return "<pre>" + result + "</pre>"; } + + public void validate() { + // First send the file to EVSClient + HttpClient client = new HttpClient(); + PostMethod filePost = new PostMethod(Preferences.getProperty("evsclient.url") + "upload"); + PartSource partSource = new ByteArrayPartSource("message", message.getMessageReceived()); + Part[] parts = { new FilePart("message", partSource) }; + filePost.setRequestEntity(new MultipartRequestEntity(parts, filePost.getParams())); + int status = -1; + try { + status = client.executeMethod(filePost); + } catch (Exception e) { + status = -1; + e.printStackTrace(); + } + // redirect the user to the good page + boolean fail = false; + if (status == HttpStatus.SC_OK) { + try { + String fileName = filePost.getResponseBodyAsString(); + String encodedFileName = URLEncoder.encode(fileName, "UTF-8"); + + HttpServletResponse response = (HttpServletResponse) extCtx.getResponse(); + String url = Preferences.getProperty("evsclient.url") + "validate.seam?filename=" + encodedFileName; + + response.sendRedirect(url); + } catch (IOException e) { + fail = true; + e.printStackTrace(); + } + } else { + fail = true; + } + } } diff --git a/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/util/Preferences.java b/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/util/Preferences.java new file mode 100644 index 0000000000000000000000000000000000000000..e6a173a25267e4731e1d1ec33bb090cf2e1df4d3 --- /dev/null +++ b/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/util/Preferences.java @@ -0,0 +1,38 @@ +package net.ihe.gazelle.proxy.util; + +import java.io.IOException; +import java.io.InputStream; +import java.util.Properties; + +public class Preferences { + + private static Properties preferences; + private static Object preferencesSync = new Object(); + + private Preferences() { + super(); + // private! + } + + public static String getProperty(String key) { + return getPreferences().getProperty(key); + } + + private static Properties getPreferences() { + if (preferences == null) { + synchronized (preferencesSync) { + if (preferences == null) { + preferences = new Properties(); + InputStream preferencesStream = Preferences.class.getResourceAsStream("/prefs.properties"); + try { + preferences.load(preferencesStream); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + } + return preferences; + } + +} diff --git a/gazelle-proxy-ejb/src/main/resources/prefs.properties b/gazelle-proxy-ejb/src/main/resources/prefs.properties new file mode 100644 index 0000000000000000000000000000000000000000..1ee7d86d7620c00839d0de077b1cb1522f10ec66 --- /dev/null +++ b/gazelle-proxy-ejb/src/main/resources/prefs.properties @@ -0,0 +1 @@ +evsclient.url=${evsclient.url} diff --git a/gazelle-proxy-war/src/main/webapp/messages/commonDownload.xhtml b/gazelle-proxy-war/src/main/webapp/messages/commonDownload.xhtml index 69d084c91881d188bc9fc98bbefc378f8b4ffc29..b5fd8d46ce41cc35b9e7e29ef84de90f40a5be38 100644 --- a/gazelle-proxy-war/src/main/webapp/messages/commonDownload.xhtml +++ b/gazelle-proxy-war/src/main/webapp/messages/commonDownload.xhtml @@ -12,12 +12,18 @@ <h:commandLink action="#{messageBean.downloadFile(true)}" rendered="#{messageBean.isDownloadable()}" value="View inline" target="_blank" /> + <br /> + <rich:spacer height="10" rendered="#{messageBean.isDownloadable()}" /> + <h:commandLink action="#{messageBean.validate()}" + rendered="#{messageBean.isDownloadable()}" + value="Validate using EVSClient" target="_blank" /> <rich:spacer height="10" /> - <div style="font-family: monospace;"><rich:insert - rendered="#{messageBean.shouldDisplayMessageContent()}" - content="#{messageBean.message.getMessageReceivedAsString()}" - highlight="xml" /></div> + <div style="font-family: monospace;"> + <rich:insert rendered="#{messageBean.shouldDisplayMessageContent()}" + content="#{messageBean.message.getMessageReceivedAsString()}" + highlight="xml" /> + </div> </ui:composition> \ No newline at end of file diff --git a/pom.xml b/pom.xml index 5e2c209b7cc257340bf13a5b2f02074c115568a5..3d7cec8c6cdfd7d11ebddeb4e78f16c5822cd169 100644 --- a/pom.xml +++ b/pom.xml @@ -201,6 +201,7 @@ </activation> <properties> <cas.service>http://127.0.0.1:8080/proxy/</cas.service> + <evsclient.url>http://127.0.0.1:8080/EVSClient/</evsclient.url> <!-- development mode (disable in production) --> <seam.debug>true</seam.debug> @@ -245,6 +246,7 @@ <properties> <cas.service>http://gazelle.ihe.net/proxy/</cas.service> + <evsclient.url>http://gazelle.ihe.net/EVSClient/</evsclient.url> <!-- development mode (disable in production) --> <seam.debug>false</seam.debug>