Configuration.java revision 1287
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk/*
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * CDDL HEADER START
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk *
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 *
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * See LICENSE.txt included in this distribution for the specific
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * language governing permissions and limitations under the License.
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk *
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 *
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * CDDL HEADER END
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk */
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk/*
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved.
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk */
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenkpackage org.opensolaris.opengrok.configuration;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenkimport java.beans.XMLDecoder;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenkimport java.beans.XMLEncoder;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenkimport java.io.BufferedInputStream;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenkimport java.io.BufferedOutputStream;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenkimport java.io.BufferedReader;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenkimport java.io.ByteArrayInputStream;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenkimport java.io.ByteArrayOutputStream;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenkimport java.io.File;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenkimport java.io.FileInputStream;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenkimport java.io.FileOutputStream;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenkimport java.io.IOException;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenkimport java.io.InputStream;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenkimport java.io.OutputStream;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenkimport java.util.ArrayList;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenkimport java.util.Collections;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenkimport java.util.Date;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenkimport java.util.HashMap;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenkimport java.util.HashSet;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenkimport java.util.List;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenkimport java.util.Map;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenkimport java.util.Set;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenkimport org.opensolaris.opengrok.history.RepositoryInfo;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenkimport org.opensolaris.opengrok.index.Filter;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenkimport org.opensolaris.opengrok.index.IgnoredNames;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenkimport org.opensolaris.opengrok.util.IOUtils;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk/**
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.schenk */
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenkpublic final class Configuration {
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk private String ctags;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk /** Should the history log be cached? */
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk private boolean historyCache;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk /**
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * The maximum time in milliseconds {@code HistoryCache.get()} can take
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * before its result is cached.
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk */
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk private int historyCacheTime;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk /** Should the history cache be stored in a database? */
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk private boolean historyCacheInDB;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk private List<Project> projects;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk private String sourceRoot;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk private String dataRoot;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk private List<RepositoryInfo> repositories;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk private String urlPrefix;
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 Project defaultProject;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk private int indexWordLimit;
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 IgnoredNames ignoredNames;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk private Filter includedNames;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk private String userPage;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk private String userPageSuffix;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk private String bugPage;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk private String bugPattern;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk private String reviewPage;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk private String reviewPattern;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk private String webappLAF;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk private boolean remoteScmSupported;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk private boolean optimizeDatabase;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk private boolean useLuceneLocking;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk private boolean compressXref;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk private boolean indexVersionedFilesOnly;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk private int hitsPerPage;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk private int cachePages;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk private String databaseDriver;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk private String databaseUrl;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk private int scanningDepth;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk private Set<String> allowedSymlinks;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk private boolean obfuscatingEMailAddresses;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk private boolean chattyStatusPage;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk private final Map<String,String> cmds;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk private int tabSize;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk /**
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 */
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk public int getTabSize() {
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk return tabSize;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk }
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk /**
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 */
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk public void setTabSize(int tabSize) {
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk this.tabSize = tabSize;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk }
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk public int getScanningDepth() {
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk return scanningDepth;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk }
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk public void setScanningDepth(int scanningDepth) {
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk this.scanningDepth = scanningDepth;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk }
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk /** Creates a new instance of Configuration */
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk public Configuration() {
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk //defaults for an opengrok instance configuration
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk setHistoryCache(true);
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk setHistoryCacheTime(30);
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk setHistoryCacheInDB(false);
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk setProjects(new ArrayList<Project>());
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk setRepositories(new ArrayList<RepositoryInfo>());
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk setUrlPrefix("/source/s?");
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 setIndexWordLimit(Integer.MAX_VALUE);
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk setVerbose(false);
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk setPrintProgress(false);
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk setGenerateHtml(true);
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk setQuickContextScan(true);
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk setIgnoredNames(new IgnoredNames());
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk setIncludedNames(new Filter());
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 setBugPattern("\\b([12456789][0-9]{6})\\b");
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 setWebappLAF("default");
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk setRemoteScmSupported(false);
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk setOptimizeDatabase(true);
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk setUsingLuceneLocking(false);
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk setCompressXref(true);
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk setIndexVersionedFilesOnly(false);
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk setHitsPerPage(25);
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk setCachePages(5);
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk setScanningDepth(3); // default depth of scanning for repositories
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk setAllowedSymlinks(new HashSet<String>());
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk setTabSize(4);
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk cmds = new HashMap<String, String>();
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk }
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk public String getRepoCmd(String clazzName) {
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk return cmds.get(clazzName);
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk }
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk public String setRepoCmd(String clazzName, String cmd) {
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk if (clazzName == null) {
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk return null;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk }
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk if (cmd == null || cmd.length() == 0) {
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk return cmds.remove(clazzName);
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk }
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk return cmds.put(clazzName, cmd);
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk }
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk // just to satisfy bean/de|encoder stuff
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk public Map<String, String> getCmds() {
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk return Collections.unmodifiableMap(cmds);
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk }
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk public void setCmds(Map<String, String> cmds) {
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk this.cmds.clear();
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk this.cmds.putAll(cmds);
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk }
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk public String getCtags() {
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk return ctags;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk }
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk public void setCtags(String ctags) {
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk this.ctags = ctags;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk }
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk public int getCachePages() {
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk return cachePages;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk }
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk public void setCachePages(int cachePages) {
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk this.cachePages = cachePages;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk }
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk public int getHitsPerPage() {
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk return hitsPerPage;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk }
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk public void setHitsPerPage(int hitsPerPage) {
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk this.hitsPerPage = hitsPerPage;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk }
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk /**
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 */
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk public boolean isHistoryCache() {
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk return historyCache;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk }
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk /**
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * Set whether history should be cached.
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * @param historyCache if {@code true} enable history cache
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk */
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk public void setHistoryCache(boolean historyCache) {
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk this.historyCache = historyCache;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk }
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk /**
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 *
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * @return the maximum time in milliseconds a history request can take
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * before it's cached
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk */
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk public int getHistoryCacheTime() {
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk return historyCacheTime;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk }
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk /**
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 *
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * @param historyCacheTime maximum time in milliseconds
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk */
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk public void setHistoryCacheTime(int historyCacheTime) {
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk this.historyCacheTime = historyCacheTime;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk }
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk /**
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 *
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * @return whether the history cache should be stored in a database
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk */
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk public boolean isHistoryCacheInDB() {
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk return historyCacheInDB;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk }
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk /**
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 *
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * @param historyCacheInDB whether the history cached should be stored in
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk * a database
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk */
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk public void setHistoryCacheInDB(boolean historyCacheInDB) {
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk this.historyCacheInDB = historyCacheInDB;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk }
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk public List<Project> getProjects() {
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk return projects;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk }
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk public void setProjects(List<Project> projects) {
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk this.projects = projects;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk }
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk public String getSourceRoot() {
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk return sourceRoot;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk }
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk public void setSourceRoot(String sourceRoot) {
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk this.sourceRoot = sourceRoot;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk }
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk public String getDataRoot() {
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk return dataRoot;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk }
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk public void setDataRoot(String dataRoot) {
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk this.dataRoot = dataRoot;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk }
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk public List<RepositoryInfo> getRepositories() {
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk return repositories;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk }
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk public void setRepositories(List<RepositoryInfo> repositories) {
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk this.repositories = repositories;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk }
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk public String getUrlPrefix() {
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk return urlPrefix;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk }
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk /**
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 */
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk public void setUrlPrefix(String urlPrefix) {
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk this.urlPrefix = urlPrefix;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk }
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk public void setGenerateHtml(boolean generateHtml) {
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk this.generateHtml = generateHtml;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk }
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk public boolean isGenerateHtml() {
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk return generateHtml;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk }
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk public void setDefaultProject(Project defaultProject) {
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk this.defaultProject = defaultProject;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk }
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk public Project getDefaultProject() {
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk return defaultProject;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk }
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk public int getIndexWordLimit() {
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk return indexWordLimit;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk }
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk public void setIndexWordLimit(int indexWordLimit) {
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk this.indexWordLimit = indexWordLimit;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk }
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk public boolean isVerbose() {
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk return verbose;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk }
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk public void setVerbose(boolean verbose) {
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk this.verbose = verbose;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk }
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk public boolean isPrintProgress() {
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk return printProgress;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk }
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk public void setPrintProgress(boolean printProgress) {
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk this.printProgress = printProgress;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk }
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk public void setAllowLeadingWildcard(boolean allowLeadingWildcard) {
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk this.allowLeadingWildcard = allowLeadingWildcard;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk }
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk public boolean isAllowLeadingWildcard() {
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk return allowLeadingWildcard;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk }
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk private boolean quickContextScan;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk public boolean isQuickContextScan() {
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk return quickContextScan;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk }
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk public void setQuickContextScan(boolean quickContextScan) {
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk this.quickContextScan = quickContextScan;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk }
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk public void setIgnoredNames(IgnoredNames ignoredNames) {
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk this.ignoredNames = ignoredNames;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk }
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk public IgnoredNames getIgnoredNames() {
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk return ignoredNames;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk }
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk public void setIncludedNames(Filter includedNames) {
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk this.includedNames = includedNames;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk }
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk public Filter getIncludedNames() {
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk return includedNames;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk }
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk public void setUserPage(String userPage) {
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk this.userPage = userPage;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk }
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk public String getUserPage() {
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk return userPage;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk }
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk public void setUserPageSuffix(String userPageSuffix) {
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk this.userPageSuffix = userPageSuffix;
faaa489e1cc905efd364e01fe09111173c95db68jeff.schenk }
public String getUserPageSuffix() {
return userPageSuffix;
}
public void setBugPage(String bugPage) {
this.bugPage = bugPage;
}
public String getBugPage() {
return bugPage;
}
public void setBugPattern(String bugPattern) {
this.bugPattern = bugPattern;
}
public String getBugPattern() {
return bugPattern;
}
public String getReviewPage() {
return reviewPage;
}
public void setReviewPage(String reviewPage) {
this.reviewPage = reviewPage;
}
public String getReviewPattern() {
return reviewPattern;
}
public void setReviewPattern(String reviewPattern) {
this.reviewPattern = reviewPattern;
}
public String getWebappLAF() {
return webappLAF;
}
public void setWebappLAF(String webappLAF) {
this.webappLAF = webappLAF;
}
public boolean isRemoteScmSupported() {
return remoteScmSupported;
}
public void setRemoteScmSupported(boolean remoteScmSupported) {
this.remoteScmSupported = remoteScmSupported;
}
public boolean isOptimizeDatabase() {
return optimizeDatabase;
}
public void setOptimizeDatabase(boolean optimizeDatabase) {
this.optimizeDatabase = optimizeDatabase;
}
public boolean isUsingLuceneLocking() {
return useLuceneLocking;
}
public void setUsingLuceneLocking(boolean useLuceneLocking) {
this.useLuceneLocking = useLuceneLocking;
}
public void setCompressXref(boolean compressXref) {
this.compressXref = compressXref;
}
public boolean isCompressXref() {
return compressXref;
}
public boolean isIndexVersionedFilesOnly() {
return indexVersionedFilesOnly;
}
public void setIndexVersionedFilesOnly(boolean indexVersionedFilesOnly) {
this.indexVersionedFilesOnly = indexVersionedFilesOnly;
}
public Date getDateForLastIndexRun() {
File timestamp = new File(getDataRoot(), "timestamp");
return new Date(timestamp.lastModified());
}
/**
* Return string from the header include file so it can be embedded into
* page header.
*/
public String getHeaderIncludeFileContent() {
StringBuilder contents = new StringBuilder();
File hdrfile = new File(getDataRoot(), "header_include");
try {
BufferedReader input = new BufferedReader(new FileReader(hdrfile));
try {
String line = null;
while (( line = input.readLine()) != null) {
contents.append(line);
contents.append(System.getProperty("line.separator"));
}
}
catch (java.io.IOException e) {
return "";
}
finally {
try {
input.close();
}
catch (Exception e) {
}
}
}
catch (java.io.FileNotFoundException e) {
return "";
}
return contents.toString();
}
public String getDatabaseDriver() {
return databaseDriver;
}
public void setDatabaseDriver(String databaseDriver) {
this.databaseDriver = databaseDriver;
}
public String getDatabaseUrl() {
return databaseUrl;
}
public void setDatabaseUrl(String databaseUrl) {
this.databaseUrl = databaseUrl;
}
public Set<String> getAllowedSymlinks() {
return allowedSymlinks;
}
public void setAllowedSymlinks(Set<String> allowedSymlinks) {
this.allowedSymlinks = allowedSymlinks;
}
public boolean isObfuscatingEMailAddresses() {
return obfuscatingEMailAddresses;
}
public void setObfuscatingEMailAddresses(boolean obfuscate) {
this.obfuscatingEMailAddresses = obfuscate;
}
public boolean isChattyStatusPage() {
return chattyStatusPage;
}
public void setChattyStatusPage(boolean chattyStatusPage) {
this.chattyStatusPage = chattyStatusPage;
}
/**
* Write the current configuration to a file
* @param file the file to write the configuration into
* @throws IOException if an error occurs
*/
public void write(File file) throws IOException {
final FileOutputStream out = new FileOutputStream(file);
try {
this.encodeObject(out);
} finally {
IOUtils.close(out);
}
}
public String getXMLRepresentationAsString() {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
this.encodeObject(bos);
return bos.toString();
}
private void encodeObject(OutputStream out) {
XMLEncoder e = new XMLEncoder(new BufferedOutputStream(out));
e.writeObject(this);
e.close();
}
public static Configuration read(File file) throws IOException {
final FileInputStream in = new FileInputStream(file);
try {
return decodeObject(in);
} finally {
IOUtils.close(in);
}
}
public static Configuration makeXMLStringAsConfiguration(String xmlconfig) throws IOException {
final Configuration ret;
final ByteArrayInputStream in = new ByteArrayInputStream(xmlconfig.getBytes());
ret = decodeObject(in);
return ret;
}
private static Configuration decodeObject(InputStream in) throws IOException {
XMLDecoder d = new XMLDecoder(new BufferedInputStream(in));
final Object ret = d.readObject();
d.close();
if (!(ret instanceof Configuration)) {
throw new IOException("Not a valid config file");
}
return (Configuration)ret;
}
}