001package org.javasimon; 002 003import org.javasimon.callback.CompositeCallback; 004 005import java.util.Collection; 006 007/** 008 * {@link Manager} implementation that supports {@link #enable()} and {@link #disable()} and switches between 009 * backing {@link EnabledManager} and {@link DisabledManager} accordingly. 010 * 011 * @author <a href="mailto:virgo47@gmail.com">Richard "Virgo" Richter</a> 012 */ 013public final class SwitchingManager implements Manager { 014 015 private Manager enabled = new EnabledManager(); 016 017 private Manager disabled = new DisabledManager(); 018 019 private Manager manager = enabled; 020 021 @Override 022 public Simon getRootSimon() { 023 return manager.getRootSimon(); 024 } 025 026 @Override 027 public Simon getSimon(String name) { 028 return manager.getSimon(name); 029 } 030 031 @Override 032 public Counter getCounter(String name) { 033 return manager.getCounter(name); 034 } 035 036 @Override 037 public Stopwatch getStopwatch(String name) { 038 return manager.getStopwatch(name); 039 } 040 041 @Override 042 public Collection<String> getSimonNames() { 043 return manager.getSimonNames(); 044 } 045 046 @Override 047 public Collection<Simon> getSimons(SimonFilter simonFilter) { 048 return manager.getSimons(simonFilter); 049 } 050 051 @Override 052 public void destroySimon(String name) { 053 manager.destroySimon(name); 054 } 055 056 @Override 057 public void clear() { 058 manager.clear(); 059 } 060 061 @Override 062 public CompositeCallback callback() { 063 return manager.callback(); 064 } 065 066 @Override 067 public ManagerConfiguration configuration() { 068 return manager.configuration(); 069 } 070 071 /** Enables the Simon Manager. Enabled manager provides real Simons. */ 072 @Override 073 public void enable() { 074 manager = enabled; 075 } 076 077 /** Disables the Simon Manager. Disabled manager provides null Simons that actually do nothing. */ 078 @Override 079 public void disable() { 080 manager = disabled; 081 } 082 083 /** 084 * Returns true if the Java Simon API is enabled. 085 * 086 * @return true if the API is enabled 087 */ 088 @Override 089 public boolean isEnabled() { 090 return manager == enabled; 091 } 092 093 @Override 094 public void message(String message) { 095 manager.message(message); 096 } 097 098 @Override 099 public void warning(String warning, Exception cause) { 100 manager.warning(warning, cause); 101 } 102 103 @Override 104 public long milliTime() { 105 return manager.milliTime(); 106 } 107 108 @Override 109 public long nanoTime() { 110 return manager.nanoTime(); 111 } 112 113 @Override 114 public long millisForNano(long nanos) { 115 return manager.millisForNano(nanos); 116 } 117 118 void purgeIncrementalSimonsOlderThan(long thresholdMs) { 119 // Store reference to current manager to avoid check-than-act 120 Manager currentManager = manager; 121 122 if (currentManager instanceof EnabledManager) { 123 ((EnabledManager) currentManager).purgeIncrementalSimonsOlderThan(thresholdMs); 124 } 125 } 126}