Configuration.java revision 1470
58N/A * CDDL HEADER START 58N/A * The contents of this file are subject to the terms of the 58N/A * Common Development and Distribution License (the "License"). 58N/A * You may not use this file except in compliance with the License. 58N/A * language governing permissions and limitations under the License. 58N/A * When distributing Covered Code, include this CDDL HEADER in each 58N/A * If applicable, add the following below this CDDL HEADER, with the 58N/A * fields enclosed by brackets "[]" replaced with your own identifying 58N/A * information: Portions Copyright [yyyy] [name of copyright owner] 1291N/A * Copyright (c) 2007, 2012, Oracle and/or its affiliates. All rights reserved. 58N/A * Portions Copyright 2011, 2012 Jens Elkner. 418N/A * Placeholder class for all configuration variables. Due to the multithreaded 1327N/A * nature of the web application, each thread will use the same instance of the 1327N/A * configuration object for each page request. Class and methods should have 1327N/A /** The common property key prefix used to access opengrok system properties */ 773N/A /** The property name used to obtain the ctags command to use. */ 773N/A /** The command to use if no ctags command was given explicitly */ 773N/A /** Relative path wrt. servlet context to the default CSS to use */ 773N/A /** The string property name used to get the date format pattern to use for 773N/A * directory listings in the web app. It needs to be a pattern acceptable 773N/A * by {@link java.text.SimpleDateFormat}. 58N/A * @see #DIRLIST_DATE_DEFAULT */ 894N/A /** The boolean property name used to determine, whether the web app should 77N/A * show {@code Today} instead of the last modified date, if the file has 99N/A * been changed in the last 24 hours. */ 129N/A * Should the history log be cached? 144N/A * The maximum time in milliseconds {@code HistoryCache.get()} can take 173N/A * before its result is cached. 480N/A * Should the history cache be stored in a database? 1326N/A * Default project will be used, when no project is selected and no project 993N/A * is in cookie, so basically only the first time you open the first page, 1185N/A * or when you clear your web cookies 1252N/A //if below is set, then we count how many files per project we need to process and print percentage of completion per project 850N/A * Get the default tab size (number of space characters per tab character) 870N/A * @return current tab size set. 99N/A * @see Project#getTabSize() 1115N/A * @see org.opensolaris.opengrok.analysis.ExpandTabsReader 129N/A * Set the default tab size (number of space characters per tab character) 875N/A * to use for each project. If {@code <= 0} tabs are read/write as is. 144N/A * @param tabSize tabsize to set. 173N/A * @see Project#setTabSize(int) 253N/A * @see org.opensolaris.opengrok.analysis.ExpandTabsReader 1016N/A * Get the depth of scanning for repositories in the directory tree relative 1185N/A * Set the depth of scanning for repositories in the directory tree relative 1185N/A * @param scanningDepth the scan depth to set. 1185N/A * Creates a new instance of Configuration 1185N/A //defaults for an opengrok instance configuration 1190N/A // TODO generate relative search paths, get rid of -w <webapp> option to indexer ! 58N/A // setUrlPrefix(".." + Prefix.SEARCH_R + '?'); 58N/A //below can cause an outofmemory error, since it is defaulting to NO LIMIT 773N/A * Get the {@link SimpleDateFormat} pattern to use to show the last modified 773N/A * time in web app directory listings. 773N/A * @return an always usuable pattern for date formatting. 773N/A * Set the {@link SimpleDateFormat} pattern to use to show the last modified 773N/A * time in web app directory listings. 773N/A * @param pattern the pattern to use. Ignored if {@code null} or invalid. 58N/A * Check, whether the web app should show {@code Today} instead of the last 58N/A * modified time if the target was changed within the last 24 hours. 773N/A * @return {@code true} if {@code Today} should be shown. 773N/A * Set, whether the web app should show {@code Today} instead of the last 773N/A * modified time if the target was changed within the last 24 hours. 773N/A * @param enable use {@code true} if {@code Today} should be shown. 773N/A * @see #DIRLIST_TODAY_PROPERTY_KEY 773N/A * Get the client command to use to access the repository for the given 773N/A * fully quallified classname. 773N/A * @param clazzName name of the targeting class 773N/A * @return {@code null} if not yet set, the client command otherwise. 937N/A * Set the client command to use to access the repository for the given 58N/A * fully quallified classname. 58N/A * @param clazzName name of the targeting class. If {@code null} this method 937N/A * @param cmd the client command to use. If {@code null} the corresponding 58N/A * entry for the given clazzName get removed. 58N/A * @return the client command previously set, which might be {@code null}. 58N/A * Get a map of repository class names with the corresponding CLI command to 937N/A * access the repository it is able to handle. 664N/A * Basically exists to satisfy bean/de|encoder stuff, only. 58N/A * @return a unmodifyable map. 58N/A * Set the map of repository class names with the corresponding CLI command 58N/A * to access the repository it is able to handle. 58N/A * Basically exists to satisfy bean/de|encoder stuff, only. 937N/A * @param cmds the map to copy. 58N/A * Get the name of the ctags program in use 58N/A * @return the name of the ctags program in use 65N/A * Specify the CTags program to use 65N/A * @param ctags the ctags program to use 77N/A * Get the number of search result pages, which should be cached in 77N/A * @return the number of result pages to cache. 99N/A * @see #getHitsPerPage() 99N/A * Set the number of search result pages, which should be cached in 99N/A * @param cachePages the number of result pages to cache. 99N/A * @see #getHitsPerPage() 1115N/A * Get the number of hits to display on one search result page. 1115N/A * @return number of hits per page. 125N/A * Set the number of hits to display on one search result page. 125N/A * @param hitsPerPage number of hits per page to set. 106N/A * Should the history log be cached? 106N/A * @return {@code true} if a {@code HistoryCache} implementation should be 106N/A * used, {@code false} otherwise 112N/A * Set whether history should be cached. 112N/A * @param historyCache if {@code true} enable history cache 1026N/A * How long can a history request take before it's cached? If the time is 1026N/A * exceeded, the result is cached. This setting only affects 1026N/A * {@code FileHistoryCache}. 1026N/A * @return the maximum time in milliseconds a history request can take 129N/A * Set the maximum time a history request can take before it's cached. This 129N/A * setting is only respected if {@code FileHistoryCache} is used. 1100N/A * @param historyCacheTime maximum time in milliseconds 1100N/A * Should the history cache be stored in a database? If yes, 129N/A * {@code JDBCHistoryCache} will be used to cache the history; otherwise, 129N/A * {@code FileHistoryCache} is used. 129N/A * @return whether the history cache should be stored in a database 129N/A * Set whether the history cache should be stored in a database, and 129N/A * {@code JDBCHistoryCache} should be used instead of {@code 129N/A * @param historyCacheInDB whether the history cached should be stored in a 318N/A * Get all of the projects 318N/A * @return a list containing all of the projects (may be null) 318N/A * Set the list of the projects 144N/A * @param projects the list of projects to use 173N/A * @return true if we have projects 296N/A * Specify the source root 296N/A * @param sourceRoot the location of the sources 480N/A * Get the path to where the sources are located 480N/A * @return path to where the sources are located 1330N/A * Get a file representing the directory where the sources are located 1330N/A * @return A file representing the directory where the sources are located 1330N/A * Returns a path relative to source root. This would just be a simple 1330N/A * substring operation, except we need to support symlinks outside the 1330N/A * @param file A file to resolve 1330N/A * @param stripCount Number of characters past source root to strip 1330N/A * @throws IOException If an IO error occurs 1330N/A * @throws FileNotFoundException If the file is not relative to source root 1330N/A * @return Path relative to source root 667N/A * Set the path to where the index database is stored 833N/A * @param dataRoot the index database 1289N/A * Get the path to the where the index database is stored 1324N/A * @return the path to the index database 1286N/A * Get a file representing the index database 1324N/A * @return the index database 1324N/A * Get the map of known repositories. 1324N/A * @return a possible empty list including {@code null}. 1324N/A * Set the map of known repositories. 1286N/A * @param repositories the repositories to set. 1324N/A * Get the the URL prefix to be used by the {@link 1324N/A * as lexers (see {@link org.opensolaris.opengrok.analysis.JFlexXref}) when 1324N/A * they create output with html links. 1324N/A * @return the URI encoded prefix to use. 1324N/A * Set the URL prefix to be used by the {@link 1299N/A * as lexers (see {@link org.opensolaris.opengrok.analysis.JFlexXref}) when 1299N/A * they create output with html links. 1324N/A * @param urlPrefix URI encoded prefix to set. 1324N/A * Set whether to generate hyper text cross reference (xref) files 1324N/A * offline (i.e. when indexing). If set to {@code false}, xref files are 1331N/A * created on the fly on demand and gets disposed when served to the client 1299N/A * - so saves disk space, but could be sightly slow and more resource 1299N/A * demanding for the servlet container. 1324N/A * @param generateHtml {@code true} to generate and cache xref files immediately. 1331N/A * Check, whether to generate and cache xref files immediately. 1331N/A * Set the project that is specified to be the default project to use. The 1331N/A * default project is the project you will search (from the web application) 1331N/A * if the page request didn't contain the cookie. 1331N/A * @param defaultProject The default project to use 1331N/A * Get the project that is specified to be the default project to use. The 1331N/A * default project is the project you will search (from the web application) 1326N/A * if the page request didn't contain the cookie. 1326N/A * @return the default project (may be null if not specified) 1326N/A * Chandan wrote the following answer on the opengrok-discuss list: 1326N/A * "Traditionally search engines (specially spiders) think that large files 1326N/A * are junk. Large files tend to be multimedia files etc., which text 1326N/A * search spiders do not want to chew. So they ignore the contents of 1326N/A * the file after a cutoff length. Lucene does this by number of words, 1326N/A * which is by default is 10,000." 1326N/A * By default OpenGrok will increase this limit to 60000, but it may be 1326N/A * overridden in the configuration file 1326N/A * @return The maximum words to index 833N/A * Set the number of words in a file Lucene will index. 833N/A * See getIndexWordLimit for a better description. 833N/A * @param indexWordLimit the number of words to index in a single file 833N/A * Is the verbosity flag turned on? 833N/A * @return true if we can print extra information 1016N/A * Set the verbosity flag (to add extra debug information in output) 1123N/A * Is the progress print flag turned on? 1123N/A * @return {@code true} if we can print per project progress % 1125N/A * Set the printing of progress % flag (user convenience). 1125N/A * @param enable {@code true} to enable progress printing. 234N/A * Specify if a search may start with a wildcard. Note that queries 234N/A * that start with a wildcard will give a significant impact on the 234N/A * search performace (disabled by default). 234N/A * @param allowLeadingWildcard set to {@code true} to activate 639N/A * Is leading wildcards allowed? 937N/A * @return {@code true} if a search may start with a wildcard 640N/A * Check whether a quick context scan should be done. 640N/A * @return {@code true} if quick scan should be made. 234N/A * @see #setQuickContextScan(boolean) 1195N/A * If set to {@code true}, at most 1 MiB of a file gets read into a buffer 640N/A * at once and than tokenized. Otherwise the whole file gets processed as 639N/A * usual, i.e. the file content gets read on demand when tokenizing and the 937N/A * whole file gets processed (no matter of its size). 937N/A * @param quickContextScan if {@code true} enable quick scanning 639N/A * Takes precedence over {@link #getIncludedNames()}. 640N/A * @param ignoredNames stuff to ignore. If {@code null} defaults will be 58N/A * Takes precedence over {@link #getIncludedNames()}. * @return stuff to ignore. * Set the list of names/patterns to determine, which are allowed to * @param includedNames stuff to index. {@code null} means everything. * @see #setIgnoredNames(IgnoredNames) * Get the list of names/patterns to determine, which are allowed to * @return stuff to index. {@code null} means everything. * @see #getIgnoredNames() * Set the user page for the history listing * @param userPage the URI encoded URL fragment preceeding the username from * Get the user page for the history listing * @return the URI encoded URL string fragment preceeding the username * Set the user page suffix for the history listing * @param userPageSuffix the URI encoded URL fragment following the username * Get the user page suffix for the history listing * @return the URI encoded URL string fragment following the username * Set the bug page for the history listing * @param bugPage the URI encoded URL fragment preceeding the bug ID * Get the bug page for the history listing * @return the URI encoded URL string fragment preceeding the bug ID * Set the bug regex for the history listing * @param bugPattern the regex to search history comments * Get the bug regex for the history listing * @return the regex that is looked for in history comments * Get the review (ARC) page for the history listing * @return the URI encoded URL string fragment preceeding the review page ID * Set the review (ARC) page for the history listing * @param reviewPage the URI encoded URL fragment preceeding the review page ID * Get the review (ARC) regex for the history listing * @return the regex that is looked for in history comments * Set the review (ARC) regex for the history listing * @param reviewPattern the regex to search history comments * Get the name of the web app Look And Feel (LAF) theme to use. It gets * used to construct the stylesheet and image include links in web pages * and names a directory, which contains all this stuff. * @return the name of the web app LAF * Set the name of the web app Look And Feel (LAF) theme to use. It gets * used to construct the stylesheet and image include links in web pages * and names a directory, which contains all this stuff. * @param webappLAF the name of the web app LAF. If {@code null} the default * Check whether file histories should be retrieved from the related remote * repositories when needed. * @return {@code true} if fetch on demand is enabled. * Set whether file histories should be retrieved from the related remote * repositories when needed. * @param remoteScmSupported {@code true} if fetch on demand is enabled. * Check, whether the lucene index database should be optimized (compact * segments etc.) after indexing has been run. * @return {@code true} if optimization is enabled. * Set, whether the lucene index database should be optimized (compact * segments etc.) after indexing has been run. * @param optimizeDatabase {@code true} if optimization should be done. * Check, wheter lucene should lock index files when indexing to avoid * concurrent access, reading invalid data. * @return {@code true} if locking should be used. * Set wheter lucene should lock index files when indexing to avoid * concurrent access, reading invalid data. * @param useLuceneLocking {@code true} if locking should be used. * Set if we should compress the xref files or not. Applies to newly * application automatically detects, whether an xref file is compressed * and processes it properly. * @param compressXref set to {@code true} if generated xref html files * Set if we should compress generated xref html files? * @return {@code true} if the xref html files should be compressed. * Check, whether unversioned files should not be indexed. * If {@code true}, it takes precedence over {@link #getIncludedNames()}, * i.e. files are not indexed when unversioned, even if they match an * @return {@code true} if indexing of unversioned files is disabled. * Set, whether unversioned files should not be indexed. * If set to {@code true}, it takes precedence over {@link #getIncludedNames()}, * i.e. files are not indexed when unversioned, even if they match an * @param indexVersionedFilesOnly {@code true} to disable indexing of * Get the time, when this instance has been modified. If not explicitly set * or set to {@code 0}, it gets initialized with the time of the first call * @return time in milliseconds since 1 Jan 1970 00:00:00 GMT // since we use it for If-Last-Modified-Since evals, which has no // millis, we need to clear the milliseconds part * Set the time, when this configuration has been modified for the last time. * @param lastModified the time in milliseconds since 1 Jan 1970 00:00:00 GMT * Get the date of the last index update. * @return the time of the last index update. * Get the contents of a file or empty string if the file cannot be read. * should usually not happen * The name of the file relative to the <var>DATA_ROOT</var>, which should * be included into the footer of generated web pages. * Get the contents of the footer include file. * @return an empty string if it could not be read successfully, the * contents of the file otherwise. * @see #FOOTER_INCLUDE_FILE * The name of the file relative to the <var>DATA_ROOT</var>, which should * be included into the footer of generated web pages. * Get the contents of the footer include file. * @return an empty string if it could not be read successfully, the * contents of the file otherwise. * @see #HEADER_INCLUDE_FILE * The name of the file relative to the <var>DATA_ROOT</var>, which should * be included into the body of web app's "Home" page. * Get the contents of the body include file. * @return an empty string if it could not be read successfully, the * contents of the file otherwise. * @see Configuration#BODY_INCLUDE_FILE * The name of the eftar file relative to the <var>DATA_ROOT</var>, which * contains definition tags. * Get the eftar file, which contains definition tags. * @return {@code null} if there is no such file, the file otherwise. * Get the fully quallified class name of the history database driver to use. * @return the database driver class name. * Set the fully quallified class name of the history database driver to use. * @param databaseDriver the database driver class name to set. * Get the JDBC connection URL to use to connect to the history database. * @return the JDBC connection URL to use. * Set the JDBC connection URL to use to connect to the history database. * @param databaseUrl the JDBC connection URL to set. * Get the optional file to be used to handover additional options to the * @return {@code null} if not set, the options filename otherwise. * Set the file to be used to handover additional options to the ctags * @param filename the options filename to use. Might be {@code null}. * Get the pathnames of symlinks, which are allowed to be processed (e.g. * indexed, tokenized, etc.). * @return a possible empty set. * Set the pathnames of symlinks, which are allowed to be processed (e.g. * indexed, tokenized, etc.). * @param allowedSymlinks symlinks to allow. {@code null} means none. * Check whether e-mail addresses should be obfuscated in the xref. * @return {@code true} if obfuscation is needed. * Set whether e-mail addresses should be obfuscated in the xref. * @param obfuscate {@code true} if obfuscation is needed. * Should status.jsp print internal settings, like paths and database * @return {@code true} if status.jsp should show the configuration. * Set whether status.jsp should print internal settings. * @param chattyStatusPage {@code true} if internal settings should be printed. * Write the current configuration to a file * @param file the file to write the configuration into * @throws IOException if an error occurs * Serialize this instance into an XML formatted string. * @return this instance as xml string * Read the file containing a serialized {@link Configuration} instance and * return the marshalled instance. * @param file the file to read * @return the un-serialized Configuration instance represented by the file. * @throws IOException if the file cannot be read/decoded. * Read the given string representing a in XML serialized {@link Configuration} * and return the marshalled instance. * @param xmlconfig serialized config to read. * @return the un-serialized Configuration instance represented by the string. * @throws IOException if the string cannot be decoded.