All Downloads are FREE. Search and download functionalities are using the official Maven repository.

forklift.deployment.ClassDeployment Maven / Gradle / Ivy

package forklift.deployment;

import com.google.common.base.Preconditions;
import com.google.common.collect.Iterables;
import forklift.decorators.*;

import java.util.Collection;
import java.util.HashSet;
import java.util.Set;
import java.util.stream.Stream;

/**
 *
 * A deployment composed of classes.  Generally used to specify classes which are part of a deployment at runtime.
 *
 * Created by afrieze on 10/28/16.
 */
public class ClassDeployment implements Deployment {

    private Set> queues = new HashSet<>();
    private Set> topics = new HashSet<>();
    private Set> services = new HashSet<>();
    private Set> coreServices = new HashSet<>();

    public ClassDeployment(Class ...deploymentClasses){
        Preconditions.checkNotNull(deploymentClasses);
        for(Class c : deploymentClasses){
            if(c.isAnnotationPresent(CoreService.class)){
                coreServices.add(c);
            }
            if(c.isAnnotationPresent(Queue.class)){
                queues.add(c);
            }
            if(c.isAnnotationPresent(Queues.class)){
                queues.add(c);
            }
            if(c.isAnnotationPresent(Service.class)){
                services.add(c);
            }
            if(c.isAnnotationPresent(Topic.class)){
                topics.add(c);
            }
            if(c.isAnnotationPresent(Topics.class)){
                topics.add(c);
            }
        }
    }

    @Override
    public Set> getCoreServices() {
        return coreServices;
    }

    @Override
    public Set> getServices() {
        return services;
    }

    @Override
    public Set> getQueues() {
        return queues;
    }

    @Override
    public Set> getTopics() {
        return topics;
    }

    @Override
    public ClassLoader getClassLoader() {
        return ClassLoader.getSystemClassLoader();
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        ClassDeployment that = (ClassDeployment) o;

        if (!queues.equals(that.queues)) return false;
        if (!topics.equals(that.topics)) return false;
        if (!services.equals(that.services)) return false;
        return coreServices.equals(that.coreServices);

    }

    @Override
    public int hashCode() {
        int result = queues.hashCode();
        result = 31 * result + topics.hashCode();
        result = 31 * result + services.hashCode();
        result = 31 * result + coreServices.hashCode();
        return result;
    }

    private boolean identicalSets(Set set1, Set set2){
        if(set1.size() != set2.size()){
            return false;
        }
        return set1.containsAll(set2);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy