X-Git-Url: https://code.wpia.club/?p=gigi.git;a=blobdiff_plain;f=lib%2Fjetty%2Forg%2Feclipse%2Fjetty%2Fhttp%2Fpathmap%2FPathMappings.java;fp=lib%2Fjetty%2Forg%2Feclipse%2Fjetty%2Fhttp%2Fpathmap%2FPathMappings.java;h=d1c36cfbd694ddf041daca46294ba506db3bc776;hp=0000000000000000000000000000000000000000;hb=aa5723dbb64ec8efa63909d39ff72364f0a5ee96;hpb=e443f19911df6a30ab07ef70d23970bda671b194
diff --git a/lib/jetty/org/eclipse/jetty/http/pathmap/PathMappings.java b/lib/jetty/org/eclipse/jetty/http/pathmap/PathMappings.java
new file mode 100644
index 00000000..d1c36cfb
--- /dev/null
+++ b/lib/jetty/org/eclipse/jetty/http/pathmap/PathMappings.java
@@ -0,0 +1,159 @@
+//
+// ========================================================================
+// Copyright (c) 1995-2016 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.io.IOException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.jetty.util.annotation.ManagedAttribute;
+import org.eclipse.jetty.util.annotation.ManagedObject;
+import org.eclipse.jetty.util.component.ContainerLifeCycle;
+import org.eclipse.jetty.util.component.Dumpable;
+import org.eclipse.jetty.util.log.Log;
+import org.eclipse.jetty.util.log.Logger;
+
+/**
+ * Path Mappings of PathSpec to Resource.
+ *
+ * Sorted into search order upon entry into the Set
+ *
+ * @param the type of mapping endpoint
+ */
+@ManagedObject("Path Mappings")
+public class PathMappings implements Iterable>, Dumpable
+{
+ private static final Logger LOG = Log.getLogger(PathMappings.class);
+ private List> mappings = new ArrayList>();
+ private MappedResource defaultResource = null;
+ private MappedResource rootResource = null;
+
+ @Override
+ public String dump()
+ {
+ return ContainerLifeCycle.dump(this);
+ }
+
+ @Override
+ public void dump(Appendable out, String indent) throws IOException
+ {
+ ContainerLifeCycle.dump(out,indent,mappings);
+ }
+
+ @ManagedAttribute(value = "mappings", readonly = true)
+ public List> getMappings()
+ {
+ return mappings;
+ }
+
+ public void reset()
+ {
+ mappings.clear();
+ }
+
+ /**
+ * Return a list of MappedResource matches for the specified path.
+ *
+ * @param path the path to return matches on
+ * @return the list of mapped resource the path matches on
+ */
+ public List> getMatches(String path)
+ {
+ boolean matchRoot = "/".equals(path);
+
+ List> ret = new ArrayList<>();
+ int len = mappings.size();
+ for (int i = 0; i < len; i++)
+ {
+ MappedResource mr = mappings.get(i);
+
+ switch (mr.getPathSpec().group)
+ {
+ case ROOT:
+ if (matchRoot)
+ ret.add(mr);
+ break;
+ case DEFAULT:
+ if (matchRoot || mr.getPathSpec().matches(path))
+ ret.add(mr);
+ break;
+ default:
+ if (mr.getPathSpec().matches(path))
+ ret.add(mr);
+ break;
+ }
+ }
+ return ret;
+ }
+
+ public MappedResource getMatch(String path)
+ {
+ if (path.equals("/") && rootResource != null)
+ {
+ return rootResource;
+ }
+
+ int len = mappings.size();
+ for (int i = 0; i < len; i++)
+ {
+ MappedResource mr = mappings.get(i);
+ if (mr.getPathSpec().matches(path))
+ {
+ return mr;
+ }
+ }
+ return defaultResource;
+ }
+
+ @Override
+ public Iterator> iterator()
+ {
+ return mappings.iterator();
+ }
+
+ @SuppressWarnings("incomplete-switch")
+ public void put(PathSpec pathSpec, E resource)
+ {
+ MappedResource entry = new MappedResource<>(pathSpec,resource);
+ switch (pathSpec.group)
+ {
+ case DEFAULT:
+ defaultResource = entry;
+ break;
+ case ROOT:
+ rootResource = entry;
+ break;
+ }
+
+ // TODO: add warning when replacing an existing pathspec?
+
+ mappings.add(entry);
+ if (LOG.isDebugEnabled())
+ LOG.debug("Added {} to {}",entry,this);
+ Collections.sort(mappings);
+ }
+
+ @Override
+ public String toString()
+ {
+ return String.format("%s[size=%d]",this.getClass().getSimpleName(),mappings.size());
+ }
+}