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