diff --git a/src/main/java/net/fortuna/ical4j/model/Period.java b/src/main/java/net/fortuna/ical4j/model/Period.java index e244ab23f..ba4cd6e68 100644 --- a/src/main/java/net/fortuna/ical4j/model/Period.java +++ b/src/main/java/net/fortuna/ical4j/model/Period.java @@ -90,6 +90,18 @@ public Period(final DateTime start, final DateTime end) { normalise(); } + /** + * Constructs a new period with the specified start date and duration. + * + * @param start + * the start date of the period + * @param duration + * the duration of the period + */ + public Period(final DateTime start, final Dur duration) { + this(start, TemporalAmountAdapter.from(duration)); + } + /** * Constructs a new period with the specified start date and duration. * diff --git a/src/main/java/net/fortuna/ical4j/model/TemporalAmountAdapter.java b/src/main/java/net/fortuna/ical4j/model/TemporalAmountAdapter.java index 71257a667..a09d5a5eb 100644 --- a/src/main/java/net/fortuna/ical4j/model/TemporalAmountAdapter.java +++ b/src/main/java/net/fortuna/ical4j/model/TemporalAmountAdapter.java @@ -74,4 +74,14 @@ public static TemporalAmountAdapter fromDateRange(Date start, Date end) { } return new TemporalAmountAdapter(duration); } + + public static TemporalAmount from(Dur duration) { + if (duration.getWeeks() > 0) { + return Period.ofWeeks(duration.getWeeks()); + } + return Duration.ofDays(duration.getDays()) + .plusHours(duration.getHours()) + .plusMinutes(duration.getMinutes()) + .plusSeconds(duration.getSeconds()); + } } diff --git a/src/main/java/net/fortuna/ical4j/model/ZoneOffsetAdapter.java b/src/main/java/net/fortuna/ical4j/model/ZoneOffsetAdapter.java index 7e8473328..a2e957539 100644 --- a/src/main/java/net/fortuna/ical4j/model/ZoneOffsetAdapter.java +++ b/src/main/java/net/fortuna/ical4j/model/ZoneOffsetAdapter.java @@ -36,4 +36,12 @@ public String toString() { } return retVal; } + + /** + * @param utcOffset + * @return a zoneoffset representing the specified utcoffset + */ + public static ZoneOffset from(UtcOffset utcOffset) { + return ZoneOffset.of(utcOffset.toString()); + } } diff --git a/src/main/java/net/fortuna/ical4j/model/ZoneOffsetFactory.java b/src/main/java/net/fortuna/ical4j/model/ZoneOffsetFactory.java deleted file mode 100644 index adb83a759..000000000 --- a/src/main/java/net/fortuna/ical4j/model/ZoneOffsetFactory.java +++ /dev/null @@ -1,10 +0,0 @@ -package net.fortuna.ical4j.model; - -import java.time.ZoneOffset; - -public class ZoneOffsetFactory { - - public ZoneOffset create(UtcOffset utcOffset) { - return ZoneOffset.of(utcOffset.toString()); - } -} diff --git a/src/main/java/net/fortuna/ical4j/model/property/Duration.java b/src/main/java/net/fortuna/ical4j/model/property/Duration.java index 44f2f3b31..bf53c36df 100644 --- a/src/main/java/net/fortuna/ical4j/model/property/Duration.java +++ b/src/main/java/net/fortuna/ical4j/model/property/Duration.java @@ -127,6 +127,13 @@ public Duration(final ParameterList aList, final String aValue) { setValue(aValue); } + /** + * @param duration a duration value + */ + public Duration(final Dur duration) { + this(TemporalAmountAdapter.from(duration)); + } + /** * @param duration a duration value */ @@ -135,6 +142,14 @@ public Duration(final TemporalAmount duration) { this.duration = new TemporalAmountAdapter(duration); } + /** + * @param aList a list of parameters for this component + * @param duration a duration value + */ + public Duration(final ParameterList aList, final Dur duration) { + this(aList, TemporalAmountAdapter.from(duration)); + } + /** * @param aList a list of parameters for this component * @param duration a duration value diff --git a/src/main/java/net/fortuna/ical4j/model/property/Trigger.java b/src/main/java/net/fortuna/ical4j/model/property/Trigger.java index 942054722..fb8c27693 100644 --- a/src/main/java/net/fortuna/ical4j/model/property/Trigger.java +++ b/src/main/java/net/fortuna/ical4j/model/property/Trigger.java @@ -165,6 +165,13 @@ public Trigger(final ParameterList aList, final String aValue) { setValue(aValue); } + /** + * @param duration a duration in milliseconds + */ + public Trigger(final Dur duration) { + this(TemporalAmountAdapter.from(duration)); + } + /** * @param duration a duration in milliseconds */ @@ -173,6 +180,14 @@ public Trigger(final TemporalAmount duration) { setDuration(duration); } + /** + * @param aList a list of parameters for this component + * @param duration a duration in milliseconds + */ + public Trigger(final ParameterList aList, final Dur duration) { + this(aList, TemporalAmountAdapter.from(duration)); + } + /** * @param aList a list of parameters for this component * @param duration a duration in milliseconds diff --git a/src/main/java/net/fortuna/ical4j/model/property/TzOffsetFrom.java b/src/main/java/net/fortuna/ical4j/model/property/TzOffsetFrom.java index 1e7882e70..4a3d7ac4c 100644 --- a/src/main/java/net/fortuna/ical4j/model/property/TzOffsetFrom.java +++ b/src/main/java/net/fortuna/ical4j/model/property/TzOffsetFrom.java @@ -52,8 +52,6 @@ public class TzOffsetFrom extends Property { private static final long serialVersionUID = 450274263165493502L; - private static final ZoneOffsetFactory ZONEOFFSET_FACTORY = new ZoneOffsetFactory(); - private ZoneOffsetAdapter offset; /** @@ -84,7 +82,7 @@ public TzOffsetFrom(final ParameterList aList, final String aValue) { * @param anOffset a timezone offset in milliseconds */ public TzOffsetFrom(final UtcOffset anOffset) { - this(ZONEOFFSET_FACTORY.create(anOffset)); + this(ZoneOffsetAdapter.from(anOffset)); } /** @@ -100,7 +98,7 @@ public TzOffsetFrom(final ZoneOffset anOffset) { * @param anOffset a timezone offset in milliseconds */ public TzOffsetFrom(final ParameterList aList, final UtcOffset anOffset) { - this(aList, ZONEOFFSET_FACTORY.create(anOffset)); + this(aList, ZoneOffsetAdapter.from(anOffset)); } /** diff --git a/src/main/java/net/fortuna/ical4j/model/property/TzOffsetTo.java b/src/main/java/net/fortuna/ical4j/model/property/TzOffsetTo.java index 05ad35359..7837e624a 100644 --- a/src/main/java/net/fortuna/ical4j/model/property/TzOffsetTo.java +++ b/src/main/java/net/fortuna/ical4j/model/property/TzOffsetTo.java @@ -52,8 +52,6 @@ public class TzOffsetTo extends Property { private static final long serialVersionUID = 8213874575051177732L; - private static final ZoneOffsetFactory ZONEOFFSET_FACTORY = new ZoneOffsetFactory(); - private ZoneOffsetAdapter offset; /** @@ -84,7 +82,7 @@ public TzOffsetTo(final ParameterList aList, final String aValue) { * @param anOffset a timezone offset in milliseconds */ public TzOffsetTo(final UtcOffset anOffset) { - this(ZONEOFFSET_FACTORY.create(anOffset)); + this(ZoneOffsetAdapter.from(anOffset)); } /** @@ -100,7 +98,7 @@ public TzOffsetTo(final ZoneOffset anOffset) { * @param anOffset a timezone offset in milliseconds */ public TzOffsetTo(final ParameterList aList, final UtcOffset anOffset) { - this(aList, ZONEOFFSET_FACTORY.create(anOffset)); + this(aList, ZoneOffsetAdapter.from(anOffset)); } /** diff --git a/src/test/groovy/net/fortuna/ical4j/model/TemporalAmountAdapterTest.groovy b/src/test/groovy/net/fortuna/ical4j/model/TemporalAmountAdapterTest.groovy index 532f1de04..5e4bef605 100644 --- a/src/test/groovy/net/fortuna/ical4j/model/TemporalAmountAdapterTest.groovy +++ b/src/test/groovy/net/fortuna/ical4j/model/TemporalAmountAdapterTest.groovy @@ -21,4 +21,14 @@ class TemporalAmountAdapterTest extends Specification { java.time.Period.ofYears(1) | "P52W" java.time.Period.ofMonths(6) | "P24W" } + + def 'verify temporalamount creation'() { + expect: + TemporalAmountAdapter.from(duration) == expectedTemporalAmount + + where: + duration | expectedTemporalAmount + new Dur(1, 2, 3, 4) | Duration.ofDays(1).plusHours(2).plusMinutes(3).plusSeconds(4) + new Dur(5) | java.time.Period.ofWeeks(5) + } } diff --git a/src/test/groovy/net/fortuna/ical4j/model/ZoneOffsetAdapterTest.groovy b/src/test/groovy/net/fortuna/ical4j/model/ZoneOffsetAdapterTest.groovy index 077879967..e61d1e36b 100644 --- a/src/test/groovy/net/fortuna/ical4j/model/ZoneOffsetAdapterTest.groovy +++ b/src/test/groovy/net/fortuna/ical4j/model/ZoneOffsetAdapterTest.groovy @@ -16,4 +16,16 @@ class ZoneOffsetAdapterTest extends Specification { ZoneOffset.ofHoursMinutes(5, 30) | "+0530" ZoneOffset.ofHoursMinutesSeconds(-6, -30, -15) | "-063015" } + + def 'verify zoneoffset creation'() { + expect: + ZoneOffsetAdapter.from(utcOffset) == expectedOffset + + where: + utcOffset | expectedOffset + new UtcOffset('+1000') | ZoneOffset.ofHours(10) + new UtcOffset('-0600') | ZoneOffset.ofHours(-6) + new UtcOffset('+0545') | ZoneOffset.ofHoursMinutes(5, 45) + } + } diff --git a/src/test/groovy/net/fortuna/ical4j/model/ZoneOffsetFactoryTest.groovy b/src/test/groovy/net/fortuna/ical4j/model/ZoneOffsetFactoryTest.groovy deleted file mode 100644 index efcd48cac..000000000 --- a/src/test/groovy/net/fortuna/ical4j/model/ZoneOffsetFactoryTest.groovy +++ /dev/null @@ -1,21 +0,0 @@ -package net.fortuna.ical4j.model - -import spock.lang.Specification - -import java.time.ZoneOffset - -class ZoneOffsetFactoryTest extends Specification { - - ZoneOffsetFactory factory = [] - - def 'verify zoneoffset creation'() { - expect: - factory.create(utcOffset) == expectedOffset - - where: - utcOffset | expectedOffset - new UtcOffset('+1000') | ZoneOffset.ofHours(10) - new UtcOffset('-0600') | ZoneOffset.ofHours(-6) - new UtcOffset('+0545') | ZoneOffset.ofHoursMinutes(5, 45) - } -}