package com.l7tech.server.log;

import com.l7tech.gateway.common.log.SinkConfiguration;
import com.l7tech.util.ResourceUtils;
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<>(Collections.EMPTY_LIST);

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

   public void setMessageSinks(Collection<MessageSink> var1) {
      ArrayList var2 = new ArrayList();
      if (var1 != null) {
         var2.ensureCapacity(var1.size());

         for (MessageSink var4 : var1) {
            if (var4 != null && !var2.contains(var4)) {
               var2.add(var4);
            }
         }
      }

      List var5 = this.a.getAndSet(Collections.unmodifiableList(var2));
      ArrayList var6 = new ArrayList(var5);
      var6.removeAll(var2);
      this.a(var6);
   }

   @Override
   public void message(MessageCategory var1, LogRecord var2) {
      for (MessageSink var5 : this.a.get()) {
         try {
            var5.message(var1, var2);
         } catch (Exception var7) {
            var7.printStackTrace();
         }
      }
   }

   @Override
   public List<Handler> getHandlers() {
      ArrayList var1 = new ArrayList();

      for (MessageSink var4 : this.a.get()) {
         var1.addAll(var4.getHandlers());
      }

      return Collections.unmodifiableList(var1);
   }

   private void a(List<MessageSink> var1) {
      for (MessageSink var3 : var1) {
         ResourceUtils.closeQuietly(var3);
      }
   }

   public final MessageSinkSupport getMessageSink(SinkConfiguration var1) {
      for (MessageSink var3 : this.a.get()) {
         if (var3 instanceof MessageSinkSupport var4 && var4.a().equals(var1)) {
            return var4;
         }
      }

      return null;
   }
}
