Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * JBoss, Home of Professional Open Source.
   * Copyright 2012 Red Hat, Inc., and individual contributors
   * as indicated by the @author tags.
   *
   * 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 io.undertow.servlet.handlers;
 
 
 import java.util.Map;

Class that maintains the complete set of servlet path matches.

Author(s):
Stuart Douglas
 
 
     private final Map<StringServletPathMatchexactPathMatches;
 
     private final Map<StringPathMatchprefixMatches;
 
     private final Map<StringServletChainnameMatches;
 
     public ServletPathMatchesData(final Map<StringServletChainexactPathMatchesfinal Map<StringPathMatchprefixMatchesfinal Map<StringServletChainnameMatches) {
         this. = prefixMatches;
         this. = nameMatches;
         Map<StringServletPathMatchnewExactPathMatches = new HashMap<StringServletPathMatch>();
         for (Map.Entry<StringServletChainentry : exactPathMatches.entrySet()) {
             newExactPathMatches.put(entry.getKey(), new ServletPathMatch(entry.getValue(), entry.getKey(), false));
         }
         this. = newExactPathMatches;
 
     }
 
     public ServletChain getServletHandlerByName(final String name) {
         return .get(name);
     }
 
     public ServletPathMatch getServletHandlerByExactPath(final String path) {
         return .get(path);
     }
 
     public ServletPathMatch getServletHandlerByPath(final String path) {
         ServletPathMatch exact = .get(path);
         if (exact != null) {
             return exact;
         }
         PathMatch match = .get(path);
         if (match != null) {
             return handleMatch(pathmatchpath.lastIndexOf('.'));
         }
         int extensionPos = -1;
         for (int i = path.length() - 1; i >= 0; --i) {
             final char c = path.charAt(i);
              if (c == '/') {
                 final String part = path.substring(0, i);
                 match = .get(part);
                 if (match != null) {
                     return handleMatch(pathmatchextensionPos);
                 }
             } else if (c == '.') {
                 if (extensionPos == -1) {
                     extensionPos = i;
                 }
             }
         }
         //this should never happen
         //as the default servlet is aways registered under /*
     }
 
     private ServletPathMatch handleMatch(final String pathfinal PathMatch matchfinal int extensionPos) {
         if (match.extensionMatches.isEmpty()) {
             return new ServletPathMatch(match.defaultHandlerpathmatch.requireWelcomeFileMatch);
         } else {
             if (extensionPos == -1) {
                 return new ServletPathMatch(match.defaultHandlerpathmatch.requireWelcomeFileMatch);
             } else {
                 final String ext;
                 ext = path.substring(extensionPos + 1, path.length());
                 ServletChain handler = match.extensionMatches.get(ext);
                 if (handler != null) {
                     return new ServletPathMatch(handlerpathhandler.getManagedServlet().getServletInfo().isRequireWelcomeFileMapping());
                } else {
                    return new ServletPathMatch(match.defaultHandlerpathmatch.requireWelcomeFileMatch);
                }
            }
        }
    }
    public static Builder builder() {
        return new Builder();
    }
    public static final class Builder {
        private final Map<StringServletChainexactPathMatches = new HashMap<StringServletChain>();
        private final Map<StringPathMatchprefixMatches = new HashMap<StringPathMatch>();
        private final Map<StringServletChainnameMatches = new HashMap<StringServletChain>();
        public void addExactMatch(final String exactMatchfinal ServletChain match) {
            .put(exactMatchmatch);
        }
        public void addPrefixMatch(final String prefixfinal ServletChain matchfinal boolean requireWelcomeFileMatch) {
            PathMatch m = .get(prefix);
            if (m == null) {
                .put(prefixm = new PathMatch(match));
            }
            m.defaultHandler = match;
            m.requireWelcomeFileMatch = requireWelcomeFileMatch;
        }
        public void addExtensionMatch(final String prefixfinal String extensionfinal ServletChain match) {
            PathMatch m = .get(prefix);
            if (m == null) {
                .put(prefixm = new PathMatch(null));
            }
            m.extensionMatches.put(extensionmatch);
        }
        public void addNameMatch(final String namefinal ServletChain match) {
            .put(namematch);
        }
        public ServletPathMatchesData build() {
            return new ServletPathMatchesData();
        }
    }
    private static class PathMatch {
        private final Map<StringServletChainextensionMatches = new HashMap<StringServletChain>();
        private volatile ServletChain defaultHandler;
        private volatile boolean requireWelcomeFileMatch;
        public PathMatch(final ServletChain defaultHandler) {
            this. = defaultHandler;
        }
    }
New to GrepCode? Check out our FAQ X