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