/** * Copyright (c) 2000-2013 Liferay, Inc. All rights reserved. * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation; either version 2.1 of the License, or (at your option) * any later version. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. */ package de.uhh.l2g.plugins.service.impl; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Comparator; import java.util.Date; import java.util.List; import java.util.ListIterator; import java.util.Map; import java.util.TreeMap; import com.liferay.portal.NoSuchModelException; import com.liferay.portal.kernel.exception.PortalException; import com.liferay.portal.kernel.exception.SystemException; import de.uhh.l2g.plugins.model.Lectureseries; import de.uhh.l2g.plugins.model.Video; import de.uhh.l2g.plugins.model.Term; import de.uhh.l2g.plugins.model.impl.LectureseriesImpl; import de.uhh.l2g.plugins.model.impl.VideoImpl; import de.uhh.l2g.plugins.service.LectureseriesLocalServiceUtil; import de.uhh.l2g.plugins.service.Lectureseries_CategoryLocalServiceUtil; 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_LectureseriesLocalServiceUtil; import de.uhh.l2g.plugins.service.base.LectureseriesLocalServiceBaseImpl; import de.uhh.l2g.plugins.service.persistence.LectureseriesFinderUtil; /** * The implementation of the lectureseries local service. * * <p> * All custom service methods should be put in this class. Whenever methods are added, rerun ServiceBuilder to copy their definitions into the {@link de.uhh.l2g.plugins.service.LectureseriesLocalService} interface. * * <p> * This is a local service. Methods of this service will not have security checks based on the propagated JAAS credentials because this service can only be accessed from within the same VM. * </p> * * @author Iavor Sturm * @see de.uhh.l2g.plugins.service.base.LectureseriesLocalServiceBaseImpl * @see de.uhh.l2g.plugins.service.LectureseriesLocalServiceUtil */ public class LectureseriesLocalServiceImpl extends LectureseriesLocalServiceBaseImpl { /* * NOTE FOR DEVELOPERS: * * Never reference this interface directly. Always use {@link de.uhh.l2g.plugins.service.LectureseriesLocalServiceUtil} to access the lectureseries local service. */ @Override public Lectureseries updateLectureseries(Lectureseries lectureseries){ Lectureseries l = new LectureseriesImpl(); if(lectureseries.getLectureseriesId()>0) try { l=super.updateLectureseries(lectureseries); } catch (SystemException e) { e.printStackTrace(); } return l; } public List<Lectureseries> getFilteredByApprovedSemesterFacultyProducer(Integer approved, Long semester, Long facultyId, Long producerId) { List<Lectureseries> l = LectureseriesFinderUtil.findFilteredByApprovedSemesterFacultyProducer(approved, semester, facultyId, producerId); try{ l.isEmpty();//check }catch(NullPointerException npe){ l = new ArrayList<Lectureseries>(); } return l; } public Map<Term, List<Lectureseries>> getFilteredByApprovedSemesterFacultyProducerAsTreeMapSortedByTerm(Integer approved, Long semester, Long facultyId, Long producerId) { List<Lectureseries> l = getFilteredByApprovedSemesterFacultyProducer(approved,semester,facultyId,producerId); Map<Term, List<Lectureseries>> lectureseriesTreeMapSortedByTerm = new TreeMap<Term, List<Lectureseries>>(new Comparator<Term>() { @Override public int compare(Term t1, Term t2) { return t2.getYear().compareTo(t1.getYear()); } }); for (Lectureseries singleLectureseries: l) { try{ Term t = TermLocalServiceUtil.getTerm(singleLectureseries.getTermId()); List<Lectureseries> tmp = lectureseriesTreeMapSortedByTerm.get(t); if(tmp == null){ // no object with this series before, so create new one tmp = new ArrayList<Lectureseries>(); lectureseriesTreeMapSortedByTerm.put(t, tmp); } tmp.add(singleLectureseries); }catch(Exception e){} } return lectureseriesTreeMapSortedByTerm; } public List<Lectureseries> getAll() throws SystemException{ return lectureseriesPersistence.findAll(); } public List<Lectureseries> getAllLectureseriesWhithOpenaccessVideos(){ return LectureseriesFinderUtil.findAllLectureseriesWhithOpenaccessVideos(); } public List<Lectureseries> getAllLectureseriesWhithPassword(){ return LectureseriesFinderUtil.findAllLectureseriesWhithPassword(); } public List<Lectureseries> getAllForVideo(Video video){ return LectureseriesFinderUtil.findAllLectureseriesForVideo(video); } public List<Lectureseries> getByTerm(Long termId) throws SystemException{ return lectureseriesPersistence.findByTerm(termId); } public List<Lectureseries> getByLatestVideoId(Long latestVideoId) throws SystemException{ return lectureseriesPersistence.findByLatestOpenAccessVideo(latestVideoId); } public void updateOpenAccess(Video video, Lectureseries lectureseries) throws SystemException{ // video lecture series table by video Video_LectureseriesLocalServiceUtil.updateOpenAccessByVideo(video); //lecture series Video latestOpenAccessVideo = VideoLocalServiceUtil.getLatestOpenAccessVideoForLectureseries(lectureseries.getLectureseriesId()); lectureseries.setLatestOpenAccessVideoId(latestOpenAccessVideo.getVideoId()); lectureseries.setLatestVideoUploadDate(latestOpenAccessVideo.getUploadDate()); lectureseries.setLatestVideoGenerationDate(latestOpenAccessVideo.getGenerationDate()); LectureseriesLocalServiceUtil.updateLectureseries(lectureseries); // update old entries in the lecture series table for video List<Lectureseries> ls = new ArrayList<Lectureseries>(); ls = LectureseriesLocalServiceUtil.getByLatestVideoId(video.getVideoId()); ListIterator<Lectureseries> it = ls.listIterator(); while(it.hasNext()){ Lectureseries l = it.next(); Video ov = VideoLocalServiceUtil.getLatestOpenAccessVideoForLectureseries(l.getLectureseriesId()); l.setLatestOpenAccessVideoId(ov.getVideoId()); lectureseries.setLatestVideoUploadDate(ov.getUploadDate()); lectureseries.setLatestVideoGenerationDate(ov.getGenerationDate()); LectureseriesLocalServiceUtil.updateLectureseries(l); } } public void updateUploadAndGenerationDate() throws SystemException{ List<Lectureseries> all = getAll(); ListIterator<Lectureseries> itAll = all.listIterator(); while(itAll.hasNext()){ Lectureseries l = itAll.next(); Video v = new VideoImpl(); try { v = VideoLocalServiceUtil.getVideo(l.getLatestOpenAccessVideoId()); l.setLatestVideoGenerationDate(v.getGenerationDate()); if(v.getUploadDate()!=null)l.setLatestVideoUploadDate(v.getUploadDate()); else { SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd_HH-mm"); Date d = new Date(); try { d = format.parse(v.getGenerationDate()); l.setLatestVideoUploadDate(d); } catch (ParseException e) { e.printStackTrace(); } } LectureseriesLocalServiceUtil.updateLectureseries(l); } catch (PortalException e) { e.printStackTrace(); } } } public void updateCategoryForLectureseries(Long lectureseriesId, Long newCategoryId) throws NoSuchModelException, SystemException{ Lectureseries lectureseries = lectureseriesPersistence.findByPrimaryKey(lectureseriesId); //for related categories to this lecture, table Lectureseries_Category Lectureseries_CategoryLocalServiceUtil.updateCategoryByLectureseriesAndCategory(lectureseries.getLectureseriesId(), lectureseries.getCategoryId(), newCategoryId); //for related videos to this lecture, table Video_Category List<Video> vl = VideoLocalServiceUtil.getByLectureseries(lectureseries.getLectureseriesId()); ListIterator<Video> vli = vl.listIterator(); while(vli.hasNext()){ Video v = vli.next(); Video_CategoryLocalServiceUtil.updateCategoryByVideoAndCategory(v.getVideoId(), lectureseries.getCategoryId(), newCategoryId); } //for lecture series itself lectureseries.setCategoryId(newCategoryId); lectureseriesPersistence.update(lectureseries); } public List<Lectureseries> getFilteredByInstitutionParentInstitutionTermCategoryCreatorSearchString(Long institutionId, Long parentInstitutionId, Long termId, Long categoryId, Long creatorId, String searchQuery){ return LectureseriesFinderUtil.findFilteredByInstitutionParentInstitutionTermCategoryCreatorSearchString(institutionId, parentInstitutionId, termId, categoryId, creatorId, searchQuery); } public List<Lectureseries> getLatest(int limit){ return LectureseriesFinderUtil.findLatest(limit); } }