# encoding: utf-8
#/*
# * 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.
# */

[index]
# The path gives the name of the directory where the Lucene search engine
# will build its indexes.  The path refers to a directory; it will be created
# if it doesn't exist.  If it does exist, it must refer to an
# existing Lucene index with correct sub-files present.  So, don't make this
# directory manually, or you'll be confused by error messages!
path = @INDEX_PATH@
pageSize = 20

[policies]
# The 'repo' and 'validation' are comma-separated lists of URLs.  Typically, they
# contain a single "file:" style URL that names a directory with policy XML files
# within.  The 'user' identifies the user database.  It'll be created if it
# doesn't exist.
repo = @REPO_POLICY_URLS@
validation = @VALIDATION_POLICY_URLS@
user = @USER_DB_PATH@

[factories]
# There's no need to change anything here unless you really know what you're doing,
# and trust me, you don't.  Don't take it personally.  It's just a fact.
catalog = org.apache.oodt.cas.filemgr.catalog.LuceneCatalogFactory
repository = org.apache.oodt.cas.filemgr.repository.XMLRepositoryManagerFactory
datatransfer = org.apache.oodt.cas.filemgr.datatransfer.LocalDataTransferFactory
validation =org.apache.oodt.cas.filemgr.validation.XMLValidationLayerFactory
