diff --git a/src/main/java/org/olat/modules/video/VideoManager.java b/src/main/java/org/olat/modules/video/VideoManager.java index 38fdc162308e353d12f6208aab730859025c0258..fb721458d0a82082f5cb245b1c2c54324f9bf92a 100644 --- a/src/main/java/org/olat/modules/video/VideoManager.java +++ b/src/main/java/org/olat/modules/video/VideoManager.java @@ -382,11 +382,12 @@ public interface VideoManager { public Size getVideoResolutionFromOLATResource (OLATResource videoResource); /** - * Gets the all video resources metadata. + * Gets the video resources metadata. + * @param searchParams * - * @return the all video resources metadata + * @return the video resources metadata */ - public List<VideoMeta> getAllVideoResourcesMetadata(); + public List<VideoMeta> getVideoMetadata(VideoMetadataSearchParams searchParams); /** * Gets the video meta data. @@ -395,7 +396,7 @@ public interface VideoManager { * @return the video meta data */ public VideoMeta getVideoMetadata(OLATResource videoResource); - + /** * Exchange poster of the new resource. * diff --git a/src/main/java/org/olat/modules/video/VideoMetadataSearchParams.java b/src/main/java/org/olat/modules/video/VideoMetadataSearchParams.java new file mode 100644 index 0000000000000000000000000000000000000000..f8e1d0cc1b5e66c8de5a7e161aa32a3bd0d1e235 --- /dev/null +++ b/src/main/java/org/olat/modules/video/VideoMetadataSearchParams.java @@ -0,0 +1,49 @@ +/** + * <a href="http://www.openolat.org"> + * OpenOLAT - Online Learning and Training</a><br> + * <p> + * Licensed under the Apache License, Version 2.0 (the "License"); <br> + * you may not use this file except in compliance with the License.<br> + * You may obtain a copy of the License at the + * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a> + * <p> + * Unless required by applicable law or agreed to in writing,<br> + * software distributed under the License is distributed on an "AS IS" BASIS, <br> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> + * See the License for the specific language governing permissions and <br> + * limitations under the License. + * <p> + * Initial code contributed and copyrighted by<br> + * frentix GmbH, http://www.frentix.com + * <p> + */ +package org.olat.modules.video; + +/** + * + * Initial date: 4 Mar 2021<br> + * @author uhensler, urs.hensler@frentix.com, http://www.frentix.com + * + */ +public class VideoMetadataSearchParams { + + private Boolean urlNull; + private Integer minHeight; + + public Boolean getUrlNull() { + return urlNull; + } + + public void setUrlNull(Boolean urlNull) { + this.urlNull = urlNull; + } + + public Integer getMinHeight() { + return minHeight; + } + + public void setMinHeight(Integer minHeight) { + this.minHeight = minHeight; + } + +} diff --git a/src/main/java/org/olat/modules/video/manager/VideoManagerImpl.java b/src/main/java/org/olat/modules/video/manager/VideoManagerImpl.java index f80edbf7c571519fe4d791df7fda6a6f68ff84d0..e840fbb31ad66e0a820cee515779fbc0e7eb83ee 100644 --- a/src/main/java/org/olat/modules/video/manager/VideoManagerImpl.java +++ b/src/main/java/org/olat/modules/video/manager/VideoManagerImpl.java @@ -84,6 +84,7 @@ import org.olat.modules.video.VideoManager; import org.olat.modules.video.VideoMarkers; import org.olat.modules.video.VideoMeta; import org.olat.modules.video.VideoMetadata; +import org.olat.modules.video.VideoMetadataSearchParams; import org.olat.modules.video.VideoModule; import org.olat.modules.video.VideoQuestion; import org.olat.modules.video.VideoQuestions; @@ -1246,8 +1247,8 @@ public class VideoManagerImpl implements VideoManager { } @Override - public List<VideoMeta> getAllVideoResourcesMetadata() { - return videoMetadataDao.getAllVideoResourcesMetadata(); + public List<VideoMeta> getVideoMetadata(VideoMetadataSearchParams searchParams) { + return videoMetadataDao.getVideoMetadata(searchParams); } @Override diff --git a/src/main/java/org/olat/modules/video/manager/VideoMetadataDAO.java b/src/main/java/org/olat/modules/video/manager/VideoMetadataDAO.java index c59debd1a82f14fe06240ac6cc0fea910739b2cf..3285c49dbde5ea862280617749e113e07cd3e91f 100644 --- a/src/main/java/org/olat/modules/video/manager/VideoMetadataDAO.java +++ b/src/main/java/org/olat/modules/video/manager/VideoMetadataDAO.java @@ -22,11 +22,15 @@ package org.olat.modules.video.manager; import java.util.Date; import java.util.List; +import javax.persistence.TypedQuery; + import org.olat.core.commons.persistence.DB; +import org.olat.core.commons.persistence.QueryBuilder; import org.olat.core.commons.services.image.Size; import org.olat.modules.video.VideoFormat; import org.olat.modules.video.VideoManager; import org.olat.modules.video.VideoMeta; +import org.olat.modules.video.VideoMetadataSearchParams; import org.olat.modules.video.model.VideoMetaImpl; import org.olat.repository.RepositoryEntry; import org.olat.resource.OLATResource; @@ -73,18 +77,24 @@ public class VideoMetadataDAO { return dbInstance.getCurrentEntityManager().merge(videoMetadata); } - /** - * Gets the all video resources metadata. - * - * @return the all video resources metadata - */ - List<VideoMeta> getAllVideoResourcesMetadata () { - StringBuilder sb = new StringBuilder(); - sb.append("select meta from videometadata as meta") - .append(" order by meta.creationDate asc, meta.id asc"); - return dbInstance.getCurrentEntityManager() - .createQuery(sb.toString(),VideoMeta.class) - .getResultList(); + List<VideoMeta> getVideoMetadata(VideoMetadataSearchParams searchParams) { + QueryBuilder sb = new QueryBuilder(); + sb.append("select meta from videometadata as meta"); + sb.append(" inner join fetch meta.videoResource as vResource"); + if (searchParams.getUrlNull() != null) { + sb.and().append("meta.url is ").append("not ", !searchParams.getUrlNull().booleanValue()).append("null"); + } + if (searchParams.getMinHeight() != null) { + sb.and().append("meta.height >= :minHeight"); + } + + TypedQuery<VideoMeta> query = dbInstance.getCurrentEntityManager() + .createQuery(sb.toString(),VideoMeta.class); + if (searchParams.getMinHeight() != null) { + query.setParameter("minHeight", searchParams.getMinHeight()); + } + + return query.getResultList(); } /** diff --git a/src/main/java/org/olat/modules/video/model/VideoMetaImpl.java b/src/main/java/org/olat/modules/video/model/VideoMetaImpl.java index d88a1409d554fdaf0e03b9f62877ba7347da4e87..63a3be8468f9ea046fa5954883c4671d4e318ce4 100644 --- a/src/main/java/org/olat/modules/video/model/VideoMetaImpl.java +++ b/src/main/java/org/olat/modules/video/model/VideoMetaImpl.java @@ -131,6 +131,7 @@ public class VideoMetaImpl implements VideoMeta, Persistable, ModifiedInfo { return url; } + @Override public void setUrl(String url) { this.url = url; } diff --git a/src/main/java/org/olat/modules/video/ui/TranscodingRow.java b/src/main/java/org/olat/modules/video/ui/TranscodingRow.java index af565405fab29cbbd11a2cc9a12c655172758962..928d52f12a5e142a93c86a77c3ba410a6f03d7ee 100644 --- a/src/main/java/org/olat/modules/video/ui/TranscodingRow.java +++ b/src/main/java/org/olat/modules/video/ui/TranscodingRow.java @@ -26,74 +26,50 @@ package org.olat.modules.video.ui; */ public class TranscodingRow { - private int resolution; - private int sumVideos; - private int missingTranscodings; - private int failedTranscodings; - private int numberTranscodings; - private boolean allTranscoded; + private final int resolution; + private final int sumVideos; + private final int external; + private final int missingTranscodings; + private final int failedTranscodings; + private final int numberTranscodings; + private final boolean startTranscodingAvailable; - public TranscodingRow(int resolution, int numberTranscodings, int failedTranscodings, int sumVideos, boolean mayTranscode) { - super(); + public TranscodingRow(int resolution, int numberTranscodings, int failedTranscodings, int extern, int sumVideos, boolean mayTranscode) { this.resolution = resolution; this.numberTranscodings = numberTranscodings; this.sumVideos = sumVideos; - this.missingTranscodings = sumVideos - numberTranscodings - failedTranscodings; + this.external = extern; + this.missingTranscodings = sumVideos - extern - numberTranscodings - failedTranscodings; this.failedTranscodings = failedTranscodings; - this.allTranscoded = numberTranscodings + failedTranscodings < sumVideos && mayTranscode; - } - - - - public boolean isAllTranscoded() { - return allTranscoded; - } - - public void setAllTranscoded(boolean allTranscoded) { - this.allTranscoded = allTranscoded; + this.startTranscodingAvailable = mayTranscode && missingTranscodings > 0; } public int getResolution() { return resolution; } - public void setResolution(int resolution) { - this.resolution = resolution; - } - public int getSumVideos() { return sumVideos; } - - public void setSumVideos(int sumVideos) { - this.sumVideos = sumVideos; + + public int getExtern() { + return external; } public int getNumberTranscodings() { return numberTranscodings; } - public void setNumberTranscodings(int numberTranscodings) { - this.numberTranscodings = numberTranscodings; - } - public int getFailedTranscodings() { return failedTranscodings; } - public void setFailedTranscodings(int failedTranscodings) { - this.failedTranscodings = failedTranscodings; - } - public int getMissingTranscodings() { return missingTranscodings >= 0 ? missingTranscodings : 0; } - public void setMissingTranscodings(int missingTranscodings) { - this.missingTranscodings = missingTranscodings; + public boolean isStartTranscodingAvailable() { + return startTranscodingAvailable; } - - - } diff --git a/src/main/java/org/olat/modules/video/ui/TranscodingTableModel.java b/src/main/java/org/olat/modules/video/ui/TranscodingTableModel.java index 81f34f0318e63d1641111556fa69b4c775cd51e5..9308bbde04839858b49cb82e53282313779696ca 100644 --- a/src/main/java/org/olat/modules/video/ui/TranscodingTableModel.java +++ b/src/main/java/org/olat/modules/video/ui/TranscodingTableModel.java @@ -49,10 +49,11 @@ public class TranscodingTableModel extends DefaultFlexiTableDataModel<Transcodin switch(TranscodingCols.values()[col]) { case resolutions: return translator.translate("quality.resolution." + resolution.getResolution()); case sumVideos: return resolution.getSumVideos(); + case extern: return resolution.getExtern(); case numberTranscodings: return resolution.getNumberTranscodings(); case failedTranscodings: return resolution.getFailedTranscodings(); case missingTranscodings: return resolution.getMissingTranscodings(); - case transcode: return resolution.isAllTranscoded(); + case transcode: return resolution.isStartTranscodingAvailable(); case delete: return resolution.getNumberTranscodings() > 0; default: return ""; } @@ -61,6 +62,7 @@ public class TranscodingTableModel extends DefaultFlexiTableDataModel<Transcodin public enum TranscodingCols implements FlexiSortableColumnDef { resolutions("quality.table.header.resolution"), sumVideos("sum.video"), + extern("extern.videos"), numberTranscodings("number.transcodings"), failedTranscodings("number.transcodings.failed"), missingTranscodings("missing.transcodings"), diff --git a/src/main/java/org/olat/modules/video/ui/VideoAdminTranscodingController.java b/src/main/java/org/olat/modules/video/ui/VideoAdminTranscodingController.java index cd29bb3b9d563fa1b1050aa5c9f724a1b8ee8985..f8a3c82c80f54e48683928555c620dd1b4aab80e 100644 --- a/src/main/java/org/olat/modules/video/ui/VideoAdminTranscodingController.java +++ b/src/main/java/org/olat/modules/video/ui/VideoAdminTranscodingController.java @@ -40,8 +40,10 @@ import org.olat.core.gui.components.form.flexible.impl.elements.table.SelectionE import org.olat.core.gui.components.form.flexible.impl.elements.table.StaticFlexiCellRenderer; import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.WindowControl; +import org.olat.core.util.StringHelper; import org.olat.modules.video.VideoManager; import org.olat.modules.video.VideoMeta; +import org.olat.modules.video.VideoMetadataSearchParams; import org.olat.modules.video.VideoModule; import org.olat.modules.video.VideoTranscoding; import org.olat.modules.video.model.TranscodingCount; @@ -58,11 +60,12 @@ import org.springframework.beans.factory.annotation.Autowired; */ public class VideoAdminTranscodingController extends FormBasicController { + // Hardcoded same as VideoAdminSetController + private static final List<Integer> RESOLUTIONS = List.of(2160, 1080, 720, 480, 360, 240); + private TranscodingTableModel tableModel; private FlexiTableElement transcodingTable; - private Map<OLATResource,Integer> nativeResolutions; - @Autowired private VideoManager videoManager; @Autowired @@ -70,13 +73,6 @@ public class VideoAdminTranscodingController extends FormBasicController { public VideoAdminTranscodingController(UserRequest ureq, WindowControl wControl) { super(ureq, wControl, "transcoding_admin"); - nativeResolutions = new HashMap<>(); - - List<VideoMeta> olatresources = videoManager.getAllVideoResourcesMetadata(); - //cache native resolutions - for (VideoMeta videoResource : olatresources) { - nativeResolutions.put(videoResource.getVideoResource(), videoResource.getHeight()); - } initForm(ureq); } @@ -90,6 +86,7 @@ public class VideoAdminTranscodingController extends FormBasicController { FlexiTableColumnModel transcodingModel = FlexiTableDataModelFactory.createFlexiTableColumnModel(); transcodingModel.addFlexiColumnModel(new DefaultFlexiColumnModel(TranscodingCols.resolutions)); transcodingModel.addFlexiColumnModel(new DefaultFlexiColumnModel(TranscodingCols.sumVideos)); + transcodingModel.addFlexiColumnModel(new DefaultFlexiColumnModel(TranscodingCols.extern)); transcodingModel.addFlexiColumnModel(new DefaultFlexiColumnModel(TranscodingCols.numberTranscodings)); transcodingModel.addFlexiColumnModel(new DefaultFlexiColumnModel(TranscodingCols.failedTranscodings)); transcodingModel.addFlexiColumnModel(new DefaultFlexiColumnModel(TranscodingCols.missingTranscodings)); @@ -122,9 +119,7 @@ public class VideoAdminTranscodingController extends FormBasicController { } private void loadTable() { - List<TranscodingRow> resolutions = new ArrayList<>(); - // Hardcoded same as VideoAdminSetController - int[] fixresolution = { 2160, 1080, 720, 480, 360, 240 }; + List<TranscodingRow> resolutions = new ArrayList<>(6); Map<Integer, Integer> successCount = new HashMap<>(); int beginErrorCode = VideoTranscoding.TRANSCODING_STATUS_INEFFICIENT; for (TranscodingCount transcodingCount : videoManager.getAllVideoTranscodingsCountSuccess(beginErrorCode)) { @@ -134,19 +129,27 @@ public class VideoAdminTranscodingController extends FormBasicController { for (TranscodingCount transcodingCount : videoManager.getAllVideoTranscodingsCountFails(beginErrorCode)) { failCount.put(transcodingCount.getResolution(), transcodingCount.getCount()); } - for (int i = 0; i < fixresolution.length; i++) { - int counter = 0; - for (OLATResource videoResource : nativeResolutions.keySet()) { - if (nativeResolutions.get(videoResource) >= fixresolution[i]) counter++; + + List<VideoMeta> videoMetadatas = videoManager.getVideoMetadata(new VideoMetadataSearchParams()); + for (Integer resolution: RESOLUTIONS) { + int sumVideos = 0; + int extern = 0; + for (VideoMeta videoMetadata : videoMetadatas) { + if (videoMetadata.getHeight() >= resolution) { + sumVideos++; + if (StringHelper.containsNonWhitespace(videoMetadata.getUrl())) { + extern++; + } + } } - int success = successCount.get(fixresolution[i]) != null ? successCount.get(fixresolution[i]) : 0; - int fails = failCount.get(fixresolution[i]) != null ? failCount.get(fixresolution[i]) : 0; - TranscodingRow transcodingRow = new TranscodingRow(fixresolution[i], success, fails, counter, mayTranscode(fixresolution[i])); + + int success = successCount.get(resolution) != null ? successCount.get(resolution) : 0; + int fails = failCount.get(resolution) != null ? failCount.get(resolution) : 0; + TranscodingRow transcodingRow = new TranscodingRow(resolution.intValue(), success, fails, extern, sumVideos, + mayTranscode(resolution.intValue())); resolutions.add(transcodingRow); } - if (resolutions != null){ - tableModel.setObjects(resolutions); - } + tableModel.setObjects(resolutions); transcodingTable.reset(true, true, true); } @@ -176,8 +179,6 @@ public class VideoAdminTranscodingController extends FormBasicController { reloadTable(); } - - // state orders for inexistent transcodings private void queueCreateTranscoding(TranscodingRow source) { List<VideoTranscoding> allVideoTranscodings = videoManager.getOneVideoResolution(source.getResolution()); Map<OLATResource, Set<Integer>> availableTranscodings = new HashMap<>(); @@ -190,12 +191,15 @@ public class VideoAdminTranscodingController extends FormBasicController { availableTranscodings.put(videoTranscoding.getVideoResource(), availableresolutions); } } - for (OLATResource videoResource : nativeResolutions.keySet()) { - if (availableTranscodings.get(videoResource) == null || - !availableTranscodings.get(videoResource).contains(source.getResolution())) { - if (nativeResolutions.get(videoResource) >= source.getResolution()) { - videoManager.createTranscoding(videoResource, source.getResolution(), "mp4"); - } + + VideoMetadataSearchParams searchParams = new VideoMetadataSearchParams(); + searchParams.setUrlNull(Boolean.TRUE); + searchParams.setMinHeight(source.getResolution()); + List<VideoMeta> videoMetadatas = videoManager.getVideoMetadata(searchParams); + for (VideoMeta videoMetadata : videoMetadatas) { + OLATResource videoResource = videoMetadata.getVideoResource(); + if (!availableTranscodings.containsKey(videoResource) || !availableTranscodings.get(videoResource).contains(source.getResolution())) { + videoManager.createTranscoding(videoResource, source.getResolution(), "mp4"); } } } diff --git a/src/main/java/org/olat/modules/video/ui/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/modules/video/ui/_i18n/LocalStrings_de.properties index aa2dce460159c09e2dbb3d60051aff77703c2111..5fb06c6e3697963055e2b5f8f59644421c924694 100644 --- a/src/main/java/org/olat/modules/video/ui/_i18n/LocalStrings_de.properties +++ b/src/main/java/org/olat/modules/video/ui/_i18n/LocalStrings_de.properties @@ -20,6 +20,7 @@ delete.transcodings=Alle Transcodings dieser Aufl\u00F6sung wurden gel\u00F6scht error.format.not.supported=Format ist nicht unterst\u00FCtzt. error.no.duration=Dauer must gr\u00F6sser als 0 sein. error.percent.value=Wert muss zwischen 0 und 100 sein. +extern.videos=Extern info.transcoding=Fehlende Transcodings werden erstellt. listing.viewing.counter={0} Aufrufe manage.transcodings.description=Verwalten Sie alle Transkodierungen einer Aufl\u00F6sungen mit einem Klick. Ist das H\u00E4kchen gesetzt, sind alle Transkodierungen vorhanden und k\u00F6nnen durch Deaktivieren des Kontrollk\u00E4stchens gel\u00F6scht werden. Sind die Transkodieungen unvollst\u00E4ndig, werden fehlende transkodiert. diff --git a/src/main/java/org/olat/modules/video/ui/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/modules/video/ui/_i18n/LocalStrings_en.properties index f7732609e50d2deef9e08cb3bbac22fcfd17da59..ff20df7f6b185dcf569486054bc5d07da26ce7ef 100644 --- a/src/main/java/org/olat/modules/video/ui/_i18n/LocalStrings_en.properties +++ b/src/main/java/org/olat/modules/video/ui/_i18n/LocalStrings_en.properties @@ -20,6 +20,7 @@ delete.transcodings=All Transcodings of this Resolution have been deleted. error.format.not.supported=Format is not supported. error.no.duration=Duration must be greater than 0. error.percent.value=Value nned to be between 0 and 100 +extern.videos=External info.transcoding=Missing Transcodings will be created. listing.viewing.counter={0} viewings manage.transcodings.description=Manage all transcodings per selection of the checkbox. Is the resolution checkbox is checked, unselect the checkbox to delete all. Are transcodings incomplete, select the checkbox to transcode the missing. diff --git a/src/main/java/org/olat/upgrade/OLATUpgrade_15_3_12.java b/src/main/java/org/olat/upgrade/OLATUpgrade_15_3_12.java index 34a634177329bf12c44583aff5aea4e97c0b1228..bc64fac25c42353e58ee55894ce4f9c232d41989 100644 --- a/src/main/java/org/olat/upgrade/OLATUpgrade_15_3_12.java +++ b/src/main/java/org/olat/upgrade/OLATUpgrade_15_3_12.java @@ -21,7 +21,6 @@ package org.olat.upgrade; import org.apache.logging.log4j.Logger; import org.olat.core.commons.persistence.DB; -import org.olat.core.commons.services.doceditor.onlyoffice.OnlyOfficeModule; import org.olat.core.logging.Tracing; import org.springframework.beans.factory.annotation.Autowired; @@ -37,11 +36,10 @@ public class OLATUpgrade_15_3_12 extends OLATUpgrade { private static final String VERSION = "OLAT_15.3.12"; private static final String DELETE_APPOINTMENT_USER_RESTRICTIONS = "DELETE APPOINTMENT USER RESTRICTIONS"; + private static final String DELETE_TRANSCODING_OF_EXTERNAL_VIDEOS = "DELETE TRANSCODING OF EXTERNAL VIDEOS"; @Autowired private DB dbInstance; - @Autowired - private OnlyOfficeModule onlyofficeModule; public OLATUpgrade_15_3_12() { super(); @@ -64,6 +62,7 @@ public class OLATUpgrade_15_3_12 extends OLATUpgrade { boolean allOk = true; allOk &= deleteAppointmentUserRestriction(upgradeManager, uhd); + allOk &= deleteTranscodingOfExternalVideos(upgradeManager, uhd); uhd.setInstallationComplete(allOk); upgradeManager.setUpgradesHistory(uhd, VERSION); @@ -84,7 +83,7 @@ public class OLATUpgrade_15_3_12 extends OLATUpgrade { .createQuery(query) .executeUpdate(); dbInstance.commitAndCloseSession(); - log.info("Deleted ppointment restriction with no group."); + log.info("Deleted appointment restriction with no group."); } catch (Exception e) { log.error("", e); allOk = false; @@ -96,4 +95,30 @@ public class OLATUpgrade_15_3_12 extends OLATUpgrade { return allOk; } + private boolean deleteTranscodingOfExternalVideos(UpgradeManager upgradeManager, UpgradeHistoryData uhd) { + boolean allOk = true; + if (!uhd.getBooleanDataValue(DELETE_TRANSCODING_OF_EXTERNAL_VIDEOS)) { + try { + StringBuilder sb = new StringBuilder(); + sb.append("delete from videotranscoding as transcoding"); + sb.append(" where transcoding.videoResource.key in ("); + sb.append(" select metadata.videoResource.key from videometadata as metadata where metadata.url is not null"); + sb.append(")"); + + dbInstance.getCurrentEntityManager() + .createQuery(sb.toString()) + .executeUpdate(); + dbInstance.commitAndCloseSession(); + log.info("Deleted transcodings of external videos"); + } catch (Exception e) { + log.error("", e); + allOk = false; + } + + uhd.setBooleanDataValue(DELETE_TRANSCODING_OF_EXTERNAL_VIDEOS, allOk); + upgradeManager.setUpgradesHistory(uhd, VERSION); + } + return allOk; + } + } diff --git a/src/test/java/org/olat/modules/video/manager/VideoMetadataDAOTest.java b/src/test/java/org/olat/modules/video/manager/VideoMetadataDAOTest.java index 1631b1b89b14319a63cd2e4158d872cd8146b532..2fe39e9bd2cce48b22bbe3f3f8ccd066aa1e0f9c 100644 --- a/src/test/java/org/olat/modules/video/manager/VideoMetadataDAOTest.java +++ b/src/test/java/org/olat/modules/video/manager/VideoMetadataDAOTest.java @@ -19,6 +19,9 @@ */ package org.olat.modules.video.manager; +import static org.assertj.core.api.Assertions.assertThat; +import static org.olat.test.JunitTestHelper.random; + import java.util.List; import org.junit.Assert; @@ -26,6 +29,7 @@ import org.junit.Test; import org.olat.core.commons.persistence.DB; import org.olat.modules.video.VideoFormat; import org.olat.modules.video.VideoMeta; +import org.olat.modules.video.VideoMetadataSearchParams; import org.olat.repository.RepositoryEntry; import org.olat.test.JunitTestHelper; import org.olat.test.OlatTestCase; @@ -77,6 +81,68 @@ public class VideoMetadataDAOTest extends OlatTestCase { Assert.assertEquals("https://frentix.com/video.mp4", reloadMeta.getUrl()); } + @Test + public void shouldFilterMetadataByUrlNull() { + RepositoryEntry entry0 = JunitTestHelper.createAndPersistRepositoryEntry(); + RepositoryEntry entry1 = JunitTestHelper.createAndPersistRepositoryEntry(); + RepositoryEntry entry2 = JunitTestHelper.createAndPersistRepositoryEntry(); + VideoMeta meta0 = videoMetadataDao.createVideoMetadata(entry0, 1500, null, VideoFormat.mp4); + VideoMeta meta1 = videoMetadataDao.createVideoMetadata(entry1, 1100, null, VideoFormat.mp4); + VideoMeta meta2 = videoMetadataDao.createVideoMetadata(entry2, 1200, random(), VideoFormat.mp4); + + VideoMetadataSearchParams searchParams = new VideoMetadataSearchParams(); + searchParams.setUrlNull(Boolean.TRUE); + List<VideoMeta> metadata = videoMetadataDao.getVideoMetadata(searchParams); + + assertThat(metadata) + .contains(meta0, meta1) + .doesNotContain(meta2); + } + + @Test + public void shouldFilterMetadataByUrlNotNull() { + RepositoryEntry entry0 = JunitTestHelper.createAndPersistRepositoryEntry(); + RepositoryEntry entry1 = JunitTestHelper.createAndPersistRepositoryEntry(); + RepositoryEntry entry2 = JunitTestHelper.createAndPersistRepositoryEntry(); + VideoMeta meta0 = videoMetadataDao.createVideoMetadata(entry0, 1500, random(), VideoFormat.mp4); + VideoMeta meta1 = videoMetadataDao.createVideoMetadata(entry1, 1100, random(), VideoFormat.mp4); + VideoMeta meta2 = videoMetadataDao.createVideoMetadata(entry2, 1200, null, VideoFormat.mp4); + + VideoMetadataSearchParams searchParams = new VideoMetadataSearchParams(); + searchParams.setUrlNull(Boolean.FALSE); + List<VideoMeta> metadata = videoMetadataDao.getVideoMetadata(searchParams); + + assertThat(metadata) + .contains(meta0, meta1) + .doesNotContain(meta2); + } + + @Test + public void shouldFilterMetadataByMinHight() { + RepositoryEntry entry0 = JunitTestHelper.createAndPersistRepositoryEntry(); + RepositoryEntry entry1 = JunitTestHelper.createAndPersistRepositoryEntry(); + RepositoryEntry entry2 = JunitTestHelper.createAndPersistRepositoryEntry(); + RepositoryEntry entry3 = JunitTestHelper.createAndPersistRepositoryEntry(); + VideoMeta meta0 = videoMetadataDao.createVideoMetadata(entry0, 1500, null, VideoFormat.mp4); + meta0.setHeight(1000); + meta0 = videoMetadataDao.updateVideoMetadata(meta0); + VideoMeta meta1 = videoMetadataDao.createVideoMetadata(entry1, 1500, null, VideoFormat.mp4); + meta1.setHeight(2000); + meta1 = videoMetadataDao.updateVideoMetadata(meta1); + VideoMeta meta2 = videoMetadataDao.createVideoMetadata(entry2, 1500, null, VideoFormat.mp4); + meta2.setHeight(500); + meta2 = videoMetadataDao.updateVideoMetadata(meta2); + VideoMeta meta3 = videoMetadataDao.createVideoMetadata(entry3, 1500, null, VideoFormat.mp4); + + VideoMetadataSearchParams searchParams = new VideoMetadataSearchParams(); + searchParams.setMinHeight(1000); + List<VideoMeta> metadata = videoMetadataDao.getVideoMetadata(searchParams); + + assertThat(metadata) + .contains(meta0, meta1) + .doesNotContain(meta2, meta3); + } + @Test public void deleteVideoMetadata () { RepositoryEntry entry0 = JunitTestHelper.createAndPersistRepositoryEntry(); @@ -96,7 +162,7 @@ public class VideoMetadataDAOTest extends OlatTestCase { dbInstance.commitAndCloseSession(); //retrieve list of entries - List<VideoMeta> metadata = videoMetadataDao.getAllVideoResourcesMetadata(); + List<VideoMeta> metadata = videoMetadataDao.getVideoMetadata(new VideoMetadataSearchParams()); Assert.assertTrue(metadata.contains(meta0)); Assert.assertTrue(metadata.contains(meta1)); Assert.assertTrue(metadata.contains(meta2)); @@ -110,7 +176,7 @@ public class VideoMetadataDAOTest extends OlatTestCase { dbInstance.commitAndCloseSession(); //retrieve new list - List<VideoMeta> deleteMetadata = videoMetadataDao.getAllVideoResourcesMetadata(); + List<VideoMeta> deleteMetadata = videoMetadataDao.getVideoMetadata(new VideoMetadataSearchParams()); Assert.assertFalse(deleteMetadata.contains(meta0)); Assert.assertTrue(deleteMetadata.contains(meta1)); Assert.assertTrue(deleteMetadata.contains(meta2));