001/**
002 * Licensed to the Apache Software Foundation (ASF) under one or more
003 * contributor license agreements.  See the NOTICE file distributed with
004 * this work for additional information regarding copyright ownership.
005 * The ASF licenses this file to You under the Apache License, Version 2.0
006 * (the "License"); you may not use this file except in compliance with
007 * the License.  You may obtain a copy of the License at
008 *
009 *      http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 */
017package org.apache.activemq.management;
018
019import javax.management.j2ee.statistics.Statistic;
020
021/**
022 * Base class for a Statistic implementation
023 * 
024 * 
025 */
026public class StatisticImpl implements Statistic, Resettable {
027
028    protected boolean enabled;
029
030    private String name;
031    private String unit;
032    private String description;
033    private long startTime;
034    private long lastSampleTime;
035    private boolean doReset = true;
036
037    public StatisticImpl(String name, String unit, String description) {
038        this.name = name;
039        this.unit = unit;
040        this.description = description;
041        this.startTime = System.currentTimeMillis();
042        this.lastSampleTime = this.startTime;
043    }
044
045    public synchronized void reset() {
046        if(isDoReset()) {
047            this.startTime = System.currentTimeMillis();
048            this.lastSampleTime = this.startTime;
049        }
050    }
051
052    protected synchronized void updateSampleTime() {
053        this.lastSampleTime = System.currentTimeMillis();
054    }
055
056    public synchronized String toString() {
057        StringBuffer buffer = new StringBuffer();
058        buffer.append(name);
059        buffer.append("{");
060        appendFieldDescription(buffer);
061        buffer.append(" }");
062        return buffer.toString();
063    }
064
065    public String getName() {
066        return this.name;
067    }
068
069    public String getUnit() {
070        return this.unit;
071    }
072
073    public String getDescription() {
074        return this.description;
075    }
076
077    public synchronized long getStartTime() {
078        return this.startTime;
079    }
080
081    public synchronized long getLastSampleTime() {
082        return this.lastSampleTime;
083    }
084
085    /**
086     * @return the enabled
087     */
088    public boolean isEnabled() {
089        return this.enabled;
090    }
091
092    /**
093     * @param enabled the enabled to set
094     */
095    public void setEnabled(boolean enabled) {
096        this.enabled = enabled;
097    }
098    
099    /**
100     * @return the doReset
101     */
102    public boolean isDoReset() {
103        return this.doReset;
104    }
105
106    /**
107     * @param doReset the doReset to set
108     */
109    public void setDoReset(boolean doReset) {
110        this.doReset = doReset;
111    }
112
113
114    protected synchronized void appendFieldDescription(StringBuffer buffer) {
115        buffer.append(" unit: ");
116        buffer.append(this.unit);
117        buffer.append(" startTime: ");
118        // buffer.append(new Date(startTime));
119        buffer.append(this.startTime);
120        buffer.append(" lastSampleTime: ");
121        // buffer.append(new Date(lastSampleTime));
122        buffer.append(this.lastSampleTime);
123        buffer.append(" description: ");
124        buffer.append(this.description);
125    }
126}