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

# Configuration properties for the File Manager

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

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

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

# lucene catalog configuration
org.apache.oodt.cas.filemgr.catalog.lucene.idxPath=[OODT_HOME]/data/catalog
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

# XML repository manager configuration
org.apache.oodt.cas.filemgr.repositorymgr.dirs=file:[FILEMGR_HOME]/policy/oodt

# XML validation layer configuration
org.apache.oodt.cas.filemgr.validation.dirs=file:[FILEMGR_HOME]/policy/oodt

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

# location of Mime-Type repository
org.apache.oodt.cas.filemgr.mime.type.repository=[FILEMGR_HOME]/etc/mime-types.xml


############ data source configuration ##################################
#
# These 3 blocks of config properties can be used to setup a catalog,
# repository manager, and validation layer based on a RDBMS such as
# Oracle, MySQL, PostgreSQL, or any others that support a jdbc connection.
# Just un-comment the following blocks of properties and configure as
# needed.
#
#########################################################################

# datasource catalog config
#org.apache.oodt.cas.filemgr.catalog.datasource.jdbc.url=some_jdbc_url
#org.apache.oodt.cas.filemgr.catalog.datasource.jdbc.user=user
#org.apache.oodt.cas.filemgr.catalog.datasource.jdbc.pass=pass
#org.apache.oodt.cas.filemgr.catalog.datasource.jdbc.driver=driver.class.name
#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

# data source repository manager configuration
#org.apache.oodt.cas.filemgr.repositorymgr.datasource.jdbc.url=some_jdbc_url
#org.apache.oodt.cas.filemgr.repositorymgr.datasource.jdbc.user=user
#org.apache.oodt.cas.filemgr.repositorymgr.datasource.jdbc.pass=pass
#org.apache.oodt.cas.filemgr.repositorymgr.datasource.jdbc.driver=driver.class.name

# data source validation layer configuration
#org.apache.oodt.cas.filemgr.validation.datasource.jdbc.url=some_jdbc_url
#org.apache.oodt.cas.filemgr.validation.datasource.jdbc.user=user
#org.apache.oodt.cas.filemgr.validation.datasource.jdbc.pass=pass
#org.apache.oodt.cas.filemgr.validation.datasource.jdbc.driver=driver.class.name
#org.apache.oodt.cas.filemgr.validation.datasource.quoteFields=false


# 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
