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

# Test Configuration properties for the File Manager

# repository factory
filemgr.repository.factory=org.apache.oodt.cas.filemgr.repository.XMLRepositoryManagerFactory

# catalog factory
filemgr.catalog.factory=org.apache.oodt.cas.filemgr.catalog.LuceneCatalogFactory

# data transfer factory
filemgr.datatransfer.factory=org.apache.oodt.cas.filemgr.datatransfer.LocalDataTransferFactory

# validation layer factory
filemgr.validationLayer.factory=org.apache.oodt.cas.filemgr.validation.XMLValidationLayerFactory

# xml rpc client configuration
org.apache.oodt.cas.filemgr.system.xmlrpc.connectionTimeout.minutes=20
org.apache.oodt.cas.filemgr.system.xmlrpc.requestTimeout.minutes=60
#org.apache.oodt.cas.filemgr.system.xmlrpc.connection.retries=0
#org.apache.oodt.cas.filemgr.system.xmlrpc.connection.retry.interval.seconds=3

# data source catalog configuration
org.apache.oodt.cas.filemgr.catalog.datasource.jdbc.url=jdbc:hsqldb:hsql://localhost/test
org.apache.oodt.cas.filemgr.catalog.datasource.jdbc.user=sa
org.apache.oodt.cas.filemgr.catalog.datasource.jdbc.pass=
org.apache.oodt.cas.filemgr.catalog.datasource.jdbc.driver=org.hsqldb.jdbc.JDBCDriver
org.apache.oodt.cas.filemgr.catalog.datasource.quoteFields=false
org.apache.oodt.cas.filemgr.catalog.datasource.pageSize=20
org.apache.oodt.cas.filemgr.catalog.datasource.cacheUpdateMinutes=5
org.apache.oodt.cas.filemgr.catalog.datasource.orderedValues=false
# set the following property to 'true' to allow dynamic metadata fields,
# effectively bypassing the validation layer.
# by default the property is false
#org.apache.oodt.cas.filemgr.catalog.datasource.lenientFields=true
# set the following property to true to enable the column "product_id"
# in table "products" to be of type string
#org.apache.oodt.cas.filemgr.catalog.datasource.productId.string=false


# mapped data source catalog configuration
org.apache.oodt.cas.filemgr.catalog.mappeddatasource.mapFile=/path/to/ops.catalog.typemap.properties

# science data catalog configuration
org.apache.oodt.cas.filemgr.catalog.science.jdbc.url=jdbc:hsqldb:hsql://localhost/test
org.apache.oodt.cas.filemgr.catalog.science.jdbc.user=sa
org.apache.oodt.cas.filemgr.catalog.science.jdbc.pass=
org.apache.oodt.cas.filemgr.catalog.science.jdbc.driver=org.hsqldb.jdbc.JDBCDriver

# lucene catalog configuration
org.apache.oodt.cas.filemgr.catalog.lucene.idxPath=file:/testdata/
org.apache.oodt.cas.filemgr.catalog.lucene.pageSize=20
org.apache.oodt.cas.filemgr.catalog.lucene.commitLockTimeout.seconds=60
org.apache.oodt.cas.filemgr.catalog.lucene.writeLockTimeout.seconds=60
org.apache.oodt.cas.filemgr.catalog.lucene.mergeFactor=20

# solr catalog configuration
org.apache.oodt.cas.filemgr.catalog.solr.url=http://localhost:8983/solr
#org.apache.oodt.cas.filemgr.catalog.solr.url=http://localhost:8080/solr
org.apache.oodt.cas.filemgr.catalog.solr.productSerializer=org.apache.oodt.cas.filemgr.catalog.solr.DefaultProductSerializer
org.apache.oodt.cas.filemgr.catalog.solr.productIdGenerator=org.apache.oodt.cas.filemgr.catalog.solr.UUIDProductIdGenerator
#org.apache.oodt.cas.filemgr.catalog.solr.productIdGenerator=org.apache.oodt.cas.filemgr.catalog.solr.NameProductIdGenerator


