org.cyk.ui.web.api.servlet.AbstractFilter.java Source code

Java tutorial

Introduction

Here is the source code for org.cyk.ui.web.api.servlet.AbstractFilter.java

Source

package org.cyk.ui.web.api.servlet;

import java.io.IOException;
import java.io.Serializable;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Collection;

import javax.inject.Inject;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.commons.lang3.StringUtils;
import org.cyk.system.root.business.api.network.UniformResourceLocatorBusiness;
import org.cyk.system.root.business.api.security.LicenseBusiness;
import org.cyk.system.root.business.api.security.RoleUniformResourceLocatorBusiness;
import org.cyk.system.root.business.api.security.UserAccountBusiness;
import org.cyk.system.root.business.impl.RootBusinessLayer;
import org.cyk.system.root.model.party.Application;
import org.cyk.system.root.model.security.UserAccount;
import org.cyk.ui.api.AbstractUserSession;
import org.cyk.ui.web.api.WebManager;
import org.cyk.ui.web.api.WebNavigationManager;
import org.cyk.utility.common.Constant;
import org.cyk.utility.common.cdi.AbstractBean;
import org.cyk.utility.common.cdi.BeanAdapter;

public abstract class AbstractFilter extends AbstractBean implements Filter, Serializable {

    private static final long serialVersionUID = 8855562067264528963L;

    protected static enum RedirectType {
        REDIRECT, FORWARD
    }

    @Inject
    protected WebNavigationManager navigationManager;

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)
            throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        HttpServletResponse response = (HttpServletResponse) servletResponse;
        HttpSession session = request.getSession(Boolean.FALSE);
        AbstractUserSession<?, ?> userSession = (AbstractUserSession<?, ?>) (session == null ? null
                : session.getAttribute(WebManager.getInstance().getSessionAttributeUserSession()));
        UserAccount userAccount;
        if (userSession == null) {
            userAccount = null;
        } else {
            userAccount = userSession.getUserAccount();
        }
        Application application = RootBusinessLayer.getInstance().getApplication();
        URL url = null;
        try {
            url = new URL(request.getRequestURL().toString()
                    + (StringUtils.isBlank(request.getQueryString()) ? Constant.EMPTY_STRING
                            : "?" + request.getQueryString()));
        } catch (MalformedURLException e) {
            logThrowable(e);
        }
        __filter__(application, userSession, userAccount, url, request, response, filterChain);

    }

    protected void __filter__(Application application, AbstractUserSession<?, ?> userSession,
            UserAccount userAccount, URL url, HttpServletRequest request, HttpServletResponse response,
            FilterChain filterChain) throws IOException, ServletException {
        Collection<AbstractListener> listeners = getListeners();
        if (listeners != null)
            for (AbstractListener listener : getListeners())
                listener.filter(application, userSession, userAccount, url, request, response, filterChain);
    }

    protected Collection<AbstractListener> getListeners() {
        return null;
    }

    protected static Boolean goTo(Boolean condition, String relativeUrl, HttpServletRequest request,
            HttpServletResponse response, RedirectType redirectType) throws IOException {
        relativeUrl = (relativeUrl.startsWith(Constant.CHARACTER_SLASH.toString()) ? relativeUrl
                : Constant.CHARACTER_SLASH + relativeUrl);
        if (Boolean.TRUE.equals(condition))
            if (redirectType == null || RedirectType.REDIRECT.equals(redirectType))
                response.sendRedirect(request.getContextPath() + relativeUrl);
            else if (RedirectType.FORWARD.equals(redirectType)) {
                try {
                    request.getRequestDispatcher(relativeUrl).forward(request, response);
                } catch (ServletException e) {
                    e.printStackTrace();
                }
            }
        return Boolean.TRUE.equals(condition);
    }

    protected static Boolean goTo(Boolean condition, String relativeUrl, HttpServletRequest request,
            HttpServletResponse response) throws IOException {
        return goTo(condition, relativeUrl, request, response, RedirectType.REDIRECT);
    }

    @Override
    public void destroy() {
    }

    /**/

    public static interface AbstractListener {

        void filter(Application application, AbstractUserSession<?, ?> userSession, UserAccount userAccount,
                URL url, HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
                throws IOException, ServletException;

        /**/

        public static class Adapter extends BeanAdapter implements AbstractListener, Serializable {

            private static final long serialVersionUID = -2057765010522840493L;

            protected WebManager webManager = WebManager.getInstance();

            protected UserAccountBusiness userAccountBusiness = inject(UserAccountBusiness.class);
            protected LicenseBusiness licenseBusiness = inject(LicenseBusiness.class);
            protected UniformResourceLocatorBusiness uniformResourceLocatorBusiness = inject(
                    UniformResourceLocatorBusiness.class);
            protected RoleUniformResourceLocatorBusiness roleUniformResourceLocatorBusiness = inject(
                    RoleUniformResourceLocatorBusiness.class);

            @Override
            public void filter(Application application, AbstractUserSession<?, ?> userSession,
                    UserAccount userAccount, URL url, HttpServletRequest request, HttpServletResponse response,
                    FilterChain filterChain) throws IOException, ServletException {
            }

            /**/

            public static class Default extends Adapter implements Serializable {

                private static final long serialVersionUID = -2057765010522840493L;

            }
        }
    }

}