Skip to content

Commit

Permalink
Refactor transformers
Browse files Browse the repository at this point in the history
  • Loading branch information
benfortuna committed Jun 21, 2020
1 parent 1d922bc commit c57e75b
Show file tree
Hide file tree
Showing 41 changed files with 178 additions and 129 deletions.
27 changes: 15 additions & 12 deletions src/main/java/net/fortuna/ical4j/agent/AbstractUserAgent.java
@@ -1,12 +1,14 @@
package net.fortuna.ical4j.agent;

import net.fortuna.ical4j.model.Calendar;
import net.fortuna.ical4j.model.PropertyList;
import net.fortuna.ical4j.model.component.CalendarComponent;
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.*;
import net.fortuna.ical4j.transform.Transformer;
import net.fortuna.ical4j.transform.calendar.*;
import net.fortuna.ical4j.util.Calendars;
import net.fortuna.ical4j.util.UidGenerator;

Expand All @@ -21,19 +23,20 @@ public abstract class AbstractUserAgent<T extends CalendarComponent> implements

private final ProdId prodId;

private final Map<Method, Transformer<Calendar>> transformers;
private final Map<Method, Transformer<Calendar>> methodTransformers;

public AbstractUserAgent(ProdId prodId, Organizer organizer, UidGenerator uidGenerator) {
this.prodId = prodId;
transformers = new HashMap<>();
transformers.put(Method.PUBLISH, new PublishTransformer(organizer, uidGenerator,true));
transformers.put(Method.REQUEST, new RequestTransformer(organizer, uidGenerator));
transformers.put(Method.ADD, new AddTransformer(organizer, uidGenerator));
transformers.put(Method.CANCEL, new CancelTransformer(organizer, uidGenerator));
transformers.put(Method.REPLY, new ReplyTransformer(uidGenerator));
transformers.put(Method.REFRESH, new RefreshTransformer(uidGenerator));
transformers.put(Method.COUNTER, new CounterTransformer(uidGenerator));
transformers.put(Method.DECLINE_COUNTER, new DeclineCounterTransformer(organizer, uidGenerator));

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));
}

@SafeVarargs
Expand All @@ -44,7 +47,7 @@ protected final Calendar wrap(Method method, T... component) {
}

protected Calendar transform(Method method, Calendar calendar) {
Transformer<Calendar> transformer = transformers.get(method);
Transformer<Calendar> transformer = methodTransformers.get(method);
transformer.transform(calendar);
return calendar;
}
Expand Down
13 changes: 7 additions & 6 deletions src/main/java/net/fortuna/ical4j/agent/VEventUserAgent.java
Expand Up @@ -5,7 +5,7 @@
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.RequestTransformer;
import net.fortuna.ical4j.transform.calendar.RequestTransformer;
import net.fortuna.ical4j.util.UidGenerator;

