/* * Geotoolkit - An Open Source Java GIS Toolkit * http://www.geotoolkit.org * * (C) 2008 - 2009, Geomatys * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. */ package org.geotoolkit.util.collection; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.EventObject; import org.apache.sis.measure.NumberRange; /** * Event generated by "living" lists. * * @author Johann Sorel (Geomatys) * @module */ public class CollectionChangeEvent<T> extends EventObject{ private static final long serialVersionUID = 4003873381282325130L; public static final int ITEM_ADDED = 1; public static final int ITEM_REMOVED = 2; public static final int ITEM_CHANGED = 3; private final NumberRange range; private final int type; private final Collection<T> items; private final EventObject subEvent; public CollectionChangeEvent(final Object source, final T item, final int type, final NumberRange range, final EventObject event){ this(source, Collections.singleton(item), type, range, event); } public CollectionChangeEvent(final Object source, final Collection<? extends T> items, final int type, final NumberRange range, final EventObject event){ super(source); if(type < 1 || type > 3) throw new IllegalArgumentException("invalide type"); this.range = range; this.type = type; this.items = Collections.unmodifiableCollection(new ArrayList(items)); this.subEvent = event; } /** * Returns the range index of the affected items. * @return NumberRange or null if the range could not be calculate. */ public NumberRange getRange(){ return range; } /** * Returns an integer identifying the type of event. * Possible values are : * - ITEM_ADDED * - ITEM_REMOVED * - ITEM_CHANGED * * @return event type : add, remove or change */ public int getType(){ return type; } /** * Returns the affected items of this event. * * @return Collection<T> , immutable and never null */ public Collection<T> getItems(){ return items; } /** * If the type is a change event, then the original EventObject is * provided by this method. * * @return original event or null. */ public EventObject getChangeEvent(){ return subEvent; } }