/** * Copyright (c) 2000-present Liferay, Inc. All rights reserved. * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation; either version 2.1 of the License, or (at your option) * any later version. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. */ package com.liferay.portal.osgi.web.wab.extender.internal.registration; import com.liferay.portal.kernel.util.StringPool; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.EnumSet; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import javax.servlet.DispatcherType; import javax.servlet.Filter; import javax.servlet.FilterRegistration; /** * @author Juan Gonzalez */ public class FilterRegistrationImpl implements FilterRegistration.Dynamic { @Override public void addMappingForServletNames( EnumSet<DispatcherType> dispatcherTypes, boolean matchAfter, String... servletNames) { _filterMapping.setDispatcher(dispatcherTypes); int i = 0; for (String servletName : servletNames) { if (matchAfter) { _filterMapping.addServletName(servletName); } else { _filterMapping.addServletName(i, servletName); i++; } } } @Override public void addMappingForUrlPatterns( EnumSet<DispatcherType> dispatcherTypes, boolean matchAfter, String... urlPatterns) { _filterMapping.setDispatcher(dispatcherTypes); int i = 0; for (String servletName : urlPatterns) { if (matchAfter) { _filterMapping.addURLPattern(servletName); } else { _filterMapping.addURLPattern(i, servletName); i++; } } } @Override public String getClassName() { return _className; } public FilterMapping getFilterMapping() { return _filterMapping; } @Override public String getInitParameter(String name) { return _initParameters.get(name); } @Override public Map<String, String> getInitParameters() { return _initParameters; } public Filter getInstance() { return _instance; } @Override public String getName() { return _name; } @Override public Collection<String> getServletNameMappings() { return _filterMapping.getServletNames(); } @Override public Collection<String> getUrlPatternMappings() { return _filterMapping.getURLPatterns(); } public boolean isAsyncSupported() { return _asyncSupported; } @Override public void setAsyncSupported(boolean asyncSupported) { _asyncSupported = asyncSupported; } public void setClassName(String className) { _className = className; } @Override public boolean setInitParameter(String name, String value) { boolean exists = _initParameters.containsKey(name); _initParameters.put(name, value); return exists; } @Override public Set<String> setInitParameters(Map<String, String> initParameters) { _initParameters = initParameters; return new HashSet<>(); } public void setInstance(Filter instance) { _instance = instance; } public void setName(String name) { _name = name; } public class FilterMapping { public void addServletName(int index, String servletName) { FilterMappingItem filterMappingItem = new FilterMappingItem(); filterMappingItem.setItemContent(servletName); _filterMappingItems.add(index, filterMappingItem); } public void addServletName(String servletName) { addServletName(_filterMappingItems.size(), servletName); } public void addURLPattern(int index, String urlPattern) { FilterMappingItem filterMappingItem = new FilterMappingItem(); filterMappingItem.setUrlPattern(true); filterMappingItem.setItemContent(urlPattern); _filterMappingItems.add(index, filterMappingItem); } public void addURLPattern(String urlPattern) { addURLPattern(_filterMappingItems.size(), urlPattern); } public EnumSet<DispatcherType> getDispatchers() { return _dispatchers; } public List<String> getServletNames() { return Collections.unmodifiableList(_getFilterMappingItems(false)); } public List<String> getURLPatterns() { return Collections.unmodifiableList(_getFilterMappingItems(true)); } public void setDispatcher(EnumSet<DispatcherType> dispatcher) { _dispatchers = dispatcher; } private List<String> _getFilterMappingItems(boolean urlPattern) { List<String> filterMappingItems = new ArrayList<>(); for (FilterMappingItem filterMappingItem : _filterMappingItems) { if (urlPattern == filterMappingItem.isUrlPattern()) { filterMappingItems.add(filterMappingItem.getItemContent()); } } return filterMappingItems; } private EnumSet<DispatcherType> _dispatchers = EnumSet.noneOf( DispatcherType.class); private final List<FilterMappingItem> _filterMappingItems = new ArrayList<>(); } private boolean _asyncSupported; private String _className = StringPool.BLANK; private final FilterMapping _filterMapping = new FilterMapping(); private Map<String, String> _initParameters = new HashMap<>(); private Filter _instance; private String _name = StringPool.BLANK; private static class FilterMappingItem { public String getItemContent() { return _itemContent; } public boolean isUrlPattern() { return _urlPattern; } public void setItemContent(String itemContent) { _itemContent = itemContent; } public void setUrlPattern(boolean urlPattern) { _urlPattern = urlPattern; } private String _itemContent = StringPool.BLANK; private boolean _urlPattern; } }