package com.l7tech.external.assertions.gatewaygraphql.server.data;

import com.l7tech.gateway.common.resources.ResourceEntryHeader;
import com.l7tech.gateway.common.resources.ResourceType;
import com.l7tech.search.Dependency.DependencyType;
import com.l7tech.server.search.objects.BrokenDependency;
import com.l7tech.server.search.objects.Dependency;
import com.l7tech.server.search.objects.DependencySearchResults;
import com.l7tech.server.search.objects.DependentEntity;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
import java.util.concurrent.atomic.AtomicReference;
import java.util.logging.Logger;
import java.util.stream.Collectors;
import javax.validation.constraints.NotNull;
import lombok.Generated;

public class PolicyDependency {
   @Generated
   private static final Logger a = Logger.getLogger(PolicyDependency.class.getName());
   private static final Set<DependencyType> b = Set.of(DependencyType.POLICY, DependencyType.SERVICE, DependencyType.REVOCATION_CHECK_POLICY);
   private final DependencySearchResults c;
   private final AtomicReference<Object> d = new AtomicReference<>();
   private final AtomicReference<Object> e = new AtomicReference<>();
   private final AtomicReference<Object> f = new AtomicReference<>();
   private final AtomicReference<Object> g = new AtomicReference<>();
   private final AtomicReference<Object> h = new AtomicReference<>();
   private final AtomicReference<Object> i = new AtomicReference<>();
   private final AtomicReference<Object> j = new AtomicReference<>();
   private final AtomicReference<Object> k = new AtomicReference<>();
   private final AtomicReference<Object> l = new AtomicReference<>();
   private final AtomicReference<Object> m = new AtomicReference<>();
   private final AtomicReference<Object> n = new AtomicReference<>();
   private final AtomicReference<Object> o = new AtomicReference<>();
   private final AtomicReference<Object> p = new AtomicReference<>();
   private final AtomicReference<Object> q = new AtomicReference<>();
   private final AtomicReference<Object> r = new AtomicReference<>();
   private final AtomicReference<Object> s = new AtomicReference<>();
   private final AtomicReference<Object> t = new AtomicReference<>();
   private final AtomicReference<Object> u = new AtomicReference<>();
   private final AtomicReference<Object> v = new AtomicReference<>();
   private final AtomicReference<Object> w = new AtomicReference<>();
   private final AtomicReference<Object> x = new AtomicReference<>();
   private final AtomicReference<Object> y = new AtomicReference<>();
   private final AtomicReference<Object> z = new AtomicReference<>();
   private final AtomicReference<Object> A = new AtomicReference<>();
   private final AtomicReference<Object> B = new AtomicReference<>();

   public PolicyDependency() {
      this(null);
   }

   private Set<Dependency> a() {
      return this.r().stream().filter(var0 -> !(var0 instanceof BrokenDependency)).collect(Collectors.toSet());
   }

   private Set<Dependency> b() {
      return this.r().stream().filter(BrokenDependency.class::isInstance).collect(Collectors.toSet());
   }

   private Set<Dependency> c() {
      return this.a().stream().filter(var0 -> DependencyType.SERVICE.equals(var0.getDependent().getDependencyType())).collect(Collectors.toSet());
   }

   private Set<Dependency> d() {
      return this.a().stream().filter(var0 -> DependencyType.POLICY.equals(var0.getDependent().getDependencyType())).collect(Collectors.toSet());
   }

   private Set<Dependency> e() {
      return this.a().stream().filter(var0 -> DependencyType.CLUSTER_PROPERTY.equals(var0.getDependent().getDependencyType())).collect(Collectors.toSet());
   }

   private Set<Dependency> f() {
      return this.a().stream().filter(var0 -> DependencyType.TRUSTED_CERT.equals(var0.getDependent().getDependencyType())).collect(Collectors.toSet());
   }

   private Set<Dependency> g() {
      return this.a()
         .stream()
         .filter(var0 -> DependencyType.REVOCATION_CHECK_POLICY.equals(var0.getDependent().getDependencyType()))
         .collect(Collectors.toSet());
   }

   private Set<Dependency> h() {
      return this.a()
         .stream()
         .filter(var0 -> DependencyType.ENCAPSULATED_ASSERTION.equals(var0.getDependent().getDependencyType()))
         .collect(Collectors.toSet());
   }

   private Set<Dependency> i() {
      return this.a().stream().filter(var0 -> DependencyType.JDBC_CONNECTION.equals(var0.getDependent().getDependencyType())).collect(Collectors.toSet());
   }

   private Set<Dependency> j() {
      return this.a().stream().filter(var0 -> DependencyType.CASSANDRA_CONNECTION.equals(var0.getDependent().getDependencyType())).collect(Collectors.toSet());
   }

