# Unique code of this Data Store Server. Not more than 40 characters.
data-store-server-code = DSS1

root = targets/yeastx

# The root directory of the data store
storeroot-dir = ${root}/store

# The directory where the command queue file is located; defaults to storeroot-dir 
commandqueue-dir = ${root}

# Port
port = 8444

# Session timeout in minutes
session-timeout = 30

# Path to the keystore
keystore.path = dist/etc/openBIS.keystore

use-ssl = false

# Password of the keystore
keystore.password = changeit

# Key password of the keystore
keystore.key-password = changeit

# The check interval (in seconds)
check-interval = 2

# The time-out for clean up work in the shutdown sequence (in seconds).
# Note that that the maximal time for the shutdown sequence to complete can be as large 
# as twice this time.
shutdown-timeout = 2

#�If free disk space goes below value defined here, a notification email will be sent.
# Value must be specified in kilobytes (1048576 = 1024 * 1024 = 1GB). If no high water mark is
# specified or if value is negative, the system will not be watching.
highwater-mark = 1048576

# The URL of the openBIS server
server-url = http://localhost:8888/openbis

# The username to use when contacting the openBIS server
username = etlserver_yeastx

# The password to use when contacting the openBIS server
password = doesnotmatter

# The base URL for Web client access.
download-url = http://localhost:8444

# SMTP properties (must start with 'mail' to be considered).
mail.smtp.host = file://${root}
mail.from = datastore_server@localhost
mail.smtp.user = 
mail.smtp.password = 

yeastx-databaseEngineCode = postgresql
yeastx-basicDatabaseName = metabol
yeastx-databaseKind = dbtest
yeastx-readOnlyGroup = metabol_readonly
yeastx-readWriteGroup = metabol_readwrite
yeastx-scriptFolder = sql

# ---------------------------------------------------------------------------

maintenance-plugins=ds-remover

ds-remover.class = ch.systemsx.cisd.yeastx.etl.MetabolDatabaseUpdater
ds-remover.interval = 10
ds-remover.database.databaseEngineCode = ${yeastx-databaseEngineCode}
ds-remover.database.basicDatabaseName = ${yeastx-basicDatabaseName}
ds-remover.database.databaseKind = ${yeastx-databaseKind}

# ---------------------------------------------------------------------------

# list of additional web servlets which will be exposed
plugin-services = chromatogram-image-download-servlet
# class of the web servlet
chromatogram-image-download-servlet.class = ch.systemsx.cisd.openbis.dss.yeastx.server.EICMLChromatogramGeneratorServlet
# URL which will be mapped to this servlet
chromatogram-image-download-servlet.path = /datastore_server/chromatogram
chromatogram-image-download-servlet.databaseEngineCode = ${yeastx-databaseEngineCode}
chromatogram-image-download-servlet.basicDatabaseName = ${yeastx-basicDatabaseName}
chromatogram-image-download-servlet.databaseKind = ${yeastx-databaseKind}


# ------------------------

# Comma separated names of reporting plugins. Each plugin should have configuration properties prefixed with its name.
reporting-plugins = eicml-chromatograms-reporter, eicml-runs-reporter, eicml-chromatogram-images-reporter

# Label of the plugin which will be shown for the users.
eicml-chromatograms-reporter.label = Show eicML chromatograms
# Comma separated list of dataset type codes which can be handled by this plugin.
eicml-chromatograms-reporter.dataset-types = EICML
# Plugin class specification (together with the list of packages this class belongs to).
eicml-chromatograms-reporter.class = ch.systemsx.cisd.yeastx.eicml.EICMLChromatogramsReporter
# The property file. Its content will be passed as a parameter to the plugin.
eicml-chromatograms-reporter.properties-file = 
eicml-chromatograms-reporter.database.databaseEngineCode = ${yeastx-databaseEngineCode}
eicml-chromatograms-reporter.database.basicDatabaseName = ${yeastx-basicDatabaseName}
eicml-chromatograms-reporter.database.databaseKind = ${yeastx-databaseKind}
eicml-chromatograms-reporter.database.readOnlyGroup = ${yeastx-readOnlyGroup}
eicml-chromatograms-reporter.database.readWriteGroup = ${yeastx-readWriteGroup}
eicml-chromatograms-reporter.database.scriptFolder = ${yeastx-scriptFolder}