public class VEventUserAgent extends AbstractUserAgent<VEvent> {
Expand Down Expand Up @@ -96,7 +96,7 @@ public Calendar request(VEvent... component) {

@Override
public Calendar delegate(Calendar request) {
Calendar delegated = delegateTransformer.transform(request);
Calendar delegated = delegateTransformer.transform(request.copy());
delegated.validate();
return delegated;
}
Expand Down Expand Up @@ -144,7 +144,7 @@ public Calendar delegate(Calendar request) {
*/
@Override
public Calendar reply(Calendar request) {
Calendar reply = transform(Method.REPLY, request);
Calendar reply = transform(Method.REPLY, request.copy());
reply.validate();
return reply;
}
Expand Down Expand Up @@ -235,7 +235,8 @@ public Calendar cancel(VEvent... component) {
*/
@Override
public Calendar refresh(VEvent component) {
Calendar refresh = wrap(Method.REFRESH, component);
Calendar refresh = wrap(Method.REFRESH, component.copy());
// componentTransformers.get(Method.REFRESH).transform(refresh.getComponents().getAll());
refresh.validate();
return refresh;
}
Expand Down Expand Up @@ -263,7 +264,7 @@ public Calendar refresh(VEvent component) {
*/
@Override
public Calendar counter(Calendar request) {
Calendar counter = transform(Method.COUNTER, request);
Calendar counter = transform(Method.COUNTER, request.copy());
counter.validate();
return counter;
}
Expand All @@ -281,7 +282,7 @@ public Calendar counter(Calendar request) {
*/
@Override
public Calendar declineCounter(Calendar counter) {
Calendar declineCounter = transform(Method.DECLINE_COUNTER, counter);
Calendar declineCounter = transform(Method.DECLINE_COUNTER, counter.copy());
declineCounter.validate();
return declineCounter;
}
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/net/fortuna/ical4j/agent/VToDoUserAgent.java
Expand Up @@ -5,7 +5,7 @@
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.RequestTransformer;
import net.fortuna.ical4j.transform.calendar.RequestTransformer;
import net.fortuna.ical4j.util.UidGenerator;

public class VToDoUserAgent extends AbstractUserAgent<VToDo> {
Expand Down
@@ -1,4 +1,4 @@
package net.fortuna.ical4j.transform.rfc5545;
package net.fortuna.ical4j.transform;

/**
* Incarnation of a RFC5545 rule.
Expand Down
Expand Up @@ -5,10 +5,12 @@
*
* $Id$
*/
package net.fortuna.ical4j.transform.rfc5545;
package net.fortuna.ical4j.transform;

import net.fortuna.ical4j.model.Component;
import net.fortuna.ical4j.model.Property;
import net.fortuna.ical4j.transform.component.Rfc5545ComponentRule;
import net.fortuna.ical4j.transform.property.Rfc5545PropertyRule;

import java.util.LinkedHashSet;
import java.util.ServiceLoader;
Expand Down
@@ -1,14 +1,14 @@
package net.fortuna.ical4j.transform;
package net.fortuna.ical4j.transform.calendar;

import net.fortuna.ical4j.model.Calendar;
import net.fortuna.ical4j.model.ComponentGroup;
import net.fortuna.ical4j.model.Property;
import net.fortuna.ical4j.model.component.CalendarComponent;
import net.fortuna.ical4j.model.property.Method;
import net.fortuna.ical4j.model.property.Uid;
import net.fortuna.ical4j.transform.command.MethodUpdate;
import net.fortuna.ical4j.transform.command.SequenceIncrement;
import net.fortuna.ical4j.transform.command.UidUpdate;
import net.fortuna.ical4j.transform.Transformer;
import net.fortuna.ical4j.transform.component.SequenceIncrement;
import net.fortuna.ical4j.transform.component.UidUpdate;
import net.fortuna.ical4j.util.UidGenerator;

import java.util.Optional;
Expand Down Expand Up @@ -37,15 +37,16 @@ public Calendar transform(Calendar object) {
methodUpdate.transform(object);

Optional<Uid> uid = Optional.empty();
for (CalendarComponent component : object.getComponents()) {
for (CalendarComponent component : object.getComponents().getAll()) {
uidUpdate.transform(component);
if (!uid.isPresent()) {
uid = component.getProperty(Property.UID);
} else if (sameUid && !uid.equals(component.getProperty(Property.UID))) {
uid = component.getProperties().getFirst(Property.UID);
} else if (sameUid && !uid.equals(component.getProperties().getFirst(Property.UID))) {
throw new IllegalArgumentException("All components must share the same non-null UID");
}

ComponentGroup<CalendarComponent> componentGroup = new ComponentGroup<>(object.getComponents(), uid.get());
ComponentGroup<CalendarComponent> componentGroup = new ComponentGroup<>(
object.getComponents().getAll(), uid.get());

// if a calendar component has already been published previously
// update the sequence number..
Expand Down
Expand Up @@ -29,13 +29,13 @@
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package net.fortuna.ical4j.transform;
package net.fortuna.ical4j.transform.calendar;

import net.fortuna.ical4j.model.Calendar;
import net.fortuna.ical4j.model.component.CalendarComponent;
import net.fortuna.ical4j.model.property.Method;
import net.fortuna.ical4j.model.property.Organizer;
import net.fortuna.ical4j.transform.command.OrganizerUpdate;
import net.fortuna.ical4j.transform.component.OrganizerUpdate;
import net.fortuna.ical4j.util.UidGenerator;

/**
Expand All @@ -57,7 +57,7 @@ public AddTransformer(Organizer organizer, UidGenerator uidGenerator) {

@Override
public Calendar transform(Calendar object) {
for (CalendarComponent component : object.getComponents()) {
for (CalendarComponent component : object.getComponents().getAll()) {
organizerUpdate.transform(component);
}
return super.transform(object);
Expand Down
Expand Up @@ -29,13 +29,13 @@
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package net.fortuna.ical4j.transform;
package net.fortuna.ical4j.transform.calendar;

import net.fortuna.ical4j.model.Calendar;
import net.fortuna.ical4j.model.component.CalendarComponent;
import net.fortuna.ical4j.model.property.Method;
import net.fortuna.ical4j.model.property.Organizer;
import net.fortuna.ical4j.transform.command.OrganizerUpdate;
import net.fortuna.ical4j.transform.component.OrganizerUpdate;
import net.fortuna.ical4j.util.UidGenerator;

/**
Expand All @@ -57,7 +57,7 @@ public CancelTransformer(Organizer organizer, UidGenerator uidGenerator) {

@Override
public Calendar transform(Calendar object) {
for (CalendarComponent component : object.getComponents()) {
for (CalendarComponent component : object.getComponents().getAll()) {
organizerUpdate.transform(component);
}
return super.transform(object);
Expand Down
Expand Up @@ -29,7 +29,7 @@
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package net.fortuna.ical4j.transform;
package net.fortuna.ical4j.transform.calendar;

import net.fortuna.ical4j.model.Calendar;
import net.fortuna.ical4j.model.Property;
Expand Down
Expand Up @@ -29,14 +29,15 @@
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package net.fortuna.ical4j.transform;
package net.fortuna.ical4j.transform.calendar;

import net.fortuna.ical4j.model.Calendar;
import net.fortuna.ical4j.model.Property;
import net.fortuna.ical4j.model.component.CalendarComponent;
import net.fortuna.ical4j.model.property.Method;
import net.fortuna.ical4j.model.property.Organizer;
import net.fortuna.ical4j.transform.command.OrganizerUpdate;
import net.fortuna.ical4j.transform.component.ComponentDeclineCounterTransformer;
import net.fortuna.ical4j.transform.component.OrganizerUpdate;
import net.fortuna.ical4j.util.UidGenerator;

import java.util.Optional;
Expand All @@ -53,19 +54,23 @@ public class DeclineCounterTransformer extends AbstractMethodTransformer {

private final OrganizerUpdate organizerUpdate;

private final ComponentDeclineCounterTransformer componentMethodTransformer;

public DeclineCounterTransformer(Organizer organizer, UidGenerator uidGenerator) {
super(Method.DECLINE_COUNTER, uidGenerator, true, false);
this.organizerUpdate = new OrganizerUpdate(organizer);
this.componentMethodTransformer = new ComponentDeclineCounterTransformer();
}

@Override
public Calendar transform(Calendar object) {
Optional<Method> method = object.getProperty(Property.METHOD);
Optional<Method> method = object.getProperties().getFirst(Property.METHOD);
if (!method.isPresent() || !Method.COUNTER.equals(method.get())) {
throw new IllegalArgumentException("Expecting COUNTER method in source");
}
for (CalendarComponent component : object.getComponents()) {
for (CalendarComponent component : object.getComponents().getAll()) {
organizerUpdate.transform(component);
componentMethodTransformer.transform(component);
}
return super.transform(object);
}
Expand Down
@@ -1,13 +1,9 @@
package net.fortuna.ical4j.transform.command;
package net.fortuna.ical4j.transform.calendar;

import net.fortuna.ical4j.model.Calendar;
import net.fortuna.ical4j.model.Property;
import net.fortuna.ical4j.model.PropertyList;
import net.fortuna.ical4j.model.property.Method;
import net.fortuna.ical4j.transform.Transformer;

import java.util.Optional;

/**
* Created by fortuna on 19/07/2017.
*/
Expand All @@ -21,12 +17,7 @@ public MethodUpdate(Method method) {

@Override
public Calendar transform(Calendar object) {
PropertyList calProps = object.getProperties();

Optional<Method> oldMethod = calProps.getProperty(Property.METHOD);
oldMethod.ifPresent(calProps::remove);
calProps.add(this.newMethod);

object.replace(newMethod);
return object;
}
}
Expand Up @@ -29,13 +29,13 @@
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package net.fortuna.ical4j.transform;
package net.fortuna.ical4j.transform.calendar;

import net.fortuna.ical4j.model.Calendar;
import net.fortuna.ical4j.model.component.CalendarComponent;
import net.fortuna.ical4j.model.property.Method;
import net.fortuna.ical4j.model.property.Organizer;
import net.fortuna.ical4j.transform.command.OrganizerUpdate;
import net.fortuna.ical4j.transform.component.OrganizerUpdate;
import net.fortuna.ical4j.util.UidGenerator;

/**
Expand All @@ -57,7 +57,7 @@ public PublishTransformer(Organizer organizer, UidGenerator uidGenerator, boolea

@Override
public Calendar transform(Calendar object) {
for (CalendarComponent component : object.getComponents()) {
for (CalendarComponent component : object.getComponents().getAll()) {
organizerUpdate.transform(component);
}
return super.transform(object);
Expand Down
Expand Up @@ -29,9 +29,11 @@
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package net.fortuna.ical4j.transform;
package net.fortuna.ical4j.transform.calendar;

import net.fortuna.ical4j.model.Calendar;
import net.fortuna.ical4j.model.property.Method;
import net.fortuna.ical4j.transform.component.ComponentRefreshTransformer;
import net.fortuna.ical4j.util.UidGenerator;

/**
Expand All @@ -44,8 +46,16 @@
*/
public class RefreshTransformer extends AbstractMethodTransformer {

private final ComponentRefreshTransformer componentMethodTransformer;

public RefreshTransformer(UidGenerator uidGenerator) {
super(Method.REFRESH, uidGenerator, true, false);
this.componentMethodTransformer = new ComponentRefreshTransformer();
}

@Override
public Calendar transform(Calendar object) {
object.getComponents().getAll().forEach(componentMethodTransformer::transform);
return super.transform(object);
}
}
Expand Up @@ -29,7 +29,7 @@
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package net.fortuna.ical4j.transform;
package net.fortuna.ical4j.transform.calendar;

import net.fortuna.ical4j.model.Calendar;
import net.fortuna.ical4j.model.Property;
Expand Down

0 comments on commit c57e75b

Please sign in to comment.