org.codelibs.elasticsearch.common.util.URIPattern Maven / Gradle / Ivy
/*
* Licensed to Elasticsearch under one or more contributor
* license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright
* ownership. Elasticsearch licenses this file to you 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 org.codelibs.elasticsearch.common.util;
import java.net.URI;
import java.net.URISyntaxException;
/**
* URI Pattern matcher
*
* The pattern is URI in which authority, path, query and fragment can be replace with simple pattern.
*
* For example: foobar://*.local/some_path/*?*#* will match all uris with schema foobar in local domain
* with any port, with path that starts some_path and with any query and fragment.
*/
public class URIPattern {
private final URI uriPattern;
/**
* Constructs uri pattern
*/
public URIPattern(String pattern) {
try {
uriPattern = new URI(pattern);
} catch (URISyntaxException ex) {
throw new IllegalArgumentException("cannot parse URI pattern [" + pattern + "]");
}
}
/**
* Returns true if the given uri matches the pattern
*/
public boolean match(URI uri) {
return matchNormalized(uri.normalize());
}
public static boolean match(URIPattern[] patterns, URI uri) {
URI normalized = uri.normalize();
for (URIPattern pattern : patterns) {
if (pattern.matchNormalized(normalized)) {
return true;
}
}
return false;
}
private boolean matchNormalized(URI uri) {
if(uriPattern.isOpaque()) {
// This url only has scheme, scheme-specific part and fragment
return uri.isOpaque() &&
match(uriPattern.getScheme(), uri.getScheme()) &&
match(uriPattern.getSchemeSpecificPart(), uri.getSchemeSpecificPart()) &&
match(uriPattern.getFragment(), uri.getFragment());
} else {
return match(uriPattern.getScheme(), uri.getScheme()) &&
match(uriPattern.getAuthority(), uri.getAuthority()) &&
match(uriPattern.getQuery(), uri.getQuery()) &&
match(uriPattern.getPath(), uri.getPath()) &&
match(uriPattern.getFragment(), uri.getFragment());
}
}
private boolean match(String pattern, String value) {
throw new UnsupportedOperationException("querybuilders does not support this operation.");
}
@Override
public String toString() {
return uriPattern.toString();
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy