#*
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you 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.
*#
# -------------------------------------------------------------------
#
# This is the configuration file for Turbine.
#
# Note that strings containing "," (comma) characters must backslash
# escape the comma (i.e. '\,')
#
# -------------------------------------------------------------------

# -------------------------------------------------------------------
#
#  L O G 4 J - L O G G I N G
#
# -------------------------------------------------------------------

log4j.file = WEB-INF/conf/log4j.properties

# -------------------------------------------------------------------
#
#  M A I L  S E R V E R
#
# -------------------------------------------------------------------
# Your mail server for outgoing email.
#
# Default: null
# -------------------------------------------------------------------

mail.server=

# -------------------------------------------------------------------
# SMTP-From header for your outgoing messages
#
# All failed delivery messages will be returned to this address.
# If unset, these messages will be sent to the address in the
# From header (standard behaviour)
#
# Default: null
# -------------------------------------------------------------------

mail.smtp.from=

# -------------------------------------------------------------------
#
#  S E R V E R   D A T A
#
# -------------------------------------------------------------------
# Default ServerData that can be used if asked for before the first
# request is made.
#
# Defaults:
#
# serverdata.default.serverName=
# serverdata.default.serverPort=80
# serverdata.default.serverScheme=http
# serverdata.default.scriptName=
# serverdata.default.contextPath=
# -------------------------------------------------------------------

serverdata.default.serverName=
serverdata.default.serverPort=80
serverdata.default.serverScheme=http
serverdata.default.scriptName=
serverdata.default.contextPath=

# -------------------------------------------------------------------
#
#  M O D U L E  C A C H I N G
#
# -------------------------------------------------------------------
# This determines whether or not to cache the modules in memory.  For
# development, turn this off.  For production, turn this on.
#
# Default: false
# -------------------------------------------------------------------

module.cache=false

# If module.cache=true, then how large should we make the hashtables
# by default.

action.cache.size=20
layout.cache.size=10
navigation.cache.size=10
page.cache.size=5
screen.cache.size=50
scheduledjob.cache.size=10

# -------------------------------------------------------------------
#
#  M O D U L E  P A C K A G E S
#
# -------------------------------------------------------------------
# This is the "classpath" for Turbine.  In order to locate your own
# modules, you should add them to this path.  For example, if you have
# com.company.actions, com.company.screens, com.company.navigations,
# then this setting would be "com.company,org.apache.turbine.modules".
# This path is searched in order.  For example, Turbine comes with a
# screen module named "Login".  If you wanted to have your own screen
# module named "Login", then you would specify the path to your
# modules before the others.
#
# Note: org.apache.turbine.modules will always be added to the search
# path.  If it is not explictly added here, it will be added to the
# end.
#
# Default: org.apache.turbine.modules
# -------------------------------------------------------------------

module.packages=${package}.modules,org.apache.turbine.modules

# -------------------------------------------------------------------
#
#  F R A M E W O R K  S E T T I N G S
#
# -------------------------------------------------------------------
# These are settings that control the behavior of the framework,
# such as determining whether a template system is in use, what
# the default templates and screens are and session handling settings.
# -------------------------------------------------------------------

# Used to set the template homepage if you are using a template
# layout.  This is the template that will be displayed to the user
# when no specific template is requested.  This is normally executed
# as the first template the user sees when they access the system.
#
# Default: Index.vm

template.homepage=Index.vm

# This is the default screen to show to people when they first access
# the system.  This is only used if there is no value for
# template.homepage.  This is for use when you are not using a
# templating system such as Velocity or JSP.
#
# Default: Login

screen.homepage=

# This is the template that is shown on an incorrect login attempt.
# Setting this property will override any value of screen.login specified
# below.
#
# Default: Login.vm

template.login=Login.vm

# This is the page that is shown on an incorrect login attempt.  It is
# referenced in the LoginUser action. This is only used if there is no value
# for template.login.  This is for use when you are not using a
# templating system such as Velocity or JSP.
#
# Default: Login

