################################################################################
# FULL TAP CONFIGURATION FILE #
# #
# TAP Version: 2.3 #
# Date: 20 March. 2019 #
# Author: Gregory Mantelet (CDS;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 = CDS
# [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), MySQL (no spatial
# extension) and H2 (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, h2, 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
# [OPTIONAL]
# If enabled, this option lets automatically try fixing a query whose parsing
# failed because of a token error. This is particularly useful in the following
# cases:
#
# - when a column/table identifier/alias has an incorrect syntax
# (e.g. `_RAJ2000`, `2mass`)
# - if the name of an ADQL function is used as a column/table identifier/alias
# (e.g. `distance`, `point`, `min`)
# - if the name of a reserved SQL keyword is used as a column/table
# identifier/alias
# (e.g. `public`, `date`, `year`, `user`)
#
# In all these cases, the name/identifier/alias will be surrounded between
# double quotes if the option `fix_on_fail` is enabled.
#
# This feature is also able to fix some incorrect Unicode characters
# (e.g. LaTeX alternatives for underscores, spaces and double/single quotes,
# copy-pasted from a PDF into a TAP query field).
#
# Warning: since this option alters the query provided by the query, it is
# possible that, after fix attempt, the query parses and runs but might
# generate an output different from what was expected. So, if this
# option is enabled, it should made be clear to the user that the TAP
# server might alter the query to make it work.
#
# Note: when an input query is fixed and run successfully, the fixed ADQL query
# is reported in an INFO element named `QUERY_AFTER_AUTO_FIX` inside the
# output VOTable.
#
# Default: fix_on_fail=false
fix_on_fail = false
#############################
# 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).
#
# Note:
# The column dbName in the database TAP_SCHEMA declaring the standard
# TAP_SCHEMA entries (e.g. TAP_SCHEMA.schemas.dbName) is now ignored. Thus,
# only the mapping defined here, in the configuration file, is taken into
# account.
#
# 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').
#
# * slf4j: wrapper for SLF4J (https://www.slf4j.org). All log messages will
# be forwarded to SLF4J. It is up to the implementor to add the
# suitable JAR files in the Java class-path. Exactly two JAR files
# are expected by SLF4J to work as expected:
# - slf4j-api-{version}.jar (the main API)
# - and the slf4j-{binding}-{version}.jar.
# Depending on the chosen SLF4J binding, you may also add another
# JAR file (e.g. Log4J, LogBack, ...) in the Java class-path.
# A configuration file might also be needed. There, it will be
# possible to configure the the following loggers:
# - "tap.service" (general/root purpose log),
# - "tap.service.UWS" (UWS actions),
# - "tap.service.HTTP" (HTTP requests and responses),
# - "tap.service.JOB" (UWS's jobs actions),
# - "tap.service.THREAD" (job's thread actions),
# - "tap.service.TAP" (TAP actions)
# - and "tap.service.DB" (DB actions).
#
# * {...}: 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 by the default
# logger.
#
# 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.
#
# Note: this property is ignored if `logger != default`.
#
# Default: DEBUG (every messages are logged)
min_log_level =
# [OPTIONAL]
# Frequency of the log file rotation performed by the default logger.
# 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 1: this property is ignored if the file manager is not any more an
# extension of uws.service.file.LocalUWSFileManager.
#
# Note 2: this property is ignored if `logger != default`.
#
# 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.
#
# NOTE: Before being stored in the directory file_root_path, it is first
# uploaded in the temporary directory (defined in the JVM ; generally
# `/tmp` on Unix system and `c:\temp` ; it can be changed at start of the
# JVM with the property `java.io.tmpdir`). When the upload is complete,
# the file is finally moved in file_root_path.
#
# Allowed values: true, false (default).
upload_enabled = false
# [OPTIONAL]
# Maximum limit for the number of uploaded records that can be inserted inside
# the database.
#
# 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.
#
# IMPORTANT NOTE: the specified limit will be checked at a different step of
# a query processing in function of its unit.
# If expressed in bytes, the file size will be checked when
# uploading the file on disk. Thus, when the uploading file
# starts to exceed the set limit, it will be no longer uploaded
# and the whole request will be immediately rejected.
# On the contrary, if the limit is expressed in rows, it will
# be tested only when ingesting the whole uploaded file
# (whatever is its size) in the database ; so, after it has been
# uploaded. As soon as, the rows insertion in the database
# exceeds the limit, the query is rejected.
# Consequently, a very huge file could potentially be
# completely uploaded before being rejected if this property is
# expressed in rows. Then, it is very important to set the
# property `upload_max_request_size` limiting the size of a
# whole HTTP request in order to better preserve your machine
# from running out of disk space.
#
# Default: upload_max_db_limit=1000000r (i.e. 1 million rows)
upload_max_db_limit = 1000000r
# [OPTIONAL]
# Maximum allowed size for a whole HTTP multipart request (i.e. request with
# uploads).
#
# 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.
#
# A negative value means there is no restriction on this limit. Float values are
# not allowed.
#
# Warning: It is highly recommended to set this property in order to prevent
# exceeding the disk storage space/quota (especially if
# `upload_max_db_limit` is not set or is set in rows).
#
# Default: upload_max_request_size=250MB
upload_max_request_size = 250MB
# [OPTIONAL ; DEPRECATED since v2.3]
# Default limit for the number of uploaded records that can be inserted inside
# the database.
#
# This property is DEPRECATED. You should use `upload_max_db_limit` instead.
# If it is set anyway, its value will be used as value for
# `upload_max_db_limit` ONLY IF this latter is not set.
#
# Default: upload_default_db_limit=-1 (i.e. unlimited)
upload_default_db_limit = -1
# [OPTIONAL ; DEPRECATED since v2.3]
# Maximum allowed size for the uploaded file.
#
# This property is DEPRECATED. You should use `upload_max_db_limit` with a value
# expressed in bytes if you wanted to limit the size of each uploaded file, or
# `upload_max_request_size` if your goal was to limit the input HTTP request
# size. If it is set anyway, its value will be used as value for
# `upload_max_request_size` ONLY IF this latter is not set.
#
# Default: upload_max_file_size=-1 (i.e. unlimited)
upload_max_file_size = -1
#######################
# 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],
# [fct_signature, className] or [fct_signature, className, description].
# 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. description is the human description of the
# function to be displayed in the /capabilities of the TAP service. It must be
# written between double quotes.
#
# Example: udfs = [ivo_healpix_index(hpxOrder integer, ra double, dec double)
# -> bigint, {adql.query.operand.function.healpix.HealpixIndex}
# , "Compute the index of the \"Healpix cell\" containing the
# specified position at the given Healpix order."],
# [trim(txt String) -> String],
# [newFct(x double)->double, {apackage.MyNewFunction}],
# [random() -> DOUBLE,,"Generate a random number."]
#
# 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 =