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;
}