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 2014/01/22 03:57:16 UTC

svn commit: r1560239 - in /openmeetings/trunk/singlewebapp: ./ src/web/java/org/apache/openmeetings/web/app/ src/web/java/org/apache/openmeetings/web/pages/ src/web/java/org/apache/openmeetings/web/user/record/

Author: solomax
Date: Wed Jan 22 02:57:15 2014
New Revision: 1560239

URL: http://svn.apache.org/r1560239
Log:
[OPENMEETINGS-870] web.only target includes screenshare.vm;
	RecordingPage is added;

Added:
    openmeetings/trunk/singlewebapp/src/web/java/org/apache/openmeetings/web/pages/RecordingPage.html
    openmeetings/trunk/singlewebapp/src/web/java/org/apache/openmeetings/web/pages/RecordingPage.java
    openmeetings/trunk/singlewebapp/src/web/java/org/apache/openmeetings/web/user/record/VideoInfo.html
    openmeetings/trunk/singlewebapp/src/web/java/org/apache/openmeetings/web/user/record/VideoInfo.java
    openmeetings/trunk/singlewebapp/src/web/java/org/apache/openmeetings/web/user/record/VideoPlayer.html
    openmeetings/trunk/singlewebapp/src/web/java/org/apache/openmeetings/web/user/record/VideoPlayer.java
Modified:
    openmeetings/trunk/singlewebapp/build.xml
    openmeetings/trunk/singlewebapp/src/web/java/org/apache/openmeetings/web/app/Application.java
    openmeetings/trunk/singlewebapp/src/web/java/org/apache/openmeetings/web/app/WebSession.java
    openmeetings/trunk/singlewebapp/src/web/java/org/apache/openmeetings/web/user/record/RecordingsPanel.html
    openmeetings/trunk/singlewebapp/src/web/java/org/apache/openmeetings/web/user/record/RecordingsPanel.java

Modified: openmeetings/trunk/singlewebapp/build.xml
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/build.xml?rev=1560239&r1=1560238&r2=1560239&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/build.xml (original)
+++ openmeetings/trunk/singlewebapp/build.xml Wed Jan 22 02:57:15 2014
@@ -276,7 +276,15 @@
 	</target>
 
 	<!-- Copy any resource or configuration files -->
-	<target name="resources">
+	<target name="vmresources">
+		<copy todir="${main.out.dir}" includeEmptyDirs="yes">
+			<fileset dir="${src.base.dir}">
+				<include name="**/*.vm" />
+			</fileset>
+		</copy>
+	</target>
+	
+	<target name="resources" depends="vmresources">
 		<patternset id="xmlpng">
 			<include name="**/*.xml" />
 			<include name="**/*.png" />
@@ -285,7 +293,6 @@
 			<patternset refid="xmlpng" />
 			<include name="**/*.conf" />
 			<include name="**/*.properties" />
-			<include name="**/*.vm" />
 		</patternset>
 
 		<!-- Main Applications -->
@@ -304,7 +311,7 @@
 
 	<target name="web.only" depends="jar.web.only, web.copy"/>
 	
-	<target name="jar.web.only" depends="enhance.only.norefresh, current_revision">
+	<target name="jar.web.only" depends="enhance.only.norefresh, current_revision, vmresources">
 		<manifestclasspath property="jar.classpath" jarfile="${project.distname}-${jar.suffix}.jar">
 			<classpath refid="compile.classpath" />
 		</manifestclasspath>

Modified: openmeetings/trunk/singlewebapp/src/web/java/org/apache/openmeetings/web/app/Application.java
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/web/java/org/apache/openmeetings/web/app/Application.java?rev=1560239&r1=1560238&r2=1560239&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/src/web/java/org/apache/openmeetings/web/app/Application.java (original)
+++ openmeetings/trunk/singlewebapp/src/web/java/org/apache/openmeetings/web/app/Application.java Wed Jan 22 02:57:15 2014
@@ -32,6 +32,7 @@ import org.apache.openmeetings.util.Init
 import org.apache.openmeetings.web.pages.ActivatePage;
 import org.apache.openmeetings.web.pages.MainPage;
 import org.apache.openmeetings.web.pages.NotInitedPage;
+import org.apache.openmeetings.web.pages.RecordingPage;
 import org.apache.openmeetings.web.pages.ResetPage;
 import org.apache.openmeetings.web.pages.SwfPage;
 import org.apache.openmeetings.web.pages.auth.SignInPage;
