/** * 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; } }