You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openmeetings.apache.org by so...@apache.org on 2013/06/07 14:57:42 UTC

svn commit: r1490624 - /openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/util/RecordingResourceReference.java

Author: solomax
Date: Fri Jun  7 12:57:41 2013
New Revision: 1490624

URL: http://svn.apache.org/r1490624
Log:
[OPENMEETINGS-667] basic code to handle exceptions is added

Modified:
    openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/util/RecordingResourceReference.java

Modified: openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/util/RecordingResourceReference.java
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/util/RecordingResourceReference.java?rev=1490624&r1=1490623&r2=1490624&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/util/RecordingResourceReference.java (original)
+++ openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/web/util/RecordingResourceReference.java Fri Jun  7 12:57:41 2013
@@ -26,6 +26,7 @@ import java.io.IOException;
 import java.io.InputStream;
 
 import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 
 import org.apache.commons.io.input.BoundedInputStream;
 import org.apache.openmeetings.data.flvrecord.FlvRecordingDao;
@@ -33,10 +34,11 @@ import org.apache.openmeetings.data.user
 import org.apache.openmeetings.persistence.beans.domain.Organisation_Users;
 import org.apache.openmeetings.persistence.beans.flvrecord.FlvRecording;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
+import org.apache.wicket.request.resource.AbstractResource;
+import org.apache.wicket.request.resource.ContentDisposition;
 import org.apache.wicket.request.resource.IResource;
 import org.apache.wicket.request.resource.IResource.Attributes;
 import org.apache.wicket.request.resource.ResourceReference;
-import org.apache.wicket.request.resource.ResourceStreamResource;
 import org.apache.wicket.util.lang.Bytes;
 import org.apache.wicket.util.resource.FileResourceStream;
 import org.apache.wicket.util.resource.IResourceStream;
@@ -52,8 +54,8 @@ public abstract class RecordingResourceR
 
 	@Override
 	public IResource getResource() {
-		return new ResourceStreamResource() {
-			private static final long serialVersionUID = -961779297961218109L;
+		return new AbstractResource() {
+			private static final long serialVersionUID = 1L;
 			private final static String ACCEPT_RANGES_HEADER = "Accept-Ranges";
 			private final static String RANGE_HEADER = "Range";
 			private final static String CONTENT_RANGE_HEADER = "Content-Range";
@@ -63,8 +65,7 @@ public abstract class RecordingResourceR
 			private int start = 0;
 			private int end = 0;
 			
-			@Override
-			protected IResourceStream getResourceStream() {
+			private IResourceStream getResourceStream() {
 				return file == null ? null : new FileResourceStream(file) {
 					private static final long serialVersionUID = 2546785247219805747L;
 					private transient BoundedInputStream bi;
@@ -111,6 +112,8 @@ public abstract class RecordingResourceR
 					file = getFile(r);
 					rr.setFileName(getFileName(r));
 					rr.setContentType(RecordingResourceReference.this.getContentType());
+					rr.setContentDisposition(ContentDisposition.INLINE);
+					rr.getHeaders().addHeader(ACCEPT_RANGES_HEADER, RANGES_BYTES);
 					String range = ((HttpServletRequest)attributes.getRequest().getContainerRequest()).getHeader(RANGE_HEADER);
 					if (range != null && range.startsWith(RANGES_BYTES)) {
 						String[] bounds = range.substring(RANGES_BYTES.length() + 1).split("-"); //TODO open ranges !!
@@ -118,17 +121,32 @@ public abstract class RecordingResourceR
 							isRange = true;
 							start = Integer.parseInt(bounds[0]);
 							end = Integer.parseInt(bounds[1]);
+							//Content-Range: bytes 229376-232468/232469
+							rr.getHeaders().addHeader(CONTENT_RANGE_HEADER, String.format("%s %d-%d/%d", RANGES_BYTES, start, end, file.length()));
 						}
 					}
-					
-					rr = super.newResourceResponse(attributes);
-					rr.getHeaders().addHeader(ACCEPT_RANGES_HEADER, RANGES_BYTES);
-					if (isRange) {
-						//Content-Range: bytes 229376-232468/232469
-						rr.getHeaders().addHeader(CONTENT_RANGE_HEADER, String.format("%s %d-%d/%d", RANGES_BYTES, start, end, file.length()));
+					final IResourceStream rStream = getResourceStream();
+					rr.setContentLength(rStream.length().bytes());
+					try {
+						final InputStream  s = rStream.getInputStream();
+						rr.setWriteCallback(new WriteCallback() {
+							
+							@Override
+							public void writeData(Attributes attributes) throws IOException {
+								try {
+									writeStream(attributes, s);
+								} catch (Exception e) {
+									e.printStackTrace();
+								} finally {
+									rStream.close();
+								}
+							}
+						});
+					} catch (ResourceStreamNotFoundException e1) {
+						rr.setError(HttpServletResponse.SC_NOT_FOUND);
 					}
 				} else {
-					rr.setError(404);
+					rr.setError(HttpServletResponse.SC_NOT_FOUND);
 				}
 				return rr;
 			}