@@ -125,6 +126,7 @@ public class Application extends Authent
 		mountPage("signin", getSignInPageClass());
 		mountPage("activate", ActivatePage.class);
 		mountPage("reset", ResetPage.class);
+		mountPage("/recording/${hash}", RecordingPage.class);
 		mountResource("/recordings/avi/${id}", new AviRecordingResourceReference());
 		mountResource("/recordings/flv/${id}", new FlvRecordingResourceReference());
 		mountResource("/recordings/mp4/${id}", new Mp4RecordingResourceReference());

Modified: openmeetings/trunk/singlewebapp/src/web/java/org/apache/openmeetings/web/app/WebSession.java
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/web/java/org/apache/openmeetings/web/app/WebSession.java?rev=1560239&r1=1560238&r2=1560239&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/src/web/java/org/apache/openmeetings/web/app/WebSession.java (original)
+++ openmeetings/trunk/singlewebapp/src/web/java/org/apache/openmeetings/web/app/WebSession.java Wed Jan 22 02:57:15 2014
@@ -174,7 +174,7 @@ public class WebSession extends Abstract
 		//FIXME code is duplicated from MainService, need to be unified
 		SOAPLoginDao soapDao = getBean(SOAPLoginDao.class);
 		SOAPLogin soapLogin = soapDao.get(secureHash);
