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 2015/12/13 09:16:47 UTC

svn commit: r1719771 - /openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/

Author: solomax
Date: Sun Dec 13 08:16:46 2015
New Revision: 1719771

URL: http://svn.apache.org/viewvc?rev=1719771&view=rev
Log:
Recording resource is simplified

Modified:
    openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/AviRecordingResourceReference.java
    openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/FlvRecordingResourceReference.java
    openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/JpgRecordingResourceReference.java
    openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/Mp4RecordingResourceReference.java
    openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/OggRecordingResourceReference.java
    openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/RecordingResourceReference.java

Modified: openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/AviRecordingResourceReference.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/AviRecordingResourceReference.java?rev=1719771&r1=1719770&r2=1719771&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/AviRecordingResourceReference.java (original)
+++ openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/AviRecordingResourceReference.java Sun Dec 13 08:16:46 2015
@@ -28,11 +28,11 @@ public class AviRecordingResourceReferen
 	private static final long serialVersionUID = 1L;
 
 	public AviRecordingResourceReference() {
-		super(AviRecordingResourceReference.class);
+		super();
 	}
 	
 	@Override
-	public String getContentType() {
+	public String getMimeType() {
 		return "video/avi";
 	}
 	

Modified: openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/FlvRecordingResourceReference.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/FlvRecordingResourceReference.java?rev=1719771&r1=1719770&r2=1719771&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/FlvRecordingResourceReference.java (original)
+++ openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/FlvRecordingResourceReference.java Sun Dec 13 08:16:46 2015
@@ -28,11 +28,11 @@ public class FlvRecordingResourceReferen
 	private static final long serialVersionUID = 1L;
 
 	public FlvRecordingResourceReference() {
-		super(FlvRecordingResourceReference.class);
+		super();
 	}
 	
 	@Override
-	public String getContentType() {
+	public String getMimeType() {
 		return "video/flv";
 	}
 	

Modified: openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/JpgRecordingResourceReference.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/JpgRecordingResourceReference.java?rev=1719771&r1=1719770&r2=1719771&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/JpgRecordingResourceReference.java (original)
+++ openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/JpgRecordingResourceReference.java Sun Dec 13 08:16:46 2015
@@ -28,11 +28,11 @@ public class JpgRecordingResourceReferen
 	private static final long serialVersionUID = 1L;
 
 	public JpgRecordingResourceReference() {
-		super(JpgRecordingResourceReference.class);
+		super();
 	}
 	
 	@Override
-	public String getContentType() {
+	public String getMimeType() {
 		return "image/jpeg";
 	}
 	

Modified: openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/Mp4RecordingResourceReference.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/Mp4RecordingResourceReference.java?rev=1719771&r1=1719770&r2=1719771&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/Mp4RecordingResourceReference.java (original)
+++ openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/Mp4RecordingResourceReference.java Sun Dec 13 08:16:46 2015
@@ -29,11 +29,11 @@ public class Mp4RecordingResourceReferen
 	private static final long serialVersionUID = 1L;
 
 	public Mp4RecordingResourceReference() {
-		super(Mp4RecordingResourceReference.class);
+		super();
 	}
 	
 	@Override
-	public String getContentType() {
+	public String getMimeType() {
 		return "video/mp4";
 	}
 	

Modified: openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/OggRecordingResourceReference.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/OggRecordingResourceReference.java?rev=1719771&r1=1719770&r2=1719771&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/OggRecordingResourceReference.java (original)
+++ openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/OggRecordingResourceReference.java Sun Dec 13 08:16:46 2015
@@ -29,11 +29,11 @@ public class OggRecordingResourceReferen
 	private static final long serialVersionUID = 1L;
 
 	public OggRecordingResourceReference() {
-		super(OggRecordingResourceReference.class);
+		super();
 	}
 	
 	@Override
-	public String getContentType() {
+	public String getMimeType() {
 		return "video/ogg";
 	}
 	

Modified: openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/RecordingResourceReference.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/RecordingResourceReference.java?rev=1719771&r1=1719770&r2=1719771&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/RecordingResourceReference.java (original)
+++ openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/RecordingResourceReference.java Sun Dec 13 08:16:46 2015
@@ -25,10 +25,8 @@ import static org.apache.openmeetings.we
 import static org.apache.openmeetings.web.app.WebSession.getUserId;
 import static org.red5.logging.Red5LoggerFactory.getLogger;
 
-import java.io.ByteArrayInputStream;
 import java.io.File;
 import java.io.IOException;
-import java.io.InputStream;
 
 import javax.servlet.http.HttpServletResponse;
 
@@ -36,104 +34,49 @@ import org.apache.openmeetings.db.dao.re
 import org.apache.openmeetings.db.dao.user.GroupUserDao;
 import org.apache.openmeetings.db.entity.record.Recording;
 import org.apache.openmeetings.web.app.WebSession;
-import org.apache.wicket.request.cycle.RequestCycle;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
-import org.apache.wicket.request.resource.AbstractResource;
-import org.apache.wicket.request.resource.AbstractResource.ResourceResponse;
-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.PartWriterCallback;
-import org.apache.wicket.request.resource.ResourceReference;
-import org.apache.wicket.util.io.IOUtils;
-import org.apache.wicket.util.resource.FileResourceStream;
-import org.apache.wicket.util.resource.IResourceStream;
-import org.apache.wicket.util.resource.ResourceStreamNotFoundException;
-import org.apache.wicket.util.time.Time;
+import org.apache.wicket.resource.FileSystemResource;
+import org.apache.wicket.resource.FileSystemResourceReference;
 import org.slf4j.Logger;
 
-public abstract class RecordingResourceReference extends ResourceReference {
+public abstract class RecordingResourceReference extends FileSystemResourceReference {
 	private static final long serialVersionUID = 1L;
 	private static final Logger log = getLogger(RecordingResourceReference.class, webAppRootKey);
 
-	public RecordingResourceReference(Class<? extends RecordingResourceReference> clazz) {
-		super(clazz, "recordings");
+	public RecordingResourceReference() {
+		super("recordings");
 	}
 
 	@Override
 	public IResource getResource() {
-		return new AbstractResource() {
+		return new FileSystemResource() {
 			private static final long serialVersionUID = 1L;
 			private File file;
 			
 			@Override
+			protected String getMimeType() throws IOException {
+				return RecordingResourceReference.this.getMimeType();
+			}
+			
+			@Override
 			protected ResourceResponse newResourceResponse(Attributes attributes) {
-				ResourceResponse rr = new ResourceResponse();
 				Recording r = getRecording(attributes);
 				if (r != null) {
 					file = getFile(r);
-					IResourceStream rs = file == null ? null : new FileResourceStream(file);
-					
-					if (rs != null) {
-						rr.setFileName(getFileName(r));
-						rr.setContentType(RecordingResourceReference.this.getContentType());
-						rr.setContentDisposition(ContentDisposition.INLINE);
-						rr.setLastModified(Time.millis(file.lastModified()));
-						rr.setAcceptRange(ContentRangeType.BYTES);
-						
-						try {
-							// read resource data to get the content length
-							InputStream inputStream = rs.getInputStream();
-	
-							byte[] bytes = null;
-							// send Content-Length header
-							bytes = IOUtils.toByteArray(inputStream);
-							rr.setContentLength(bytes.length);
-	
-							// get content range information
-							RequestCycle cycle = RequestCycle.get();
-							Long startbyte = cycle.getMetaData(CONTENT_RANGE_STARTBYTE);
-							Long endbyte = cycle.getMetaData(CONTENT_RANGE_ENDBYTE);
-	
-							// send response body with resource data
-							PartWriterCallback partWriterCallback = new PartWriterCallback(bytes != null
-								? new ByteArrayInputStream(bytes) : inputStream, rr.getContentLength(), startbyte, endbyte);
-	
-							// If read buffered is set to false ensure the part writer callback is going to
-							// close the input stream
-							rr.setWriteCallback(partWriterCallback.setClose(false));
-						} catch (IOException e) {
-							log.debug(e.getMessage(), e);
-							return sendResourceError(rr, file, 500, "Unable to read resource stream");
-						} catch (ResourceStreamNotFoundException e) {
-							log.debug(e.getMessage(), e);
-							return sendResourceError(rr, file, 500, "Unable to open resource stream");
-						} finally {
-							try {
-								IOUtils.close(rs);
-							} catch (IOException e) {
-								log.warn("Unable to close the resource stream", e);
-							}
-						}
-					}
+					return createResourceResponse(file.toPath());
 				} else {
+					log.debug("No recording was found");
+					ResourceResponse rr = new ResourceResponse();
 					rr.setError(HttpServletResponse.SC_NOT_FOUND);
+					return rr;
 				}
-				return rr;
 			}
 		};
 	}
 	
-	private ResourceResponse sendResourceError(ResourceResponse resourceResponse, File file, int errorCode, String errorMessage) {
-		String msg = String.format("resource [file = %s]: %s (status=%d)", file == null ? null : file.getAbsolutePath(), errorMessage, errorCode);
-
-		log.warn(msg);
-
-		resourceResponse.setError(errorCode, errorMessage);
-		return resourceResponse;
-	}
-
-	abstract String getContentType();
+	abstract String getMimeType();
 	abstract String getFileName(Recording r);
 	abstract File getFile(Recording r);