xref: /OpenGrok/opengrok-indexer/src/main/java/org/opengrok/indexer/web/Prefix.java (revision ae1c323b96a1818e667a3d6125085890ae078949)
1b5840353SAdam Hornáček /*
2b5840353SAdam Hornáček  * CDDL HEADER START
3b5840353SAdam Hornáček  *
4b5840353SAdam Hornáček  * The contents of this file are subject to the terms of the
5b5840353SAdam Hornáček  * Common Development and Distribution License (the "License").
6b5840353SAdam Hornáček  * You may not use this file except in compliance with the License.
7b5840353SAdam Hornáček  *
8b5840353SAdam Hornáček  * See LICENSE.txt included in this distribution for the specific
9b5840353SAdam Hornáček  * language governing permissions and limitations under the License.
10b5840353SAdam Hornáček  *
11b5840353SAdam Hornáček  * When distributing Covered Code, include this CDDL HEADER in each
12b5840353SAdam Hornáček  * file and include the License file at LICENSE.txt.
13b5840353SAdam Hornáček  * If applicable, add the following below this CDDL HEADER, with the
14b5840353SAdam Hornáček  * fields enclosed by brackets "[]" replaced with your own identifying
15b5840353SAdam Hornáček  * information: Portions Copyright [yyyy] [name of copyright owner]
16b5840353SAdam Hornáček  *
17b5840353SAdam Hornáček  * CDDL HEADER END
18b5840353SAdam Hornáček  */
19b5840353SAdam Hornáček 
20b5840353SAdam Hornáček /*
215d9f3aa0SAdam Hornáček  * Copyright (c) 2011, Jens Elkner.
22d1e826faSAdam Hornáček  * Copyright (c) 2011, 2019, Oracle and/or its affiliates. All rights reserved.
2305618953SChris Fraire  * Portions Copyright (c) 2020, Chris Fraire <cfraire@me.com>.
24b5840353SAdam Hornáček  */
259805b761SAdam Hornáček package org.opengrok.indexer.web;
26b5840353SAdam Hornáček 
27b5840353SAdam Hornáček import java.util.Map;
28b5840353SAdam Hornáček import java.util.TreeMap;
29b5840353SAdam Hornáček 
30b5840353SAdam Hornáček /**
31b5840353SAdam Hornáček  * URL Prefixes usually tied to a certain servlet.
32b5840353SAdam Hornáček  *
33b5840353SAdam Hornáček  * @author  Jens Elkner
34b5840353SAdam Hornáček  * @version $Revision$
35b5840353SAdam Hornáček  */
36b5840353SAdam Hornáček public enum Prefix {
37ff44f24aSAdam Hornáček     /** Unknown prefix. */
38b5840353SAdam Hornáček     UNKNOWN(""),
39ff44f24aSAdam Hornáček     /** A cross reference. */
40b5840353SAdam Hornáček     XREF_P("/xref"),
41ff44f24aSAdam Hornáček     /** A show cross reference, i.e. add Line and Navigation toggle button in the menu bar. */
42b5840353SAdam Hornáček     XREF_S("/xr"),
43b5840353SAdam Hornáček     /** show more lines. If a search result set for a file matches more lines
44b5840353SAdam Hornáček      * than a given limit (default: 10), only the first <i>limit</i> lines gets
45b5840353SAdam Hornáček      * shown as an "[all ...]" link, which can be used to show all matching
46b5840353SAdam Hornáček      * lines. The servlet path of this link starts with this prefix. */
47b5840353SAdam Hornáček     MORE_P("/more"),
48ff44f24aSAdam Hornáček     /** Reserved (not used). */
49b5840353SAdam Hornáček     MORE_S("/mo"),
50ff44f24aSAdam Hornáček     /** Diff to previous version (link prefix). */
51b5840353SAdam Hornáček     DIFF_P("/diff"),
52ff44f24aSAdam Hornáček     /** Reserved (not used). */
53b5840353SAdam Hornáček     DIFF_S("/di"),
54ff44f24aSAdam Hornáček     /** Reserved (not used). */
55b5840353SAdam Hornáček     HIST_P("/hist"),
56ff44f24aSAdam Hornáček     /** Reserved (not used). */
57b5840353SAdam Hornáček     HIST_S("/hi"),
58ff44f24aSAdam Hornáček     /** Show the history for a file (link prefix). */
59b5840353SAdam Hornáček     HIST_L("/history"),
60ff44f24aSAdam Hornáček     /** RSS XML Feed of latest changes (link prefix). */
61b5840353SAdam Hornáček     RSS_P("/rss"),
62ff44f24aSAdam Hornáček     /** Download file (link prefix). */
63b5840353SAdam Hornáček     DOWNLOAD_P("/download"),
64ff44f24aSAdam Hornáček     /** Raw file display (link prefix). */
65b5840353SAdam Hornáček     RAW_P("/raw"),
66*ae1c323bSVladimir Kotal     /** Full-blown search from main page or top bar (link prefix). */
67b5840353SAdam Hornáček     SEARCH_P("/search"),
68ff44f24aSAdam Hornáček     /** Search from cross reference, can lead to direct match (which opens
69ff44f24aSAdam Hornáček      * directly) or to a matches Summary page. */
70b5840353SAdam Hornáček     SEARCH_R("/s"),
71ff44f24aSAdam Hornáček     /** opensearch description page. */
72b5840353SAdam Hornáček     SEARCH_O("/opensearch"),
73ff44f24aSAdam Hornáček     /** Related source file or directory not found/unavailable/ignored. */
74b5840353SAdam Hornáček     NOT_FOUND("/enoent"),
75ff44f24aSAdam Hornáček     /** Misc error occurred. */
762987a36bSVladimir Kotal     ERROR("/error"),
7724863c00SVladimir Kotal     /** RESTful API. */
782987a36bSVladimir Kotal     REST_API("/api"),
7924863c00SVladimir Kotal     /** Monitoring. */
802987a36bSVladimir Kotal     METRICS("/metrics"),
8124863c00SVladimir Kotal     /** CSS and images. */
829be4859cSVladimir Kotal     STATIC("/default"),
839be4859cSVladimir Kotal     /** JavaScript. */
84186da878SVladimir Kotal     JS("/js"),
85186da878SVladimir Kotal     /** JavaScript in Web JARs. */
86186da878SVladimir Kotal     WEBJARS("/webjars");
87ff44f24aSAdam Hornáček 
88b5840353SAdam Hornáček     private final String prefix;
Prefix(String prefix)89d1e826faSAdam Hornáček     Prefix(String prefix) {
90b5840353SAdam Hornáček         this.prefix = prefix;
91b5840353SAdam Hornáček     }
92b5840353SAdam Hornáček 
93b5840353SAdam Hornáček     /**
94b5840353SAdam Hornáček      * Get the string used as prefix.
95b5840353SAdam Hornáček      * @return the prefix
96b5840353SAdam Hornáček      */
97b5840353SAdam Hornáček     @Override
toString()98b5840353SAdam Hornáček     public String toString() {
99b5840353SAdam Hornáček         return prefix;
100b5840353SAdam Hornáček     }
101b5840353SAdam Hornáček 
102b5840353SAdam Hornáček     // should be sufficient for now
103b5840353SAdam Hornáček     private static final Map<String, Prefix> lookupTable;
104b5840353SAdam Hornáček     static {
105b5840353SAdam Hornáček         lookupTable = new TreeMap<>();
106b5840353SAdam Hornáček         for (Prefix p : Prefix.values()) {
p.toString()107b5840353SAdam Hornáček             lookupTable.put(p.toString(), p);
108b5840353SAdam Hornáček         }
109b5840353SAdam Hornáček     }
110b5840353SAdam Hornáček 
111b5840353SAdam Hornáček     /**
112b5840353SAdam Hornáček      * Get the prefix of the given path.
113b5840353SAdam Hornáček      * @param servletPath  path to check
114b5840353SAdam Hornáček      * @return {@link Prefix#UNKNOWN} if <var>path</var> is {@code null} or has
115b5840353SAdam Hornáček      *  no or unknown prefix, the corresponding prefix otherwise.
116b5840353SAdam Hornáček      * @see #toString()
117b5840353SAdam Hornáček      */
get(String servletPath)118b5840353SAdam Hornáček     public static Prefix get(String servletPath) {
11905618953SChris Fraire         if (servletPath == null || servletPath.length() < 2 || servletPath.charAt(0) != '/') {
120b5840353SAdam Hornáček             return UNKNOWN;
121b5840353SAdam Hornáček         }
122b5840353SAdam Hornáček         int idx = servletPath.indexOf('/', 1);
123b5840353SAdam Hornáček         String pathPrefix = (idx == -1) ?
124b5840353SAdam Hornáček                 servletPath : servletPath.substring(0, idx);
125b5840353SAdam Hornáček         Prefix p = lookupTable.get(pathPrefix);
126b5840353SAdam Hornáček         return p == null ? UNKNOWN : p;
127b5840353SAdam Hornáček     }
128b5840353SAdam Hornáček }
129