AbstractFlowCreditManager.java
01 /*
02 *
03 * Licensed to the Apache Software Foundation (ASF) under one
04 * or more contributor license agreements.  See the NOTICE file
05 * distributed with this work for additional information
06 * regarding copyright ownership.  The ASF licenses this file
07 * to you under the Apache License, Version 2.0 (the
08 * "License"); you may not use this file except in compliance
09 * with the License.  You may obtain a copy of the License at
10 *
11 *   http://www.apache.org/licenses/LICENSE-2.0
12 *
13 * Unless required by applicable law or agreed to in writing,
14 * software distributed under the License is distributed on an
15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16 * KIND, either express or implied.  See the License for the
17 * specific language governing permissions and limitations
18 * under the License.
19 *
20 */
21 package org.apache.qpid.server.flow;
22 
23 import java.util.concurrent.atomic.AtomicBoolean;
24 import java.util.Set;
25 import java.util.HashSet;
26 
27 public abstract class AbstractFlowCreditManager implements FlowCreditManager
28 {
29     protected final AtomicBoolean _suspended = new AtomicBoolean(false);
30     private final Set<FlowCreditManagerListener> _listeners = new HashSet<FlowCreditManagerListener>();
31 
32     public final void addStateListener(FlowCreditManagerListener listener)
33     {
34         _listeners.add(listener);
35     }
36 
37     public final boolean removeListener(FlowCreditManagerListener listener)
38     {
39         return _listeners.remove(listener);
40     }
41 
42     private void notifyListeners(final boolean suspended)
43     {
44         for(FlowCreditManagerListener listener : _listeners)
45         {
46             listener.creditStateChanged(!suspended);
47         }
48     }
49 
50     protected final void setSuspended(final boolean suspended)
51     {
52         if(_suspended.compareAndSet(!suspended, suspended))
53         {
54             notifyListeners(suspended);
55         }
56     }
57 
58     protected final void notifyIncreaseBytesCredit()
59     {
60         notifyListeners(false);
61     }
62 }