   private Set<Dependency> k() {
      return this.a().stream().filter(var0 -> DependencyType.JMS_ENDPOINT.equals(var0.getDependent().getDependencyType())).collect(Collectors.toSet());
   }

   private Set<Dependency> l() {
      return this.a().stream().filter(var0 -> DependencyType.RESOURCE_ENTRY.equals(var0.getDependent().getDependencyType())).collect(Collectors.toSet());
   }

   public Set<Dependency> getSchemas() {
      return this.getResources().stream().filter(var1 -> this.b(var1).getResourceType() == ResourceType.XML_SCHEMA).collect(Collectors.toSet());
   }

   public Set<Dependency> getDtds() {
      return this.getResources().stream().filter(var1 -> this.b(var1).getResourceType() == ResourceType.DTD).collect(Collectors.toSet());
   }

   private Set<Dependency> m() {
      return this.a().stream().filter(var0 -> DependencyType.ID_PROVIDER_CONFIG.equals(var0.getDependent().getDependencyType())).collect(Collectors.toSet());
   }

   private Set<Dependency> n() {
      return this.a().stream().filter(var0 -> DependencyType.USER.equals(var0.getDependent().getDependencyType())).collect(Collectors.toSet());
   }

   private Set<Dependency> o() {
      return this.a().stream().filter(var0 -> DependencyType.GROUP.equals(var0.getDependent().getDependencyType())).collect(Collectors.toSet());
   }

   private Set<Dependency> p() {
      return this.a().stream().filter(var0 -> DependencyType.SECURE_PASSWORD.equals(var0.getDependent().getDependencyType())).collect(Collectors.toSet());
   }

   private Set<Dependency> q() {
      return this.a().stream().filter(var0 -> DependencyType.SSG_PRIVATE_KEY.equals(var0.getDependent().getDependencyType())).collect(Collectors.toSet());
   }

   private Set<Dependency> a(DependencyType var1) {
      return this.a().stream().filter(var1x -> var1.equals(var1x.getDependent().getDependencyType())).collect(Collectors.toSet());
   }

   private Set<Dependency> a(@NotNull Collection<Dependency> var1) {
      HashSet var2 = new HashSet();
      HashSet var3 = new HashSet();
      var1.forEach(var3x -> this.a(var3x, var3, var2));
      return var3;
   }

   private void a(Dependency var1, Collection<Dependency> var2, Set<String> var3) {
      boolean var4 = b.contains(var1.getDependent().getDependencyType());
      if (!var4 || var3.add(this.a(var1))) {
         var2.add(var1);
         if (var1.getDependencies() != null) {
            var1.getDependencies().forEach(var3x -> this.a(var3x, var2, var3));
         }
      }
   }

   private String a(Dependency var1) {
      String var2 = var1.getDependent() instanceof DependentEntity
         ? ((DependentEntity)var1.getDependent()).getEntityHeader().getStrId()
         : var1.getDependent().getName();
      return var1.getDependent().getDependencyType() + ":" + var2;
   }

   private ResourceEntryHeader b(Dependency var1) {
      return (ResourceEntryHeader)((DependentEntity)var1.getDependent()).getEntityHeader();
   }

   @Generated
   public PolicyDependency(DependencySearchResults var1) {
      this.c = var1;
   }

   @Generated
   private Set<Dependency> r() {
      Object var1 = this.d.get();
      if (var1 == null) {
         synchronized (this.d) {
            var1 = this.d.get();
            if (var1 == null) {
               Set var3 = this.c != null && this.c.getDependencies() != null ? this.a(this.c.getDependencies()) : Collections.emptySet();
               var1 = var3 == null ? this.d : var3;
               this.d.set(var1);
            }
         }
      }

      return (Set<Dependency>)(var1 == this.d ? null : var1);
   }

   @Generated
   private Set<Dependency> s() {
      Object var1 = this.e.get();
      if (var1 == null) {
         synchronized (this.e) {
            var1 = this.e.get();
            if (var1 == null) {
               Set var3 = this.a();
               var1 = var3 == null ? this.e : var3;
               this.e.set(var1);
            }
         }
      }

      return (Set<Dependency>)(var1 == this.e ? null : var1);
   }

   @Generated
   private Set<Dependency> t() {
      Object var1 = this.f.get();
      if (var1 == null) {
         synchronized (this.f) {
            var1 = this.f.get();
            if (var1 == null) {
               Set var3 = this.b();
               var1 = var3 == null ? this.f : var3;
               this.f.set(var1);
            }
         }
      }

      return (Set<Dependency>)(var1 == this.f ? null : var1);
   }

