org.seedstack.seed.web.internal.diagnostic.WebDiagnosticCollector.java Source code

Java tutorial

Introduction

Here is the source code for org.seedstack.seed.web.internal.diagnostic.WebDiagnosticCollector.java

Source

/**
 * Copyright (c) 2013-2016, The SeedStack authors <http://seedstack.org>
 *
 * This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
 */
package org.seedstack.seed.web.internal.diagnostic;

import com.google.common.collect.Sets;
import org.seedstack.seed.diagnostic.spi.DiagnosticInfoCollector;

import javax.servlet.FilterRegistration;
import javax.servlet.ServletContext;
import javax.servlet.ServletRegistration;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;

class WebDiagnosticCollector implements DiagnosticInfoCollector {
    private final ServletContext servletContext;

    WebDiagnosticCollector(ServletContext servletContext) {
        this.servletContext = servletContext;
    }

    @Override
    public Map<String, Object> collect() {
        Map<String, Object> result = new HashMap<>();

        if (servletContext != null) {
            result.put("version",
                    String.format("%d.%d", servletContext.getMajorVersion(), servletContext.getMinorVersion()));
            if (servletContext.getMajorVersion() >= 3) {
                try {
                    result.put("effectiveVersion", String.format("%d.%d", servletContext.getEffectiveMajorVersion(),
                            servletContext.getEffectiveMinorVersion()));
                    result.put("servlets", buildServletList());
                    result.put("filters", buildFilterList());
                } catch (UnsupportedOperationException e) {
                    // nothing to do
                }
            }
        }
        return result;
    }

    private Map<String, Object> buildServletList() {
        Map<String, Object> servletMap = new HashMap<>();
        for (Map.Entry<String, ? extends ServletRegistration> servletRegistrationEntry : servletContext
                .getServletRegistrations().entrySet()) {
            ServletRegistration servletRegistration = servletRegistrationEntry.getValue();
            Map<String, Object> servletRegistrationInfo = new HashMap<>();

            servletRegistrationInfo.put("class", servletRegistration.getClassName());
            servletRegistrationInfo.put("parameters", servletRegistration.getInitParameters());
            Collection<String> mappings = servletRegistration.getMappings();
            if (mappings == null) {
                mappings = new ArrayList<>();
            }
            servletRegistrationInfo.put("mappings", Sets.newLinkedHashSet(mappings));

            servletMap.put(servletRegistrationEntry.getKey(), servletRegistrationInfo);
        }

        return servletMap;
    }

    private Map<String, Object> buildFilterList() {
        Map<String, Object> filterMap = new HashMap<>();
        for (Map.Entry<String, ? extends FilterRegistration> filterRegistrationEntry : servletContext
                .getFilterRegistrations().entrySet()) {
            FilterRegistration filterRegistration = filterRegistrationEntry.getValue();
            Map<String, Object> filterRegistrationInfo = new HashMap<>();

            filterRegistrationInfo.put("class", filterRegistration.getClassName());
            filterRegistrationInfo.put("parameters", filterRegistration.getInitParameters());
            Collection<String> mappings = filterRegistration.getServletNameMappings();
            if (mappings == null) {
                mappings = new ArrayList<>();
            }
            filterRegistrationInfo.put("servletNameMappings", Sets.newLinkedHashSet(mappings));
            Collection<String> patterns = filterRegistration.getUrlPatternMappings();
            if (patterns == null) {
                patterns = new ArrayList<>();
            }
            filterRegistrationInfo.put("urlPatternMappings", Sets.newLinkedHashSet(patterns));

            filterMap.put(filterRegistrationEntry.getKey(), filterRegistrationInfo);
        }

        return filterMap;
    }

}