Skip to content

Commit

Permalink
Refactored immutable properties to avoid class loading deadlock
Browse files Browse the repository at this point in the history
  • Loading branch information
benfortuna committed May 6, 2022
1 parent 3017ee3 commit 60347ad
Show file tree
Hide file tree
Showing 75 changed files with 1,602 additions and 1,151 deletions.
22 changes: 12 additions & 10 deletions src/main/java/net/fortuna/ical4j/agent/AbstractUserAgent.java
Expand Up @@ -6,7 +6,6 @@
import net.fortuna.ical4j.model.property.Method;
import net.fortuna.ical4j.model.property.Organizer;
import net.fortuna.ical4j.model.property.ProdId;
import net.fortuna.ical4j.model.property.Version;
import net.fortuna.ical4j.transform.Transformer;
import net.fortuna.ical4j.transform.calendar.*;
import net.fortuna.ical4j.util.Calendars;
Expand All @@ -16,6 +15,9 @@
import java.util.HashMap;
import java.util.Map;

import static net.fortuna.ical4j.model.property.immutable.ImmutableMethod.*;
import static net.fortuna.ical4j.model.property.immutable.ImmutableVersion.VERSION_2_0;

/**
* Created by fortuna on 19/07/2017.
*/
Expand All @@ -29,19 +31,19 @@ public AbstractUserAgent(ProdId prodId, Organizer organizer, UidGenerator uidGen
this.prodId = prodId;

methodTransformers = new HashMap<>();
methodTransformers.put(Method.PUBLISH, new PublishTransformer(organizer, uidGenerator,true));
methodTransformers.put(Method.REQUEST, new RequestTransformer(organizer, uidGenerator));
methodTransformers.put(Method.ADD, new AddTransformer(organizer, uidGenerator));
methodTransformers.put(Method.CANCEL, new CancelTransformer(organizer, uidGenerator));
methodTransformers.put(Method.REPLY, new ReplyTransformer(uidGenerator));
methodTransformers.put(Method.REFRESH, new RefreshTransformer(uidGenerator));
methodTransformers.put(Method.COUNTER, new CounterTransformer(uidGenerator));
methodTransformers.put(Method.DECLINE_COUNTER, new DeclineCounterTransformer(organizer, uidGenerator));
methodTransformers.put(PUBLISH, new PublishTransformer(organizer, uidGenerator,true));
methodTransformers.put(REQUEST, new RequestTransformer(organizer, uidGenerator));
methodTransformers.put(ADD, new AddTransformer(organizer, uidGenerator));
methodTransformers.put(CANCEL, new CancelTransformer(organizer, uidGenerator));
methodTransformers.put(REPLY, new ReplyTransformer(uidGenerator));
methodTransformers.put(REFRESH, new RefreshTransformer(uidGenerator));
methodTransformers.put(COUNTER, new CounterTransformer(uidGenerator));
methodTransformers.put(DECLINE_COUNTER, new DeclineCounterTransformer(organizer, uidGenerator));
}

@SafeVarargs
protected final Calendar wrap(Method method, T... component) {
PropertyList props = new PropertyList(Arrays.asList(prodId, Version.VERSION_2_0));
PropertyList props = new PropertyList(Arrays.asList(prodId, VERSION_2_0));
Calendar calendar = Calendars.wrap(props, component);
return transform(method, calendar);
}
Expand Down
19 changes: 10 additions & 9 deletions src/main/java/net/fortuna/ical4j/agent/VEventUserAgent.java
Expand Up @@ -2,12 +2,13 @@

import net.fortuna.ical4j.model.Calendar;
import net.fortuna.ical4j.model.component.VEvent;
import net.fortuna.ical4j.model.property.Method;
import net.fortuna.ical4j.model.property.Organizer;
import net.fortuna.ical4j.model.property.ProdId;
import net.fortuna.ical4j.transform.calendar.RequestTransformer;
import net.fortuna.ical4j.util.UidGenerator;

import static net.fortuna.ical4j.model.property.immutable.ImmutableMethod.*;

