// 
// Decompiled by Procyon v0.6.0
// 

package com.google.crypto.tink.internal;

import java.util.concurrent.atomic.AtomicReference;

public final class MutableMonitoringRegistry
{
    private static final MutableMonitoringRegistry GLOBAL_INSTANCE;
    private static final DoNothingClient DO_NOTHING_CLIENT;
    private final AtomicReference<MonitoringClient> monitoringClient;
    
    public static MutableMonitoringRegistry globalInstance() {
        return MutableMonitoringRegistry.GLOBAL_INSTANCE;
    }
    
    public synchronized void clear() {
        this.monitoringClient.set(null);
    }
    
    public synchronized void registerMonitoringClient(final MonitoringClient client) {
        if (this.monitoringClient.get() != null) {
            throw new IllegalStateException("a monitoring client has already been registered");
        }
        this.monitoringClient.set(client);
    }
    
    public MonitoringClient getMonitoringClient() {
        final MonitoringClient client = this.monitoringClient.get();
        if (client == null) {
            return MutableMonitoringRegistry.DO_NOTHING_CLIENT;
        }
        return client;
    }
    
    public MutableMonitoringRegistry() {
        this.monitoringClient = new AtomicReference<MonitoringClient>();
    }
    
    static {
        GLOBAL_INSTANCE = new MutableMonitoringRegistry();
        DO_NOTHING_CLIENT = new DoNothingClient();
    }
    
    private static class DoNothingClient implements MonitoringClient
    {
        @Override
        public Logger createLogger(final KeysetHandleInterface keysetInfo, final MonitoringAnnotations annotations, final String primitive, final String api) {
            return MonitoringUtil.DO_NOTHING_LOGGER;
        }
    }
}