-		if (!soapLogin.getUsed()) { //add code for  || (soapLogin.getAllowSameURLMultipleTimes())
+		if (soapLogin != null && !soapLogin.getUsed()) { //add code for  || (soapLogin.getAllowSameURLMultipleTimes())
 			SessiondataDao sessionDao = getBean(SessiondataDao.class);
 			Sessiondata sd = sessionDao.getSessionByHash(soapLogin.getSessionHash());
 			if (sd != null && sd.getSessionXml() != null) {

Added: openmeetings/trunk/singlewebapp/src/web/java/org/apache/openmeetings/web/pages/RecordingPage.html
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/web/java/org/apache/openmeetings/web/pages/RecordingPage.html?rev=1560239&view=auto
==============================================================================
--- openmeetings/trunk/singlewebapp/src/web/java/org/apache/openmeetings/web/pages/RecordingPage.html (added)
+++ openmeetings/trunk/singlewebapp/src/web/java/org/apache/openmeetings/web/pages/RecordingPage.html Wed Jan 22 02:57:15 2014
@@ -0,0 +1,27 @@
+<!DOCTYPE html>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:extend>
+	<div style="display: inline-block; float: left;" wicket:id="info"></div>
+	<div style="display: inline-block; float: left;" wicket:id="player"></div>
+</wicket:extend>
+</html>
+

Added: openmeetings/trunk/singlewebapp/src/web/java/org/apache/openmeetings/web/pages/RecordingPage.java
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/web/java/org/apache/openmeetings/web/pages/RecordingPage.java?rev=1560239&view=auto
==============================================================================
--- openmeetings/trunk/singlewebapp/src/web/java/org/apache/openmeetings/web/pages/RecordingPage.java (added)
+++ openmeetings/trunk/singlewebapp/src/web/java/org/apache/openmeetings/web/pages/RecordingPage.java Wed Jan 22 02:57:15 2014
@@ -0,0 +1,51 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.pages;
+
+import static org.apache.openmeetings.web.app.Application.getBean;
+import static org.apache.openmeetings.web.app.WebSession.getRecordingId;
+
+import org.apache.openmeetings.db.dao.record.FlvRecordingDao;
+import org.apache.openmeetings.db.entity.record.FlvRecording;
+import org.apache.openmeetings.web.app.WebSession;
+import org.apache.openmeetings.web.user.record.VideoInfo;
+import org.apache.openmeetings.web.user.record.VideoPlayer;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.request.IRequestParameters;
+import org.apache.wicket.request.mapper.parameter.PageParameters;
+
+public class RecordingPage extends BaseInitedPage {
+	private static final long serialVersionUID = 1L;
+
+	public RecordingPage(PageParameters p) {
+		String hash = p.get("hash").toString();
+		FlvRecording r = null;
+		if (WebSession.get().signIn(hash)) {
+			Long recId = getRecordingId();
+			if (WebSession.get().signIn(hash) && recId != null) {
+				r = getBean(FlvRecordingDao.class).get(recId);
+			}
+		}
+		add(new VideoInfo("info", r).setVisible(r != null), new VideoPlayer("player").setVisible(r != null));
+	}
+
+	@Override
+	protected void onParameterArrival(IRequestParameters requestParameters, AjaxRequestTarget target) {
+	}
+}

Modified: openmeetings/trunk/singlewebapp/src/web/java/org/apache/openmeetings/web/user/record/RecordingsPanel.html
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/web/java/org/apache/openmeetings/web/user/record/RecordingsPanel.html?rev=1560239&r1=1560238&r2=1560239&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/src/web/java/org/apache/openmeetings/web/user/record/RecordingsPanel.html (original)
+++ openmeetings/trunk/singlewebapp/src/web/java/org/apache/openmeetings/web/user/record/RecordingsPanel.html Wed Jan 22 02:57:15 2014
@@ -47,40 +47,10 @@
 						</tr>
 					</table>
 				</div>
-				<div wicket:id="info" class="info">
-					<table>
-						<tr>
-							<td><wicket:ommessage key="863"/></td>
-							<td><span wicket:id="fileName"></span></td>
-						</tr>
-						<tr>
-							<td><wicket:ommessage key="864"/></td>
-							<td><span wicket:id="fileSize"></span></td>
-						</tr>
-						<tr>
-							<td><wicket:ommessage key="865"/></td>
-							<td><span wicket:id="recordEnd"></span></td>
-						</tr>
-						<tr>
-							<td><wicket:ommessage key="874"/></td>
-							<td><span wicket:id="room_id"></span></td>
-						</tr>
-					</table>
-					<table>
-						<tr>
-							<td><input type="button" wicket:id="dAVI" wicket:ommessage="value:884"/></td>
-							<td><input type="button" wicket:id="dFLV" wicket:ommessage="value:883"/></td>
-						</tr>
-					</table>
-				</div>
+				<div wicket:id="info"></div>
 			</td>
-			<td class="video" wicket:id="video">
-				<div wicket:id="wait"></div>
-				<div class="player">
-					<video wicket:id="player">
-						Your browser does not support HTML5 video. <!-- FIXME hardcoded -->
-					</video>
-				</div>
+			<td>
+				<div wicket:id="video"></div>
 			</td>
 		</tr>
 	</table>

Modified: openmeetings/trunk/singlewebapp/src/web/java/org/apache/openmeetings/web/user/record/RecordingsPanel.java
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/web/java/org/apache/openmeetings/web/user/record/RecordingsPanel.java?rev=1560239&r1=1560238&r2=1560239&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/src/web/java/org/apache/openmeetings/web/user/record/RecordingsPanel.java (original)
+++ openmeetings/trunk/singlewebapp/src/web/java/org/apache/openmeetings/web/user/record/RecordingsPanel.java Wed Jan 22 02:57:15 2014
@@ -19,8 +19,6 @@
 package org.apache.openmeetings.web.user.record;
 
 import static org.apache.openmeetings.util.OmFileHelper.getMp4Recording;
-import static org.apache.openmeetings.util.OmFileHelper.getRecording;
-import static org.apache.openmeetings.util.OmFileHelper.isRecordingExists;
 import static org.apache.openmeetings.web.app.Application.getBean;
 import static org.apache.openmeetings.web.app.WebSession.getUserId;
 
@@ -38,9 +36,6 @@ import org.apache.openmeetings.web.app.W
 import org.apache.openmeetings.web.common.AddFolderDialog;
 import org.apache.openmeetings.web.common.ConfirmableAjaxLink;
 import org.apache.openmeetings.web.common.UserPanel;
-import org.apache.openmeetings.web.util.AjaxDownload;
-import org.apache.openmeetings.web.util.Mp4RecordingResourceReference;
-import org.apache.openmeetings.web.util.OggRecordingResourceReference;
 import org.apache.wicket.Component;
 import org.apache.wicket.ajax.AjaxEventBehavior;
 import org.apache.wicket.ajax.AjaxRequestTarget;
@@ -50,33 +45,19 @@ import org.apache.wicket.extensions.mark
 import org.apache.wicket.extensions.markup.html.repeater.tree.content.Folder;
 import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.basic.Label;
-import org.apache.wicket.markup.html.form.Button;
 import org.apache.wicket.markup.repeater.ReuseIfModelsEqualStrategy;
 import org.apache.wicket.model.CompoundPropertyModel;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.Model;
-import org.apache.wicket.model.util.ListModel;
-import org.apache.wicket.request.mapper.parameter.PageParameters;
-import org.apache.wicket.util.resource.FileResourceStream;
-import org.wicketstuff.html5.media.MediaSource;
-import org.wicketstuff.html5.media.video.Html5Video;
 
 public class RecordingsPanel extends UserPanel {
 	private static final long serialVersionUID = 1321258690447136958L;
-	private WebMarkupContainer info = new WebMarkupContainer("info");
-	private WebMarkupContainer trees = new WebMarkupContainer("trees");
-	private WebMarkupContainer video = new WebMarkupContainer("video");
-	private WebMarkupContainer wait = new WebMarkupContainer("wait");
-	private final Mp4RecordingResourceReference mp4res = new Mp4RecordingResourceReference();
-	private final OggRecordingResourceReference oggres = new OggRecordingResourceReference();
-	private final WebMarkupContainer player;
-	private final IModel<List<MediaSource>> playerModel = new ListModel<MediaSource>(new ArrayList<MediaSource>());
-	private RecordingTree myTree;
-	private IModel<FlvRecording> rm = new CompoundPropertyModel<FlvRecording>(new FlvRecording());
+	private final WebMarkupContainer trees = new WebMarkupContainer("trees");
+	private final VideoPlayer video = new VideoPlayer("video");
+	private final VideoInfo info = new VideoInfo("info");
+	private final RecordingTree myTree;
+	private final IModel<FlvRecording> rm = new CompoundPropertyModel<FlvRecording>(new FlvRecording());
 	private RecordingTree selected;
-	private Button dAVI = new Button("dAVI");
-	private Button dFLV = new Button("dFLV");
-	private AjaxDownload download = new AjaxDownload();
 
 	public RecordingsPanel(String id) {
 		super(id);
@@ -141,47 +122,7 @@ public class RecordingsPanel extends Use
 			);
 		add(new Label("homeSize", ""));
 		add(new Label("publicSize", ""));
-		add(info.setDefaultModel(rm).add(
-				new Label("fileName"), new Label("fileSize")
-				, new Label("recordEnd"), new Label("room_id")
-				, dFLV.setEnabled(false).setOutputMarkupId(true), dAVI.setEnabled(false).setOutputMarkupId(true)
-				).setOutputMarkupId(true)
-			);
-		player = new Html5Video("player", playerModel) {
-			private static final long serialVersionUID = -6058309447222765121L;
-
-			@Override
-			protected boolean isAutoPlay() {
-				return false;
-			}
-			
-			@Override
-			protected boolean isControls() {
-				return true;
-			}
-		};
-		dAVI.add(new AjaxEventBehavior("click"){
-			private static final long serialVersionUID = 5487675326677710761L;
-
-			@Override
-			protected void onEvent(AjaxRequestTarget target) {
-				download.setFileName(rm.getObject().getAlternateDownload());
-				download.setResourceStream(new FileResourceStream(getRecording(rm.getObject().getAlternateDownload())));
-				download.initiate(target);
-			}
-		});
-		dFLV.add(new AjaxEventBehavior("click"){
-			private static final long serialVersionUID = 8630730552169483717L;
-
-			@Override
-			protected void onEvent(AjaxRequestTarget target) {
-				download.setFileName(rm.getObject().getFileHash());
-				download.setResourceStream(new FileResourceStream(getRecording(rm.getObject().getFileHash())));
-				download.initiate(target);
-			}
-		});
-		add(video.add(wait.setVisible(false), player.setVisible(false)).setOutputMarkupId(true));
-		add(download);
+		add(video, info);
 	}
 
 	//FIXME need to be generalized to use as Room files explorer
@@ -253,16 +194,8 @@ public class RecordingsPanel extends Use
 						}
 						updateBranch(r, target);
 					} else {
-						boolean videoExists = getMp4Recording(r.getFileHash()).exists();
-						if (videoExists) {
-							PageParameters pp = new PageParameters().add("id", r.getFlvRecordingId());
-							playerModel.setObject(Arrays.asList(
-									new MediaSource("" + getRequestCycle().urlFor(mp4res, pp), "video/mp4")
-									, new MediaSource("" + getRequestCycle().urlFor(oggres, pp), "video/ogg")));
-						}
-						player.setVisible(videoExists);
-						target.add(video, info, dAVI.setEnabled(isRecordingExists(r.getAlternateDownload())));
-						target.add(video, info, dFLV.setEnabled(isRecordingExists(r.getFileHash())));
+						video.update(target, r);
+						info.update(target, r);
 						updateNode(r, target);
 					}
 				}

