# ***************************************************************************************************************************
# * 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.                                              *
# ***************************************************************************************************************************

#=======================================================================================================================
# Basic configuration file for REST microservices
# Subprojects can use this as a starting point.
#=======================================================================================================================

#=======================================================================================================================
# Jetty settings
#=======================================================================================================================
[Jetty]

# Path of the jetty.xml file used to configure the Jetty server.
config = files/jetty.xml

# Resolve Juneau variables in the jetty.xml file.
resolveVars = true

# Port to use for the jetty server.
# You can specify multiple ports.  The first available will be used.  '0' indicates to try a random port.
# The resulting available port gets set as the system property "availablePort" which can be referenced in the 
# jetty.xml file as "$S{availablePort}" (assuming resolveVars is enabled).
port = 10000,0,0,0

# Optionally specify your servlets here:
#servlets = org.apache.juneau.microservice.jetty.template.RootResources

#=======================================================================================================================
# REST settings
#=======================================================================================================================
[REST]

# Comma-delimited list of key-value pairs that represent locations of static files that can be served up by your @Rest-annotated
# classes.  These are static files that are served up by the servlet under the specified sub-paths.
# For example, given the following setting...
# 	staticFiles = htdocs:my-docs,styles/my-styles
# ...the URI "/servletPath/htdocs/javadoc.css" resolves to the path "/my-docs/javadoc.css".
# This path can be relative to the working directory, classpath root, or package of your resource class.
# Used by the BasicRestConfig interface that defines the following value:
# 	staticFiles="$C{REST/staticFiles}"
staticFiles = htdocs:htdocs

# Stylesheet to use for HTML views.
# Used by the BasicRestConfig interface that defines the following value:
# 	stylesheet="$C{REST/theme,servlet:/htdocs/themes/devops.css}"
theme = servlet:/htdocs/themes/devops.css

# Various look-and-feel settings used in the BasicRestConfig interface.
headerIcon = servlet:/htdocs/images/juneau.png
headerLink = http://juneau.apache.org
footerIcon = servlet:/htdocs/images/asf.png
footerLink = http://www.apache.org
favicon = $C{REST/headerIcon}
head = <link rel='icon' href='$U{$C{REST/favicon}}'/>
header = 
	<a href='$U{$C{REST/headerLink}}'>
		<img src='$U{$C{REST/headerIcon}}' style='position:absolute;top:5;right:5;background-color:transparent;height:30px'/>
	</a>
footer = 
	<a href='$U{$C{REST/footerLink}}'>
		<img src='$U{$C{REST/footerIcon}}' style='float:right;padding-right:20px;height:32px'/>
	</a>

#=======================================================================================================================
# Console settings
#=======================================================================================================================
[Console]

enabled = true

# List of available console commands.
# These are classes that implements ConsoleCommand that allow you to submit commands to the microservice via
# the console.
# When listed here, the implementations must provide a no-arg constructor.
# They can also be provided dynamically by overriding the Microservice.createConsoleCommands() method.
commands = 
	org.apache.juneau.microservice.console.ExitCommand,
	org.apache.juneau.microservice.console.RestartCommand,
	org.apache.juneau.microservice.console.HelpCommand,
	org.apache.juneau.microservice.console.ConfigCommand
	
#=======================================================================================================================
# System properties
#-----------------------------------------------------------------------------------------------------------------------
# These are arbitrary system properties that are set during startup.
#=======================================================================================================================
[SystemProperties]

# Configure Jetty for StdErrLog Logging
# org.eclipse.jetty.util.log.class = org.eclipse.jetty.util.log.StrErrLog

# Configure Jetty to log using java-util logging
org.eclipse.jetty.util.log.class = org.apache.juneau.microservice.jetty.template.JettyLogger

# Jetty logging level
# Possible values:  ALL, DEBUG, INFO, WARN, OFF
org.eclipse.jetty.LEVEL = WARN

derby.stream.error.file = $C{Logging/logDir}/derby-errors.log