   @Generated
   public Set<Dependency> getClusterProperties() {
      Object var1 = this.g.get();
      if (var1 == null) {
         synchronized (this.g) {
            var1 = this.g.get();
            if (var1 == null) {
               Set var3 = this.e();
               var1 = var3 == null ? this.g : var3;
               this.g.set(var1);
            }
         }
      }

      return (Set<Dependency>)(var1 == this.g ? null : var1);
   }

   @Generated
   public Set<Dependency> getTrustedCerts() {
      Object var1 = this.h.get();
      if (var1 == null) {
         synchronized (this.h) {
            var1 = this.h.get();
            if (var1 == null) {
               Set var3 = this.f();
               var1 = var3 == null ? this.h : var3;
               this.h.set(var1);
            }
         }
      }

      return (Set<Dependency>)(var1 == this.h ? null : var1);
   }

   @Generated
   public Set<Dependency> getRevocationCheckPolicies() {
      Object var1 = this.i.get();
      if (var1 == null) {
         synchronized (this.i) {
            var1 = this.i.get();
            if (var1 == null) {
               Set var3 = this.g();
               var1 = var3 == null ? this.i : var3;
               this.i.set(var1);
            }
         }
      }

      return (Set<Dependency>)(var1 == this.i ? null : var1);
   }

   @Generated
   public Set<Dependency> getEncassConfigs() {
      Object var1 = this.j.get();
      if (var1 == null) {
         synchronized (this.j) {
            var1 = this.j.get();
            if (var1 == null) {
               Set var3 = this.h();
               var1 = var3 == null ? this.j : var3;
               this.j.set(var1);
            }
         }
      }

      return (Set<Dependency>)(var1 == this.j ? null : var1);
   }

   @Generated
   public Set<Dependency> getPolicies() {
      Object var1 = this.k.get();
      if (var1 == null) {
         synchronized (this.k) {
            var1 = this.k.get();
            if (var1 == null) {
               Set var3 = this.d();
               var1 = var3 == null ? this.k : var3;
               this.k.set(var1);
            }
         }
      }

      return (Set<Dependency>)(var1 == this.k ? null : var1);
   }

   @Generated
   public Set<Dependency> getServices() {
      Object var1 = this.l.get();
      if (var1 == null) {
         synchronized (this.l) {
            var1 = this.l.get();
            if (var1 == null) {
               Set var3 = this.c();
               var1 = var3 == null ? this.l : var3;
               this.l.set(var1);
            }
         }
      }

      return (Set<Dependency>)(var1 == this.l ? null : var1);
   }

   @Generated
   public Set<Dependency> getJdbcConnections() {
      Object var1 = this.m.get();
      if (var1 == null) {
         synchronized (this.m) {
            var1 = this.m.get();
            if (var1 == null) {
               Set var3 = this.i();
               var1 = var3 == null ? this.m : var3;
               this.m.set(var1);
            }
         }
      }

      return (Set<Dependency>)(var1 == this.m ? null : var1);
   }

   @Generated
   public Set<Dependency> getCassandraConnections() {
      Object var1 = this.n.get();
      if (var1 == null) {
         synchronized (this.n) {
            var1 = this.n.get();
            if (var1 == null) {
               Set var3 = this.j();
               var1 = var3 == null ? this.n : var3;
               this.n.set(var1);
            }
         }
      }

      return (Set<Dependency>)(var1 == this.n ? null : var1);
   }

   @Generated
   public Set<Dependency> getJmsDestinations() {
      Object var1 = this.o.get();
      if (var1 == null) {
         synchronized (this.o) {
            var1 = this.o.get();
            if (var1 == null) {
               Set var3 = this.k();
               var1 = var3 == null ? this.o : var3;
               this.o.set(var1);
            }
         }
      }

      return (Set<Dependency>)(var1 == this.o ? null : var1);
   }

   @Generated
   public Set<Dependency> getResources() {
      Object var1 = this.p.get();
      if (var1 == null) {
         synchronized (this.p) {
            var1 = this.p.get();
            if (var1 == null) {
               Set var3 = this.l();
               var1 = var3 == null ? this.p : var3;
               this.p.set(var1);
            }
         }
      }

      return (Set<Dependency>)(var1 == this.p ? null : var1);
   }

   @Generated
   public Set<Dependency> getIdps() {
      Object var1 = this.q.get();
      if (var1 == null) {
         synchronized (this.q) {
            var1 = this.q.get();
            if (var1 == null) {
               Set var3 = this.m();
               var1 = var3 == null ? this.q : var3;
               this.q.set(var1);
            }
         }
      }

      return (Set<Dependency>)(var1 == this.q ? null : var1);
   }

   @Generated
   public Set<Dependency> getUsers() {
      Object var1 = this.r.get();
      if (var1 == null) {
         synchronized (this.r) {
            var1 = this.r.get();
            if (var1 == null) {
               Set var3 = this.n();
               var1 = var3 == null ? this.r : var3;
               this.r.set(var1);
            }
         }
      }

      return (Set<Dependency>)(var1 == this.r ? null : var1);
   }