# data source repository manager configuration
org.apache.oodt.cas.filemgr.repositorymgr.datasource.jdbc.url=jdbc:hsqldb:hsql://localhost/test
org.apache.oodt.cas.filemgr.repositorymgr.datasource.jdbc.user=sa
org.apache.oodt.cas.filemgr.repositorymgr.datasource.jdbc.pass=
org.apache.oodt.cas.filemgr.repositorymgr.datasource.jdbc.driver=org.hsqldb.jdbc.JDBCDriver

# science data repository manager configuration
org.apache.oodt.cas.filemgr.repositorymgr.science.jdbc.url=jdbc:hsqldb:hsql://localhost/test
org.apache.oodt.cas.filemgr.repositorymgr.science.jdbc.user=sa
org.apache.oodt.cas.filemgr.repositorymgr.science.jdbc.pass=
org.apache.oodt.cas.filemgr.repositorymgr.science.jdbc.driver=org.hsqldb.jdbc.JDBCDriver

# XML repository manager configuration
org.apache.oodt.cas.filemgr.repositorymgr.dirs=file:///dir1,file:///dir2

# XML validation layer configuration
org.apache.oodt.cas.filemgr.validation.dirs=file:///dir1,file:///dir2

# set the following property to 'true' to allow dynamic metadata fields,
# effectively bypassing the validation layer.
# by default the property is false
#org.apache.oodt.cas.filemgr.catalog.lucene.lenientFields=true

# data source validation layer configuration
org.apache.oodt.cas.filemgr.validation.datasource.jdbc.url=jdbc:hsqldb:hsql://localhost/test
org.apache.oodt.cas.filemgr.validation.datasource.jdbc.user=sa
org.apache.oodt.cas.filemgr.validation.datasource.jdbc.pass=
org.apache.oodt.cas.filemgr.validation.datasource.jdbc.driver=org.hsqldb.jdbc.JDBCDriver
org.apache.oodt.cas.filemgr.validation.datasource.quoteFields=false

# science data validation layer configuration
org.apache.oodt.cas.filemgr.validation.science.jdbc.url=jdbc:hsqldb:hsql://localhost/test
org.apache.oodt.cas.filemgr.validation.science.jdbc.user=sa
org.apache.oodt.cas.filemgr.validation.science.jdbc.pass=
org.apache.oodt.cas.filemgr.validation.science.jdbc.driver=org.hsqldb.jdbc.JDBCDriver

# remote data transfer configuration
org.apache.oodt.cas.filemgr.datatransfer.remote.chunkSize=1024

# Amazon S3 data transfer configuration.
# Region can be any of the values found here:
#   http://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/regions/Regions.html
org.apache.oodt.cas.filemgr.datatransfer.s3.bucket.name=some_bucket_name
org.apache.oodt.cas.filemgr.datatransfer.s3.region=EU_WEST_1
org.apache.oodt.cas.filemgr.datatransfer.s3.access.key=s3_access_key
org.apache.oodt.cas.filemgr.datatransfer.s3.secret.key=s3_secret_key

# location of Mime-Type repository
org.apache.oodt.cas.filemgr.mime.type.repository=file:/src/mime-types.xml

# tells the file manager system layer to include product instance metadata
# NOTE: here are the expected field mappings
#
#      product.getProductId() -> ProductId
#      product.getProductName() -> ProductName
#      product.getProductStructure() -> ProductStructure
#      product.getTransferStatus() -> ProductTransferStatus
#      product.getRootRef() -> ProductRootReference

# for the references returned by product.getProductReferences() the following 
# metadata fields will be added (order will be maintained, such that data store 
# ref at index 0 will map to orig ref at index 0, etc.)
#
#      ProductDataStoreReferences (list of all data store references: 
#       note already translated into path, not URI)
#      ProductOrigReferences (list of all orig references: 
#       note already translated into path, not URI)
#      ProductMimeType (list of all references' mime-types)
#      ProductFileSize (list of all references' file sizes)

org.apache.oodt.cas.filemgr.metadata.expandProduct=false

# ConfigurableMetadataBasedVersioning configuration
#org.apache.oodt.cas.filemgr.versioning.configuration.all_product_types=[Year]/[Month]/[Filename]
#org.apache.oodt.cas.filemgr.versioning.configuration.<product_type>=[Year]/[Month]/[Filename]

# Enable to use only server-side versioning.
#org.apache.oodt.cas.filemgr.serverside.versioning=true
#  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.

