001package org.javasimon;
002
003import org.javasimon.callback.CompositeCallback;
004
005import java.util.Collection;
006import java.util.Collections;
007
008/**
009 * {@link Manager} implementation that does nothing or returns {@code null} or {@link NullSimon} as expected
010 * from manager in disabled state. Does not support {@link #enable()}/{@link #disable()} - for this
011 * use {@link SwitchingManager}.
012 *
013 * @author <a href="mailto:virgo47@gmail.com">Richard "Virgo" Richter</a>
014 */
015public final class DisabledManager implements Manager {
016
017        /**
018         * Returns "Null Simon" that always returns empty/null values and cannot measure anything.
019         * Null Simon returned by this method is neither {@link Stopwatch} nor {@link Counter}.
020         *
021         * @param name ignored
022         * @return null Simon
023         */
024        @Override
025        public Simon getSimon(String name) {
026                return NullSimon.INSTANCE;
027        }
028
029        @Override
030        public void destroySimon(String name) {
031        }
032
033        @Override
034        public void clear() {
035        }
036
037        @Override
038        public CompositeCallback callback() {
039                return null;
040        }
041
042        @Override
043        public ManagerConfiguration configuration() {
044                return null;
045        }
046
047        /**
048         * Returns "Null Counter" that always returns empty/null values and cannot measure anything.
049         *
050         * @param name ignored
051         * @return null Counter
052         */
053        @Override
054        public Counter getCounter(String name) {
055                return NullCounter.INSTANCE;
056        }
057
058        /**
059         * Returns "Null Stopwatch" that always returns empty/null values and cannot measure anything.
060         *
061         * @param name ignored
062         * @return null Stopwatch
063         */
064        @Override
065        public Stopwatch getStopwatch(String name) {
066                return NullStopwatch.INSTANCE;
067        }
068
069        /**
070         * Returns "Null Simon" that always returns empty/null values and cannot measure anything.
071         * Null Simon returned by this method is neither {@link Stopwatch} nor {@link Counter}.
072         *
073         * @return null Simon
074         */
075        @Override
076        public Simon getRootSimon() {
077                return NullSimon.INSTANCE;
078        }
079
080        @Override
081        public Collection<String> getSimonNames() {
082                return Collections.emptyList();
083        }
084
085        @Override
086        public Collection<Simon> getSimons(SimonFilter simonFilter) {
087                return Collections.emptyList();
088        }
089
090        /** Throws {@link UnsupportedOperationException}. */
091        @Override
092        public void enable() {
093                throw new UnsupportedOperationException("Only SwitchingManager supports this operation.");
094        }
095
096        /** Throws {@link UnsupportedOperationException}. */
097        @Override
098        public void disable() {
099                throw new UnsupportedOperationException("Only SwitchingManager supports this operation.");
100        }
101
102        /**
103         * Returns false.
104         *
105         * @return false
106         */
107        @Override
108        public boolean isEnabled() {
109                return false;
110        }
111
112        /**
113         * Does nothing here.
114         *
115         * @param message not used
116         */
117        @Override
118        public void message(String message) {
119        }
120
121        /**
122         * Does nothing here.
123         *
124         * @param message not used
125         * @param cause not used
126         */
127        @Override
128        public void warning(String message, Exception cause) {
129        }
130
131        @Override
132        public long nanoTime() {
133                return 0;
134        }
135
136        @Override
137        public long milliTime() {
138                return 0;
139        }
140
141        @Override
142        public long millisForNano(long nanos) {
143                return 0;
144        }
145}