Added: openmeetings/trunk/singlewebapp/src/web/java/org/apache/openmeetings/web/user/record/VideoInfo.html
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/web/java/org/apache/openmeetings/web/user/record/VideoInfo.html?rev=1560239&view=auto
==============================================================================
--- openmeetings/trunk/singlewebapp/src/web/java/org/apache/openmeetings/web/user/record/VideoInfo.html (added)
+++ openmeetings/trunk/singlewebapp/src/web/java/org/apache/openmeetings/web/user/record/VideoInfo.html Wed Jan 22 02:57:15 2014
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:panel>
+	<div class="info" wicket:id="container">
+		<table>
+			<tr>
+				<td><wicket:ommessage key="863"/></td>
+				<td><span wicket:id="fileName"></span></td>
+			</tr>
+			<tr>
+				<td><wicket:ommessage key="864"/></td>
+				<td><span wicket:id="fileSize"></span></td>
+			</tr>
+			<tr>
+				<td><wicket:ommessage key="865"/></td>
+				<td><span wicket:id="recordEnd"></span></td>
+			</tr>
+			<tr>
+				<td><wicket:ommessage key="874"/></td>
+				<td><span wicket:id="room_id"></span></td>
+			</tr>
+		</table>
+		<table>
+			<tr>
+				<td><input type="button" wicket:id="dAVI" wicket:ommessage="value:884"/></td>
+				<td><input type="button" wicket:id="dFLV" wicket:ommessage="value:883"/></td>
+			</tr>
+		</table>
+	</div>
+</wicket:panel>
+</html>