# Test Configuration properties for the File Manager

# repository factory
filemgr.repository.factory=org.apache.oodt.cas.filemgr.repository.XMLRepositoryManagerFactory

# catalog factory
filemgr.catalog.factory=org.apache.oodt.cas.filemgr.catalog.LuceneCatalogFactory

# data transfer factory
filemgr.datatransfer.factory=org.apache.oodt.cas.filemgr.datatransfer.LocalDataTransferFactory

# validation layer factory
filemgr.validationLayer.factory=org.apache.oodt.cas.filemgr.validation.XMLValidationLayerFactory

# xml rpc client configuration
org.apache.oodt.cas.filemgr.system.xmlrpc.connectionTimeout.minutes=20
org.apache.oodt.cas.filemgr.system.xmlrpc.requestTimeout.minutes=60
#org.apache.oodt.cas.filemgr.system.xmlrpc.connection.retries=0
#org.apache.oodt.cas.filemgr.system.xmlrpc.connection.retry.interval.seconds=3

# data source catalog configuration
org.apache.oodt.cas.filemgr.catalog.datasource.jdbc.url=jdbc:hsqldb:hsql://localhost/test
org.apache.oodt.cas.filemgr.catalog.datasource.jdbc.user=sa
org.apache.oodt.cas.filemgr.catalog.datasource.jdbc.pass=
org.apache.oodt.cas.filemgr.catalog.datasource.jdbc.driver=org.hsqldb.jdbc.JDBCDriver
org.apache.oodt.cas.filemgr.catalog.datasource.quoteFields=false
org.apache.oodt.cas.filemgr.catalog.datasource.pageSize=20
org.apache.oodt.cas.filemgr.catalog.datasource.cacheUpdateMinutes=5
org.apache.oodt.cas.filemgr.catalog.datasource.orderedValues=false
# set the following property to 'true' to allow dynamic metadata fields,
# effectively bypassing the validation layer.
# by default the property is false
#org.apache.oodt.cas.filemgr.catalog.datasource.lenientFields=true
# set the following property to true to enable the column "product_id"
# in table "products" to be of type string
#org.apache.oodt.cas.filemgr.catalog.datasource.productId.string=false


# mapped data source catalog configuration
org.apache.oodt.cas.filemgr.catalog.mappeddatasource.mapFile=/path/to/ops.catalog.typemap.properties

# science data catalog configuration
org.apache.oodt.cas.filemgr.catalog.science.jdbc.url=jdbc:hsqldb:hsql://localhost/test
org.apache.oodt.cas.filemgr.catalog.science.jdbc.user=sa
org.apache.oodt.cas.filemgr.catalog.science.jdbc.pass=
org.apache.oodt.cas.filemgr.catalog.science.jdbc.driver=org.hsqldb.jdbc.JDBCDriver

# lucene catalog configuration
org.apache.oodt.cas.filemgr.catalog.lucene.idxPath=file:/testdata/
org.apache.oodt.cas.filemgr.catalog.lucene.pageSize=20
org.apache.oodt.cas.filemgr.catalog.lucene.commitLockTimeout.seconds=60
org.apache.oodt.cas.filemgr.catalog.lucene.writeLockTimeout.seconds=60
org.apache.oodt.cas.filemgr.catalog.lucene.mergeFactor=20

# solr catalog configuration
org.apache.oodt.cas.filemgr.catalog.solr.url=http://localhost:8983/solr
#org.apache.oodt.cas.filemgr.catalog.solr.url=http://localhost:8080/solr
org.apache.oodt.cas.filemgr.catalog.solr.productSerializer=org.apache.oodt.cas.filemgr.catalog.solr.DefaultProductSerializer
org.apache.oodt.cas.filemgr.catalog.solr.productIdGenerator=org.apache.oodt.cas.filemgr.catalog.solr.UUIDProductIdGenerator
#org.apache.oodt.cas.filemgr.catalog.solr.productIdGenerator=org.apache.oodt.cas.filemgr.catalog.solr.NameProductIdGenerator


