JSF Upload Vedio
jsp:
<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
<%@ taglib prefix="rich" uri="http://richfaces.ajax4jsf.org/rich" %>
<%@ taglib prefix="a4j" uri="http://richfaces.org/a4j" %>
<h:panelGroup>
<script type="text/javascript" src="<h:outputText value="#{request.contextPath}/js/flowplayer.3.1.2.min.js"/>"></script>
<script type="text/javascript">
jQuery(function() {
showPlayer();
});
function showPlayer() {
$f("player", "<h:outputText value="#{request.contextPath}/swf/flowplayer-3.1.2.swf"/>", {
clip: {
autoPlay: false,
autoBuffering: true
}
});
}
</script>
<style type="text/css">
#player {
height:340px;
width: 500px;
}
.selected-video {
font-weight:bold;
}
</style>
<table style="width:100%;height:500px;">
<tr>
<td style="width:40%;">
<rich:dataTable id="table" value="#{artistManageBean.profileVideos}" var="video"
style="width:100%;text-align:left;">
<h:column>
<h:panelGroup>
<div id="video<h:outputText value="#{video.id}"/>"
<h:outputText value="class='selected-video'"
rendered="#{artistManageBean.selectedVideo != null and artistManageBean.selectedVideo.id == video.id}"/> >
<a4j:commandLink id="preview" action="#{artistManageBean.doPreviewVideo}"
value="#{video.description != '' ? video.description : 'Unknown Video'}"
reRender="artist:table,artist:videoPreview" oncomplete="showPlayer();"/><br/>
<h:outputText value="#{video.preparedDuration.inMinutes} mins"
rendered="#{video.preparedDuration.inMinutes > 1}"/>
<h:outputText value="#{video.preparedDuration.inMinutes} min"
rendered="#{video.preparedDuration.inMinutes == 1}"/><br/>
<h:outputText value="less than minute"
rendered="#{video.preparedDuration.inMinutes < 1}"/>
<a4j:commandLink id="edit" value="Edit" immediate="true"
reRender="artist:uploadVideo"
action="#{artistManageBean.doEditVideo}"/>
<a4j:commandLink id="del" value="Delete" immediate="true"
reRender="artist:table,artist:videoPreview" oncomplete="showPlayer();"
action="#{artistManageBean.doRemoveVideo}"/>
</div>
</h:panelGroup>
</h:column>
</rich:dataTable>
<a4j:outputPanel id="uploadVideo">
<a4j:commandButton reRender="uploadVideo" rendered="#{artistManageBean.profileVideo == null}"
value="Upload Video" action="#{artistManageBean.doCreateVideo}"/>
<h:panelGrid columns="2" rendered="#{artistManageBean.profileVideo != null}">
<h:outputText value="#{artistManageBean.profileVideo.name != null ? 'Replace Current Video' : 'Upload Video'}"/>
<h:panelGroup id="video">
<rich:fileUpload id="videoUpload" acceptedTypes="mpg,flv,mov,avi,mpeg,mp4,mkv" required="true"
immediate="true" listWidth="280" listHeight="60" autoclear="false"
maxFilesQuantity="1" addControlLabel="Upload" immediateUpload="true"
requiredMessage="Video is required."
fileUploadListener="#{artistManageBean.uploadVideoListener}">
</rich:fileUpload>
<rich:message for="videoUpload" errorClass="error_single"/>
</h:panelGroup>
<h:outputLabel value="Description: " />
<h:inputText value="#{artistManageBean.profileVideo.description}" />
<h:outputLabel value="Duration: " />
<h:selectOneListbox id="duration" style="width:50px;" size="1"
value="#{artistManageBean.profileVideo.duration}">
<f:selectItem itemValue="1" itemLabel="1"/>
<f:selectItem itemValue="2" itemLabel="2"/>
<f:selectItem itemValue="3" itemLabel="3"/>
<f:selectItem itemValue="4" itemLabel="4"/>
<f:selectItem itemValue="5" itemLabel="5"/>
</h:selectOneListbox>
<h:outputLabel value=" " />
<h:panelGroup>
<a4j:commandButton id="upload" value="Upload" reRender="artist:table,artist:videoPreview,artist:uploadVideo"
oncomplete="showPlayer();" action="#{artistManageBean.doSaveVideo}"/>
<a4j:commandButton id="cancelUpload" value="Cancel" reRender="artist:table,artist:uploadVideo"
action="#{artistManageBean.doCancelVideo}"/>
</h:panelGroup>
</h:panelGrid>
</a4j:outputPanel>
</td>
<td style="vertical-align:top; width:60%;text-align:center;">
<div id="preview" style="width:500px; height:400px;">
<a4j:outputPanel id="videoPreview">
<h:panelGroup rendered="#{artistManageBean.selectedVideo == null}">
<a id="player" href="#"></a>
</h:panelGroup>
<h:panelGroup rendered="#{artistManageBean.selectedVideo != null}">
<h3><h:outputText value="#{artistManageBean.selectedVideo.description != ''
? artistManageBean.selectedVideo.description : 'Unknown Video'}"/></h3>
<div style="width:100%;">
<a id="player" href="<h:outputText value='#{request.contextPath}/video/#{artistManageBean.selectedVideo.name.fullPath}'/>"></a>
<h:panelGroup rendered="#{permissions.publicVideoGranted}">
<h:outputLink id="viewVd" value="#{request.contextPath}/admin/video/#{artistManageBean.publicVideo.id}"
rendered="#{artistManageBean.publicVideo != null}"
title="Go to the public video">
<h:outputText value="View public video"/>
</h:outputLink>
<a4j:commandLink id="creatVd" value="Publicate video to website"
action="#{artistManageBean.doPublishVideo}"
rendered="#{artistManageBean.publicVideo == null}"
oncomplete="showPlayer();"
reRender="artist:videoPreview"/>
</h:panelGroup>
</div>
</h:panelGroup>
</a4j:outputPanel>
</div>
</td>
</tr>
</table>
</h:panelGroup>
Background bean:
private MediaVO<ProfileVideo> profileVideoVO = null;
private ProfileVideo selectedProfileVideo = null;
private ProfileVideo profileVideo;
private boolean isEditVideo = false;
public List<ProfileVideo> getProfileVideos() {
if (profileVideoVO == null) {
profileVideoVO = new MediaVO<ProfileVideo>();
if (getMemberProfile().getId() != null) {
try {
profileVideoVO.getCurrent().addAll(profileVideoManager.getByMemberProfileId(
getMemberProfile().getId()));
if (profileVideoVO.hasCurrent()) {
setSelectedVideo(CollectionUtils.first(profileVideoVO.getCurrent()));
} else {
profileVideo = new ProfileVideo();
}
} catch (FinderException e) {
e.printStackTrace();
}
} else {
selectedProfileVideo = null;
}
}
return profileVideoVO.getCurrent();
}
public ProfileVideo getSelectedVideo() {
return selectedProfileVideo;
}
public String doPreviewVideo() {
ProfileVideo video = (ProfileVideo) requestMap().get("video");
if (video != null) {
setSelectedVideo(video);
}
else {
MessageUtil.addGlobalErrorMessage("Can't preview selected video: it's not found.");
}
return ActionForward.NONE;
}
public String doRemoveVideo() {
ProfileVideo video = (ProfileVideo) requestMap().get("video");
if (video != null) {
profileVideoVO.addRemoved(video);
MessageUtil.addGlobalInfoMessage("Video will be removed with saving artist profile.");
}
else {
MessageUtil.addGlobalErrorMessage("Can't remove video: it's not found.");
}
return ActionForward.NONE;
}
public void uploadVideoListener(UploadEvent event) {
InputStream fileInputStream = null;
try {
final UploadItem upload = event.getUploadItem();
if (upload.isTempFile()) {
// remove previously removed video
removeOldVideo();
// upload new video
fileInputStream = new FileInputStream(upload.getFile());
final VideoHelperWrapper wrapper = new VideoHelperWrapper();
wrapper.initialize();
wrapper.download(upload.getFileName(), fileInputStream);
profileVideo.setName(wrapper.getMediaName());
MessageUtil.addGlobalInfoMessage("Video was uploaded successfully.");
}
} catch (Exception e) {
e.printStackTrace();
MessageUtil.addGlobalErrorMessage("Cannot upload video.");
} finally {
DataAccessUtil.closeStream(fileInputStream);
}
}
public String doSaveVideo() {
if (profileVideo != null) {
final MediaName videoName = profileVideo.getName();
if (videoName == null) {
MessageUtil.addGlobalErrorMessage("Please, upload video file.");
} else {
ProfileVideo temp = new ProfileVideo();
temp.setName(videoName);
temp.setDescription(profileVideo.getDescription());
temp.setDuration(profileVideo.getDuration());
temp.setMemberProfileId(memberProfile.getId());
setSelectedVideo(temp);
if (profileVideo.getId() != null) {
temp.setId(profileVideo.getId());
profileVideoVO.addChanged(temp);
} else if (!isEditVideo){
profileVideoVO.addCreated(temp);
}
profileVideo = null;
}
}
isEditVideo = false;
return ActionForward.NONE;
}
public String doCancelVideo() {
if (!isEditVideo && profileVideo.getName() != null) {
VideoHelper.removeFile(profileVideo.getName().getFullPath());
}
profileVideo = null;
isEditVideo = false;
return ActionForward.NONE;
}
public String doCreateVideo() {
profileVideo = new ProfileVideo();
isEditVideo= false;
return ActionForward.NONE;
}
public String doEditVideo() {
isEditVideo = true;
ProfileVideo video = (ProfileVideo) requestMap().get("video");
if (video!= null) {
profileVideo = video;
} else {
profileVideo = new ProfileVideo();
}
return ActionForward.NONE;
}
private void removeOldVideo() {
if (profileVideo.getName() != null) {
VideoHelper.removeFile(profileVideo.getName().getFullPath());
profileVideo.setName(null);
}
}
public void setProfileVideo(ProfileVideo profileVideo) {
this.profileVideo = profileVideo;
}
public ProfileVideo getProfileVideo() {
return this.profileVideo;
}