001package org.javasimon.jmx;
002
003import org.javasimon.Simon;
004import org.javasimon.SimonState;
005import org.javasimon.utils.SimonUtils;
006
007import java.util.ArrayList;
008import java.util.List;
009
010/**
011 * Common functionality for JMX bean for a single Simon that corresponds to AbstractSimon in the core package.
012 *
013 * @author <a href="mailto:virgo47@gmail.com">Richard "Virgo" Richter</a>
014 */
015public abstract class AbstractSimonMXBeanImpl implements SimonSuperMXBean {
016
017        @Override
018        public final String getName() {
019                return simon().getName();
020        }
021
022        @Override
023        public final String getParentName() {
024                if (simon().getParent() != null) {
025                        return simon().getParent().getName();
026                }
027                return null;
028        }
029
030        @Override
031        public final List<String> getChildrenNames() {
032                List<String> names = new ArrayList<>();
033                for (Simon child : simon().getChildren()) {
034                        names.add(child.getName());
035                }
036                return names;
037        }
038
039        @Override
040        public final String getState() {
041                return simon().getState().name();
042        }
043
044        @Override
045        public final void setState(String state, boolean overrule) {
046                simon().setState(SimonState.valueOf(state), overrule);
047        }
048
049        @Override
050        public final boolean isEnabled() {
051                return simon().isEnabled();
052        }
053
054        @Override
055        public final String getNote() {
056                return simon().getNote();
057        }
058
059        @Override
060        public final void setNote(String note) {
061                simon().setNote(note);
062        }
063
064        @Override
065        public final long getFirstUsage() {
066                return simon().getFirstUsage();
067        }
068
069        @Override
070        public String getFirstUsageAsString() {
071                return SimonUtils.presentTimestamp(getFirstUsage());
072        }
073
074        @Override
075        public final long getLastUsage() {
076                return simon().getLastUsage();
077        }
078
079        @Override
080        public final String getLastUsageAsString() {
081                return SimonUtils.presentTimestamp(getLastUsage());
082        }
083
084        /**
085         * Returns the wrapped Simon.
086         *
087         * @return wrapped Simon
088         */
089        protected abstract Simon simon();
090}