public class VEventUserAgent extends AbstractUserAgent<VEvent> {

private final RequestTransformer delegateTransformer;
Expand All @@ -34,7 +35,7 @@ public VEventUserAgent(ProdId prodId, Organizer organizer, UidGenerator uidGener
*/
@Override
public Calendar publish(VEvent... component) {
Calendar published = wrap(Method.PUBLISH, component);
Calendar published = wrap(PUBLISH, component);
published.validate();
return published;
}
Expand Down Expand Up @@ -89,7 +90,7 @@ public Calendar publish(VEvent... component) {
*/
@Override
public Calendar request(VEvent... component) {
Calendar request = wrap(Method.REQUEST, component);
Calendar request = wrap(REQUEST, component);
request.validate();
return request;
}
Expand Down Expand Up @@ -144,7 +145,7 @@ public Calendar delegate(Calendar request) {
*/
@Override
public Calendar reply(Calendar request) {
Calendar reply = transform(Method.REPLY, request.copy());
Calendar reply = transform(REPLY, request.copy());
reply.validate();
return reply;
}
Expand Down Expand Up @@ -172,7 +173,7 @@ public Calendar reply(Calendar request) {
*/
@Override
public Calendar add(VEvent component) {
Calendar add = wrap(Method.ADD, component);
Calendar add = wrap(ADD, component);
add.validate();
return add;
}
Expand Down Expand Up @@ -215,7 +216,7 @@ public Calendar add(VEvent component) {
*/
@Override
public Calendar cancel(VEvent... component) {
Calendar cancel = wrap(Method.CANCEL, component);
Calendar cancel = wrap(CANCEL, component);
cancel.validate();
return cancel;
}
Expand All @@ -235,7 +236,7 @@ public Calendar cancel(VEvent... component) {
*/
@Override
public Calendar refresh(VEvent component) {
Calendar refresh = wrap(Method.REFRESH, component.copy());
Calendar refresh = wrap(REFRESH, component.copy());
// componentTransformers.get(Method.REFRESH).transform(refresh.getComponents());
refresh.validate();
return refresh;
Expand Down Expand Up @@ -264,7 +265,7 @@ public Calendar refresh(VEvent component) {
*/
@Override
public Calendar counter(Calendar request) {
Calendar counter = transform(Method.COUNTER, request.copy());
Calendar counter = transform(COUNTER, request.copy());
counter.validate();
return counter;
}
Expand All @@ -282,7 +283,7 @@ public Calendar counter(Calendar request) {
*/
@Override
public Calendar declineCounter(Calendar counter) {
Calendar declineCounter = transform(Method.DECLINE_COUNTER, counter.copy());
Calendar declineCounter = transform(DECLINE_COUNTER, counter.copy());
declineCounter.validate();
return declineCounter;
}
Expand Down
Expand Up @@ -2,11 +2,12 @@

import net.fortuna.ical4j.model.Calendar;
import net.fortuna.ical4j.model.component.VFreeBusy;
import net.fortuna.ical4j.model.property.Method;
import net.fortuna.ical4j.model.property.Organizer;
import net.fortuna.ical4j.model.property.ProdId;
import net.fortuna.ical4j.util.UidGenerator;

import static net.fortuna.ical4j.model.property.immutable.ImmutableMethod.*;

public class VFreeBusyUserAgent extends AbstractUserAgent<VFreeBusy> {

public VFreeBusyUserAgent(ProdId prodId, Organizer organizer, UidGenerator uidGenerator) {
Expand Down Expand Up @@ -39,7 +40,7 @@ public VFreeBusyUserAgent(ProdId prodId, Organizer organizer, UidGenerator uidGe
*/
@Override
public Calendar publish(VFreeBusy... component) {
Calendar published = wrap(Method.PUBLISH, component);
Calendar published = wrap(PUBLISH, component);
published.validate();
return published;
}
Expand All @@ -65,7 +66,7 @@ public Calendar publish(VFreeBusy... component) {
*/
@Override
public Calendar request(VFreeBusy... component) {
Calendar request = wrap(Method.REQUEST, component);
Calendar request = wrap(REQUEST, component);
request.validate();
return request;
}
Expand Down Expand Up @@ -94,7 +95,7 @@ public Calendar delegate(Calendar request) {
*/
@Override
public Calendar reply(Calendar request) {
Calendar reply = transform(Method.REPLY, request);
Calendar reply = transform(REPLY, request);
reply.validate();
return reply;
}
Expand Down
9 changes: 5 additions & 4 deletions src/main/java/net/fortuna/ical4j/agent/VJournalUserAgent.java
Expand Up @@ -2,11 +2,12 @@

import net.fortuna.ical4j.model.Calendar;
import net.fortuna.ical4j.model.component.VJournal;
import net.fortuna.ical4j.model.property.Method;
import net.fortuna.ical4j.model.property.Organizer;
import net.fortuna.ical4j.model.property.ProdId;
import net.fortuna.ical4j.util.UidGenerator;

import static net.fortuna.ical4j.model.property.immutable.ImmutableMethod.*;

public class VJournalUserAgent extends AbstractUserAgent<VJournal> {

public VJournalUserAgent(ProdId prodId, Organizer organizer, UidGenerator uidGenerator) {
Expand All @@ -28,7 +29,7 @@ public VJournalUserAgent(ProdId prodId, Organizer organizer, UidGenerator uidGen
*/
@Override
public Calendar publish(VJournal... component) {
Calendar published = wrap(Method.PUBLISH, component);
Calendar published = wrap(PUBLISH, component);
published.validate();
return published;
}
Expand Down Expand Up @@ -81,7 +82,7 @@ public Calendar reply(Calendar request) {
*/
@Override
public Calendar add(VJournal component) {
Calendar add = wrap(Method.ADD, component);
Calendar add = wrap(ADD, component);
add.validate();
return add;
}
Expand Down Expand Up @@ -119,7 +120,7 @@ public Calendar add(VJournal component) {
*/
@Override
public Calendar cancel(VJournal... component) {
Calendar cancel = wrap(Method.CANCEL, component);
Calendar cancel = wrap(CANCEL, component);
cancel.validate();
return cancel;
}
Expand Down
19 changes: 10 additions & 9 deletions src/main/java/net/fortuna/ical4j/agent/VToDoUserAgent.java
Expand Up @@ -2,12 +2,13 @@

import net.fortuna.ical4j.model.Calendar;
import net.fortuna.ical4j.model.component.VToDo;
import net.fortuna.ical4j.model.property.Method;
import net.fortuna.ical4j.model.property.Organizer;
import net.fortuna.ical4j.model.property.ProdId;
import net.fortuna.ical4j.transform.calendar.RequestTransformer;
import net.fortuna.ical4j.util.UidGenerator;

import static net.fortuna.ical4j.model.property.immutable.ImmutableMethod.*;

public class VToDoUserAgent extends AbstractUserAgent<VToDo> {

private final RequestTransformer delegateTransformer;
Expand All @@ -34,7 +35,7 @@ public VToDoUserAgent(ProdId prodId, Organizer organizer, UidGenerator uidGenera
*/
@Override
public Calendar publish(VToDo... component) {
Calendar published = wrap(Method.PUBLISH, component);
Calendar published = wrap(PUBLISH, component);
published.validate();
return published;
}
Expand Down Expand Up @@ -91,7 +92,7 @@ public Calendar publish(VToDo... component) {
*/
@Override
public Calendar request(VToDo... component) {
Calendar request = wrap(Method.REQUEST, component);
Calendar request = wrap(REQUEST, component);
request.validate();
return request;
}
Expand Down Expand Up @@ -134,7 +135,7 @@ public Calendar delegate(Calendar request) {
*/
@Override
public Calendar reply(Calendar request) {
Calendar reply = transform(Method.REPLY, request);
Calendar reply = transform(REPLY, request);
reply.validate();
return reply;
}
Expand Down Expand Up @@ -165,7 +166,7 @@ public Calendar reply(Calendar request) {
*/
@Override
public Calendar add(VToDo component) {
Calendar add = wrap(Method.ADD, component);
Calendar add = wrap(ADD, component);
add.validate();
return add;
}
Expand Down Expand Up @@ -211,7 +212,7 @@ public Calendar add(VToDo component) {
*/
@Override
public Calendar cancel(VToDo... component) {
Calendar cancel = wrap(Method.CANCEL, component);
Calendar cancel = wrap(CANCEL, component);
cancel.validate();
return cancel;
}
Expand Down Expand Up @@ -240,7 +241,7 @@ public Calendar cancel(VToDo... component) {
*/
@Override
public Calendar refresh(VToDo component) {
Calendar refresh = wrap(Method.REFRESH, component);
Calendar refresh = wrap(REFRESH, component);
refresh.validate();
return refresh;
}
Expand Down Expand Up @@ -268,7 +269,7 @@ public Calendar refresh(VToDo component) {
*/
@Override
public Calendar counter(Calendar request) {
Calendar counter = transform(Method.COUNTER, request);
Calendar counter = transform(COUNTER, request);
counter.validate();
return counter;
}
Expand All @@ -286,7 +287,7 @@ public Calendar counter(Calendar request) {
*/
@Override
public Calendar declineCounter(Calendar counter) {
Calendar declineCounter = transform(Method.DECLINE_COUNTER, counter);
Calendar declineCounter = transform(DECLINE_COUNTER, counter);
declineCounter.validate();
return declineCounter;
}
Expand Down
5 changes: 3 additions & 2 deletions src/main/java/net/fortuna/ical4j/data/HCalendarParser.java
Expand Up @@ -33,7 +33,6 @@

import net.fortuna.ical4j.model.*;
import net.fortuna.ical4j.model.parameter.Value;
import net.fortuna.ical4j.model.property.Version;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
Expand All @@ -54,6 +53,8 @@
import java.util.ArrayList;
import java.util.List;

import static net.fortuna.ical4j.model.property.immutable.ImmutableVersion.VERSION_2_0;

/**
* A {@link CalendarParser} that parses XHTML documents that include calendar data marked up with the hCalendar
* microformat.
Expand Down Expand Up @@ -283,7 +284,7 @@ private void buildCalendar(Document d, ContentHandler handler) throws ParserExce
// no PRODID, as the using application should set that itself

handler.startProperty(Property.VERSION);
handler.propertyValue(Version.VERSION_2_0.getValue());
handler.propertyValue(VERSION_2_0.getValue());
handler.endProperty(Property.VERSION);

Element method = findElement(XPATH_METHOD, d);
Expand Down
9 changes: 5 additions & 4 deletions src/main/java/net/fortuna/ical4j/model/FluentCalendar.java
Expand Up @@ -34,9 +34,10 @@
package net.fortuna.ical4j.model;

import net.fortuna.ical4j.model.component.CalendarComponent;
import net.fortuna.ical4j.model.property.CalScale;
import net.fortuna.ical4j.model.property.ProdId;
import net.fortuna.ical4j.model.property.Version;

import static net.fortuna.ical4j.model.property.immutable.ImmutableCalScale.GREGORIAN;
import static net.fortuna.ical4j.model.property.immutable.ImmutableVersion.VERSION_2_0;

/**
* Provide fluent API support for {@link Calendar}
Expand All @@ -46,8 +47,8 @@ public interface FluentCalendar {
Calendar getFluentTarget();

default FluentCalendar withDefaults() {
getFluentTarget().add(CalScale.GREGORIAN);
getFluentTarget().add(Version.VERSION_2_0);
getFluentTarget().add(GREGORIAN);
getFluentTarget().add(VERSION_2_0);
return getFluentTarget();
}

Expand Down
8 changes: 0 additions & 8 deletions src/main/java/net/fortuna/ical4j/model/ImmutableContent.java

This file was deleted.

0 comments on commit 60347ad

Please sign in to comment.