001/*
002 * Copyright (c) 2006-2011 Nuxeo SA (http://nuxeo.com/) and others.
003 *
004 * All rights reserved. This program and the accompanying materials
005 * are made available under the terms of the Eclipse Public License v1.0
006 * which accompanies this distribution, and is available at
007 * http://www.eclipse.org/legal/epl-v10.html
008 *
009 * Contributors:
010 *     bstefanescu
011 */
012package org.nuxeo.ecm.core.event.impl;
013
014import java.rmi.dgc.VMID;
015import java.util.ArrayList;
016import java.util.HashSet;
017import java.util.Iterator;
018import java.util.List;
019import java.util.Set;
020
021import org.nuxeo.ecm.core.event.Event;
022import org.nuxeo.ecm.core.event.EventBundle;
023
024/**
025 * @author <a href="mailto:bs@nuxeo.com">Bogdan Stefanescu</a>
026 */
027public class EventBundleImpl implements EventBundle {
028
029    private static final long serialVersionUID = 1L;
030
031    // not final to allow modification derived classes
032    protected VMID vmid;
033
034    protected final List<Event> events;
035
036    protected final Set<String> eventNames;
037
038    public EventBundleImpl(VMID sourceVMID) {
039        events = new ArrayList<Event>();
040        eventNames = new HashSet<String>();
041        vmid = sourceVMID;
042    }
043
044    public EventBundleImpl() {
045        this(EventServiceImpl.VMID);
046    }
047
048    @Override
049    public boolean hasRemoteSource() {
050        return !vmid.equals(EventServiceImpl.VMID);
051    }
052
053    @Override
054    public String getName() {
055        if (events.isEmpty()) {
056            return null;
057        }
058        return events.get(0).getContext().getRepositoryName();
059    }
060
061    @Override
062    public boolean isEmpty() {
063        return events.isEmpty();
064    }
065
066    @Override
067    public Event peek() {
068        return events.get(0);
069    }
070
071    @Override
072    public void push(Event event) {
073        events.add(event);
074        String eventName = event.getName();
075        if (eventName != null) {
076            eventNames.add(eventName);
077        }
078    }
079
080    @Override
081    public int size() {
082        return events.size();
083    }
084
085    @Override
086    public Iterator<Event> iterator() {
087        return events.iterator();
088    }
089
090    @Override
091    public VMID getSourceVMID() {
092        return vmid;
093    }
094
095    @Override
096    public boolean containsEventName(String eventName) {
097        if (eventName == null) {
098            return false;
099        }
100        return eventNames.contains(eventName);
101    }
102
103}