# Label of the plugin which will be shown for the users.
eicml-runs-reporter.label = Show eicML runs
# Comma separated list of dataset type codes which can be handled by this plugin.
eicml-runs-reporter.dataset-types = EICML
# Plugin class specification (together with the list of packages this class belongs to).
eicml-runs-reporter.class = ch.systemsx.cisd.yeastx.eicml.EICMLRunsReporter
# The property file. Its content will be passed as a parameter to the plugin.
eicml-runs-reporter.properties-file = 
eicml-runs-reporter.database.databaseEngineCode = ${yeastx-databaseEngineCode}
eicml-runs-reporter.database.basicDatabaseName = ${yeastx-basicDatabaseName}
eicml-runs-reporter.database.databaseKind = ${yeastx-databaseKind}

# Label of the plugin which will be shown for the users.
eicml-chromatogram-images-reporter.label = Show eicML chromatogram images
# Comma separated list of dataset type codes which can be handled by this plugin.
eicml-chromatogram-images-reporter.dataset-types = EICML
# Plugin class specification (together with the list of packages this class belongs to).
eicml-chromatogram-images-reporter.class = ch.systemsx.cisd.yeastx.eicml.EICMLChromatogramImagesReporter
# The property file. Its content will be passed as a parameter to the plugin.
eicml-chromatogram-images-reporter.properties-file = 
eicml-chromatogram-images-reporter.database.databaseEngineCode = ${yeastx-databaseEngineCode}
eicml-chromatogram-images-reporter.database.basicDatabaseName = ${yeastx-basicDatabaseName}
eicml-chromatogram-images-reporter.database.databaseKind = ${yeastx-databaseKind}
eicml-chromatogram-images-reporter.database.readOnlyGroup = ${yeastx-readOnlyGroup}
eicml-chromatogram-images-reporter.database.readWriteGroup = ${yeastx-readWriteGroup}
eicml-chromatogram-images-reporter.database.scriptFolder = ${yeastx-scriptFolder}

# ------------------------

# The period of no write access that needs to pass before an incoming data item is considered 
# complete and ready to be processed (in seconds) [default: 300]. 
# Valid only when auto-detection method is used to determine if an incoming data are ready to be processed.
quiet-period = 3

# ------------------------

inputs=main-thread, eicml-uploader, fiaml-uploader, quantml-uploader

# Globally used separator character which separates entities in a data set file name 
data-set-file-name-entity-separator = .

# ---------------------------------------------------------------------------
# 'main-thread' thread configuration
# ---------------------------------------------------------------------------

# The directory to watch for incoming data.
main-thread.incoming-dir = ${root}/incoming

# Determines when the incoming data should be considered complete and ready to be processed.
# Allowed values: 
#  - auto-detection - when no write access will be detected for a specified 'quite-period'
#  - marker-file		- when an appropriate marker file for the data exists. 
# The default value is 'marker-file'.
main-thread.incoming-data-completeness-condition = auto-detection
main-thread.incoming-dir.format = 
main-thread.reprocess-faulty-datasets = true

sample-name-property-code = samplename
experiment-name-property-code = name
file-name-property-code = file_name

gain-write-access-script = ../datastore_server_yeastx/takeCifsOwnershipRecursive.sh

main-thread.dataset-handler = ch.systemsx.cisd.yeastx.etl.BatchDataSetHandler
main-thread.dataset-handler.preprocessing-script = ${gain-write-access-script}
main-thread.dataset-handler.preprocessing-script-max-retries = 4
main-thread.dataset-handler.preprocessing-script-failure-interval = 3
main-thread.dataset-handler.unique-sample-name-property-code = ${sample-name-property-code}
main-thread.dataset-handler.unique-experiment-name-property-code = ${experiment-name-property-code}

# The extractor class to use for code extraction
main-thread.data-set-info-extractor = ch.systemsx.cisd.yeastx.etl.BatchDataSetInfoExtractor
main-thread.data-set-info-extractor.file-name-property-code = ${file-name-property-code}
main-thread.data-set-info-extractor.unique-sample-name-property-code = ${sample-name-property-code}
main-thread.data-set-info-extractor.unique-experiment-name-property-code = ${experiment-name-property-code}