Added: openmeetings/trunk/singlewebapp/src/web/java/org/apache/openmeetings/web/user/record/VideoInfo.java
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/web/java/org/apache/openmeetings/web/user/record/VideoInfo.java?rev=1560239&view=auto
==============================================================================
--- openmeetings/trunk/singlewebapp/src/web/java/org/apache/openmeetings/web/user/record/VideoInfo.java (added)
+++ openmeetings/trunk/singlewebapp/src/web/java/org/apache/openmeetings/web/user/record/VideoInfo.java Wed Jan 22 02:57:15 2014
@@ -0,0 +1,90 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.user.record;
+
+import static org.apache.openmeetings.util.OmFileHelper.getRecording;
+import static org.apache.openmeetings.util.OmFileHelper.isRecordingExists;
+
+import org.apache.openmeetings.db.entity.record.FlvRecording;
+import org.apache.openmeetings.web.util.AjaxDownload;
+import org.apache.wicket.ajax.AjaxEventBehavior;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.form.Button;
+import org.apache.wicket.markup.html.panel.Panel;
+import org.apache.wicket.model.CompoundPropertyModel;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.util.resource.FileResourceStream;
+
+public class VideoInfo extends Panel {
+	private static final long serialVersionUID = 1L;
+	private final static WebMarkupContainer container = new WebMarkupContainer("container");
+	private final Button dAVI = new Button("dAVI");
+	private final Button dFLV = new Button("dFLV");
+	private final AjaxDownload download = new AjaxDownload();
+	private final IModel<FlvRecording> rm = new CompoundPropertyModel<FlvRecording>(new FlvRecording());
+
+	public VideoInfo(String id) {
+		this(id, null);
+	}
+	
+	public VideoInfo(String id, FlvRecording r) {
+		super(id);
+		add(container.setOutputMarkupId(true));
+		setDefaultModel(rm);
+		
+		container.add(new Label("fileName"), new Label("fileSize"), new Label("recordEnd"), new Label("room_id"),
+				dFLV.setEnabled(false), dAVI.setEnabled(false));
+		dAVI.add(new AjaxEventBehavior("click"){
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void onEvent(AjaxRequestTarget target) {
+				download.setFileName(rm.getObject().getAlternateDownload());
+				download.setResourceStream(new FileResourceStream(getRecording(rm.getObject().getAlternateDownload())));
+				download.initiate(target);
+			}
+		});
+		dFLV.add(new AjaxEventBehavior("click"){
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void onEvent(AjaxRequestTarget target) {
+				download.setFileName(rm.getObject().getFileHash());
+				download.setResourceStream(new FileResourceStream(getRecording(rm.getObject().getFileHash())));
+				download.initiate(target);
+			}
+		});
+		add(download);
+		update(null, r);
+	}
+	
+	public VideoInfo update(AjaxRequestTarget target, FlvRecording r) {
+		rm.setObject(r == null ? new FlvRecording() : r);
+		
+		dAVI.setEnabled(isRecordingExists(rm.getObject().getAlternateDownload()));
+		dFLV.setEnabled(isRecordingExists(rm.getObject().getFileHash()));
+		if (target != null) {
+			target.add(container);
+		}
+		
+		return this;
+	}
+}

