package de.uhh.l2g.plugins.admin; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.ListIterator; import java.util.logging.Logger; import javax.portlet.ActionRequest; import javax.portlet.ActionResponse; import javax.portlet.PortletException; import javax.portlet.ResourceRequest; import javax.portlet.ResourceResponse; import org.json.JSONArray; import org.json.JSONException; import com.liferay.portal.kernel.exception.PortalException; import com.liferay.portal.kernel.exception.SystemException; import com.liferay.portal.kernel.json.JSONFactoryUtil; import com.liferay.portal.kernel.json.JSONObject; import com.liferay.portal.kernel.util.ParamUtil; import com.liferay.portal.kernel.util.PropsUtil; import com.liferay.util.bridges.mvc.MVCPortlet; import de.uhh.l2g.plugins.NoSuchLicenseException; import de.uhh.l2g.plugins.model.Category; import de.uhh.l2g.plugins.model.Creator; import de.uhh.l2g.plugins.model.Institution; import de.uhh.l2g.plugins.model.Lectureseries; import de.uhh.l2g.plugins.model.Lectureseries_Institution; import de.uhh.l2g.plugins.model.License; import de.uhh.l2g.plugins.model.Metadata; import de.uhh.l2g.plugins.model.Producer; import de.uhh.l2g.plugins.model.Segment; import de.uhh.l2g.plugins.model.Term; import de.uhh.l2g.plugins.model.Video; import de.uhh.l2g.plugins.model.Video_Category; import de.uhh.l2g.plugins.model.Video_Creator; import de.uhh.l2g.plugins.model.Video_Institution; import de.uhh.l2g.plugins.model.Video_Lectureseries; import de.uhh.l2g.plugins.model.impl.CategoryImpl; import de.uhh.l2g.plugins.model.impl.CreatorImpl; import de.uhh.l2g.plugins.model.impl.InstitutionImpl; import de.uhh.l2g.plugins.model.impl.LectureseriesImpl; import de.uhh.l2g.plugins.model.impl.LicenseImpl; import de.uhh.l2g.plugins.model.impl.MetadataImpl; import de.uhh.l2g.plugins.model.impl.ProducerImpl; import de.uhh.l2g.plugins.model.impl.SegmentImpl; import de.uhh.l2g.plugins.model.impl.VideoImpl; import de.uhh.l2g.plugins.model.impl.Video_CategoryImpl; import de.uhh.l2g.plugins.model.impl.Video_CreatorImpl; import de.uhh.l2g.plugins.model.impl.Video_InstitutionImpl; import de.uhh.l2g.plugins.model.impl.Video_LectureseriesImpl; import de.uhh.l2g.plugins.service.CategoryLocalServiceUtil; import de.uhh.l2g.plugins.service.CreatorLocalServiceUtil; import de.uhh.l2g.plugins.service.HostLocalServiceUtil; import de.uhh.l2g.plugins.service.InstitutionLocalServiceUtil; import de.uhh.l2g.plugins.service.LectureseriesLocalServiceUtil; import de.uhh.l2g.plugins.service.Lectureseries_InstitutionLocalServiceUtil; import de.uhh.l2g.plugins.service.LicenseLocalServiceUtil; import de.uhh.l2g.plugins.service.MetadataLocalServiceUtil; import de.uhh.l2g.plugins.service.ProducerLocalServiceUtil; import de.uhh.l2g.plugins.service.SegmentLocalServiceUtil; import de.uhh.l2g.plugins.service.TagcloudLocalServiceUtil; import de.uhh.l2g.plugins.service.TermLocalServiceUtil; import de.uhh.l2g.plugins.service.VideoLocalServiceUtil; import de.uhh.l2g.plugins.service.Video_CategoryLocalServiceUtil; import de.uhh.l2g.plugins.service.Video_CreatorLocalServiceUtil; import de.uhh.l2g.plugins.service.Video_InstitutionLocalServiceUtil; import de.uhh.l2g.plugins.service.Video_LectureseriesLocalServiceUtil; import de.uhh.l2g.plugins.util.FFmpegManager; import de.uhh.l2g.plugins.util.FileManager; import de.uhh.l2g.plugins.util.ProzessManager; import de.uhh.l2g.plugins.util.Security; public class AdminVideoManagement extends MVCPortlet { private final static Logger logger = Logger.getLogger(AdminVideoManagement.class.getName()); public void addSegment(ActionRequest request, ActionResponse response){ Video reqVideo = new VideoImpl(); Long reqVideoId = new Long(0); try{reqVideoId = new Long(request.getParameterMap().get("videoId")[0]);}catch(Exception e){} reqVideo = VideoLocalServiceUtil.getFullVideo(reqVideoId); request.setAttribute("reqVideo", reqVideo); String backURL = request.getParameter("backURL"); request.setAttribute("backURL", backURL); response.setRenderParameter("jspPage", "/admin/segments.jsp"); } public void viewVideo(ActionRequest request, ActionResponse response) throws PortalException, SystemException { //TagcloudLocalServiceUtil.generateForAllVideos(); //updateSegmentsForVideos(); // requested producer id Long reqPproducerId = (long)0; try{reqPproducerId = new Long(request.getParameterMap().get("producerId")[0]);}catch(Exception e){} // requested lecture series id Long reqLectureseriesId = (long)0; try{reqLectureseriesId = new Long(request.getParameterMap().get("lectureseriesId")[0]);}catch(Exception e){} // requested video Long reqVideoId = new Long(0); Video reqVideo = new VideoImpl(); try{reqVideoId = new Long(request.getParameterMap().get("videoId")[0]);}catch(Exception e){} try{reqVideo = VideoLocalServiceUtil.getFullVideo(reqVideoId);}catch(Exception e){} //hack for empty secure filename on the first upload if(reqVideo.getFilename().length()==0 && reqVideo.getSecureFilename().length()==0){ reqVideo.setSecureFilename(Security.createSecureFileName()+".xx"); VideoLocalServiceUtil.updateVideo(reqVideo); } //requested producer Producer reqProducer = new ProducerImpl(); try{ if(reqVideo.getVideoId()>0)reqProducer = ProducerLocalServiceUtil.getProdUcer(reqVideo.getProducerId()); else { reqProducer = ProducerLocalServiceUtil.getProdUcer(reqPproducerId); reqVideo.setProducerId(reqPproducerId); } }catch(Exception e){} request.setAttribute("reqProducer", reqProducer); // requested lecture series object Lectureseries reqLectureseries = new LectureseriesImpl(); try{ if(reqVideo.getVideoId()>0)reqLectureseries = LectureseriesLocalServiceUtil.getLectureseries(reqVideo.getLectureseriesId()); else{ reqLectureseries = LectureseriesLocalServiceUtil.getLectureseries(reqLectureseriesId); reqVideo.setLectureseriesId(reqLectureseriesId); } }catch(Exception e){} request.setAttribute("reqLectureseries", reqLectureseries); // requested metadata Metadata reqMetadata = new MetadataImpl(); try{ if(reqVideo.getVideoId()>0)reqMetadata = (MetadataImpl)MetadataLocalServiceUtil.getMetadata(reqVideo.getMetadataId()); else{ reqMetadata.setDescription(reqLectureseries.getLongDesc()); reqMetadata.setPublisher(reqProducer.getFirstName()+" "+reqProducer.getLastName()); reqMetadata.setLanguage(reqLectureseries.getLanguage()); } }catch(Exception e){} request.setAttribute("reqMetadata", reqMetadata); // requested lecture series list List<Lectureseries> reqLectureseriesList = new ArrayList<Lectureseries>(); try{ if(reqVideo.getVideoId()>0)reqLectureseriesList = LectureseriesLocalServiceUtil.getFilteredByApprovedSemesterFacultyProducer(1, (long) 0, (long) 0, reqVideo.getProducerId()); else reqLectureseriesList = LectureseriesLocalServiceUtil.getFilteredByApprovedSemesterFacultyProducer(1, (long) 0, (long) 0, reqPproducerId); }catch(Exception e){} request.setAttribute("reqLectureseriesList", reqLectureseriesList); //requested sub institutions List<Video_Institution> reqSubInstitutions = new ArrayList<Video_Institution>(); reqSubInstitutions = Video_InstitutionLocalServiceUtil.getByVideo(reqVideo.getVideoId()); request.setAttribute("reqSubInstitutions", reqSubInstitutions); //requested license License reqLicense = new LicenseImpl(); try{reqLicense = LicenseLocalServiceUtil.getByVideoId(reqVideo.getVideoId());}catch(Exception e){} request.setAttribute("reqLicense", reqLicense); String backURL = request.getParameter("backURL"); request.setAttribute("backURL", backURL); request.setAttribute("reqVideo", reqVideo); response.setRenderParameter("jspPage", "/admin/editVideo.jsp"); } public void addVideo(ActionRequest request, ActionResponse response) throws SystemException, PortalException { //search tags ArrayList<String> tagCloudArrayString = new ArrayList<String>(); //first metadata Metadata reqMetadata = new MetadataImpl(); reqMetadata = MetadataLocalServiceUtil.addMetadata(reqMetadata); request.setAttribute("reqMetadata", reqMetadata); //lecture series Long lectureseriesId = new Long(request.getParameter("lectureseriesId")); Lectureseries reqLectureseries = new LectureseriesImpl(); try{ reqLectureseries = (Lectureseries) LectureseriesLocalServiceUtil.getLectureseries(lectureseriesId); Category ctgr = new CategoryImpl(); try{ctgr = CategoryLocalServiceUtil.getCategory(reqLectureseries.getCategoryId());}catch(Exception e){} tagCloudArrayString.add(ctgr.getName()); tagCloudArrayString.add(reqLectureseries.getName()); tagCloudArrayString.add(reqLectureseries.getNumber()); }catch(Exception e){} request.setAttribute("reqLectureseries", reqLectureseries); //producer Long producerId = new Long(request.getParameter("producerId")); ProducerImpl reqProducer = new ProducerImpl(); reqProducer = (ProducerImpl)ProducerLocalServiceUtil.getProdUcer(producerId); request.setAttribute("reqProducer", reqProducer); //video Video newVideo = new VideoImpl(); //long newVideoId = counterLocalServiceUtil.increment(Video.class.getName()); //Video newVideo = videoPersistence.create(newVideoId); //newVideo = VideoLocalServiceUtil.createVideo(videoId); newVideo.setProducerId(producerId); if(lectureseriesId>0)newVideo.setLectureseriesId(lectureseriesId); else { java.util.Date date= new java.util.Date(); newVideo.setLectureseriesId(-date.getTime()); } newVideo.setHostId(reqProducer.getHostId()); newVideo.setMetadataId(reqMetadata.getMetadataId()); newVideo.setRootInstitutionId(reqProducer.getInstitutionId()); newVideo.setOpenAccess(0); newVideo.setSecureFilename(Security.createSecureFileName()+".xx"); newVideo.setCitation2go(1); //save it Video video = VideoLocalServiceUtil.addVideo(newVideo); request.setAttribute("reqVideo", newVideo); tagCloudArrayString.add(video.getTitle()); // update uploads for producer ProducerImpl p = new ProducerImpl(); p = (ProducerImpl)ProducerLocalServiceUtil.getProducer(producerId); int n = 0; n = VideoLocalServiceUtil.getByProducer(p.getProducerId()).size(); p.setNumberOfProductions(n); ProducerLocalServiceUtil.updateProducer(p); //link to lectureseries list Video_Lectureseries vl = new Video_LectureseriesImpl(); vl.setLectureseriesId(lectureseriesId); vl.setVideoId(newVideo.getVideoId()); vl.setOpenAccess(newVideo.getOpenAccess()); Video_LectureseriesLocalServiceUtil.addVideo_Lectureseries(vl); // requested lecture series list List<Lectureseries> reqLectureseriesList = new ArrayList<Lectureseries>(); try{reqLectureseriesList = LectureseriesLocalServiceUtil.getFilteredByApprovedSemesterFacultyProducer(1, (long) 0, (long) 0, producerId);}catch(Exception e){} request.setAttribute("reqLectureseriesList", reqLectureseriesList); //requested sub institutions List<Video_Institution> reqSubInstitutions = new ArrayList<Video_Institution>(); reqSubInstitutions = Video_InstitutionLocalServiceUtil.getByVideo(video.getVideoId()); request.setAttribute("reqSubInstitutions", reqSubInstitutions); //licence License license = new LicenseImpl(); license.setVideoId(newVideo.getVideoId()); license.setCcbyncsa(0); license.setL2go(1); LicenseLocalServiceUtil.addLicense(license); request.setAttribute("reqLicense", license); //update lg_video_institution table if(lectureseriesId>0){ List<Lectureseries_Institution> li = Lectureseries_InstitutionLocalServiceUtil.getByLectureseries(lectureseriesId); ListIterator<Lectureseries_Institution> i = li.listIterator(); while(i.hasNext()){ Institution ins = InstitutionLocalServiceUtil.getInstitution(i.next().getInstitutionId()); Video_Institution vi = new Video_InstitutionImpl(); vi.setVideoId(video.getVideoId()); vi.setInstitutionId(ins.getInstitutionId()); vi.setInstitutionParentId(ins.getParentId()); Video_InstitutionLocalServiceUtil.addVideo_Institution(vi); tagCloudArrayString.add(ins.getName()); } }else{//no lecture series Institution ins = InstitutionLocalServiceUtil.getInstitution(video.getRootInstitutionId()); Video_Institution vi = new Video_InstitutionImpl(); vi.setVideoId(video.getVideoId()); vi.setInstitutionId(video.getRootInstitutionId()); if(ins.getLevel()==1)vi.setInstitutionParentId(0); else vi.setInstitutionParentId(ins.getParentId()); Video_InstitutionLocalServiceUtil.addVideo_Institution(vi); tagCloudArrayString.add(ins.getName()); } //creators JSONArray creatorsArray = CreatorLocalServiceUtil.getJSONCreatorsByLectureseriesId(lectureseriesId); for (int i = 0; i< creatorsArray.length(); i++){ org.json.JSONObject creator; try { creator = creatorsArray.getJSONObject(i); Long creatorId= creator.getLong("creatorId"); Video_Creator vc = new Video_CreatorImpl(); vc.setCreatorId(creatorId); vc.setVideoId(newVideo.getVideoId()); Video_CreatorLocalServiceUtil.addVideo_Creator(vc); tagCloudArrayString.add(creator.getString("firstName")); tagCloudArrayString.add(creator.getString("lastName")); tagCloudArrayString.add(creator.getString("fullName")); } catch (JSONException e) { e.printStackTrace(); } } //add tags to tag cloud TagcloudLocalServiceUtil.add(tagCloudArrayString, video.getClass().getName(), video.getVideoId()); // String backURL = request.getParameter("backURL"); request.setAttribute("backURL", backURL); response.setRenderParameter("jspPage", "/admin/editVideo.jsp"); } public void serveResource(ResourceRequest resourceRequest, ResourceResponse resourceResponse) throws PortletException, IOException { String userID = resourceRequest.getRemoteUser(); Long userId = new Long(userID); String resourceID = resourceRequest.getResourceID(); Long videoId = ParamUtil.getLong(resourceRequest, "videoId"); Video video = VideoLocalServiceUtil.getFullVideo(videoId); Metadata metadata = new MetadataImpl(); try { Long metadataId = video.getMetadataId(); metadata = MetadataLocalServiceUtil.getMetadata(metadataId); } catch (PortalException e) { e.printStackTrace(); } catch (SystemException e) { e.printStackTrace(); } License license = new LicenseImpl(); try { license = LicenseLocalServiceUtil.getByVideoId(video.getVideoId()); } catch (NoSuchLicenseException e1) { e1.printStackTrace(); } catch (SystemException e1) { e1.printStackTrace(); } if(resourceID.equals("updateVideoFileName")){ String fileName = ParamUtil.getString(resourceRequest, "fileName"); String secureFileName = ParamUtil.getString(resourceRequest, "secureFileName"); String generationDate = ParamUtil.getString(resourceRequest, "generationDate"); String containerFormat = fileName.split("\\.")[fileName.split("\\.").length-1]; //update data base try { video.setFilename(fileName); video.setSecureFilename(secureFileName); video.setContainerFormat(containerFormat); video.setGenerationDate(generationDate); video.setUploadDate(new Date()); VideoLocalServiceUtil.updateVideo(video); FFmpegManager.updateFfmpegMetadata(video); //update thumbs String image=""; String fileLocation=""; if(video.getOpenAccess()==1){ image = video.getPreffix()+".jpg"; fileLocation = ProducerLocalServiceUtil.getProdUcer(video.getProducerId()).getHomeDir() + "/" + video.getFilename(); }else{ image = video.getSPreffix()+".jpg"; fileLocation = ProducerLocalServiceUtil.getProdUcer(video.getProducerId()).getHomeDir() + "/" + video.getSecureFilename(); } String thumbnailLocation = PropsUtil.get("lecture2go.images.system.path") + "/" + image; //delete old thumbs ProzessManager pm = new ProzessManager(); pm.deleteThumbnails(video); //and thumbs for segments // delete all segment images from repository location try{ List<Segment> segmentList = SegmentLocalServiceUtil.getSegmentsByVideoId(video.getVideoId()); SegmentLocalServiceUtil.deleteThumbhailsFromSegments(segmentList); }catch (PortalException e) { e.printStackTrace(); } catch (SystemException e) { e.printStackTrace(); } catch (NullPointerException e){ e.printStackTrace(); } // FFmpegManager.createThumbnail(fileLocation, thumbnailLocation); } catch (NumberFormatException e) { e.printStackTrace(); } catch (SystemException e) { e.printStackTrace(); } catch (PortalException e) { e.printStackTrace(); } JSONObject json = JSONFactoryUtil.createJSONObject(); writeJSON(resourceRequest, resourceResponse, json); } if(resourceID.equals("updateMetadata")){ String title = ParamUtil.getString(resourceRequest, "title"); String language = ParamUtil.getString(resourceRequest, "language"); String tags = ParamUtil.getString(resourceRequest, "tags"); String publisher = ParamUtil.getString(resourceRequest, "publisher"); Long lId = ParamUtil.getLong(resourceRequest, "lectureseriesId"); Long termId = ParamUtil.getLong(resourceRequest, "termId"); Long categoryId = ParamUtil.getLong(resourceRequest, "categoryId"); Integer citationAllowed = ParamUtil.getInteger(resourceRequest, "citationAllowedCheckbox"); String password = ParamUtil.getString(resourceRequest, "password"); Lectureseries oldLs = new LectureseriesImpl(); Long oldLsId = video.getLectureseriesId(); try { oldLs = LectureseriesLocalServiceUtil.getLectureseries(video.getLectureseriesId()); } catch (PortalException e1) { //e1.printStackTrace(); } catch (SystemException e1) { //e1.printStackTrace(); } //search tags ArrayList<String> tagCloudArrayString = new ArrayList<String>(); Lectureseries newLect = new LectureseriesImpl(); Category ctgr = new CategoryImpl(); //update data base try { video.setTitle(title); video.setLectureseriesId(lId); if(lId>0)video.setLectureseriesId(lId); else { java.util.Date date= new java.util.Date(); video.setLectureseriesId(-date.getTime()); //update table video_lectureseries Video_LectureseriesLocalServiceUtil.removeByVideoId(video.getVideoId()); } video.setTags(tags); if(lId>0){ newLect = LectureseriesLocalServiceUtil.getLectureseries(lId); // termId = newLect.getTermId(); categoryId = newLect.getCategoryId(); //update lg_video_institution table Video_InstitutionLocalServiceUtil.removeByVideoId(video.getVideoId()); List<Lectureseries_Institution> li = Lectureseries_InstitutionLocalServiceUtil.getByLectureseries(lId); ListIterator<Lectureseries_Institution> l_i = li.listIterator(); //institutions for video while(l_i.hasNext()){ Institution in = new InstitutionImpl(); Lectureseries_Institution lectinst = l_i.next(); in = InstitutionLocalServiceUtil.getInstitution(lectinst.getInstitutionId()); tagCloudArrayString.add(in.getName()); Video_Institution vi = new Video_InstitutionImpl(); vi.setVideoId(video.getVideoId()); vi.setInstitutionId(lectinst.getInstitutionId()); vi.setInstitutionParentId(in.getParentId()); Video_InstitutionLocalServiceUtil.addVideo_Institution(vi); } //update lg_video_lectureseries Video_Lectureseries vl = new Video_LectureseriesImpl(); vl.setVideoId(video.getVideoId()); vl.setLectureseriesId(lId); vl.setOpenAccess(video.getOpenAccess()); Video_LectureseriesLocalServiceUtil.removeByVideoId(video.getVideoId());//delete old entries Video_LectureseriesLocalServiceUtil.addVideo_Lectureseries(vl);//add new LectureseriesLocalServiceUtil.updateLectureseries(newLect); //update lectureseries LectureseriesLocalServiceUtil.updateOpenAccess(video, newLect); //add lecture series parameter to tag cloud tagCloudArrayString.add(newLect.getName()); tagCloudArrayString.add(newLect.getNumber()); }else{ //update institution for video only without lecture series List<Video_Institution> vinst = Video_InstitutionLocalServiceUtil.getByVideo(video.getVideoId()); ListIterator<Video_Institution> vinstItt = vinst.listIterator(); while(vinstItt.hasNext()){ Institution inst = InstitutionLocalServiceUtil.getById(vinstItt.next().getInstitutionId()); Institution parent = InstitutionLocalServiceUtil.getById(inst.getParentId()); tagCloudArrayString.add(inst.getName()); tagCloudArrayString.add(parent.getName()); } } //add category and term to tag cloud //category try{ctgr = CategoryLocalServiceUtil.getCategory(categoryId);}catch(Exception e){} tagCloudArrayString.add(ctgr.getName()); //term try{ Term t = TermLocalServiceUtil.getTerm(termId); tagCloudArrayString.add(t.getPrefix()+" "+t.getYear()); }catch(Exception e){} video.setTermId(termId); // //and update categories in DB for video Video_CategoryLocalServiceUtil.removeByVideo(videoId); Video_Category vc = new Video_CategoryImpl(); vc.setVideoId(videoId); vc.setCategoryId(categoryId); if(categoryId>0)Video_CategoryLocalServiceUtil.addVideo_Category(vc); // //title to tag cloud tagCloudArrayString.add(video.getTitle()); //add creators to tag cloud JSONArray creatorsArray = CreatorLocalServiceUtil.getJSONCreatorsByVideoId(videoId); for (int i = 0; i< creatorsArray.length(); i++){ org.json.JSONObject creator; try { creator = creatorsArray.getJSONObject(i); tagCloudArrayString.add(creator.getString("fullName")); } catch (JSONException e) { //e.printStackTrace(); } } //update tag cloud for this video TagcloudLocalServiceUtil.updateByObjectIdAndObjectClassType(tagCloudArrayString, video.getClass().getName(), video.getVideoId()); //set citation video.setCitation2go(citationAllowed); //password video.setPassword(password); // update video VideoLocalServiceUtil.updateVideo(video); // refresh open access for old lecture if lid > 0 if(oldLs.getLectureseriesId()>0) LectureseriesLocalServiceUtil.updateOpenAccess(video, oldLs); //update lg_lectureseries_creators if(lId.longValue() != oldLsId.longValue()) { try{ if(lId>0)CreatorLocalServiceUtil.updateCreatorsForLectureseriesOverTheAssigenedVideosByLectureseriesId(lId); }catch(SystemException e){} try{ if(oldLsId>0)CreatorLocalServiceUtil.updateCreatorsForLectureseriesOverTheAssigenedVideosByLectureseriesId(oldLsId); }catch(SystemException e){} } } catch (NumberFormatException e) { //System.out.println(e); } catch (SystemException e) { //System.out.println(e); } catch (PortalException e) { //e.printStackTrace(); } //metadata try { metadata.setTitle(title); metadata.setPublisher(publisher); metadata.setLanguage(language); MetadataLocalServiceUtil.updateMetadata(metadata); } catch (NumberFormatException e) { // System.out.println(e); } catch (SystemException e) { // System.out.println(e); } //rebuild rss // generate RSS ProzessManager pm = new ProzessManager(); for (String f: FileManager.MEDIA_FORMATS) { try { pm.generateRSS(video, f); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } JSONObject json = JSONFactoryUtil.createJSONObject(); //generate new JSON date for auto complete functionality writeJSON(resourceRequest, resourceResponse, json); } if(resourceID.equals("videoUpdateGenerationDate")){ String generationDate = ParamUtil.getString(resourceRequest, "generationDate"); JSONObject jo = JSONFactoryUtil.createJSONObject(); video.setGenerationDate(generationDate); try { VideoLocalServiceUtil.updateVideo(video); jo.put("generationDate", generationDate); writeJSON(resourceRequest, resourceResponse, jo); } catch (SystemException e) { //e.printStackTrace(); } } if(resourceID.equals("updateNumberOfProductions")){ Producer producer = new ProducerImpl(); JSONObject jo = JSONFactoryUtil.createJSONObject(); try { producer = ProducerLocalServiceUtil.getProducer(video.getProducerId()); // update uploads for producer int n = 0; n = VideoLocalServiceUtil.getByProducer(producer.getProducerId()).size(); producer.setNumberOfProductions(n); jo.put("numberOfProductions", n); ProducerLocalServiceUtil.updateProducer(producer); } catch (Exception e1) { jo.put("numberOfProductions", "-1"); } writeJSON(resourceRequest, resourceResponse, jo); } if(resourceID.equals("videoUpdateFirstTitle")){ String firsttitle = ParamUtil.getString(resourceRequest, "firsttitle"); JSONObject jo = JSONFactoryUtil.createJSONObject(); video.setTitle(firsttitle); try { VideoLocalServiceUtil.updateVideo(video); jo.put("firsttitle", firsttitle); writeJSON(resourceRequest, resourceResponse, jo); } catch (SystemException e) { //e.printStackTrace(); } } if(resourceID.equals("getGenerationDate")){ JSONObject jo = JSONFactoryUtil.createJSONObject(); jo.put("generationDate", video.getGenerationDate()); writeJSON(resourceRequest, resourceResponse, jo); } if(resourceID.equals("getFileName")){ JSONObject jo = JSONFactoryUtil.createJSONObject(); String fileName=""; if(video.getFilename().length()>0)fileName=video.getFilename(); jo.put("fileName", fileName); writeJSON(resourceRequest, resourceResponse, jo); } if(resourceID.equals("getSecureFileName")){ JSONObject jo = JSONFactoryUtil.createJSONObject(); String secureFileName=""; if(video.getSecureFilename().length()>0)secureFileName=video.getSecureFilename(); jo.put("secureFileName", secureFileName); writeJSON(resourceRequest, resourceResponse, jo); } if(resourceID.equals("getShare")){ JSONObject jo = JSONFactoryUtil.createJSONObject(); String url = ""; if(video.getOpenAccess()==0)url=video.getSecureUrl(); else url=video.getUrl(); jo.put("commsyEmbed", video.getEmbedCommsy()); jo.put("html5Embed", video.getEmbedHtml5()); jo.put("iframeEmbed", video.getEmbedIframe()); jo.put("url", url); writeJSON(resourceRequest, resourceResponse, jo); } if(resourceID.equals("videoFileNameExists")){ String filename = ParamUtil.getString(resourceRequest, "fileName"); JSONObject jo = JSONFactoryUtil.createJSONObject(); try { List<Video> vl = VideoLocalServiceUtil.getByFilename(filename); if(vl.size()>0)jo.put("exist", "1"); else jo.put("exist", "0"); } catch (SystemException e) { // e.printStackTrace(); jo.put("exist", "0"); } writeJSON(resourceRequest, resourceResponse, jo); } if(resourceID.equals("updateLicense")){ String licens = ParamUtil.getString(resourceRequest, "license"); //reset first license.setCcbyncsa(0); license.setL2go(0); //save next if(licens.equals("uhhl2go")){ license.setL2go(1); license.setCcbyncsa(0); }else{ license.setL2go(0); license.setCcbyncsa(1); } try { LicenseLocalServiceUtil.updateLicense(license); logger.info("LICENSE_UPDATE_SUCCESS"); } catch (SystemException e) { // e.printStackTrace(); logger.info("LICENSE_UPDATE_FAILED"); } JSONObject json = JSONFactoryUtil.createJSONObject(); writeJSON(resourceRequest, resourceResponse, json); } if(resourceID.equals("updateDescription")){ String description = ParamUtil.getString(resourceRequest, "description"); metadata.setDescription(description); try { MetadataLocalServiceUtil.updateMetadata(metadata); logger.info("DESCRIPTION_UPDATE_SUCCESS"); } catch (SystemException e) { // e.printStackTrace(); logger.info("DESCRIPTION_UPDATE_FAILED"); } JSONObject json = JSONFactoryUtil.createJSONObject(); writeJSON(resourceRequest, resourceResponse, json); } if(resourceID.equals("toggleSegmentation")){ String segmentation = ParamUtil.getString(resourceRequest, "segmentationPermittedCheckbox"); int sAllowed = new Integer(segmentation); if(sAllowed==0)video.setPermittedToSegment(0); else video.setPermittedToSegment(1); try { VideoLocalServiceUtil.updateVideo(video); } catch (SystemException e) { // e.printStackTrace(); } JSONObject json = JSONFactoryUtil.createJSONObject(); writeJSON(resourceRequest, resourceResponse, json); } if (resourceID.equals("addSegment")) { String shortTitle = ParamUtil.getString(resourceRequest, "chortTitle"); String timeStart = ParamUtil.getString(resourceRequest, "timeStart"); String timeEnd = ParamUtil.getString(resourceRequest, "timeEnd"); String text = ParamUtil.getString(resourceRequest, "text"); String chapter = ParamUtil.getString(resourceRequest, "chapter"); String comment = ParamUtil.getString(resourceRequest, "comment"); int chap = 0; if (chapter.equals("1") && comment.equals("0")) chap = 1; if (!shortTitle.trim().equals("") && !timeStart.trim().equals("") && !timeEnd.trim().equals("")) { Segment segment = new SegmentImpl(); segment.setVideoId(videoId); segment.setTitle(shortTitle); segment.setStart(timeStart); segment.setEnd(timeEnd); segment.setChapter(chap); segment.setDescription(text); segment.setUserId(userId); try { // save Segment s = SegmentLocalServiceUtil.createSegment(segment); JSONObject jo = JSONFactoryUtil.createJSONObject(); jo.put("chapter", s.getChapter()); jo.put("description", s.getDescription()); jo.put("end", s.getEnd()); jo.put("image", s.getImage()); jo.put("number", s.getNumber()); jo.put("segmentId", s.getPrimaryKey()); jo.put("seconds", s.getSeconds()); jo.put("start", s.getStart()); jo.put("title", s.getTitle()); jo.put("userId", s.getUserId()); jo.put("videoId", s.getVideoId()); jo.put("previousSegmentId", SegmentLocalServiceUtil.getPreviusSegmentId(s.getSegmentId())); // and return response writeJSON(resourceRequest, resourceResponse, jo); } catch (SystemException e) { e.printStackTrace(); } catch (PortalException e) { e.printStackTrace(); } } //update chapter file (vtt) updateVttChapterFile(video); } if(resourceID.equals("showSegments")){ String vId = ParamUtil.getString(resourceRequest, "videoId"); Long vID = new Long(vId); com.liferay.portal.kernel.json.JSONArray ja = JSONFactoryUtil.createJSONArray(); //get segments for video and convert to json array try { List<Segment> sl= SegmentLocalServiceUtil.getSegmentsByVideoId(vID); ListIterator<Segment> sIt = sl.listIterator(); while(sIt.hasNext()){ Segment s = sIt.next(); JSONObject jo = JSONFactoryUtil.createJSONObject(); jo.put("chapter", s.getChapter()); jo.put("description", s.getDescription()); jo.put("end", s.getEnd()); jo.put("image", s.getImage()); jo.put("number", s.getNumber()); jo.put("segmentId", s.getPrimaryKey()); jo.put("seconds", s.getSeconds()); jo.put("start", s.getStart()); jo.put("title", s.getTitle()); jo.put("userId", s.getUserId()); jo.put("videoId", s.getVideoId()); jo.put("previousSegmentId", SegmentLocalServiceUtil.getPreviusSegmentId(s.getSegmentId())); ja.put(jo); } } catch (PortalException e) { e.printStackTrace(); } catch (SystemException e) { e.printStackTrace(); } writeJSON(resourceRequest, resourceResponse, ja); } if(resourceID.equals("deleteSegment")){ String sId = ParamUtil.getString(resourceRequest, "segmentId"); Long sID = new Long(sId); //delete requested segment try { Segment s = SegmentLocalServiceUtil.removeSegment(sID); JSONObject jo = JSONFactoryUtil.createJSONObject(); jo.put("chapter", s.getChapter()); jo.put("description", s.getDescription()); jo.put("end", s.getEnd()); jo.put("image", s.getImage()); jo.put("number", s.getNumber()); jo.put("segmentId", s.getPrimaryKey()); jo.put("seconds", s.getSeconds()); jo.put("start", s.getStart()); jo.put("title", s.getTitle()); jo.put("userId", s.getUserId()); jo.put("videoId", s.getVideoId()); writeJSON(resourceRequest, resourceResponse, jo); } catch (SystemException e) { e.printStackTrace(); } catch (PortalException e) { e.printStackTrace(); } //update chapter file (vtt) updateVttChapterFile(video); } if(resourceID.equals("isFirstUpload")){ JSONObject jo = JSONFactoryUtil.createJSONObject(); if(video.getFilename().isEmpty())jo.put("firstUpload", "1"); else jo.put("firstUpload", "0"); writeJSON(resourceRequest, resourceResponse, jo); } if(resourceID.equals("defaultContainer")){ JSONObject jo = JSONFactoryUtil.createJSONObject(); jo.put("containerFormat", video.getContainerFormat()); writeJSON(resourceRequest, resourceResponse, jo); } if(resourceID.equals("deleteFile")){ String fileName = ParamUtil.getString(resourceRequest, "fileName"); String mainContainerFormat = ""; //delete file String fPath=""; try { fPath = PropsUtil.get("lecture2go.media.repository")+"/"+HostLocalServiceUtil.getByHostId(video.getHostId()).getServerRoot()+"/"+ProducerLocalServiceUtil.getProducer(video.getProducerId()).getHomeDir()+"/"; mainContainerFormat = VideoLocalServiceUtil.getVideo(videoId).getContainerFormat(); } catch (PortalException e) { e.printStackTrace(); } catch (SystemException e) { e.printStackTrace(); } JSONArray jarr = new JSONArray(); //delete all if(fileName.endsWith(mainContainerFormat)){ //delete all file on disc //but not from DB JSONArray jVids = VideoLocalServiceUtil.getJSONVideo(video.getVideoId()); for (int i = 0; i < jVids.length(); i++) { try { org.json.JSONObject o = jVids.getJSONObject(i); String fs = (String) o.get("name"); File f = new File(fPath+fs); if(f.delete()){ o.put("fileId", fs.replace(".", "")); }else{ o.put("fileId", ""); } jarr.put(o); } catch (JSONException e) { e.printStackTrace(); } } ProzessManager pm = new ProzessManager(); try { pm.deleteFilesImagesFromVideo(video); } catch (Exception e) { e.printStackTrace(); } }else{ org.json.JSONObject o = new org.json.JSONObject(); try { File f = new File(fPath+fileName); if(f.delete()){ o.put("fileId", fileName.replace(".", "")); }else{ o.put("fileId", ""); } jarr.put(o); } catch (JSONException e) { e.printStackTrace(); } } writeJSON(resourceRequest, resourceResponse, jarr); } if(resourceID.equals("getJSONCreator")){ String creatorId = ParamUtil.getString(resourceRequest, "creatorId"); Long cId = new Long(0); try{ cId = new Long(creatorId); }catch(Exception e){ e.printStackTrace(); } JSONArray json = new JSONArray(); try { json = CreatorLocalServiceUtil.getJSONCreator(cId); } catch (PortalException e) { e.printStackTrace(); } catch (SystemException e) { e.printStackTrace(); } writeJSON(resourceRequest, resourceResponse, json); } if(resourceID.equals("updateCreators")){ String creators = ParamUtil.getString(resourceRequest, "creator"); try { JSONArray creatorsArray = new JSONArray(creators); //remove creators for video try { Video_CreatorLocalServiceUtil.deleteByVideoId(videoId); //and update with new creators from list for (int i = 0; i< creatorsArray.length(); i++){ org.json.JSONObject creator = creatorsArray.getJSONObject(i); Long creatorId= creator.getLong("creatorId"); String firstName = creator.getString("firstName"); String lastName = creator.getString("lastName"); String middleName = creator.getString("middleName"); String jobTitle = creator.getString("jobTitle"); String gender = creator.getString("gender"); String fullName = creator.getString("fullName"); Video_Creator vc = new Video_CreatorImpl(); Long newCreatorId = new Long(0); //if creator exists in DB, just add to video if(creatorId>new Long(0)){ newCreatorId = creatorId; }else{ //if new creator doesn't exits in the creators DB (check by full name), //create a new one in DB and add to video List<Creator> cL = CreatorLocalServiceUtil.getByFullName(fullName); if(cL.size()==0){ Creator c = new CreatorImpl(); c.setFirstName(firstName); c.setLastName(lastName); c.setMiddleName(middleName); c.setJobTitle(jobTitle); c.setGender(gender); c.setFullName(fullName); newCreatorId = CreatorLocalServiceUtil.addCreator(c).getCreatorId(); }else{ newCreatorId = cL.listIterator().next().getCreatorId(); } } vc.setCreatorId(newCreatorId); vc.setVideoId(videoId); List<Video_Creator> vcl = new ArrayList<Video_Creator>(); vcl = Video_CreatorLocalServiceUtil.getByVideoCreator(videoId, newCreatorId); if(vcl.size()==0)Video_CreatorLocalServiceUtil.addVideo_Creator(vc); } } catch (SystemException e) { e.printStackTrace(); } //now update creators for the whole lecture series Long lId = video.getLectureseriesId(); try{ if(lId>0)CreatorLocalServiceUtil.updateCreatorsForLectureseriesOverTheAssigenedVideosByLectureseriesId(lId); }catch(SystemException e){} } catch (JSONException e) { e.printStackTrace(); } writeJSON(resourceRequest, resourceResponse, CreatorLocalServiceUtil.getJSONCreatorsByVideoId(videoId)); } if(resourceID.equals("updateSubInstitutions")){ String subInstitutions = ParamUtil.getString(resourceRequest, "subInstitution"); try { JSONArray institutionsArray = new JSONArray(subInstitutions); //remove sub-institutions for video try { Video_InstitutionLocalServiceUtil.removeByVideoId(videoId); //and update with new institutions from list if(institutionsArray.length()>0){ for (int i = 0; i< institutionsArray.length(); i++){ org.json.JSONObject institution = institutionsArray.getJSONObject(i); Long institutionId= institution.getLong("institutionId"); Institution in = new InstitutionImpl(); try { in = InstitutionLocalServiceUtil.getInstitution(institutionId); System.out.print("LEVEEEEELLL---->"+in.getLevel()); } catch (PortalException e) { e.printStackTrace(); } List<Video_Institution> vil = new ArrayList<Video_Institution>(); vil = Video_InstitutionLocalServiceUtil.getByVideoAndInstitution(videoId, institutionId); Video_Institution vi = new Video_InstitutionImpl(); vi.setInstitutionId(in.getInstitutionId()); vi.setVideoId(videoId); if(in.getLevel()==1)vi.setInstitutionParentId(0); else vi.setInstitutionParentId(in.getParentId()); if(vil.size()==0)Video_InstitutionLocalServiceUtil.addVideo_Institution(vi); } } } catch (SystemException e) { e.printStackTrace(); } } catch (JSONException e) { e.printStackTrace(); } writeJSON(resourceRequest, resourceResponse, CreatorLocalServiceUtil.getJSONCreatorsByVideoId(videoId)); } if(resourceID.equals("updateupdateOpenAccessForLectureseries")){ Lectureseries lect = new LectureseriesImpl(); try { lect = LectureseriesLocalServiceUtil.getLectureseries(video.getLectureseriesId()); } catch (PortalException e) { e.printStackTrace(); } catch (SystemException e) { e.printStackTrace(); } try { LectureseriesLocalServiceUtil.updateOpenAccess(video, lect); } catch (SystemException e) { e.printStackTrace(); } writeJSON(resourceRequest, resourceResponse, CreatorLocalServiceUtil.getJSONCreatorsByVideoId(videoId)); } } public void removeVideo(ActionRequest request, ActionResponse response) throws PortalException, SystemException{ Video video = new VideoImpl(); Long reqVideoId = new Long(0); try{reqVideoId = new Long(request.getParameterMap().get("videoId")[0]);}catch(Exception e){} video = VideoLocalServiceUtil.getFullVideo(reqVideoId); ProzessManager pm = new ProzessManager(); pm.deleteVideo(video); String backURL = request.getParameter("backURL"); try { response.sendRedirect(backURL); } catch (IOException e) { e.printStackTrace(); } } public void lockVideo(ActionRequest request, ActionResponse response){ Video video = new VideoImpl(); Long reqVideoId = new Long(0); try{reqVideoId = new Long(request.getParameterMap().get("videoId")[0]);}catch(Exception e){} video = VideoLocalServiceUtil.getFullVideo(reqVideoId); ProzessManager pm = new ProzessManager(); //deactivate open access //and refresh lecture series with this video try { pm.deactivateOpenaccess(video); } catch (PortalException e) { } catch (SystemException e) { } String backURL = request.getParameter("backURL"); try { response.sendRedirect(backURL); } catch (IOException e) { e.printStackTrace(); } } public void unlockVideo(ActionRequest request, ActionResponse response){ Video video = new VideoImpl(); Long reqVideoId = new Long(0); try{reqVideoId = new Long(request.getParameterMap().get("videoId")[0]);}catch(Exception e){} video = VideoLocalServiceUtil.getFullVideo(reqVideoId); //activate open access //and refresh lecture series with this video ProzessManager pm = new ProzessManager(); try { pm.activateOpenaccess(video); } catch (SystemException e) { } catch (PortalException e) { } String backURL = request.getParameter("backURL"); try { response.sendRedirect(backURL); } catch (IOException e) { e.printStackTrace(); } } public void activateDownload(ActionRequest request, ActionResponse response) throws SystemException, PortalException{ Video video = new VideoImpl(); Long reqVideoId = new Long(0); try{reqVideoId = new Long(request.getParameterMap().get("videoId")[0]);}catch(Exception e){} video = VideoLocalServiceUtil.getVideo(reqVideoId); ProzessManager pm = new ProzessManager(); pm.activateDownload(video); String backURL = request.getParameter("backURL"); try { response.sendRedirect(backURL); } catch (IOException e) { e.printStackTrace(); } } public void deactivateDownload(ActionRequest request, ActionResponse response) throws SystemException, PortalException{ Video video = new VideoImpl(); Long reqVideoId = new Long(0); try{reqVideoId = new Long(request.getParameterMap().get("videoId")[0]);}catch(Exception e){} video = VideoLocalServiceUtil.getVideo(reqVideoId); ProzessManager pm = new ProzessManager(); pm.deactivateDownload(video); String backURL = request.getParameter("backURL"); try { response.sendRedirect(backURL); } catch (IOException e) { e.printStackTrace(); } } public void updateVttChapterFile(Video video){ File vttDirectory = new File(PropsUtil.get("lecture2go.chapters.system.path")); String dateiName = vttDirectory + "/" + video.getVideoId()+".vtt"; //get all segments List<Segment> sL = new ArrayList<Segment>(); try { sL = SegmentLocalServiceUtil.getSegmentsByVideoId(video.getVideoId()); } catch (PortalException e) {} catch (SystemException e) {} // ListIterator<Segment> sLi = sL.listIterator(); String text="WEBVTT \n\n"; while(sLi.hasNext()){ Segment seg = sLi.next(); text +=seg.getStart()+" --> "+seg.getEnd()+" \n"; if(seg.getChapter()==1){ text +=seg.getTitle()+" \n\n"; }else{ String desc=""; if(seg.getDescription().trim().length()>0)desc = " ("+seg.getDescription().trim() + ")"; text += seg.getTitle()+ desc + " \n\n"; } } FileOutputStream s; try { s = new FileOutputStream(dateiName); for (int i = 0; i < text.length(); i++) { s.write((byte) text.charAt(i)); } s.close(); } catch (FileNotFoundException e) {} catch (IOException e) {} } public void updateSegmentsForVideos(){ try { List<Video> vl = VideoLocalServiceUtil.getAll(); ListIterator<Video> vit = vl.listIterator(); while(vit.hasNext()){ Video v = VideoLocalServiceUtil.getFullVideo(vit.next().getVideoId()); if(v.isHasChapters())updateVttChapterFile(v); } } catch (SystemException e) { e.printStackTrace(); } } }