# The extractor class to use for type extraction
main-thread.type-extractor = ch.systemsx.cisd.yeastx.etl.TypeExtractorYeastX
# comma separated list of mappings from type to extensions, e.g.:
# file-type1: file-extension1 file-extension2, file-type2: file-extension3"
# It is assumed that for each file extension a dataset type with the same name is defined in openBIS.
# The corresponding file types have to be defined in openBIS as well.
# Files with unspecified extensions will have the file type and dataset type UNKNOWN in openBIS. 
main-thread.type-extractor.file-types = PDF: pdf, MATLAB: mat, ARCHIVE: zip, XML: eicml fiaml mzxml

# The storage processor (IStorageProcessor implementation)
main-thread.storage-processor = ch.systemsx.cisd.yeastx.etl.StorageProcessorWithDropboxes
main-thread.storage-processor.eicml-dropbox-dir = ${root}/dropbox-eicml
main-thread.storage-processor.fiaml-dropbox-dir = ${root}/dropbox-fiaml
main-thread.storage-processor.entity-separator = .
main-thread.storage-processor.processor = ch.systemsx.cisd.yeastx.etl.StorageProcessorWithMLUploader
main-thread.storage-processor.processor.unique-sample-name-property-code = ${sample-name-property-code}
main-thread.storage-processor.processor.unique-experiment-name-property-code = ${experiment-name-property-code}
main-thread.storage-processor.processor.database.databaseEngineCode = ${yeastx-databaseEngineCode}
main-thread.storage-processor.processor.database.basicDatabaseName = ${yeastx-basicDatabaseName}
main-thread.storage-processor.processor.database.databaseKind = ${yeastx-databaseKind}
main-thread.storage-processor.processor.processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor

# ---------------------------------------------------------------------------
# plugin properties for the thread which uploads eicML files
# ---------------------------------------------------------------------------

# The directory to watch for incoming data.
eicml-uploader.incoming-dir = ${root}/incoming-eicml
eicml-uploader.incoming-data-completeness-condition = auto-detection
eicml-uploader.incoming-dir.format = 
eicml-uploader.reprocess-faulty-datasets = false

# The extractor class to use for code extraction
eicml-uploader.data-set-info-extractor = ch.systemsx.cisd.etlserver.DataSetInfoExtractorWithFileNameProperty
eicml-uploader.data-set-info-extractor.extractor = ch.systemsx.cisd.etlserver.DefaultDataSetInfoExtractor
eicml-uploader.data-set-info-extractor.extractor.file-name-property-code = ${file-name-property-code}
eicml-uploader.data-set-info-extractor.extractor.index-of-experiment-identifier = 0
eicml-uploader.data-set-info-extractor.extractor.index-of-parent-data-set-codes = 1
eicml-uploader.data-set-info-extractor.extractor.entity-separator = ${data-set-file-name-entity-separator}

# The extractor class to use for type extraction
eicml-uploader.type-extractor = ch.systemsx.cisd.etlserver.SimpleTypeExtractor
eicml-uploader.type-extractor.file-format-type = XML
eicml-uploader.type-extractor.locator-type = RELATIVE_LOCATION
eicml-uploader.type-extractor.data-set-type = EICML
eicml-uploader.type-extractor.is-measured = false

# The storage processor which uploads the content of the files to the additional database
eicml-uploader.storage-processor = ch.systemsx.cisd.yeastx.etl.StorageProcessorWithMLUploader
eicml-uploader.storage-processor.unique-sample-name-property-code = ${sample-name-property-code}
eicml-uploader.storage-processor.unique-experiment-name-property-code = ${experiment-name-property-code}
eicml-uploader.storage-processor.database.databaseEngineCode = ${yeastx-databaseEngineCode}
eicml-uploader.storage-processor.database.basicDatabaseName = ${yeastx-basicDatabaseName}
eicml-uploader.storage-processor.database.databaseKind = ${yeastx-databaseKind}
eicml-uploader.storage-processor.processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor

# ---------------- plugin properties for the thread which uploads fiaML files

