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

com.britesnow.snow.web.DefaultApplicationModule Maven / Gradle / Ivy

There is a newer version: 2.0.9
Show newest version
package com.britesnow.snow.web;

import java.io.IOException;
import java.lang.reflect.Method;
import java.util.Set;

import com.britesnow.snow.web.binding.ApplicationPackageBase;
import com.britesnow.snow.web.binding.WebClasses;
import com.britesnow.snow.web.exception.annotation.WebExceptionCatcher;
import com.britesnow.snow.web.handler.annotation.FreemarkerMethodHandler;
import com.britesnow.snow.web.handler.annotation.WebActionHandler;
import com.britesnow.snow.web.handler.annotation.WebModelHandler;
import com.britesnow.snow.web.handler.annotation.WebResourceHandler;
import com.britesnow.snow.web.handler.annotation.FreemarkerDirectiveHandler;
import com.britesnow.snow.web.hook.annotation.WebApplicationHook;
import com.britesnow.snow.web.hook.annotation.WebRequestHook;
import com.britesnow.snow.web.param.resolver.annotation.WebParamResolver;
import com.britesnow.snow.web.path.DefaultFramePathsResolver;
import com.britesnow.snow.web.path.DefaultResourceFileResolver;
import com.britesnow.snow.web.path.DefaultResourcePathResolver;
import com.britesnow.snow.web.path.FramePathsResolver;
import com.britesnow.snow.web.path.ResourceFileResolver;
import com.britesnow.snow.web.path.ResourcePathResolver;
import com.britesnow.snow.web.renderer.JsonLibJsonRenderer;
import com.britesnow.snow.web.renderer.JsonRenderer;
import com.britesnow.snow.web.rest.ContentTypeResolver;
import com.britesnow.snow.web.rest.DefaultContentTypeResolver;
import com.britesnow.snow.web.rest.annotation.WebDelete;
import com.britesnow.snow.web.rest.annotation.WebGet;
import com.britesnow.snow.web.rest.annotation.WebPost;
import com.britesnow.snow.web.rest.annotation.WebPut;
import com.britesnow.snow.web.rest.annotation.WebSerializer;
import com.google.inject.AbstractModule;
import com.google.inject.Provides;

import com.metapossum.utils.scanner.reflect.ClassesInPackageScanner;
import com.metapossum.utils.scanner.reflect.ExtendsClassResourceFilter;

public class DefaultApplicationModule extends AbstractModule {

    private String applicationPackageBase;

    public DefaultApplicationModule(String applicationPachageBase) {
        this.applicationPackageBase = applicationPachageBase;
    }

    @Override
    protected void configure() {
        bind(FramePathsResolver.class).to(DefaultFramePathsResolver.class);
        
        bind(ResourcePathResolver.class).to(DefaultResourcePathResolver.class);
        bind(ResourceFileResolver.class).to(DefaultResourceFileResolver.class);
        
        bind(ContentTypeResolver.class).to(DefaultContentTypeResolver.class);
        
        bind(JsonRenderer.class).to(JsonLibJsonRenderer.class);

        if (applicationPackageBase != null) {
            bind(String.class).annotatedWith(ApplicationPackageBase.class).toInstance(applicationPackageBase);
        }
    }


    @Provides
    @WebClasses
    public Class[] providesWebClasses() {
        if (applicationPackageBase != null) {
            ClassesInPackageScanner classScanner = new ClassesInPackageScanner();

            classScanner.setResourceFilter(new ExtendsClassResourceFilter(Object.class, true) {
                @Override
                public boolean acceptScannedResource(Class cls) {
                    for (Method method : cls.getDeclaredMethods()) {
                            
                        if (method.getAnnotation(WebActionHandler.class) != null || method.getAnnotation(WebResourceHandler.class) != null
                                                || method.getAnnotation(WebModelHandler.class) != null
                                                || method.getAnnotation(WebParamResolver.class) != null
                                                || method.getAnnotation(WebExceptionCatcher.class) != null
                                                || method.getAnnotation(WebApplicationHook.class) != null
                                                || method.getAnnotation(WebRequestHook.class) != null
                                                || method.getAnnotation(FreemarkerDirectiveHandler.class) != null                                                
                                                || method.getAnnotation(FreemarkerMethodHandler.class) != null
                                                || method.getAnnotation(WebGet.class) != null
                                                || method.getAnnotation(WebPost.class) != null
                                                || method.getAnnotation(WebPut.class) != null
                                                || method.getAnnotation(WebDelete.class) != null
                                                || method.getAnnotation(WebSerializer.class) != null){
                            return true;
                        }
                    }
                    return false;
                }
            });

            try {
                Set classSet = classScanner.findSubclasses(applicationPackageBase, Object.class);
                Class[] webHandlerClasses = new Class[classSet.size()];
                classSet.toArray(webHandlerClasses);
                return webHandlerClasses;
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                throw new RuntimeException("Failed to scan packages: " + applicationPackageBase);
            }
        } else {
            return new Class[0];
        }

    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy