################################################################################
# FULL TAP CONFIGURATION FILE #
# #
# TAP Version: 2.1 #
# Date: 11 Feb. 2018 #
# Author: Gregory Mantelet (ARI) #
# #
################################################################################
###########
# GENERAL #
###########
# [OPTIONAL]
# This property lets set a custom home page.
#
# 4 different kinds of value are accepted:
# * nothing (default): the default home page provided by the library (just
# a simple HTML page displaying a list of all available
# TAP resources).
# * name or relative path of a file: this method MUST be chosen if the new
# home page is a JSP file. This file MUST
# be inside the directory WebContent of
# your web application.
# * a URI starting with file://: in this method the local file pointed by
# the URI will be merely returned when the
# home page will be requested.
# * a URL: here, a redirection toward this URL will be made at each request
# on the home page
# * a class name: the class name of an extension of tap.resource.HomePage
# which must replace the default home page resource. This
# class MUST have at least one constructor with exactly one
# parameter not NULL of type tap.resource.TAP.
home_page =
# [OPTIONAL]
# MIME type of the service home page.
#
# This property is used only if the specified "home_page" is a local file path
# (i.e. if "home_page=file://...").
#
# If no value is provided "text/html" will be set by default.
#
# Default: text/html
home_page_mime_type =
############
# PROVIDER #
############
# [OPTIONAL]
# Name of the provider of the TAP Service.
provider_name = ARI
# [OPTIONAL]
# Description of the TAP Service.
service_description = My TAP Service is so amazing! You should use it with your favorite TAP client.
############
# DATABASE #
############
# [MANDATORY]
# Method to use in order to create database connections.
#
# Only two values are supported:
# * jndi: database connections will be supplied by a Datasource whose the
# JNDI name must be given. This method may propose connection
# pooling in function of the datasource configuration.
# * jdbc: the library will create itself connections when they will be
# needed thanks to the below JDBC parameters. This method does not
# propose any connection pooling.
#
# Allowed values: jndi, jdbc.
database_access =
# [MANDATORY]
# The translator to use in order to translate ADQL to a SQL compatible with the
# used DBMS and its spatial extension.
#
# The TAP library supports only Postgresql (no spatial extension),
# PostgreSQL+PgSphere, SQLServer (no spatial extension) and MySQL (no spatial
# extension) for the moment. But you can provide your own SQL translator (even
# if it does not have spatial features), by providing the name of a class
# (within brackets: {...}) that implements ADQLTranslator (for instance:
# {apackage.MyADQLTranslator}) and which have at least an empty constructor.
#
# Allowed values: postgres, pgsphere, sqlserver, mysql, a class name
sql_translator = postgres
# [OPTIONAL]
# Size of result blocks to fetch from the database when a ADQL query is executed
# in Synchronous mode.
#
# Rather than fetching a query result in a whole, it may be possible to specify
# to the database that results may be retrieved by blocks whose the size can be
# specified with this property. If supported by the DBMS and the JDBC driver,
# this feature may help sparing memory and avoid too much waiting time from the
# TAP /sync users (and thus, avoiding some HTTP client timeouts).
#
# A negative or null value means that the default value of the JDBC driver will
# be used. Generally, it means that the database must wait to have collected all
# data before sending them to the library.
#
# Default: sync_fetch_size=10000
sync_fetch_size = 10000
# [OPTIONAL]
# Size of result blocks to fetch from the database when an ADQL query is
# executed in Asynchronous mode.
#
# Rather than fetching a query result in a whole, it may be possible to specify
# to the database that results may be retrieved by blocks whose the size can be
# specified with this property. If supported by the DBMS and the JDBC driver,
# this feature may help sparing memory.
#
# A negative or null value means that the default value of the JDBC driver will
# be used. Generally, it means that the database must wait to have collected all
# data before sending them to the library.
#
# Default: async_fetch_size=100000
async_fetch_size=100000
#############################
# IF DATABASE ACCESS = JNDI #
#############################
# [MANDATORY]
# JNDI name of the datasource pointing toward the database to use.
# It should be defined in the web application (e.g. in the META-INF/context.xml
# file in tomcat).
datasource_jndi_name =
#############################
# IF DATABASE ACCESS = JDBC #
#############################
# [MANDATORY]
# JDBC driver URL pointing toward the database to use.
#
# Note: The username, password or other parameters may be included in it, but
# in this case, the corresponding properties should leave empty or not
# provided at all.
jdbc_url =
# [OPTIONAL]
# JDBC driver path.
#
# By default, it is guessed in function of the database name provided in the
# jdbc_url property. It MUST be provided if another DBMS is used or if the
# JDBC driver path does not match the following ones:
# * Oracle : oracle.jdbc.OracleDriver
# * PostgreSQL: org.postgresql.Driver
# * MySQL : com.mysql.jdbc.Driver
# * SQLite : org.sqlite.JDBC
# * H2 : org.h2.Driver
#jdbc_driver =
# [MANDATORY]
# [Mandatory if the username is not already provided in jdbc_url]
#
# Username used to access to the database.
db_username =
# [MANDATORY]
# [Mandatory if the password is not already provided in jdbc_url]
#
# Password used by db_username to access to the database.
#
# Note: No password encryption can be done in this configuration file for the
# moment.
db_password =
############
# METADATA #
############
# [MANDATORY]
# Metadata fetching method.
#
# The value of this key defines the way the library will get the list of all
# schemas, tables and columns to publish and all their metadata (e.g. utype,
# description, type, ...).
#
# In its current state, the library proposes three methods:
# 1/ Parse a TableSet XML document and load its content into the database
# schema TAP_SCHEMA (note: this schema is first erased and rebuilt by the
# library).
# 2/ Get all metadata from the database schema TAP_SCHEMA.
# 3/ Build yourself the metadata of your service by creating an extension of
# tap.metadata.TAPMetadata. This extension must have either an empty
# constructor or a constructor with exactly 3 parameters of type
# UWSFileManager, TAPFactory and TAPLog ; if both constructor are
# provided, only the one with parameters will be used.
#
# For the two first methods, it is also possible to specify an extension of
# tap.metadata.TAPMetadata which will wrap a default TAPMetadata objects created
# using the specified methods (i.e. XML tableset or TAP_SCHEMA). In this way, it
# is possible to get the "default" metadata from an XML file or the database
# and then add/remove/modify some of them, or to change the output of the
# 'tables' resource. The extension of tap.metadata.TAPMetadata must have at
# least one constructor with the following parameters: (TAPMetadata) or
# (TAPMetadata, UWSFileManager, TAPFactory, TAPLog).
#
# Allowed values: xml, xml {myTAPMetadata}, db, db {myTAPMetadata}
# or a full class name (between {}).
metadata =
# [MANDATORY]
# [Mandatory if the value of "metadata" is "xml".]
#
# Local file path to the TableSet XML document.
#
# The XML document must implement the schema TableSet defined by VODataService.
# The file path must be either an absolute local file path or a file path
# relative to WebContent (i.e. the web application directory in which there are
# WEB-INF and META-INF).
metadata_file =
# [OPTIONAL]
# [ONLY USED IF metadata = db]
#
# Mapping between TAP_SCHEMA ADQL names and their names in the database.
#
# Any property named exactly (case sensitive) like TAP_SCHEMA items will be
# considered as a mapping between its ADQL name and its DB name.
#
# Examples: "TAP_SCHEMA = TAP_SCHEMA2"
# or "TAP_SCHEMA.columns.column_name = name"
#
# The property value MUST be NOT qualified. Just the item name is required.
# The value will be used as provided (with the same case).
#
# TAP_SCHEMA =
#########
# FILES #
#########
# [MANDATORY]
# Type of the file manager.
#
# Accepted values are: local (to manage files on the local system). You can also
# add another way to manage files by providing the name (within brackets: {...})
# of a class implementing TAPFileManager and having at least one constructor
# with only a java.util.Properties parameter.
#
# Allowed values: local, a class name.
file_manager = local
# [MANDATORY]
# Local file path of the directory in which all TAP files (logs, errors, job
# results, backup, ...) must be.
#
# The file path must be either an absolute local directory path or a directory
# path relative to WebContent (i.e. the web application directory in which there
# are WEB-INF and META-INF).
file_root_path =
# [OPTIONAL]
# Tells whether a directory should be created for each user.
#
# If yes, the user directory will be named with the user ID. In this directory,
# there will be error files, job results and it may be the backup file of the
# user.
#
# Allowed values: true (default), false.
directory_per_user = true
# [OPTIONAL]
# Tells whether user directories must be grouped.
#
# If yes, directories are grouped by the first letter found in the user ID.
#
# Allowed values: true (default), false.
group_user_dir = true
# [OPTIONAL]
# The default period (in seconds) to keep query results.
#
# The prefix "default" means here that this value is put by default by the TAP
# Service if the client does not provide a value for it.
#
# The default period MUST be less or equals to the maximum retention period. If
# this rule is not respected, the default retention period is set immediately to
# the maximum retention period.
#
# A negative or null value means there is no restriction on the default
# retention period: job results will be kept forever. Float values are not
# allowed.
#
# Default: 0 (results kept forever).
default_retention_period = 0
# [OPTIONAL]
# The maximum period (in seconds) to keep query results.
#
# The prefix "max" means here that the client can not set a retention period
# greater than this one.
#
# The maximum period MUST be greater or equals to the default retention period.
# If this rule is not respected, the default retention period is set immediately
# to the maximum retention period.
#
# A negative or null value means there is no restriction on the maximum
# retention period: the job results will be kept forever. Float values are not
# allowed.
#
# Default: 0 (results kept forever).
max_retention_period = 0
#############
# LOG FILES #
#############
# [OPTIONAL]
# Logging method to use.
#
# Only two possibilities are already implemented.
# * default: default logger provided by the library. Any logged message
# will be appended in the file 'service.log' inside the root
# directory of this service (cf property 'file_root_path').
# * {...}: a custom logger. A class name MUST be provided
# (between {...}). The specified class must reference
# an implementation of tap.log.TAPLog. This implementation
# must have at least one constructor with a single parameter of
# type uws.service.file.UWSFileManager.
#
# Default: 'default' (i.e. tap.log.DefaultTAPLog)
logger =
# [OPTIONAL]
# Minimum level that a message must have in order to be logged.
#
# 5 possible values:
# * DEBUG: every messages are logged.
# * INFO: every messages EXCEPT DEBUG are logged.
# * WARNING: every messages EXCEPT DEBUG and INFO are logged.
# * ERROR: only ERROR and FATAL messages are logged.
# * FATAL: only FATAL messages are logged.
#
# Default: DEBUG (every messages are logged)
min_log_level =
# [OPTIONAL]
# Frequency of the log file rotation. That's to say, logs will be written in a
# new file after this period. This avoid having too big log files. Old log files
# are renamed so that highlighting its logging period.
#
# The frequency string must respect the following syntax:
# 'D' hh mm: daily schedule at hh:mm
# 'W' dd hh mm: weekly schedule at the given day of the week
# (1:sunday, 2:monday, ..., 7:saturday) at hh:mm
# 'M' dd hh mm: monthly schedule at the given day of the month at hh:mm
# 'h' mm: hourly schedule at the given minute
# 'm': scheduled every minute (for completness :-))
#
# Where: hh = integer between 0 and 23,
# mm = integer between 0 and 59,
# dd (for 'W') = integer between 1 and 7
# (1:sunday, 2:monday, ..., 7:saturday),
# dd (for 'M') = integer between 1 and 31.
#
# Warning: The frequency type is case sensitive! Then you should particularly
# pay attention at the case when using the frequency types 'M'
# (monthly) and 'm' (every minute).
#
# Note: this property is ignored if the file manager is not any more an
# extension of uws.service.file.LocalUWSFileManager.
#
# Default: D 0 0 (daily at midnight)
log_rotation =
##############
# UWS_BACKUP #
##############
# [OPTIONAL]
# Frequency at which the UWS service (that's to say, all its users and jobs)
# must be backuped.
#
# Allowed values: never (no backup will never be done ; default), user_action
# (each time a user does a writing action, like creating or
# execution a job), a time (must be positive and not null) in
# milliseconds.
#
# The value user_action can be used ONLY IF backup_by_user=true.
#
# Default: never
backup_frequency = never
# [OPTIONAL]
# Tells whether the backup must be one file for every user (false), or one file
# for each user (true). This second option should be chosen if your TAP Service
# is organizing its files by user directories ; see the property
# directory_per_user.
#
# This option can be enabled ONLY IF a user identification method is provided ;
# see property user_identifier.
#
# Default: false
backup_by_user = false
#####################
# ASYNCHRONOUS JOBS #
#####################
# [OPTIONAL]
# Maximum number of asynchronous jobs that can run simultaneously.
#
# A negative or null value means there is no restriction on the number of
# running asynchronous jobs.
#
# Default: there is no restriction => max_async_jobs=0.
max_async_jobs = 0
###################
# QUERY_EXECUTION #
###################
# [OPTIONAL]
# Default time (in milliseconds) for query execution.
#
# The prefix "default" means here that the execution duration will be this one
# if the client does not set one.
#
# The default duration MUST be less or equals to the maximum execution duration.
# If this rule is not respected, the default execution duration is set
# immediately to the maximum execution duration.
#
# A negative or null value means there is no restriction on the default
# execution duration: the execution could never end. Float values are not
# allowed.
#
# Default: there is no restriction => default_execution_duration=0.
default_execution_duration = 0
# [OPTIONAL]
# Maximum time (in milliseconds) for query execution.
#
# The prefix "max" means here that the client can not set a time greater than
# this one.
#
# The maximum duration MUST be greater or equals to the default execution
# duration. If this rule is not respected, the default execution duration is set
# immediately to the maximum execution duration.
#
# A negative or null value means there is no restriction on the maximum
# execution duration: the execution could never end. Float values are not
# allowed.
#
# Default: there is no restriction => max_execution_duration=0.
max_execution_duration = 0
##########
# OUTPUT #
##########
# [OPTIONAL]
# Comma separated list of output formats for query results.
#
# Allowed values are: votable (or 'vot'), fits, text, csv, tsv, json and html.
#
# The VOTable format may be more detailed with the following syntax:
# (serialization,version):mime_type:short_mime_type.
# The MIME type part and the parameters part may be omitted
# (e.g. votable:application/xml:votable , votable(td,1.3)]).
# Empty string values are allowed for each values (e.g. votable():: ,
# votable(td)::votable).
#
# The default VOTable format (i.e. serialization and version) is the one defined
# with the short form `votable`. It is be default set to
# `vot(binary,1.3)::votable` (see the special value `ALL` below). To change it
# just define a VOTable format with the short form `votable`.
#
# It is also possible to define a custom Separated Value format, different from
# CSV and TSV, thanks to the following syntax:
# sv(separator):mime_type:short_mime_type. On the contrary to the VOTable
# syntax, the parameter (i.e. separator) MUST BE provided. The MIME type part
# may be omitted ; then the MIME type will be set by default to text/plain.
#
# There is finally a last possible value: a class name of a class implementing
# OutputFormat and having at least one constructor with exactly one parameter of
# type tap.ServiceConnection.
#
# The special value "ALL" will select all formats provided by the library. It is
# equivalent to the following:
# output_formats = vot(binary,1.3)::votable, vot(td,1.3)::votable/td,
# vot(binary,1.3)::votable/b, vot(binary2,1.3)::votable/b2,
# vot(fits,1.3)::votable/fits, fits, csv, tsv, text, html,
# json
#
# Default: ALL
output_formats = ALL
# [OPTIONAL]
# Default limit for the result output.
#
# The prefix "default" means here that this value will be set if the client does
# not provide one.
#
# This limit can be expressed in only one unit: rows.
#
# A negative value means there is no restriction on this limit. Float values are
# not allowed.
#
# Obviously this limit MUST be less or equal than output_max_limit.
#
# Default: there is no restriction: output_default_limit=-1
output_default_limit = -1
# [OPTIONAL]
# Maximum limit for the result output. The prefix "max" means here that the
# client can not set a limit greater than this one.
#
# This limit can be expressed in only one unit: rows.
#
# A negative value means there is no restriction on this limit. Float values are
# not allowed.
#
# Obviously this limit MUST be greater or equal than output_default_limit.
#
# Default: there is no restriction => output_max_limit=-1
output_max_limit = -1
##########
# UPLOAD #
##########
# [OPTIONAL]
# Tells whether the Upload must be enabled.
#
# If enabled, files can be uploaded in the file_root_path, the corresponding
# tables can be added inside the UPLOAD_SCHEMA of the database, queried and then
# deleted.
#
# Allowed values: true, false (default).
upload_enabled = false
# [OPTIONAL]
# Default limit for the number of uploaded records that can be inserted inside
# the database.
#
# The prefix "default" means here that this value will be set if the client does
# not provide one.
#
# This limit can be expressed with 2 types: rows or bytes. For rows, you just
# have to suffix the value by a "r" (upper- or lower-case), with nothing (by
# default, nothing will mean "rows"). For bytes, you have to suffix the numeric
# value by "b", "kb", "Mb" or "Gb". Here, unit is case sensitive (except for the
# last character: "b"). No other storage unit is allowed.
#
# A negative value means there is no restriction on this limit. Float values are
# not allowed.
#
# Obviously this limit MUST be less or equal than upload_max_db_limit.
#
# Default: there is no restriction: upload_default_db_limit=-1
upload_default_db_limit = -1
# [OPTIONAL]
# Maximum limit for the number of uploaded records that can be inserted inside
# the database.
#
# The prefix "max" means here that the client can not set a limit greater than
# this one.
#
# This limit can be expressed with 2 types: rows or bytes. For rows, you just
# have to suffix the value by a "r" (upper- or lower-case), with nothing (by
# default, nothing will mean "rows"). For bytes, you have to suffix the numeric
# value by "b", "kb", "Mb" or "Gb". Here, unit is case sensitive (except for the
# last character: "b"). No other storage unit is allowed.
#
# A negative value means there is no restriction on this limit. Float values are
# not allowed.
#
# Obviously this limit MUST be greater or equal than upload_default_db_limit.
#
# Default: there is no restriction: upload_max_db_limit=-1
upload_max_db_limit = -1
# [OPTIONAL]
# Maximum allowed size for the uploaded file.
#
# This limit MUST be expressed in bytes. Thus, you have to suffix the numeric
# value by "B", "kB", "MB" or "GB". Here, unit is case sensitive. No other
# storage unit is allowed.
#
# Warning: When the upload is enabled, there must be a maximum file size. Here,
# no "unlimited" value is possible ; 0 and any negative value are not
# allowed.
#
# Warning: In function of the chosen upload_max_db_limit type,
# upload_max_file_size MUST be greater in order to figure out the file
# metadata part.
#
# Default: upload_max_file_size=2147483647B (~2GB ; maximum possible value)
upload_max_file_size = 2147483647B
#######################
# USER IDENTIFICATION #
#######################
# [OPTIONAL]
# Class to use in order to identify a user of the TAP service.
#
# The same instance of this class will be used for every request sent to the
# service.
#
# The value of this property MUST be a class name (with brackets: {...}) of a
# class implementing the interface uws.service.UserIdentifier. This class MUST
# have one of its constructors with no parameter.
#
# Default: no identification is performed => all users are then anonymous and
# their jobs can be seen by everybody.
user_identifier =
######################
# COORDINATE SYSTEMS #
######################
# [OPTIONAL]
# Comma-separated list of all allowed coordinate systems.
#
# Each item of the list be a kind of regular expression respecting the following
# syntax: Frame RefPos Flavor. In other words, it must be a string of exactly 3
# parts. Each of this part is a single value, a list of allowed values
# or a * meaning all values. A list of values must be indicated between
# parenthesis and values must be separated by a pipe.
#
# Allowed values for Frame are: ICRS, FK4, FK5, J2000, ECLIPTIC, GALACTIC
# and UNKNOWNFRAME.
# Allowed values for RefPos are: BARYCENTER, GEOCENTER, HELIOCENTER, LSR,
# TOPOCENTER, RELOCATABLE and UNKNOWNREFPOS.
# Allowed values for Flavor are: CARTESIAN2, CARTESIAN3 and SPHERICAL2.
#
# If the special value NONE is given instead of a list of allowed coordinate
# systems, no coordinate system will be allowed. And if the list is empty, any
# coordinate system will be allowed.
#
# By default, any coordinate system is allowed.
coordinate_systems =
##############
# GEOMETRIES #
##############
# [OPTIONAL]
# Comma-separated list of all allowed geometries.
#
# Each item of the list must be the name (whatever is the case) of an ADQL
# geometrical function (e.g. INTERSECTS, COORDSYS, POINT) to allow.
# If the list is empty (no item), all functions are allowed. And if the special
# value NONE is given, no ADQL function will be allowed.
#
# Default: all ADQL geometrical functions are allowed.
geometries =
#################################
# USER DEFINED FUNCTIONS (UDFs) #
#################################
# [OPTIONAL]
# Comma-separated list of all allowed UDFs (User Defined Functions).
#
# Each item of the list must have the following syntax: [fct_signature] or
# [fct_signature, className]. fct_function is the function signature. Its syntax
# is the same as in TAPRegExt. className is the name of a class extending
# UserDefinedFunction. An instance of this class will replace any reference of a
# UDF written in an ADQL function with the associated signature. A class name
# must be specified if the function to represent has a signature (and more
# particularly a name) different in ADQL and in SQL.
#
# If the list is empty (no item), all unknown functions are forbidden. And if
# the special value ANY is given, any unknown function is allowed ; consequently
# the unknown ADQL functions will be translated into SQL as they are in ADQL.
#
# Default: no unknown function is allowed.
udfs =
########################
# ADDITIONAL RESOURCES #
########################
# [OPTIONAL]
# URL of the XSLT stylesheet to link with the XML output of /capabilities.
#
# By default, no XSLT stylesheet is defined.
capabilities_stylesheet =
# [OPTIONAL]
# URL of the XSLT stylesheet to link with the XML output of /tables.
#
# By default, no XSLT stylesheet is defined.
tables_stylesheet =
# [OPTIONAL]
# This property lets add an /examples endpoint by specifying an
# XHTML-RDFa document listing TAP query examples using the syntax specified by
# TAPNotes 1.0 DALI 1.0.
#
# 3 different kinds of value are accepted:
# * nothing (default): no /examples endpoint.
# * name or relative path of a file: this method MUST be chosen if the
# endpoint content is a JSP file. This file MUST be inside the directory
# WebContent of your web application.
# * URI starting with file://: in this method the local file pointed by the
# URI will be merely returned when the endpoint will be requested.
# * a URL: here, a redirection toward this URL will be made at each request
# on the endpoint
#
# If you want a custom /examples endpoint (i.e. you do not)
# want to forward/redirect to a file/URL), you can create a class which
# implements TAPResource AND VOSIResource. The function getName() must return
# "examples". Then, just append the classpath to the property
# "additional_resources" of the TAP configuration file.
#
# By default, the TAP service does not have any /examples endpoint.
examples =
# [OPTIONAL]
# Comma-separated list of additional TAP resources/end-point.
#
# By default, the following standard TAP resources are already existing: /sync,
# /async, /tables, /capabilities and /availability. With this property, you can
# add a custom resource to your TAP service (e.g. /adqlValidator, /admin).
#
# Each item of the list MUST be the name of a class implementing
# tap.resource.TAPResource. This class MUST have at least one constructor with
# exactly one parameter of type tap.resource.TAP.
#
# The string returned by tap.resource.TAPResource.getName() will be the
# resource name, following the root TAP service URL (e.g. if getName() returns
# "foo", then its access URL will "{tapRoot}/foo"). Then, it is possible to
# replace TAP resources already existing by using the same name (e.g. if
# getName() returns "sync", the /sync resource won't be anymore the default Sync
# resource of this library but your new resource).
#
# By default, this list is empty ; only the standard TAP resources exist.
additional_resources =
######################
# CUSTOM TAP_FACTORY #
######################
# [OPTIONAL]
# Class to use in replacement of the default TAPFactory.
#
# This property must be a class name (given between {...}). It must reference an
# implementation of TAPFactory. This implementation must have at least one
# constructor with exactly one parameter of type ServiceConnection.
#
# It is recommended to extend an existing implementation such as:
# tap.AbstractTAPFactory or tap.config.ConfigurableTAPFactory.
#
# By default, the default TAPFactory (tap.config.ConfigurableTAPFactory) is used
# and may use all properties related to the backup management, the database
# access, the TAP_SCHEMA mapping and the ADQL translation.
tap_factory =