BlueprintEvent.java 4.15 KB
/*
 * Decompiled with CFR 0_118.
 * 
 * Could not load the following classes:
 *  com.day.cq.replication.ReplicationAction
 *  com.day.cq.wcm.api.PageEvent
 *  com.day.cq.wcm.api.PageModification
 *  com.day.cq.wcm.api.PageModification$ModificationType
 *  org.apache.commons.collections.IteratorUtils
 *  org.apache.commons.collections.Predicate
 *  org.apache.commons.collections.functors.TruePredicate
 *  org.osgi.service.event.Event
 */
package com.day.cq.wcm.msm.impl;

import com.day.cq.replication.ReplicationAction;
import com.day.cq.wcm.api.PageEvent;
import com.day.cq.wcm.api.PageModification;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Dictionary;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
import org.apache.commons.collections.IteratorUtils;
import org.apache.commons.collections.Predicate;
import org.apache.commons.collections.functors.TruePredicate;
import org.osgi.service.event.Event;

public final class BlueprintEvent {
    public static final String EVENT_TOPIC = "com/day/cq/wcm/msm/blueprint";
    private static final String EVENT_TOPIC_ROOT = "com/day/cq/wcm/msm/blueprint/";
    public static final String EVENT_TOPIC_PAGE = "com/day/cq/wcm/msm/blueprint/pageEvent";
    public static final String EVENT_TOPIC_REPLICATION = "com/day/cq/wcm/msm/blueprint/replication";
    public static final String POSTFIX_SYNCHRONOUS = "/synchronous";
    private static final String PN_MODIFICATIONS = "modifications";
    private static final String PN_ACTION = "replicationAction";
    private final ReplicationAction replicationAction;
    private final List<PageModification> modifications;
    private final String topic;

    private BlueprintEvent(String topic, List<PageModification> modifications, ReplicationAction replicationAction) {
        this.topic = topic;
        this.modifications = new ArrayList<PageModification>();
        if (modifications != null) {
            this.modifications.addAll(modifications);
        }
        this.replicationAction = replicationAction;
    }

    public EVENT_TYPE getType() {
        if (this.modifications != null && this.modifications.size() > 0) {
            return EVENT_TYPE.PAGE;
        }
        if (this.replicationAction != null) {
            return EVENT_TYPE.REPLICATION;
        }
        return null;
    }

    public ReplicationAction getReplicationAction() {
        return this.replicationAction;
    }

    public Event toEvent(boolean synchronous) {
        Hashtable<String, List> props = new Hashtable<String, List>();
        props.put("modifications", this.modifications);
        if (this.replicationAction != null) {
            props.put("replicationAction", (List)this.replicationAction);
        }
        return new Event(this.topic + (synchronous ? "/synchronous" : ""), props);
    }

    public Iterator<PageModification> getModifications(final PageModification.ModificationType filter) {
        Predicate predicate = filter == null ? TruePredicate.getInstance() : new Predicate(){

            public boolean evaluate(Object object) {
                return ((PageModification)object).getType().equals((Object)filter);
            }
        };
        return IteratorUtils.filteredListIterator(this.modifications.listIterator(), (Predicate)predicate);
    }

    public static BlueprintEvent fromEvent(Event event) {
        if (event.getTopic().startsWith("com/day/cq/wcm/msm/blueprint/")) {
            return new BlueprintEvent(event.getTopic(), (List)event.getProperty("modifications"), (ReplicationAction)event.getProperty("replicationAction"));
        }
        return null;
    }

    public static BlueprintEvent fromPageEvent(PageEvent pageEvent) {
        return new BlueprintEvent("com/day/cq/wcm/msm/blueprint/pageEvent", IteratorUtils.toList((Iterator)pageEvent.getModifications()), null);
    }

    public static BlueprintEvent fromReplicationAction(ReplicationAction replicationAction) {
        return new BlueprintEvent("com/day/cq/wcm/msm/blueprint/replication", null, replicationAction);
    }

    public static enum EVENT_TYPE {
        PAGE,
        REPLICATION;
        

        private EVENT_TYPE() {
        }
    }

}