# data source repository manager configuration
org.apache.oodt.cas.filemgr.repositorymgr.datasource.jdbc.url=jdbc:hsqldb:hsql://localhost/test
org.apache.oodt.cas.filemgr.repositorymgr.datasource.jdbc.user=sa
org.apache.oodt.cas.filemgr.repositorymgr.datasource.jdbc.pass=
org.apache.oodt.cas.filemgr.repositorymgr.datasource.jdbc.driver=org.hsqldb.jdbc.JDBCDriver

# science data repository manager configuration
org.apache.oodt.cas.filemgr.repositorymgr.science.jdbc.url=jdbc:hsqldb:hsql://localhost/test
org.apache.oodt.cas.filemgr.repositorymgr.science.jdbc.user=sa
org.apache.oodt.cas.filemgr.repositorymgr.science.jdbc.pass=
org.apache.oodt.cas.filemgr.repositorymgr.science.jdbc.driver=org.hsqldb.jdbc.JDBCDriver

# XML repository manager configuration
org.apache.oodt.cas.filemgr.repositorymgr.dirs=file:///dir1,file:///dir2

# XML validation layer configuration
org.apache.oodt.cas.filemgr.validation.dirs=file:///dir1,file:///dir2

# set the following property to 'true' to allow dynamic metadata fields,
# effectively bypassing the validation layer.
# by default the property is false
#org.apache.oodt.cas.filemgr.catalog.lucene.lenientFields=true

# data source validation layer configuration
org.apache.oodt.cas.filemgr.validation.datasource.jdbc.url=jdbc:hsqldb:hsql://localhost/test
org.apache.oodt.cas.filemgr.validation.datasource.jdbc.user=sa
org.apache.oodt.cas.filemgr.validation.datasource.jdbc.pass=
org.apache.oodt.cas.filemgr.validation.datasource.jdbc.driver=org.hsqldb.jdbc.JDBCDriver
org.apache.oodt.cas.filemgr.validation.datasource.quoteFields=false

# science data validation layer configuration
org.apache.oodt.cas.filemgr.validation.science.jdbc.url=jdbc:hsqldb:hsql://localhost/test
org.apache.oodt.cas.filemgr.validation.science.jdbc.user=sa
org.apache.oodt.cas.filemgr.validation.science.jdbc.pass=
org.apache.oodt.cas.filemgr.validation.science.jdbc.driver=org.hsqldb.jdbc.JDBCDriver

# remote data transfer configuration
org.apache.oodt.cas.filemgr.datatransfer.remote.chunkSize=1024

# Amazon S3 data transfer configuration.
# Region can be any of the values found here:
#   http://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/regions/Regions.html
org.apache.oodt.cas.filemgr.datatransfer.s3.bucket.name=some_bucket_name
org.apache.oodt.cas.filemgr.datatransfer.s3.region=EU_WEST_1
org.apache.oodt.cas.filemgr.datatransfer.s3.access.key=s3_access_key
org.apache.oodt.cas.filemgr.datatransfer.s3.secret.key=s3_secret_key

# location of Mime-Type repository
org.apache.oodt.cas.filemgr.mime.type.repository=file:/src/mime-types.xml

# tells the file manager system layer to include product instance metadata
# NOTE: here are the expected field mappings
#
#      product.getProductId() -> ProductId
#      product.getProductName() -> ProductName
#      product.getProductStructure() -> ProductStructure
#      product.getTransferStatus() -> ProductTransferStatus
#      product.getRootRef() -> ProductRootReference

# for the references returned by product.getProductReferences() the following 
# metadata fields will be added (order will be maintained, such that data store 
# ref at index 0 will map to orig ref at index 0, etc.)
#
#      ProductDataStoreReferences (list of all data store references: 
#       note already translated into path, not URI)
#      ProductOrigReferences (list of all orig references: 
#       note already translated into path, not URI)
#      ProductMimeType (list of all references' mime-types)
#      ProductFileSize (list of all references' file sizes)

org.apache.oodt.cas.filemgr.metadata.expandProduct=false

# ConfigurableMetadataBasedVersioning configuration
#org.apache.oodt.cas.filemgr.versioning.configuration.all_product_types=[Year]/[Month]/[Filename]
#org.apache.oodt.cas.filemgr.versioning.configuration.<product_type>=[Year]/[Month]/[Filename]

# Enable to use only server-side versioning.
#org.apache.oodt.cas.filemgr.serverside.versioning=true