All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.eclipse.jetty.http.pathmap.PathSpecSet Maven / Gradle / Ivy

There is a newer version: 11.0.0.beta1
Show newest version
//
//  ========================================================================
//  Copyright (c) 1995-2017 Mort Bay Consulting Pty. Ltd.
//  ------------------------------------------------------------------------
//  All rights reserved. This program and the accompanying materials
//  are made available under the terms of the Eclipse Public License v1.0
//  and Apache License v2.0 which accompanies this distribution.
//
//      The Eclipse Public License is available at
//      http://www.eclipse.org/legal/epl-v10.html
//
//      The Apache License v2.0 is available at
//      http://www.opensource.org/licenses/apache2.0.php
//
//  You may elect to redistribute this code under either of these licenses.
//  ========================================================================
//

package org.eclipse.jetty.http.pathmap;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;

import org.eclipse.jetty.util.Predicate;

/**
 * A Set of PathSpec strings.
 * 

* Used by {@link org.eclipse.jetty.util.IncludeExclude} logic */ public class PathSpecSet implements Set, Predicate { private final Set specs = new TreeSet<>(); @Override public boolean test(String s) { for (PathSpec spec : specs) { if (spec.matches(s)) { return true; } } return false; } @Override public boolean isEmpty() { return specs.isEmpty(); } @Override public Iterator iterator() { return new Iterator() { private Iterator iter = specs.iterator(); @Override public boolean hasNext() { return iter.hasNext(); } @Override public String next() { PathSpec spec = iter.next(); if (spec == null) { return null; } return spec.getDeclaration(); } @Override public void remove() { throw new UnsupportedOperationException("Remove not supported by this Iterator"); } }; } @Override public int size() { return specs.size(); } @Override public boolean contains(Object o) { if (o instanceof PathSpec) { return specs.contains(o); } if (o instanceof String) { return specs.contains(toPathSpec((String)o)); } return false; } private PathSpec asPathSpec(Object o) { if (o == null) { return null; } if (o instanceof PathSpec) { return (PathSpec)o; } if (o instanceof String) { return toPathSpec((String)o); } return toPathSpec(o.toString()); } private PathSpec toPathSpec(String rawSpec) { if ((rawSpec == null) || (rawSpec.length() < 1)) { throw new RuntimeException("Path Spec String must start with '^', '/', or '*.': got [" + rawSpec + "]"); } if (rawSpec.charAt(0) == '^') { return new RegexPathSpec(rawSpec); } else { return new ServletPathSpec(rawSpec); } } @Override public Object[] toArray() { return toArray(new String[specs.size()]); } @Override public T[] toArray(T[] a) { int i = 0; for (PathSpec spec : specs) { a[i++] = (T)spec.getDeclaration(); } return a; } @Override public boolean add(String e) { return specs.add(toPathSpec(e)); } @Override public boolean remove(Object o) { return specs.remove(asPathSpec(o)); } @Override public boolean containsAll(Collection coll) { for (Object o : coll) { if (!specs.contains(asPathSpec(o))) return false; } return true; } @Override public boolean addAll(Collection coll) { boolean ret = false; for (String s : coll) { ret |= add(s); } return ret; } @Override public boolean retainAll(Collection coll) { List collSpecs = new ArrayList<>(); for (Object o : coll) { collSpecs.add(asPathSpec(o)); } return specs.retainAll(collSpecs); } @Override public boolean removeAll(Collection coll) { List collSpecs = new ArrayList<>(); for (Object o : coll) { collSpecs.add(asPathSpec(o)); } return specs.removeAll(collSpecs); } @Override public void clear() { specs.clear(); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy