Skip to content

Commit

Permalink
Validation fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
benfortuna committed May 29, 2022
1 parent 4f37a52 commit 3d618ab
Show file tree
Hide file tree
Showing 4 changed files with 10 additions and 47 deletions.
10 changes: 6 additions & 4 deletions src/main/java/net/fortuna/ical4j/model/property/Trigger.java
Expand Up @@ -41,6 +41,7 @@
import java.time.Instant;
import java.time.format.DateTimeParseException;
import java.time.temporal.TemporalAmount;
import java.util.Collections;
import java.util.Optional;

import static net.fortuna.ical4j.model.Parameter.VALUE;
Expand Down Expand Up @@ -165,7 +166,7 @@ public Trigger() {
* @param aValue a value string for this component
*/
public Trigger(final ParameterList aList, final String aValue) {
super(TRIGGER, aList, CalendarDateFormat.UTC_DATE_TIME_FORMAT, Value.DATE_TIME);
super(TRIGGER, aList, CalendarDateFormat.UTC_DATE_TIME_FORMAT, Value.DURATION);
setValue(aValue);
}

Expand All @@ -185,7 +186,7 @@ public Trigger(final TemporalAmount duration) {
}

private Trigger(final TemporalAmountAdapter duration) {
super(TRIGGER, CalendarDateFormat.UTC_DATE_TIME_FORMAT, Value.DATE_TIME);
super(TRIGGER, CalendarDateFormat.UTC_DATE_TIME_FORMAT, Value.DURATION);
this.duration = duration;
}

Expand Down Expand Up @@ -215,7 +216,8 @@ private Trigger(final ParameterList aList, final TemporalAmountAdapter duration)
* @param dateTime a date representation of a date-time
*/
public Trigger(final Instant dateTime) {
super(TRIGGER, CalendarDateFormat.UTC_DATE_TIME_FORMAT, Value.DURATION);
super(TRIGGER, new ParameterList(Collections.singletonList(Value.DATE_TIME)),
CalendarDateFormat.UTC_DATE_TIME_FORMAT, Value.DURATION);
setDate(dateTime);
}

Expand All @@ -242,7 +244,7 @@ public boolean isAbsolute() {
@Override
public ValidationResult validate() throws ValidationException {
ValidationResult result = super.validate();
if (Value.DATE_TIME.equals(getParameter(Parameter.VALUE))) {
if (Optional.of(Value.DATE_TIME).equals(getParameter(Parameter.VALUE))) {
result = result.merge(PropertyValidator.TRIGGER_ABS.validate(this));
} else {
result = result.merge(PropertyValidator.TRIGGER_REL.validate(this));
Expand Down
Expand Up @@ -55,7 +55,7 @@ public List<ValidationEntry> apply(String context, T target) {
int total = rule.getInstances().stream().mapToInt(s -> target.getParameters(s).size()).sum();
switch (rule.getType()) {
case None:
matches = matches(rule.getInstances(), s -> target.getParameter(s) != null);
matches = matches(rule.getInstances(), s -> target.getParameter(s).isPresent());
break;
case One:
matches = matches(rule.getInstances(), s -> target.getParameters(s).size() != 1);
Expand Down
Expand Up @@ -33,14 +33,10 @@

package net.fortuna.ical4j.validate.property;

import net.fortuna.ical4j.model.DateTime;
import net.fortuna.ical4j.model.Parameter;
import net.fortuna.ical4j.model.parameter.Value;
import net.fortuna.ical4j.model.property.DateProperty;
import net.fortuna.ical4j.validate.*;

import java.util.Optional;

import static net.fortuna.ical4j.validate.ValidationRule.ValidationType.None;
import static net.fortuna.ical4j.validate.ValidationRule.ValidationType.OneOrLess;

Expand All @@ -63,44 +59,9 @@ public ValidationResult validate(T target) throws ValidationException {
* ; the following is optional, ; and MAY occur more than once (";" xparam)
*/

result.getEntries().addAll(new PropertyRuleSet(OPTIONAL_PARAMS).apply(target.getName(), target));
result.getEntries().addAll(new PropertyRuleSet<T>(OPTIONAL_PARAMS).apply(target.getName(), target));
if (target.isUtc()) {
result.getEntries().addAll(new PropertyRuleSet(UTC_PARAMS).apply(target.getName(), target));
}
final Optional<Value> value = target.getParameter(Parameter.VALUE);

if (target.getDate() instanceof DateTime) {

if (value.isPresent() && !Value.DATE_TIME.equals(value.get())) {
result.getEntries().add(new ValidationEntry("VALUE parameter [" + value
+ "] is invalid for DATE-TIME instance", ValidationEntry.Severity.ERROR,
target.getName()));
}

final DateTime dateTime = (DateTime) target.getDate();

// ensure tzid matches date-time timezone..
final Optional<Parameter> tzId = target.getParameter(Parameter.TZID);
if (dateTime.getTimeZone() != null
&& (!tzId.isPresent() || !tzId.get().getValue().equals(
dateTime.getTimeZone().getID()))) {

result.getEntries().add(new ValidationEntry("TZID parameter [" + tzId
+ "] does not match the timezone ["
+ dateTime.getTimeZone().getID() + "]", ValidationEntry.Severity.ERROR,
target.getName()));
}
} else if (target.getDate() != null) {

if (value == null) {
result.getEntries().add(new ValidationEntry("VALUE parameter [" + Value.DATE
+ "] must be specified for DATE instance", ValidationEntry.Severity.ERROR,
target.getName()));
} else if (!Value.DATE.equals(value)) {
result.getEntries().add(new ValidationEntry("VALUE parameter [" + value
+ "] is invalid for DATE instance", ValidationEntry.Severity.ERROR,
target.getName()));
}
result.getEntries().addAll(new PropertyRuleSet<T>(UTC_PARAMS).apply(target.getName(), target));
}
return result;
}
Expand Down
Expand Up @@ -111,7 +111,7 @@ public void testTriggerDateTime() {
ValidationResult result = trigger.validate();
assertFalse(result.hasErrors());

trigger.getParameters().add(Value.DURATION);
trigger.add(Value.DURATION);
assertValidationError(trigger);
}

Expand Down

0 comments on commit 3d618ab

Please sign in to comment.