    1   /***
    2    *
    3    * Copyright 2004 Protique Ltd
    4    *
    5    * Licensed under the Apache License, Version 2.0 (the "License");
    6    * you may not use this file except in compliance with the License.
    7    * You may obtain a copy of the License at
    8    *
    9    * http://www.apache.org/licenses/LICENSE-2.0
    10   *
    11   * Unless required by applicable law or agreed to in writing, software
    12   * distributed under the License is distributed on an "AS IS" BASIS,
    13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    14   * See the License for the specific language governing permissions and
    15   * limitations under the License.
    16   *
    17   **/
    18  package org.activeio.stats;
    19
    20  import EDU.oswego.cs.dl.util.concurrent.SynchronizedLong;
    21
    22  import javax.management.j2ee.statistics.CountStatistic;
    23
    24  /***
    25   * Shamelessly taken from the ActiveMQ project ( http://activemq.com )
    26   * A count statistic implementation
    27   *
    28   * @version $Revision: 1.1 $
    29   */
    30  public class CountStatisticImpl extends StatisticImpl implements CountStatistic {
    31
    32      private final SynchronizedLong counter = new SynchronizedLong(0);
    33      private CountStatisticImpl parent;
    34
    35      public CountStatisticImpl(CountStatisticImpl parent, String name, String description) {
    36          this(name, description);
    37          this.parent = parent;
    38      }
    39
    40      public CountStatisticImpl(String name, String description) {
    41          this(name, "count", description);
    42      }
    43
    44      public CountStatisticImpl(String name, String unit, String description) {
    45          super(name, unit, description);
    46      }
    47
    48      public void reset() {
    49          super.reset();
    50          counter.set(0);
    51      }
    52
    53      public long getCount() {
    54          return counter.get();
    55      }
    56
    57      public void setCount(long count) {
    58          counter.set(count);
    59      }
    60
    61      public void add(long amount) {
    62          counter.add(amount);
    63          updateSampleTime();
    64          if (parent != null) {
    65              parent.add(amount);
    66          }
    67      }
    68
    69      public void increment() {
    70          counter.increment();
    71          updateSampleTime();
    72          if (parent != null) {
    73              parent.increment();
    74          }
    75      }
    76
    77      public void subtract(long amount) {
    78          counter.subtract(amount);
    79          updateSampleTime();
    80          if (parent != null) {
    81              parent.subtract(amount);
    82          }
    83      }
    84
    85      public void decrement() {
    86          counter.decrement();
    87          updateSampleTime();
    88          if (parent != null) {
    89              parent.decrement();
    90          }
    91      }
    92
    93      public CountStatisticImpl getParent() {
    94          return parent;
    95      }
    96
    97      public void setParent(CountStatisticImpl parent) {
    98          this.parent = parent;
    99      }
    100
    101     protected void appendFieldDescription(StringBuffer buffer) {
    102         buffer.append(" count: ");
    103         buffer.append(Long.toString(counter.get()));
    104         super.appendFieldDescription(buffer);
    105     }
    106 }