From 2ab6066cff550288286fd7a8fa35c383da5a99f1 Mon Sep 17 00:00:00 2001 From: Andrew Wheat Date: Wed, 27 Mar 2024 13:25:02 +0000 Subject: [PATCH] Add 'apply' function to give access to the builder in a build pipeline. --- .../main/java/io/lindstrom/mpd/data/MPD.java | 5 ++++ .../java/io/lindstrom/mpd/data/MPDTest.java | 28 +++++++++++++++++++ 2 files changed, 33 insertions(+) create mode 100644 parser/src/test/java/io/lindstrom/mpd/data/MPDTest.java diff --git a/parser/src/main/java/io/lindstrom/mpd/data/MPD.java b/parser/src/main/java/io/lindstrom/mpd/data/MPD.java index d6193f0..b72dd28 100644 --- a/parser/src/main/java/io/lindstrom/mpd/data/MPD.java +++ b/parser/src/main/java/io/lindstrom/mpd/data/MPD.java @@ -10,6 +10,7 @@ import java.time.OffsetDateTime; import java.util.List; import java.util.Objects; +import java.util.function.Function; @JsonPropertyOrder({ "programInformations", @@ -514,6 +515,10 @@ public Builder withSchemaLocation(String schemaLocation) { return this; } + public Builder apply(Function fn) { + return fn.apply(this); + } + public MPD build() { return new MPD(schemaLocation, programInformations, baseURLs, locations, periods, metrics, essentialProperties, supplementalProperties, utcTimings, id, profiles, type, availabilityStartTime, availabilityEndTime, publishTime, mediaPresentationDuration, minimumUpdatePeriod, minBufferTime, timeShiftBufferDepth, suggestedPresentationDelay, maxSegmentDuration, maxSubsegmentDuration); } diff --git a/parser/src/test/java/io/lindstrom/mpd/data/MPDTest.java b/parser/src/test/java/io/lindstrom/mpd/data/MPDTest.java new file mode 100644 index 0000000..51f8953 --- /dev/null +++ b/parser/src/test/java/io/lindstrom/mpd/data/MPDTest.java @@ -0,0 +1,28 @@ +package io.lindstrom.mpd.data; + +import java.time.Duration; +import java.time.OffsetDateTime; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class MPDTest { + + @Test + void itUsesTheSuppliedFunctionToModifyTheBuilder() { + MPD mpd = MPD.builder() + .withType(PresentationType.DYNAMIC) + .withAvailabilityStartTime(OffsetDateTime.parse("2024-03-27T13:00:00Z")) + .withPublishTime(OffsetDateTime.parse("2024-03-27T13:00:00Z")) + .apply(builder -> { + if (OffsetDateTime.now().isAfter(OffsetDateTime.MIN)) { + builder.withMaxSegmentDuration(Duration.ofMinutes(1)); + } + return builder; + }) + .build(); + + assertEquals(Duration.ofMinutes(1), mpd.getMaxSegmentDuration()); + } + +}