screen.login=

# This is the template that is used by the respective Template based
# ErrorScreen for displaying the error. If you are not using a Template based
# ErrorScreen, then this is ignored.
#
# Default: Error.vm

template.error=Error.vm

# This is the default error screen.
#
# Default: VelocityErrorScreen

screen.error=VelocityErrorScreen

# This is the screen that is displayed when the user's web page is in
# an invalid state.
#
# Default: error.InvalidState

screen.invalidstate=error.InvalidState

# Set the components of the default Doctype for use in html documents.
#
# Defaults: There are no defaults - if default.html.doctype.root.element is not
#           set then no default doctype will be available.

default.html.doctype.root.element=HTML
default.html.doctype.identifier=-//W3C//DTD HTML 4.01 Transitional//EN
default.html.doctype.url=http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd

# This is the default action to log a user in.  If you write your own
# implementation of the login action, make sure that you change this
# to reflect the new name.

action.login=LoginUser

# This is the default action to log a user out. If you write your own
# implementation of the logout action, make sure that you change this
# to reflect the new name.

action.logout=LogoutUser

# This is the default action to validate whether or not a session is
# valid.  For example, if you want to make sure if a user has already
# logged in or not.
#
# Default: SessionValidator

action.sessionvalidator=sessionvalidator.TemplateSessionValidator

#
# Use this setting if you want your application to display the Login Screen
# as first action and does not allow any operation before the user has
# logged in
#
# action.sessionvalidator=sessionvalidator.TemplateSecureSessionValidator

# This is the timeout in seconds for sessions. If left commented out, the
# servlet container's default timeout will be left as is.

# session.timeout=1800

# This is the default action that builds up the AccessControlList for
# the individual users session.

action.accesscontroller=AccessController

#
# Set this value to true if you want to be able to submit multiple
# events to an Action by doing eventSubmit_do<action> and consider
# only events that have a non-empty, non-zero value. This is useful
# if you submit your form with JavaScript
#
action.eventsubmit.needsvalue = false

# If the web container does not supply an explicit encoding for the
# request data, assume that is has this encoding. If you use e.g.
# UTF-8 or ISO-8859-<something>, change this parameter to keep your
# special characters. Default is ISO-8859-1
input.encoding=UTF-8


# -------------------------------------------------------------------
#
#  J N D I  C O N T E X T S
#
# -------------------------------------------------------------------

# This indicates whether Turbine should try to create JNDI contexts.
#
# Default: false
#
# contexts=true

# These are the JNDI context properties.  Each context's properties
# are defined by the properties beginning with context.name.
#
# Default: none
#
# Example: The following will create a JNDI context named "name" in
# the data.contexts Hashtable.  It will point at the RMI registry on
# localhost running on port 1099, and will use
# com.sun.jndi.rmi.registry.RegistryContextFactory as the initial
# context factory:
#
# context.name.java.naming.provider.url=rmi://localhost:1099
# context.name.java.naming.factory.initial=com.sun.jndi.rmi.registry.RegistryContextFactory

# -------------------------------------------------------------------
#
#  M E S S A G E S
#
# -------------------------------------------------------------------
# Note that strings containing "," (comma) characters must backslash
# escape the comma (i.e. '\,')

# The message that can be displayed before a user logs in.

login.message=Thank you for your visit. Please log into the system.

# The message that can be displayed when no screen is defined.

login.message.noscreen=There has been an error. Your session is valid but the screen variable is not defined.

# The message that can be displayed when a user enters an incorrect
# password or username.

login.error=Sorry your username or password is incorrect!

# The message that can be displayed when a user logs out.

logout.message=Thank you for using the system. Please come back soon.

# -------------------------------------------------------------------
#
#  S E C U R E  S O C K E T S  L A Y E R
#
# -------------------------------------------------------------------
# Whether the web server is able to use SSL.  Links in Turbine can
# check this property to determine if SSL can be used.
#
# Default: true
# -------------------------------------------------------------------

