src/core/net/sf/basedb/util/extensions/events/CombiningEventFilter.java

Code
Comments
Other
Rev Date Author Line
4320 29 May 08 nicklas 1 /**
4320 29 May 08 nicklas 2   $Id$
4320 29 May 08 nicklas 3
4320 29 May 08 nicklas 4   Copyright (C) 2008 Nicklas Nordborg
4320 29 May 08 nicklas 5
4320 29 May 08 nicklas 6   This file is part of BASE - BioArray Software Environment.
4320 29 May 08 nicklas 7   Available at http://base.thep.lu.se/
4320 29 May 08 nicklas 8
4320 29 May 08 nicklas 9   BASE is free software; you can redistribute it and/or
4320 29 May 08 nicklas 10   modify it under the terms of the GNU General Public License
4479 05 Sep 08 jari 11   as published by the Free Software Foundation; either version 3
4320 29 May 08 nicklas 12   of the License, or (at your option) any later version.
4320 29 May 08 nicklas 13
4320 29 May 08 nicklas 14   BASE is distributed in the hope that it will be useful,
4320 29 May 08 nicklas 15   but WITHOUT ANY WARRANTY; without even the implied warranty of
4320 29 May 08 nicklas 16   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
4320 29 May 08 nicklas 17   GNU General Public License for more details.
4320 29 May 08 nicklas 18
4320 29 May 08 nicklas 19   You should have received a copy of the GNU General Public License
4515 11 Sep 08 jari 20   along with BASE. If not, see <http://www.gnu.org/licenses/>.
4320 29 May 08 nicklas 21 */
4320 29 May 08 nicklas 22 package net.sf.basedb.util.extensions.events;
4320 29 May 08 nicklas 23
4320 29 May 08 nicklas 24 import java.util.Collection;
4320 29 May 08 nicklas 25
4320 29 May 08 nicklas 26 import net.sf.basedb.util.extensions.Extension;
4320 29 May 08 nicklas 27 import net.sf.basedb.util.extensions.ExtensionPoint;
4320 29 May 08 nicklas 28
4320 29 May 08 nicklas 29 /**
4320 29 May 08 nicklas 30   Event filter that only passes on events based on multiple
4320 29 May 08 nicklas 31   other event filters. Given a collection of event filters,
4320 29 May 08 nicklas 32   this filter can pass on the event if at least one of the
4320 29 May 08 nicklas 33   filters in the collection does or if all of them does.
4320 29 May 08 nicklas 34
4320 29 May 08 nicklas 35   @author nicklas
4320 29 May 08 nicklas 36   @version 2.8
4320 29 May 08 nicklas 37   @base.modified $Date$
4320 29 May 08 nicklas 38  */
4320 29 May 08 nicklas 39 public class CombiningEventFilter
4320 29 May 08 nicklas 40   implements EventFilter
4320 29 May 08 nicklas 41 {
4320 29 May 08 nicklas 42
4320 29 May 08 nicklas 43   private final Collection<EventFilter> filters;
4320 29 May 08 nicklas 44   private final boolean allMustPass;
4320 29 May 08 nicklas 45   
4320 29 May 08 nicklas 46   /**
4320 29 May 08 nicklas 47     Create a new combining event filter. This filter will pass events
4320 29 May 08 nicklas 48     depending on how many of the other event filters passes the event.
4320 29 May 08 nicklas 49     
4320 29 May 08 nicklas 50     @param filters A collection of event filters
4320 29 May 08 nicklas 51     @param allMustPass TRUE if the event must pass all filters to
4320 29 May 08 nicklas 52       pass this filter, FALSE if the event must pass at least one
4320 29 May 08 nicklas 53       filter to pass this filter
4320 29 May 08 nicklas 54   */
4320 29 May 08 nicklas 55   public CombiningEventFilter(Collection<EventFilter> filters, boolean allMustPass)
4320 29 May 08 nicklas 56   {
4320 29 May 08 nicklas 57     this.filters = filters;
4320 29 May 08 nicklas 58     this.allMustPass = allMustPass;
4320 29 May 08 nicklas 59   }
4320 29 May 08 nicklas 60   
4320 29 May 08 nicklas 61   /**
4320 29 May 08 nicklas 62     @return TRUE if the event passes the filters
4320 29 May 08 nicklas 63   */
4320 29 May 08 nicklas 64   @Override
4320 29 May 08 nicklas 65   public boolean shouldSend(EventType event, ExtensionPoint<?> extensionPoint,
4320 29 May 08 nicklas 66       Extension<?> extension)
4320 29 May 08 nicklas 67   {
4320 29 May 08 nicklas 68     for (EventFilter filter : filters)
4320 29 May 08 nicklas 69     {
4320 29 May 08 nicklas 70       boolean pass = filter.shouldSend(event, extensionPoint, extension);
4320 29 May 08 nicklas 71       if (pass)
4320 29 May 08 nicklas 72       {
4320 29 May 08 nicklas 73         if (!allMustPass) return true;
4320 29 May 08 nicklas 74       }
4320 29 May 08 nicklas 75       else
4320 29 May 08 nicklas 76       {
4320 29 May 08 nicklas 77         if (allMustPass) return false;
4320 29 May 08 nicklas 78       }
4320 29 May 08 nicklas 79     }
4320 29 May 08 nicklas 80     return allMustPass;
4320 29 May 08 nicklas 81   }
4320 29 May 08 nicklas 82
4320 29 May 08 nicklas 83 }