#*
# 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 2 - L O G G I N G
#
#  log4j2 may loads automatically if found on classpath, cf. https://logging.apache.org/log4j/2.x
#
# -------------------------------------------------------------------
log4j2.file = log4j2.xml

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

# -------------------------------------------------------------------
#
#  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 explicitly added here, it will be added to the
# end.
#
# Default: org.apache.turbine.modules
# -------------------------------------------------------------------

module.packages=${package}.modules,${package}.flux.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=LoginUserIntake

# 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

#
# session.timeout is no longer a property that is honored
# by the Turbine configuration. If you need to adjust your 
# session timeout, please update the web.xml configuration file
# for setting application wide timeout values
#

# 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.
#  
# Check that the encoding valve is active in turbine-classic-pipeline.xml 
# if you are not seeing the expected behavior.
# 
# 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.SecurityService.classname=org.apache.turbine.services.security.DefaultSecurityService
services.UIService.classname = org.apache.turbine.services.ui.TurbineUIService
services.VelocityService.classname=org.apache.turbine.services.velocity.TurbineVelocityService
services.JsonRpcService.classname=org.apache.turbine.services.jsonrpc.TurbineJsonRpcService
services.SchedulerService.classname=org.apache.turbine.services.schedule.QuartzSchedulerService

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

tool.request.related=${package}.services.pull.RelatedTool

# This is a tool that allows access to the scheduler service.
# tool.request.scheduler=org.apache.turbine.services.schedule.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=page.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

# Flux tool
tool.request.flux=${package}.flux.tools.FluxTool

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

# 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.input.encoding=UTF-8

#
# Class Path Loader, Turbine jar
services.VelocityService.velocimacro.library = macros/TurbineMacros.vm,macros/applicationMacros.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/app,/templates/flux
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

# Upgrading from Velocity 1.7.x to Velocity 2.0.x
services.VelocityService.runtime.conversion.handler = none
services.VelocityService.space.gobbling = bc
services.VelocityService.directive.if.emptycheck = false


# -------------------------------------------------------------------
#
#  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 initialized.  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.DefaultSecurityService
services.SecurityService.user.manager = org.apache.turbine.services.security.DefaultUserManager

services.SecurityService.user.class=org.apache.fulcrum.security.model.turbine.entity.impl.TurbineUserImpl
# define custom wrapper
services.SecurityService.wrapper.class = ${package}.wrapper.TurbineUserWrapper


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

# Required to enable the flux library
include=flux.properties
