/* * Copyright 2016 Naver Corp. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.navercorp.pinpoint.bootstrap.config; import com.navercorp.pinpoint.bootstrap.util.AntPathMatcher; import com.navercorp.pinpoint.bootstrap.util.EqualsPathMatcher; import com.navercorp.pinpoint.bootstrap.util.PathMatcher; import com.navercorp.pinpoint.common.util.StringUtils; import java.util.ArrayList; import java.util.Collection; import java.util.List; /** * @author emeroad * @author HyunGil Jeong */ public class ExcludePathFilter implements Filter<String> { public static final String DEFAULT_PATH_SEAPARATOR = "/"; public static final String DEFAULT_FORMAT_SEPARATOR = ","; protected final PathMatcher[] excludePathMatchers; public ExcludePathFilter(String excludePathFormatString) { this(excludePathFormatString, DEFAULT_PATH_SEAPARATOR); } public ExcludePathFilter(String excludePathFormatString, String pathSeparator) { this(excludePathFormatString, pathSeparator, DEFAULT_FORMAT_SEPARATOR); } public ExcludePathFilter(String excludePathFormatString, String pathSeparator, String formatSeparator) { if (StringUtils.isEmpty(pathSeparator)) { throw new IllegalArgumentException("pathSeparator must not be empty"); } if (StringUtils.isEmpty(excludePathFormatString)) { this.excludePathMatchers = new PathMatcher[0]; return; } final List<String> excludePathFormats = StringUtils.tokenizeToStringList(excludePathFormatString, formatSeparator); final List<PathMatcher> excludePathMatchers = new ArrayList<PathMatcher>(excludePathFormats.size()); for (String excludePathFormat : excludePathFormats) { final PathMatcher pathMatcher = createPathMatcher(excludePathFormat, pathSeparator); excludePathMatchers.add(pathMatcher); } this.excludePathMatchers = toArray(excludePathMatchers); } public PathMatcher[] toArray(Collection<PathMatcher> collection) { if (collection == null) { throw new NullPointerException("collection must not be null"); } return collection.toArray(new PathMatcher[collection.size()]); } protected PathMatcher createPathMatcher(String pattern, String pathSeparator) { if (AntPathMatcher.isAntStylePattern(pattern)) { return new AntPathMatcher(pattern, pathSeparator); } return new EqualsPathMatcher(pattern); } @Override public boolean filter(String value) { for (PathMatcher excludePathMatcher : this.excludePathMatchers) { if (excludePathMatcher.isMatched(value)) { return FILTERED; } } return NOT_FILTERED; } @Override public String toString() { final StringBuilder sb = new StringBuilder("ExcludePathFilter{"); sb.append("excludePathMatchers=").append(excludePathMatchers); sb.append('}'); return sb.toString(); } }