   @Generated
   public Set<Dependency> getGroups() {
      Object var1 = this.s.get();
      if (var1 == null) {
         synchronized (this.s) {
            var1 = this.s.get();
            if (var1 == null) {
               Set var3 = this.o();
               var1 = var3 == null ? this.s : var3;
               this.s.set(var1);
            }
         }
      }

      return (Set<Dependency>)(var1 == this.s ? null : var1);
   }

   @Generated
   public Set<Dependency> getSecrets() {
      Object var1 = this.t.get();
      if (var1 == null) {
         synchronized (this.t) {
            var1 = this.t.get();
            if (var1 == null) {
               Set var3 = this.p();
               var1 = var3 == null ? this.t : var3;
               this.t.set(var1);
            }
         }
      }

      return (Set<Dependency>)(var1 == this.t ? null : var1);
   }

   @Generated
   public Set<Dependency> getKeys() {
      Object var1 = this.u.get();
      if (var1 == null) {
         synchronized (this.u) {
            var1 = this.u.get();
            if (var1 == null) {
               Set var3 = this.q();
               var1 = var3 == null ? this.u : var3;
               this.u.set(var1);
            }
         }
      }

      return (Set<Dependency>)(var1 == this.u ? null : var1);
   }

   @Generated
   public Set<Dependency> getServerModuleFiles() {
      Object var1 = this.v.get();
      if (var1 == null) {
         synchronized (this.v) {
            var1 = this.v.get();
            if (var1 == null) {
               Set var3 = this.a(DependencyType.SERVER_MODULE_FILE);
               var1 = var3 == null ? this.v : var3;
               this.v.set(var1);
            }
         }
      }

      return (Set<Dependency>)(var1 == this.v ? null : var1);
   }

   @Generated
   public Set<Dependency> getEmailListeners() {
      Object var1 = this.w.get();
      if (var1 == null) {
         synchronized (this.w) {
            var1 = this.w.get();
            if (var1 == null) {
               Set var3 = this.a(DependencyType.EMAIL_LISTENER);
               var1 = var3 == null ? this.w : var3;
               this.w.set(var1);
            }
         }
      }

      return (Set<Dependency>)(var1 == this.w ? null : var1);
   }

   @Generated
   public Set<Dependency> getListenPorts() {
      Object var1 = this.x.get();
      if (var1 == null) {
         synchronized (this.x) {
            var1 = this.x.get();
            if (var1 == null) {
               Set var3 = this.a(DependencyType.SSG_CONNECTOR);
               var1 = var3 == null ? this.x : var3;
               this.x.set(var1);
            }
         }
      }

      return (Set<Dependency>)(var1 == this.x ? null : var1);
   }

   @Generated
   public Set<Dependency> getActiveConnectors() {
      Object var1 = this.y.get();
      if (var1 == null) {
         synchronized (this.y) {
            var1 = this.y.get();
            if (var1 == null) {
               Set var3 = this.a(DependencyType.SSG_ACTIVE_CONNECTOR);
               var1 = var3 == null ? this.y : var3;
               this.y.set(var1);
            }
         }
      }

      return (Set<Dependency>)(var1 == this.y ? null : var1);
   }

   @Generated
   public Set<Dependency> getSmConfigs() {
      Object var1 = this.z.get();
      if (var1 == null) {
         synchronized (this.z) {
            var1 = this.z.get();
            if (var1 == null) {
               Set var3 = this.a(DependencyType.SITEMINDER_CONFIGURATION);
               var1 = var3 == null ? this.z : var3;
               this.z.set(var1);
            }
         }
      }

      return (Set<Dependency>)(var1 == this.z ? null : var1);
   }

   @Generated
   public Set<Dependency> getCustomKeyValues() {
      Object var1 = this.A.get();
      if (var1 == null) {
         synchronized (this.A) {
            var1 = this.A.get();
            if (var1 == null) {
               Set var3 = this.a(DependencyType.CUSTOM_KEY_VALUE_STORE);
               var1 = var3 == null ? this.A : var3;
               this.A.set(var1);
            }
         }
      }

      return (Set<Dependency>)(var1 == this.A ? null : var1);
   }

   @Generated
   public Set<Dependency> getGenericEntities() {
      Object var1 = this.B.get();
      if (var1 == null) {
         synchronized (this.B) {
            var1 = this.B.get();
            if (var1 == null) {
               Set var3 = this.a(DependencyType.GENERIC);
               var1 = var3 == null ? this.B : var3;
               this.B.set(var1);
            }
         }
      }

      return (Set<Dependency>)(var1 == this.B ? null : var1);
   }
}