use.ssl=true

# -------------------------------------------------------------------
#
#  S E R V I C E S
#
# -------------------------------------------------------------------
# Classes for Turbine Services should be defined here.
# Format: services.[name].classname=[implementing class]
#
# To specify properties of a service use the following syntax:
# service.[name].[property]=[value]
#
# The order that these services is listed is important! The
# order that is stated here is the order in which the services
# will be initialized. Keep this is mind if you have services
# that depend on other services during initialization.
# -------------------------------------------------------------------
services.AvalonComponentService.classname=org.apache.turbine.services.avaloncomponent.ACSYaafiComponentService
services.CryptoService.classname=org.apache.turbine.services.crypto.TurbineCryptoService
services.FactoryService.classname=org.apache.turbine.services.factory.TurbineFactoryService
services.PoolService.classname=org.apache.turbine.services.pool.TurbinePoolService
services.RunDataService.classname=org.apache.turbine.services.rundata.TurbineRunDataService
services.ServletService.classname=org.apache.turbine.services.servlet.TurbineServletService
services.AssemblerBrokerService.classname=org.apache.turbine.services.assemblerbroker.TurbineAssemblerBrokerService
services.LocalizationService.classname=org.apache.turbine.services.localization.TurbineLocalizationService
services.MimeTypeService.classname=org.apache.turbine.services.mimetype.TurbineMimeTypeService
services.GlobalCacheService.classname=org.apache.turbine.services.cache.TurbineGlobalCacheService
services.PullService.classname=org.apache.turbine.services.pull.TurbinePullService
services.IntakeService.classname=org.apache.turbine.services.intake.TurbineIntakeService
services.TemplateService.classname=org.apache.turbine.services.template.TurbineTemplateService
services.UIService.classname = org.apache.turbine.services.ui.TurbineUIService
services.VelocityService.classname=org.apache.turbine.services.velocity.TurbineVelocityService
services.UploadService.classname=org.apache.turbine.services.upload.TurbineUploadService

# -------------------------------------------------------------------
#
#  R U N   D A T A   S E R V I C E
#
# -------------------------------------------------------------------
# Default implementations of base interfaces for request processing.
# Additional configurations can be defined by using other keys
# in the place of the <default> key.
# -------------------------------------------------------------------

services.RunDataService.default.run.data=org.apache.turbine.services.rundata.DefaultTurbineRunData
services.RunDataService.default.parameter.parser=org.apache.turbine.util.parser.DefaultParameterParser
services.RunDataService.default.cookie.parser=org.apache.turbine.util.parser.DefaultCookieParser

# -------------------------------------------------------------------
#
#  C A C H E   S E R V I C E
#
# -------------------------------------------------------------------

# Interval at which the cache will be checked. The default is
# 5000ms or 5 seconds.

services.GlobalCacheService.cache.check.frequency = 5000

# -------------------------------------------------------------------
#
#  A S S E M B L E R  B R O K E R  S E R V I C E
#
# -------------------------------------------------------------------
# A list of AssemblerFactory classes that will be registered
# with TurbineAssemblerBrokerService
# -------------------------------------------------------------------

services.AssemblerBrokerService.screen=org.apache.turbine.services.assemblerbroker.util.java.JavaScreenFactory
services.AssemblerBrokerService.action=org.apache.turbine.services.assemblerbroker.util.java.JavaActionFactory
services.AssemblerBrokerService.layout=org.apache.turbine.services.assemblerbroker.util.java.JavaLayoutFactory
services.AssemblerBrokerService.page=org.apache.turbine.services.assemblerbroker.util.java.JavaPageFactory
services.AssemblerBrokerService.navigation=org.apache.turbine.services.assemblerbroker.util.java.JavaNavigationFactory
services.AssemblerBrokerService.scheduledjob=org.apache.turbine.services.assemblerbroker.util.java.JavaScheduledJobFactory