# The directory to watch for incoming data.
fiaml-uploader.incoming-dir = ${root}/incoming-fiaml
fiaml-uploader.incoming-data-completeness-condition = auto-detection
fiaml-uploader.incoming-dir.format = 
fiaml-uploader.reprocess-faulty-datasets = false

# The extractor class to use for code extraction
fiaml-uploader.data-set-info-extractor = ch.systemsx.cisd.etlserver.DataSetInfoExtractorWithFileNameProperty
fiaml-uploader.data-set-info-extractor.extractor = ch.systemsx.cisd.etlserver.DefaultDataSetInfoExtractor
fiaml-uploader.data-set-info-extractor.extractor.file-name-property-code = ${file-name-property-code}
fiaml-uploader.data-set-info-extractor.extractor.index-of-experiment-identifier = 0
fiaml-uploader.data-set-info-extractor.extractor.index-of-parent-data-set-codes = 1
fiaml-uploader.data-set-info-extractor.extractor.entity-separator = ${data-set-file-name-entity-separator}

# The extractor class to use for type extraction
fiaml-uploader.type-extractor = ch.systemsx.cisd.etlserver.SimpleTypeExtractor
fiaml-uploader.type-extractor.file-format-type = XML
fiaml-uploader.type-extractor.locator-type = RELATIVE_LOCATION
fiaml-uploader.type-extractor.data-set-type = FIAML
fiaml-uploader.type-extractor.is-measured = false

# The storage processor which uploads the content of the files to the additional database
fiaml-uploader.storage-processor = ch.systemsx.cisd.yeastx.etl.StorageProcessorWithMLUploader
fiaml-uploader.storage-processor.unique-sample-name-property-code = ${sample-name-property-code}
fiaml-uploader.storage-processor.unique-experiment-name-property-code = ${experiment-name-property-code}
fiaml-uploader.storage-processor.database.databaseEngineCode = ${yeastx-databaseEngineCode}
fiaml-uploader.storage-processor.database.basicDatabaseName = ${yeastx-basicDatabaseName}
fiaml-uploader.storage-processor.database.databaseKind = ${yeastx-databaseKind}
fiaml-uploader.storage-processor.processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor

# ---------------- plugin properties for the thread which uploads quantML files

# The directory to watch for incoming data.
quantml-uploader.incoming-dir = ${root}/incoming-quantml
quantml-uploader.incoming-data-completeness-condition = auto-detection
quantml-uploader.incoming-dir.format = 
quantml-uploader.reprocess-faulty-datasets = false

# The extractor class to use for code extraction
quantml-uploader.data-set-info-extractor = ch.systemsx.cisd.yeastx.etl.QuantMLDataSetInfoExtractor
quantml-uploader.data-set-info-extractor.index-of-experiment-identifier = 0
quantml-uploader.data-set-info-extractor.sub-entity-separator = &
# unused but required to be different than sub-entity-separator
quantml-uploader.data-set-info-extractor.entity-separator = .

# The extractor class to use for type extraction
quantml-uploader.type-extractor = ch.systemsx.cisd.etlserver.SimpleTypeExtractor
quantml-uploader.type-extractor.file-format-type = XML
quantml-uploader.type-extractor.locator-type = RELATIVE_LOCATION
quantml-uploader.type-extractor.data-set-type = UNKNOWN
quantml-uploader.type-extractor.is-measured = false

# The storage processor which uploads the content of the files to the additional database
quantml-uploader.storage-processor = ch.systemsx.cisd.yeastx.etl.QuantMLStorageProcessor
quantml-uploader.storage-processor.preprocessing-script = ${gain-write-access-script}
quantml-uploader.storage-processor.unique-sample-name-property-code = ${sample-name-property-code}
quantml-uploader.storage-processor.unique-experiment-name-property-code = ${experiment-name-property-code}
quantml-uploader.storage-processor.database.databaseEngineCode = ${yeastx-databaseEngineCode}
quantml-uploader.storage-processor.database.basicDatabaseName = ${yeastx-basicDatabaseName}
quantml-uploader.storage-processor.database.databaseKind = ${yeastx-databaseKind}
quantml-uploader.storage-processor.processor = ch.systemsx.cisd.etlserver.DefaultStorageProcessor