#*
# 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. '\,')
#
# -------------------------------------------------------------------

# -------------------------------------------------------------------
#
#  P I P E L I N E
#
# -------------------------------------------------------------------
pipeline.default.descriptor = WEB-INF/conf/turbine-classic-pipeline.xml

# -------------------------------------------------------------------
#
#  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.TurbineYaafiComponentService

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.PullService.classname=org.apache.turbine.services.pull.TurbinePullService
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

# -------------------------------------------------------------------
#
#  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.fulcrum.parser.DefaultParameterParser
services.RunDataService.default.cookie.parser=org.apache.fulcrum.parser.DefaultCookieParser

# -------------------------------------------------------------------
#
#  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.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

# -------------------------------------------------------------------
#
#  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

# -------------------------------------------------------------------
#
#  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

# -------------------------------------------------------------------
#
#  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 = #var("applicationRoot")/WEB-INF/conf/containerConfiguration.xml
services.AvalonComponentService.earlyInit= true

# -------------------------------------------------------------------
#
#  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
# -------------------------------------------------------------------