# -------------------------------------------------------------------
#
#  T E M P L A T E  S E R V I C E
#
# -------------------------------------------------------------------

# Roughly, the number of templates in each category.
#
# Defaults: layout=2, navigation=10, screen=50

services.TemplateService.layout.cache.size=2
services.TemplateService.navigation.cache.size=10
services.TemplateService.screen.cache.size=50

# -------------------------------------------------------------------
#
#  P U L L  S E R V I C E
#
# -------------------------------------------------------------------
# These are the properties for the Pull Service, the service
# that works in conjunction with the Turbine Pull Model API.
# -------------------------------------------------------------------

services.PullService.earlyInit= true

# This determines whether the non-request tools are refreshed
# on each request (request tools aren't ever, because they're
# instantiated for the request only anyway).

#services.PullService.tools.per.request.refresh=true

# Path to the resources of the application tools, relative to the
# application root

services.PullService.tools.resources.dir=/resources/

# These are tools that are placed in the context by the service
# These tools will be made available to all your
# templates. You list the tools in the following way:
#
# tool.<scope>.<id> = <classname>
#
# <scope>      is the tool scope: global, request, session
#              or persistent (see below for more details)
# <id>         is the name of the tool in the context
#
# You can configure the tools in this way:
# tool.<id>.<parameter> = <value>
#
# So if you find "global", "request", "session" or "persistent" as second
# part, it is a configuration to put a tool into the toolbox, else it is a
# tool specific configuration.
#
# For example:
#
# tool.global.ui    = org.apache.turbine.util.pull.tools.UITool
# tool.global.mm    = org.apache.turbine.util.pull.MessageManager
# tool.request.link = org.apache.turbine.services.pull.tools.TemplateLink
# tool.request.page = org.apache.turbine.util.template.HtmlPageAttributes
#
# Then:
#
# tool.ui.skin = default
#
# configures the value of "skin" for the "ui" tool.
#
# Tools are accessible in all templates by the <id> given
# to the tool. So for the above listings the UITool would
# be available as $ui, the MessageManager as $mm, the TemplateLink
# as $link and the HtmlPageAttributes as $page.
#
# You should avoid using tool names called "global", "request",
# "session" or "persistent" because of clashes with the possible Scopes.
#
# Scopes:
#
#   global:     tool is instantiated once and that instance is available
#               to all templates for all requests. Tool must be threadsafe.
#
#   request:    tool is instantiated once for each request (although the
#               PoolService is used to recycle instances). Tool need not
#               be threadsafe.
#
#   session:    tool is instantiated once for each user session, and is
#               stored in the user's temporary hashtable. Tool should be
#               threadsafe.
#
#   authorized: tool is instantiated once for each user session once the
#               user logs in. After this, it is a normal session tool.
#
# Defaults: none

tool.request.link=org.apache.turbine.services.pull.tools.TemplateLink
tool.request.page=org.apache.turbine.util.template.HtmlPageAttributes
tool.request.content=org.apache.turbine.services.pull.tools.ContentTool

# Localization and Internationalization
tool.request.l10n=org.apache.turbine.services.localization.LocalizationTool

# This pull tool is to allow for easy formatting of Date object into Strings
tool.request.dateFormatter=org.apache.turbine.services.pull.util.DateFormatter

# Use this tool if you need a place to store data that will persist between
# requests.  Any data stored using this tool will be stored in the session.
tool.session.sessionData=org.apache.turbine.services.pull.util.SessionData

# These are intake tools.
# tool.request.om=org.apache.turbine.om.OMTool
tool.request.intake=org.apache.turbine.services.intake.IntakeTool

# This is a tool that allows access to the scheduler service.
# tool.request.scheduler=org.apache.turbine.services.SchedulerTool

# The UITool will allow you to skin your Turbine application using simple
# properties files that are located in the WEBAPP/resources/ directory
# hierarchy.

