Parameters.java

/* 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 */

package org.esigate;

import org.esigate.authentication.RemoteUserAuthenticationHandler;
import org.esigate.cache.BasicCacheStorage;
import org.esigate.cookie.DefaultCookieManager;
import org.esigate.extension.ConfigReloadOnChange;
import org.esigate.extension.Esi;
import org.esigate.extension.FetchLogging;
import org.esigate.extension.FragmentLogging;
import org.esigate.extension.ResourceFixup;
import org.esigate.extension.XPoweredBy;
import org.esigate.extension.surrogate.Surrogate;
import org.esigate.util.Parameter;
import org.esigate.util.ParameterArray;
import org.esigate.util.ParameterBoolean;
import org.esigate.util.ParameterCollection;
import org.esigate.util.ParameterFloat;
import org.esigate.util.ParameterInteger;
import org.esigate.util.ParameterString;

import java.util.Collection;

/**
 * Configuration properties names and default values.
 * 
 * @author Francois-Xavier Bonnet
 * 
 */
public final class Parameters {

    // Core parameters
    public static final Parameter<String[]> REMOTE_URL_BASE = new ParameterArray("remoteUrlBase");
    public static final Parameter<Collection<String>> MAPPINGS = new ParameterCollection("mappings");
    public static final Parameter<Boolean> STRIP_MAPPING_PATH = new ParameterBoolean("stripMappingPath", false);
    public static final Parameter<String> URI_ENCODING = new ParameterString("uriEncoding", "ISO-8859-1");
    public static final Parameter<Collection<String>> PARSABLE_CONTENT_TYPES = new ParameterCollection(
            "parsableContentTypes", "text/html", "application/xhtml+xml");
    // Network settings
    public static final Parameter<Integer> MAX_CONNECTIONS_PER_HOST = new ParameterInteger("maxConnectionsPerHost", 20);
    public static final Parameter<Integer> CONNECT_TIMEOUT = new ParameterInteger("connectTimeout", 1000);
    public static final Parameter<Integer> SOCKET_TIMEOUT = new ParameterInteger("socketTimeout", 10000);
    // Proxy settings
    public static final Parameter<String> PROXY_HOST = new ParameterString("proxyHost");
    public static final Parameter<Integer> PROXY_PORT = new ParameterInteger("proxyPort", 0);
    public static final Parameter<String> PROXY_USER = new ParameterString("proxyUser");
    public static final Parameter<String> PROXY_PASSWORD = new ParameterString("proxyPassword");
    // Http headers
    public static final Parameter<Boolean> PRESERVE_HOST = new ParameterBoolean("preserveHost", true);
    // Cookies
    public static final Parameter<String> COOKIE_MANAGER = new ParameterString("cookieManager",
            DefaultCookieManager.class.getName());
    public static final Parameter<Collection<String>> DISCARD_COOKIES = new ParameterCollection("discardCookies");
    public static final Parameter<Collection<String>> STORE_COOKIES_IN_SESSION = new ParameterCollection(
            "storeCookiesInSession");
    public static final Parameter<String> VISIBLE_URL_BASE = new ParameterString("visibleUrlBase");
    // Possible values for remoteUrlBaseStrategy
    public static final String STICKYSESSION = "stickysession";
    public static final String IPHASH = "iphash";
    public static final String ROUNDROBIN = "roundrobin";
    // Load-balancing
    public static final Parameter<String> REMOTE_URL_BASE_STRATEGY = new ParameterString("remoteUrlBaseStrategy",
            Parameters.ROUNDROBIN);
    // Extensions
    public static final Parameter<Collection<String>> EXTENSIONS = new ParameterCollection("extensions",
            FragmentLogging.class.getName(), FetchLogging.class.getName(),
            RemoteUserAuthenticationHandler.class.getName(), Esi.class.getName(), ResourceFixup.class.getName(),
            XPoweredBy.class.getName(), Surrogate.class.getName(), ConfigReloadOnChange.class.getName());
    // Cache settings
    public static final Parameter<Boolean> USE_CACHE = new ParameterBoolean("useCache", true);
    public static final Parameter<Integer> MAX_CACHE_ENTRIES = new ParameterInteger("maxCacheEntries", 1000);
    public static final Parameter<Integer> MAX_OBJECT_SIZE = new ParameterInteger("maxObjectSize", 1000000);
    public static final Parameter<String> CACHE_STORAGE = new ParameterString("cacheStorage",
            BasicCacheStorage.class.getName());
    public static final Parameter<Boolean> X_CACHE_HEADER = new ParameterBoolean("xCacheHeader", false);
    public static final Parameter<Boolean> VIA_HEADER = new ParameterBoolean("viaHeader", true);
    // Forced caching
    public static final Parameter<Integer> TTL = new ParameterInteger("ttl", 0);
    // Heuristic caching
    public static final Parameter<Boolean> HEURISTIC_CACHING_ENABLED = new ParameterBoolean("heuristicCachingEnabled",
            true);
    // default value defined in
    // http://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html#sec13.2.4
    public static final Parameter<Float> HEURISTIC_COEFFICIENT = new ParameterFloat("heuristicCoefficient", 0.1f);
    // when no cache directive at all, nothing is cached by default
    public static final Parameter<Integer> HEURISTIC_DEFAULT_LIFETIME_SECS = new ParameterInteger(
            "heuristicDefaultLifetimeSecs", 0);
    // Background revalidation
    public static final Parameter<Integer> STALE_WHILE_REVALIDATE = new ParameterInteger("staleWhileRevalidate", 0);
    public static final Parameter<Integer> STALE_IF_ERROR = new ParameterInteger("staleIfError", 0);
    public static final Parameter<Integer> MIN_ASYNCHRONOUS_WORKERS = new ParameterInteger("minAsynchronousWorkers", 0);
    public static final Parameter<Integer> MAX_ASYNCHRONOUS_WORKERS = new ParameterInteger("maxAsynchronousWorkers", 0);
    public static final Parameter<Integer> ASYNCHRONOUS_WORKER_IDLE_LIFETIME_SECS = new ParameterInteger(
            "asynchronousWorkerIdleLifetimeSecs", 60);
    public static final Parameter<Integer> MAX_UPDATE_RETRIES = new ParameterInteger("maxUpdateRetries", 1);
    public static final Parameter<Integer> REVALIDATION_QUEUE_SIZE = new ParameterInteger("revalidationQueueSize", 100);
    // EhCache
    public static final Parameter<String> EHCACHE_CACHE_NAME_PROPERTY = new ParameterString("ehcache.cacheName",
            "esigate");
    public static final Parameter<String> EHCACHE_CONFIGURATION_FILE_PROPERTY = new ParameterString(
            "ehcache.configurationFile");
    // MemCached
    public static final Parameter<Collection<String>> MEMCACHED_SERVERS_PROPERTY = new ParameterCollection(
            "memcached.servers");
    // Default size for String or byte buffers used to manipulate html page contents
    public static final int DEFAULT_BUFFER_SIZE = 1024;
    // Default size for String or byte buffers used to manipulate small things like tags, cookie, log lines
    public static final int SMALL_BUFFER_SIZE = 256;

    private Parameters() {

    }
}