Configuration.java revision 1287
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * CDDL HEADER START
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * The contents of this file are subject to the terms of the
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * Common Development and Distribution License (the "License").
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * You may not use this file except in compliance with the License.
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * See LICENSE.txt included in this distribution for the specific
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * language governing permissions and limitations under the License.
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * When distributing Covered Code, include this CDDL HEADER in each
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * file and include the License file at LICENSE.txt.
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * If applicable, add the following below this CDDL HEADER, with the
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * fields enclosed by brackets "[]" replaced with your own identifying
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * information: Portions Copyright [yyyy] [name of copyright owner]
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * CDDL HEADER END
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved.
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenkimport org.opensolaris.opengrok.history.RepositoryInfo;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenkimport org.opensolaris.opengrok.index.IgnoredNames;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * Placeholder class for all configuration variables. Due to the multithreaded
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * nature of the web application, each thread will use the same instance of the
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * configuration object for each page request. Class and methods should have
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * package scope, but that didn't work with the XMLDecoder/XMLEncoder.
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenkpublic final class Configuration {
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk /** Should the history log be cached? */
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk private boolean historyCache;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * The maximum time in milliseconds {@code HistoryCache.get()} can take
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * before its result is cached.
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk /** Should the history cache be stored in a database? */
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk private boolean historyCacheInDB;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk private boolean generateHtml;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk /** Default project will be used, when no project is selected and no project is in cookie, so basically only the first time you open the first page, or when you clear your web cookies */
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk private boolean verbose;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk //if below is set, then we count how many files per project we need to process and print percentage of completion per project
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk private boolean printProgress;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk private boolean allowLeadingWildcard;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk private boolean remoteScmSupported;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk private boolean optimizeDatabase;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk private boolean useLuceneLocking;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk private boolean compressXref;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk private boolean chattyStatusPage;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * Get the default tab size (number of space characters per tab character)
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * to use for each project. If {@code <= 0} tabs are read/write as is.
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * @return current tab size set.
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * @see Project#getTabSize()
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * @see org.opensolaris.opengrok.analysis.ExpandTabsReader
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk public int getTabSize() {
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * Set the default tab size (number of space characters per tab character)
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * to use for each project. If {@code <= 0} tabs are read/write as is.
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * @param tabSize tabsize to set.
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * @see Project#setTabSize(int)
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * @see org.opensolaris.opengrok.analysis.ExpandTabsReader
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk public void setScanningDepth(int scanningDepth) {
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk /** Creates a new instance of Configuration */
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk //defaults for an opengrok instance configuration
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk setRepositories(new ArrayList<RepositoryInfo>());
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk //setUrlPrefix("../s?"); // TODO generate relative search paths, get rid of -w <webapp> option to indexer !
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk setCtags(System.getProperty("org.opensolaris.opengrok.analysis.Ctags", "ctags"));
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk //below can cause an outofmemory error, since it is defaulting to NO LIMIT
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk setUserPage("http://www.opensolaris.org/viewProfile.jspa?username=");
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk setBugPage("http://bugs.opensolaris.org/bugdatabase/view_bug.do?bug_id=");
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk setReviewPage("http://arc.opensolaris.org/caselog/PSARC/");
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk setReviewPattern("\\b(\\d{4}/\\d{3})\\b"); // in form e.g. PSARC 2008/305
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk setScanningDepth(3); // default depth of scanning for repositories
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk public String setRepoCmd(String clazzName, String cmd) {
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk // just to satisfy bean/de|encoder stuff
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk public int getCachePages() {
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * Should the history log be cached?
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * @return {@code true} if a {@code HistoryCache} implementation should
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * be used, {@code false} otherwise
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk public boolean isHistoryCache() {
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * Set whether history should be cached.
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * @param historyCache if {@code true} enable history cache
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk public void setHistoryCache(boolean historyCache) {
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * How long can a history request take before it's cached? If the time
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * is exceeded, the result is cached. This setting only affects
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * {@code FileHistoryCache}.
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * @return the maximum time in milliseconds a history request can take
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * before it's cached
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * Set the maximum time a history request can take before it's cached.
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * This setting is only respected if {@code FileHistoryCache} is used.
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * @param historyCacheTime maximum time in milliseconds
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk public void setHistoryCacheTime(int historyCacheTime) {
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * Should the history cache be stored in a database? If yes,
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * {@code JDBCHistoryCache} will be used to cache the history; otherwise,
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * {@code FileHistoryCache} is used.
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * @return whether the history cache should be stored in a database
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk public boolean isHistoryCacheInDB() {
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * Set whether the history cache should be stored in a database, and
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * {@code JDBCHistoryCache} should be used instead of {@code
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * FileHistoryCache}.
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * @param historyCacheInDB whether the history cached should be stored in
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * a database
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk public void setHistoryCacheInDB(boolean historyCacheInDB) {
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk public void setProjects(List<Project> projects) {
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk public void setRepositories(List<RepositoryInfo> repositories) {
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * Set the URL prefix to be used by the {@link
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * org.opensolaris.opengrok.analysis.executables.JavaClassAnalyzer} as well
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * as lexers (see {@link org.opensolaris.opengrok.analysis.JFlexXref})
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * when they create output with html links.
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * @param urlPrefix prefix to use.
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk public void setGenerateHtml(boolean generateHtml) {
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk public boolean isGenerateHtml() {
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk public void setDefaultProject(Project defaultProject) {
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk public void setIndexWordLimit(int indexWordLimit) {
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk public boolean isVerbose() {
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk public boolean isPrintProgress() {
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk public void setPrintProgress(boolean printProgress) {
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk public void setAllowLeadingWildcard(boolean allowLeadingWildcard) {
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk this.allowLeadingWildcard = allowLeadingWildcard;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk public boolean isAllowLeadingWildcard() {
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk private boolean quickContextScan;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk public boolean isQuickContextScan() {
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk public void setQuickContextScan(boolean quickContextScan) {
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk public void setIgnoredNames(IgnoredNames ignoredNames) {
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk public void setIncludedNames(Filter includedNames) {
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk public void setUserPageSuffix(String userPageSuffix) {
return userPageSuffix;
return bugPage;
return bugPattern;
return reviewPage;
return reviewPattern;
return webappLAF;
public boolean isRemoteScmSupported() {
return remoteScmSupported;
public boolean isOptimizeDatabase() {
return optimizeDatabase;
public boolean isUsingLuceneLocking() {
return useLuceneLocking;
public boolean isCompressXref() {
return compressXref;
public boolean isIndexVersionedFilesOnly() {
return indexVersionedFilesOnly;
catch (Exception e) {
return databaseDriver;
return databaseUrl;
return allowedSymlinks;
public boolean isObfuscatingEMailAddresses() {
return obfuscatingEMailAddresses;
public boolean isChattyStatusPage() {
return chattyStatusPage;
e.writeObject(this);
e.close();
return ret;
d.close();