Added: openmeetings/trunk/singlewebapp/src/web/java/org/apache/openmeetings/web/user/record/VideoPlayer.html
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/web/java/org/apache/openmeetings/web/user/record/VideoPlayer.html?rev=1560239&view=auto
==============================================================================
--- openmeetings/trunk/singlewebapp/src/web/java/org/apache/openmeetings/web/user/record/VideoPlayer.html (added)
+++ openmeetings/trunk/singlewebapp/src/web/java/org/apache/openmeetings/web/user/record/VideoPlayer.html Wed Jan 22 02:57:15 2014
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:panel>
+	<div class="video" wicket:id="container">
+		<div wicket:id="wait"></div>
+		<video wicket:id="player">
+			Your browser does not support HTML5 video. <!-- FIXME hardcoded -->
+		</video>
+	</div>
+</wicket:panel>
+</html>

Added: openmeetings/trunk/singlewebapp/src/web/java/org/apache/openmeetings/web/user/record/VideoPlayer.java
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/web/java/org/apache/openmeetings/web/user/record/VideoPlayer.java?rev=1560239&view=auto
==============================================================================
--- openmeetings/trunk/singlewebapp/src/web/java/org/apache/openmeetings/web/user/record/VideoPlayer.java (added)
+++ openmeetings/trunk/singlewebapp/src/web/java/org/apache/openmeetings/web/user/record/VideoPlayer.java Wed Jan 22 02:57:15 2014
@@ -0,0 +1,87 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.user.record;
+
+import static org.apache.openmeetings.util.OmFileHelper.getMp4Recording;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.apache.openmeetings.db.entity.record.FlvRecording;
+import org.apache.openmeetings.web.util.Mp4RecordingResourceReference;
+import org.apache.openmeetings.web.util.OggRecordingResourceReference;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.panel.Panel;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.util.ListModel;
+import org.apache.wicket.request.mapper.parameter.PageParameters;
+import org.wicketstuff.html5.media.MediaSource;
+import org.wicketstuff.html5.media.video.Html5Video;
+
+public class VideoPlayer extends Panel {
+	private static final long serialVersionUID = 1L;
+	private final WebMarkupContainer wait = new WebMarkupContainer("wait"); //FIXME not used
+	private final WebMarkupContainer container = new WebMarkupContainer("container");
+	private final Mp4RecordingResourceReference mp4res = new Mp4RecordingResourceReference();
+	private final OggRecordingResourceReference oggres = new OggRecordingResourceReference();
+	private final WebMarkupContainer player;
+	private final IModel<List<MediaSource>> playerModel = new ListModel<MediaSource>(new ArrayList<MediaSource>());
+
+	public VideoPlayer(String id) {
+		this(id, null);
+	}
+	
+	public VideoPlayer(String id, FlvRecording r) {
+		super(id);
+		add(container.setOutputMarkupPlaceholderTag(true));
+		player = new Html5Video("player", playerModel) {
+			private static final long serialVersionUID = -6058309447222765121L;
+
+			@Override
+			protected boolean isAutoPlay() {
+				return false;
+			}
+			
+			@Override
+			protected boolean isControls() {
+				return true;
+			}
+		};
+		container.add(wait.setVisible(false), player);
+		update(null, r);
+	}
+	
+	public VideoPlayer update(AjaxRequestTarget target, FlvRecording r) {
+		boolean videoExists = r != null && getMp4Recording(r.getFileHash()).exists();
+		if (videoExists) {
+			PageParameters pp = new PageParameters().add("id", r.getFlvRecordingId());
+			playerModel.setObject(Arrays.asList(
+					new MediaSource("" + getRequestCycle().urlFor(mp4res, pp), "video/mp4")
+					, new MediaSource("" + getRequestCycle().urlFor(oggres, pp), "video/ogg")));
+		}
+		container.setVisible(videoExists);
+		if (target != null) {
+			target.add(container);
+		}
+		
+		return this;
+	}
+}