tool.global.ui=org.apache.turbine.services.pull.tools.UITool

# Path to the UI resources, relative to the resources directory defined above
# tool.ui.dir.skin=/ui/skins

# Path to the images of a skin, relative to the skin directory defined above
# tool.ui.dir.image=/images

# Default CSS file for a skin
# tool.ui.css=skin.css

# Default skin name
# tool.ui.skin=default

#
# The ui tool normally returns absolute URIs.
# Setting this property to true allows you to change the behavior if you
# want only relative URIs (e.g. if you run behind a reverse proxy or a load
# balancer).
tool.ui.want.relative=true

#
# The content tool can put its URIs through the Servlet container,
# which might attach things like the jsessionid even to URIs that
# are not served by the container.
#
# The default behavior was not to put these through the container.
#
# Set this to true if you need things like jsessionid attached to all
# links generated from the $content pull tool.
#
tool.content.want.encoding = false

#
# Both the link and the content tool normally return absolute URIs
# You can change this by exchanging the tool classes but this is not
# really recommended. Setting these properties to true allow you
# to change the behaviour if you want only relative URIs (e.g. if you
# run behind a reverse proxy or a load balancer).
#
tool.content.want.relative = true
tool.link.want.relative = true

# -------------------------------------------------------------------
#
#  V E L O C I T Y  S E R V I C E
#
# -------------------------------------------------------------------

services.VelocityService.earlyInit= true

# The location of Velocity configuration file, relative to webapp root
# These properties will override the default properties set by Velocity.
# You should specify the path to the templates directories as well as
# the path to the log file and they should also be relative to webapp root

services.VelocityService.template.extension=vm
services.VelocityService.default.page = VelocityPage
services.VelocityService.default.screen = VelocityScreen
services.VelocityService.default.layout = VelocityOnlyLayout
services.VelocityService.default.navigation = VelocityNavigation
services.VelocityService.default.error.screen = VelocityErrorScreen
services.VelocityService.default.layout.template = Default.vm

#
# Set this to true to catch Velocity Errors and display them in the log file
services.VelocityService.catch.errors = true

services.VelocityService.runtime.log=/logs/velocity.log
services.VelocityService.input.encoding=UTF-8

#
# Class Path Loader, Turbine jar
services.VelocityService.velocimacro.library = macros/TurbineMacros.vm

# Set the following line to true to cause velocity to automatically reload
# library macro files if they change.  This is useful for debugging.
services.VelocityService.velocimacro.library.autoreload = true

services.VelocityService.resource.loader = file
services.VelocityService.file.resource.loader.description = Velocity File Resource Loader
services.VelocityService.file.resource.loader.class = org.apache.velocity.runtime.resource.loader.FileResourceLoader
services.VelocityService.file.resource.loader.path = /templates
services.VelocityService.file.resource.loader.cache = false
services.VelocityService.file.resource.loader.modificationCheckInterval = 2

services.VelocityService.resource.loader = classpath
services.VelocityService.classpath.resource.loader.description = Velocity Classpath Resource Loader
services.VelocityService.classpath.resource.loader.class = org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader

# -------------------------------------------------------------------
#
#  U P L O A D  S E R V I C E
#
# -------------------------------------------------------------------

# Must be run early to allow the parser to know about the upload
# service facility
services.UploadService.earlyinit=true

# Whether the files should be automatically picked up by
# ParameterParser.
services.UploadService.automatic=true

#
# The directory where files will be temporarily stored.
#
services.UploadService.repository=.

#
# The maximum size of a request that will be processed.
#
services.UploadService.size.max=1048576

#
# The maximum size of a request that will have it's elements cached in
# memory by TurbineUploadService class.
#
services.UploadService.size.threshold=10240

# -------------------------------------------------------------------
#
#  L O C A L I Z A T I O N  S E R V I C E
#
# -------------------------------------------------------------------

