001 // Copyright 2006, 2007, 2008, 2011 The Apache Software Foundation
002 //
003 // Licensed under the Apache License, Version 2.0 (the "License");
004 // you may not use this file except in compliance with the License.
005 // You may obtain a copy of the License at
006 //
007 // http://www.apache.org/licenses/LICENSE-2.0
008 //
009 // Unless required by applicable law or agreed to in writing, software
010 // distributed under the License is distributed on an "AS IS" BASIS,
011 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
012 // See the License for the specific language governing permissions and
013 // limitations under the License.
014
015 package org.apache.tapestry5.internal.event;
016
017 import org.apache.tapestry5.ioc.internal.util.CollectionFactory;
018 import org.apache.tapestry5.services.InvalidationEventHub;
019 import org.apache.tapestry5.services.InvalidationListener;
020
021 import java.util.List;
022
023 /**
024 * Base implementation class for classes (especially services) that need to manage a list of
025 * {@link org.apache.tapestry5.services.InvalidationListener}s.
026 */
027 public class InvalidationEventHubImpl implements InvalidationEventHub
028 {
029 private final List<InvalidationListener> listeners;
030
031 protected InvalidationEventHubImpl(boolean productionMode)
032 {
033 if (productionMode)
034 {
035 listeners = null;
036 } else
037 {
038 listeners = CollectionFactory.newThreadSafeList();
039 }
040 }
041
042 /**
043 * Notifies all {@link InvalidationListener listener}s.
044 */
045 protected final void fireInvalidationEvent()
046 {
047 if (listeners == null)
048 {
049 return;
050 }
051
052 for (InvalidationListener listener : listeners)
053 {
054 listener.objectWasInvalidated();
055 }
056 }
057
058 public final void addInvalidationListener(InvalidationListener listener)
059 {
060 if (listeners != null)
061 {
062 listeners.add(listener);
063 }
064 }
065 }