/*
 * Decompiled with CFR 0.152.
 * 
 * Could not load the following classes:
 *  com.l7tech.gateway.common.log.SinkConfiguration
 *  com.l7tech.util.ResourceUtils
 */
package com.l7tech.server.log;

import com.l7tech.gateway.common.log.SinkConfiguration;
import com.l7tech.server.log.MessageCategory;
import com.l7tech.server.log.MessageSink;
import com.l7tech.server.log.MessageSinkSupport;
import com.l7tech.util.ResourceUtils;
import java.io.Closeable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.atomic.AtomicReference;
import java.util.logging.Handler;
import java.util.logging.LogRecord;

public class DispatchingMessageSink
implements MessageSink {
    private final AtomicReference<List<MessageSink>> a = new AtomicReference<List>(Collections.EMPTY_LIST);

    @Override
    public void close() {
        this.a(this.a.getAndSet(Collections.EMPTY_LIST));
    }

    public void setMessageSinks(Collection<MessageSink> collection) {
        ArrayList<MessageSink> arrayList = new ArrayList<MessageSink>();
        if (collection != null) {
            arrayList.ensureCapacity(collection.size());
            for (MessageSink object2 : collection) {
                if (object2 == null || arrayList.contains(object2)) continue;
                arrayList.add(object2);
            }
        }
        List list = this.a.getAndSet(Collections.unmodifiableList(arrayList));
        ArrayList<MessageSink> arrayList2 = new ArrayList<MessageSink>(list);
        arrayList2.removeAll(arrayList);
        this.a(arrayList2);
    }

    @Override
    public void message(MessageCategory messageCategory, LogRecord logRecord) {
        List<MessageSink> list = this.a.get();
        for (MessageSink messageSink : list) {
            try {
                messageSink.message(messageCategory, logRecord);
            }
            catch (Exception exception) {
                exception.printStackTrace();
            }
        }
    }

    @Override
    public List<Handler> getHandlers() {
        ArrayList<Handler> arrayList = new ArrayList<Handler>();
        List<MessageSink> list = this.a.get();
        for (MessageSink messageSink : list) {
            arrayList.addAll(messageSink.getHandlers());
        }
        return Collections.unmodifiableList(arrayList);
    }

    private void a(List<MessageSink> list) {
        for (MessageSink messageSink : list) {
            ResourceUtils.closeQuietly((Closeable)messageSink);
        }
    }

    public final MessageSinkSupport getMessageSink(SinkConfiguration sinkConfiguration) {
        for (MessageSink messageSink : this.a.get()) {
            MessageSinkSupport messageSinkSupport;
            if (!(messageSink instanceof MessageSinkSupport) || !(messageSinkSupport = (MessageSinkSupport)messageSink).a().equals((Object)sinkConfiguration)) continue;
            return messageSinkSupport;
        }
        return null;
    }
}

