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

com.cybermkd.route.config.ResourceLoader Maven / Gradle / Ivy

package com.cybermkd.route.config;

import com.cybermkd.common.util.scan.ClassScaner;
import com.cybermkd.log.Logger;
import com.cybermkd.route.core.Resource;

import java.util.Collections;
import java.util.HashSet;
import java.util.Set;

/**
 * ResourceLoader.
 */
final public class ResourceLoader {
    private static final Logger logger = Logger.getLogger(ResourceLoader.class);

    private final Set> resources = new HashSet>();
    private Set> excludeResources = new HashSet>();
    private Set> includeResources = new HashSet>();
    private Set includeResourcePackages = new HashSet();
    private Set excludeResourcePackages = new HashSet();

    public ResourceLoader add(ResourceLoader resourceLoader) {
        if (resourceLoader != null) {
            resourceLoader.build();
            this.resources.addAll(resourceLoader.resources);
        }
        return this;
    }


    /**
     * Add url mapping to resource. The view p is resourceKey
     *
     * @param resourceClass Controller Class
     */
    public ResourceLoader add(Class resourceClass) {
        resources.add(resourceClass);
        return this;
    }

    public ResourceLoader addExcludeClasses(Class... clazzes) {
        Collections.addAll(excludeResources, clazzes);
        return this;
    }

    public ResourceLoader addExcludeClasses(Set> clazzes) {
        if (clazzes != null) {
            excludeResources.addAll(clazzes);
        }
        return this;
    }

    /**
     * exclude scan packages  eg. com.cybermkd.resource
     *
     * @param packages packages
     * @return
     */
    public ResourceLoader addExcludePackages(String... packages) {
        Collections.addAll(excludeResourcePackages, packages);
        return this;
    }

    public ResourceLoader addIncludeClasses(Class... clazzes) {
        Collections.addAll(includeResources, clazzes);
        return this;
    }

    public ResourceLoader addIncludeClasses(Set> clazzes) {
        if (clazzes != null) {
            includeResources.addAll(clazzes);
        }
        return this;
    }

    /**
     * scan packages  eg. com.cybermkd.resource
     *
     * @param packages packages
     * @return
     */
    public ResourceLoader addIncludePackages(String... packages) {
        Collections.addAll(includeResourcePackages, packages);
        return this;
    }

    public void build() {
        if (includeResourcePackages.size() > 0) {
            if (includeResources.size() <= 0) {
                includeResources = ClassScaner.of(Resource.class).includePackages(includeResourcePackages).scan();
            } else {
                includeResources.addAll(ClassScaner.of(Resource.class).includePackages(includeResourcePackages).scan());
            }
        }
        boolean isExclude = false;
        if (includeResources.size() > 0) {
            for (Class resource : includeResources) {
                isExclude = false;
                if (excludeResourcePackages.size() > 0) {
                    for (String excludepath : excludeResourcePackages) {
                        if (resource.getName().startsWith(excludepath)) {
                            logger.debug("Exclude resource:" + resource.getName());
                            isExclude = true;
                            break;
                        }
                    }
                }
                if (isExclude || excludeResources.contains(resource)) {
                    continue;
                }
                this.add(resource);
                logger.info("Resources.add(" + resource.getName() + ")");
            }
        } else {
            logger.warn("Could not load any resources.");
        }
    }

    public Set> getResources() {
        return resources;
    }
}










© 2015 - 2025 Weber Informatics LLC | Privacy Policy