# Default ResourceBundle and language/country codes used by the
# TurbineLocalizationService.
#
locale.default.bundle=${package}.L10N
locale.default.language=en
locale.default.country=US

#
# This will set the charset= portion of the ContentType: header.
# Leave commented out unless you want to return stuff as a different
# charset.
#
locale.default.charset=UTF-8

# -------------------------------------------------------------------
#
#  M I M E T Y P E  S E R V I C E
#
# -------------------------------------------------------------------

# This property specifies a file containing mappings between MIME
# content types and the corresponding file name extensions. The
# service itself contains a hardcoded set of most common mappings.
# The file must use the same syntax as the mime.types file of
# the Apache Server, i.e.
# <mimetype> <ext1> <ext2>...
#
# services.MimeTypeService.mime.types=/WEB-INF/conf/mime.types

# This property specifies a file containing mappings between locales
# and the corresponding character encodings. The service itself
# contains a hardcoded set of most common mappings.
# The file should use the Java property file syntax, i.e.
# <lang_country_variant>=<charset>
#
# services.MimeTypeService.charsets=/WEB-INF/conf/charset.properties

# -------------------------------------------------------------------
#
#  S C H E D U L E R  S E R V I C E
#
# -------------------------------------------------------------------

#
# Set enabled to true to start the scheduler.  The scheduler can be
# stopped and started after Turbine has been intialized.  See the
# javadocs for org.apache.turbine.services.schedule.TurbineScheduler
# for the methods calls.
#
# Default = false
#

services.SchedulerService.enabled=false

# Determines if the scheduler service should be initialized early.  This
# Should always be set to true!!!!

services.SchedulerService.earlyInit=true

# -------------------------------------------------------------------
#
#  C R Y P T O   S E R V I C E
#
# -------------------------------------------------------------------

#
# Standard Unix crypt(3) password encryption.
#
services.CryptoService.algorithm.unix  = org.apache.turbine.services.crypto.provider.UnixCrypt
#
# This providers allows access to the Java Message Digest encryption algorithms
#
services.CryptoService.algorithm.java  = org.apache.turbine.services.crypto.provider.JavaCrypt
#
# This is a simple, cleartext "encryption" provider.
#
services.CryptoService.algorithm.cleartext  = org.apache.turbine.services.crypto.provider.ClearCrypt
#
# Use this provider if you upgrade from Turbine 2.1 to current. It provides bug-to-bug
# compatibility for passwords created with the old Security Service. See the javadocs for
# OldJavaCrypt
#
services.CryptoService.algorithm.oldjava  = org.apache.turbine.services.crypto.provider.OldJavaCrypt
#
# This is the default crypto provider. It implements the normal Java MessageDigest ciphers
# You need not to have this, it is the default if no algorithms are given. The default
# provider gives you all the Java MessageDigest Ciphers
#
services.CryptoService.algorithm.default  = org.apache.turbine.services.crypto.provider.JavaCrypt

# -------------------------------------------------------------------
#
#  S E C U R I T Y  S E R V I C E
#
# -------------------------------------------------------------------

# Configure Torque Security Service
services.SecurityService.classname=org.apache.turbine.services.security.torque.TorqueSecurityService
services.SecurityService.user.manager = org.apache.turbine.services.security.torque.TorqueUserManager

services.SecurityService.user.class =       org.apache.turbine.services.security.torque.TorqueUser
services.SecurityService.group.class =      org.apache.turbine.services.security.torque.TorqueGroup
services.SecurityService.permission.class = org.apache.turbine.services.security.torque.TorquePermission
services.SecurityService.role.class =       org.apache.turbine.services.security.torque.TorqueRole

services.SecurityService.torque.userPeer.class       = ${package}.om.TurbineUserPeer
services.SecurityService.torque.groupPeer.class      = ${package}.om.TurbineGroupPeer
services.SecurityService.torque.permissionPeer.class = ${package}.om.TurbinePermissionPeer
services.SecurityService.torque.rolePeer.class       = ${package}.om.TurbineRolePeer

