// Path: graceland-platform/src/main/java/io/graceland/dropwizard/Configurator.java
// public interface Configurator {
// 
//     /**
//      * The method that will be called during the Dropwizard's {@link io.dropwizard.Application#run(io.dropwizard.Configuration, io.dropwizard.setup.Environment)}
//      * method.
//      *
//      * @param configuration Provided by Dropwizard.
//      * @param environment   Provided by Dropwizard.
//      */
//     void configure(PlatformConfiguration configuration, Environment environment);
// }
// 
// Path: graceland-platform/src/main/java/io/graceland/dropwizard/Initializer.java
// public interface Initializer {
// 
//     /**
//      * The method that will be called during the Dropwizard's {@link io.dropwizard.Application#initialize(io.dropwizard.setup.Bootstrap)}
//      * method.
//      *
//      * @param bootstrap Provided by Dropwizard.
//      */
//     void initialize(Bootstrap<PlatformConfiguration> bootstrap);
// }
// 
// Path: graceland-platform/src/main/java/io/graceland/filter/FilterSpec.java
// public class FilterSpec {
//     public static final Comparator<FilterSpec> PRIORITY_COMPARATOR = new Comparator<FilterSpec>() {
//         @Override
//         public int compare(FilterSpec o1, FilterSpec o2) {
//             return o1.getPriority() - o2.getPriority();
//         }
//     };
// 
//     private final Provider<? extends Filter> filterProvider;
//     private final int priority;
//     private final String name;
//     private final ImmutableList<FilterPattern> patterns;
// 
//     FilterSpec(
//             Provider<? extends Filter> filterProvider,
//             int priority,
//             String name,
//             ImmutableList<FilterPattern> patterns) {
// 
//         this.filterProvider = Preconditions.checkNotNull(filterProvider, "Filter Provider cannot be null.");
//         this.priority = Preconditions.checkNotNull(priority, "Priority cannot be null.");
//         this.name = Preconditions.checkNotNull(name, "Name cannot be null.");
//         this.patterns = Preconditions.checkNotNull(patterns, "Filter Patterns cannot be null.");
//     }
// 
//     public Filter getFilter() {
//         return filterProvider.get();
//     }
// 
//     /**
//      * The priority is used to determine the order of the filters added to the {@link io.dropwizard.setup.Environment}.
//      *
//      * @return The filter's priority.
//      */
//     public int getPriority() {
//         return priority;
//     }
// 
//     public String getName() {
//         return name;
//     }
// 
//     public ImmutableList<FilterPattern> getPatterns() {
//         return patterns;
//     }
// }


import java.util.Set;
import com.codahale.metrics.health.HealthCheck;
import com.google.inject.TypeLiteral;
import io.dropwizard.Bundle;
import io.dropwizard.cli.Command;
import io.dropwizard.lifecycle.Managed;
import io.dropwizard.servlets.tasks.Task;
import io.graceland.dropwizard.Configurator;
import io.graceland.dropwizard.Initializer;
import io.graceland.filter.FilterSpec;
    public static final TypeLiteral<Set<Task>> TaskSet = new TypeLiteral<Set<Task>>() {
    };
    public static final TypeLiteral<Set<Class<? extends Task>>> TaskClassSet = new TypeLiteral<Set<Class<? extends Task>>>() {
    };

    // ====================
    // Bundle Type Literals
    // ====================
    public static final TypeLiteral<Class<? extends Bundle>> BundleClass = new TypeLiteral<Class<? extends Bundle>>() {
    };
    public static final TypeLiteral<Set<Bundle>> BundleSet = new TypeLiteral<Set<Bundle>>() {
    };
    public static final TypeLiteral<Set<Class<? extends Bundle>>> BundleClassSet = new TypeLiteral<Set<Class<? extends Bundle>>>() {
    };

    // =====================
    // Command Type Literals
    // =====================
    public static final TypeLiteral<Class<? extends Command>> CommandClass = new TypeLiteral<Class<? extends Command>>() {
    };
    public static final TypeLiteral<Set<Command>> CommandSet = new TypeLiteral<Set<Command>>() {
    };
    public static final TypeLiteral<Set<Class<? extends Command>>> CommandClassSet = new TypeLiteral<Set<Class<? extends Command>>>() {
    };

    // =========================
    // Initializer Type Literals
    // =========================
    public static final TypeLiteral<Class<? extends Initializer>> InitializerClass = new TypeLiteral<Class<? extends Initializer>>() {
    };
// Path: graceland-platform/src/main/java/io/graceland/dropwizard/Configurator.java
// public interface Configurator {
// 
//     /**
//      * The method that will be called during the Dropwizard's {@link io.dropwizard.Application#run(io.dropwizard.Configuration, io.dropwizard.setup.Environment)}
//      * method.
//      *
//      * @param configuration Provided by Dropwizard.
//      * @param environment   Provided by Dropwizard.
//      */
//     void configure(PlatformConfiguration configuration, Environment environment);
// }
// 
// Path: graceland-platform/src/main/java/io/graceland/dropwizard/Initializer.java
// public interface Initializer {
// 
//     /**
//      * The method that will be called during the Dropwizard's {@link io.dropwizard.Application#initialize(io.dropwizard.setup.Bootstrap)}
//      * method.
//      *
//      * @param bootstrap Provided by Dropwizard.
//      */
//     void initialize(Bootstrap<PlatformConfiguration> bootstrap);
// }
// 
// Path: graceland-platform/src/main/java/io/graceland/filter/FilterSpec.java
// public class FilterSpec {
//     public static final Comparator<FilterSpec> PRIORITY_COMPARATOR = new Comparator<FilterSpec>() {
//         @Override
//         public int compare(FilterSpec o1, FilterSpec o2) {
//             return o1.getPriority() - o2.getPriority();
//         }
//     };
// 
//     private final Provider<? extends Filter> filterProvider;
//     private final int priority;
//     private final String name;
//     private final ImmutableList<FilterPattern> patterns;
// 
//     FilterSpec(
//             Provider<? extends Filter> filterProvider,
//             int priority,
//             String name,
//             ImmutableList<FilterPattern> patterns) {
// 
//         this.filterProvider = Preconditions.checkNotNull(filterProvider, "Filter Provider cannot be null.");
//         this.priority = Preconditions.checkNotNull(priority, "Priority cannot be null.");
//         this.name = Preconditions.checkNotNull(name, "Name cannot be null.");
//         this.patterns = Preconditions.checkNotNull(patterns, "Filter Patterns cannot be null.");
//     }
// 
//     public Filter getFilter() {
//         return filterProvider.get();
//     }
// 
//     /**
//      * The priority is used to determine the order of the filters added to the {@link io.dropwizard.setup.Environment}.
//      *
//      * @return The filter's priority.
//      */
//     public int getPriority() {
//         return priority;
//     }
// 
//     public String getName() {
//         return name;
//     }
// 
//     public ImmutableList<FilterPattern> getPatterns() {
//         return patterns;
//     }
// }


// Path: graceland-platform/src/main/java/io/graceland/inject/TypeLiterals.java
import java.util.Set;
import com.codahale.metrics.health.HealthCheck;
import com.google.inject.TypeLiteral;
import io.dropwizard.Bundle;
import io.dropwizard.cli.Command;
import io.dropwizard.lifecycle.Managed;
import io.dropwizard.servlets.tasks.Task;
import io.graceland.dropwizard.Configurator;
import io.graceland.dropwizard.Initializer;
import io.graceland.filter.FilterSpec;

    public static final TypeLiteral<Set<Task>> TaskSet = new TypeLiteral<Set<Task>>() {
    };
    public static final TypeLiteral<Set<Class<? extends Task>>> TaskClassSet = new TypeLiteral<Set<Class<? extends Task>>>() {
    };

    // ====================
    // Bundle Type Literals
    // ====================
    public static final TypeLiteral<Class<? extends Bundle>> BundleClass = new TypeLiteral<Class<? extends Bundle>>() {
    };
    public static final TypeLiteral<Set<Bundle>> BundleSet = new TypeLiteral<Set<Bundle>>() {
    };
    public static final TypeLiteral<Set<Class<? extends Bundle>>> BundleClassSet = new TypeLiteral<Set<Class<? extends Bundle>>>() {
    };

    // =====================
    // Command Type Literals
    // =====================
    public static final TypeLiteral<Class<? extends Command>> CommandClass = new TypeLiteral<Class<? extends Command>>() {
    };
    public static final TypeLiteral<Set<Command>> CommandSet = new TypeLiteral<Set<Command>>() {
    };
    public static final TypeLiteral<Set<Class<? extends Command>>> CommandClassSet = new TypeLiteral<Set<Class<? extends Command>>>() {
    };

    // =========================
    // Initializer Type Literals
    // =========================
    public static final TypeLiteral<Class<? extends Initializer>> InitializerClass = new TypeLiteral<Class<? extends Initializer>>() {
    };
    public static final TypeLiteral<Set<Initializer>> InitializerSet = new TypeLiteral<Set<Initializer>>() {