# This is the class that implements the ACL interface.
services.SecurityService.acl.class = org.apache.turbine.util.security.TurbineAccessControlList

#
# This is used by the SecurityService to make the password checking
# secure. When enabled, passwords are transformed by a one-way
# function into a sequence of bytes that is base64 encoded.
# It is impossible to guess the plain-text form of the password
# from the representation. When user logs in, the entered password
# is transformed the same way and then compared with stored value.
#
# Default: false
#
services.SecurityService.secure.passwords=false

#
# This property lets you choose what digest algorithm will be used
# for encrypting passwords. Check documentation of your JRE for
# available algorithms.
#
# Default: SHA
#
services.SecurityService.secure.passwords.algorithm=SHA

# -------------------------------------------------------------------
#
#  P O O L  S E R V I C E
#
# -------------------------------------------------------------------

# Default capacity of pools of the Object pooling service.
#
# Default: 128
services.PoolService.pool.capacity = 128

# Class specific capacities used instead of the default if specified.
#
# services.PoolService.pool.capacity.org.apache.turbine.services.rundata.DefaultTurbineRunData=512

# -------------------------------------------------------------------
#
#  F A C T O R Y  S E R V I C E
#
# -------------------------------------------------------------------

# A comma separated list of classloaders (very optional)
#
# Example: org.foo.bar.MyClassLoader, org.ack.joe.YourClassLoader
#
# services.FactoryService.class.loaders=

# Customized factories to be used instead of the default factory.
# E.g. to instantiate XML parsers, SSL sockets, etc., which require
# specific instantiation not supported by the default factory.
# The property name is prefixed with "factory" followed by the
# name of the production class. The value is the class name of
# the factory implementing the Factory interface. The factory
# will be instantiated by using the service itself.
#
# Examples:
#
# services.FactoryService.factory.javax.xml.parsers.DocumentBuilder=org.foo.xml.DomBuilderFactory
# services.FactoryService.factory.javax.xml.parsers.SAXParser=org.foo.xml.SaxParserFactory
# services.FactoryService.factory.java.net.ServerSocket=org.foo.net.SslServerSocketFactory

# -------------------------------------------------------------------
#
#  I N T A K E   S E R V I C E
#
# -------------------------------------------------------------------

# The location of the xml file specifying valid inputs
#
# If you need to define multiple definition files, you can should
# seperate them with commas.
#
# Default: WEB-INF/conf/intake.xml
#
services.IntakeService.xml.path=WEB-INF/conf/${turbine_intake_file}

# This file is used to cache the XML definitions after they are
# parsed.  It provides for a small performance gain on startup.
#
# Note: Even if you have multiple XML definition files, you will
# only need one serialization file!
#
# Default: WEB-INF/appData.ser
#
services.IntakeService.serialize.path=WEB-INF/appData.ser

# --------------------------------------------------------------------
#
# P A R A M E T E R  P A R S E R
#
# --------------------------------------------------------------------
#
# This variable controls the case folding applied to URL variable
# names.
#
# Allowed values: none, lower, upper
# Default: lower
#

url.case.folding=lower

# -------------------------------------------------------------------
#
#  A V A L O N   C O M P O N E N T   S E R V I C E
#
# -------------------------------------------------------------------
# Components implementing the Avalon lifecycle interfaces can be loaded,
# configured and initialized by Turbine
# -------------------------------------------------------------------

#
# Name and location to the configuration file for the components.
#
services.AvalonComponentService.containerConfiguration = WEB-INF/conf/containerConfiguration.xml

# -------------------------------------------------------------------
#
#  A D D I T I O N A L  P R O P E R T I E S
#
# -------------------------------------------------------------------
# The full path name to an additional properties file. Properties in
# this file will be included in this property set. Duplicate name
# values will be replaced, so be careful.
#
# Default: none
# -------------------------------------------------------------------
