# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE.txt 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.    
#
# Properties required to configure the Workflow Manager

# workflow repository factory
workflow.repo.factory = org.apache.oodt.cas.workflow.repository.XMLWorkflowRepositoryFactory

# workflow engine factory
workflow.engine.factory = org.apache.oodt.cas.workflow.engine.ThreadPoolWorkflowEngineFactory

# workflow instance repository factory
workflow.engine.instanceRep.factory = org.apache.oodt.cas.workflow.instrepo.LuceneWorkflowInstanceRepositoryFactory

# thread pool workflow engine properties
org.apache.oodt.cas.workflow.engine.queueSize=
org.apache.oodt.cas.workflow.engine.maxPoolSize=
org.apache.oodt.cas.workflow.engine.minPoolSize=6
org.apache.oodt.cas.workflow.engine.threadKeepAlive.minutes=5
org.apache.oodt.cas.workflow.engine.unlimitedQueue=true
org.apache.oodt.cas.workflow.engine.preConditionWaitTime=10

# set this if you want the workflow manager to submit jobs through the resource mgr
org.apache.oodt.cas.workflow.engine.resourcemgr.url=http://localhost:9002

# if you use the resource mgr submission, you can specify how many seconds the 
# workflow manager should wait inbetween checking to see if a job is complete
org.apache.oodt.cas.workflow.engine.resourcemgr.pollingWaitTime=10

# workflow instance repository general properties
# default page size to page through WorkflowInstances with
org.apache.oodt.cas.workflow.instanceRep.pageSize=20

# lucene workflow instance repository properties
org.apache.oodt.cas.workflow.instanceRep.lucene.idxPath=[OODT_HOME]/data/workflow

# data source workflow instance repository properties
# org.apache.oodt.cas.workflow.instanceRep.datasource.jdbc.url=jdbc:url
# org.apache.oodt.cas.workflow.instanceRep.datasource.jdbc.user=user
# org.apache.oodt.cas.workflow.instanceRep.datasource.jdbc.pass=pass
# org.apache.oodt.cas.workflow.instanceRep.datasource.jdbc.driver=your.jdbc.Driver
# org.apache.oodt.cas.workflow.instanceRep.datasource.quoteFields=false

# XML workflow repository properties
org.apache.oodt.cas.workflow.repo.dirs=file://[WORKFLOW_HOME]/policy

# wengine-style packaged workflow repo properties
#org.apache.oodt.cas.workflow.wengine.packagedRepo.dir.path = /path/to/wengine/workflow/files

# data source workflow repository properties
# org.apache.oodt.cas.workflow.repo.datasource.jdbc.url=jdbc:url
# org.apache.oodt.cas.workflow.repo.datasource.jdbc.user=user
# org.apache.oodt.cas.workflow.repo.datasource.jdbc.pass=pass
# org.apache.oodt.cas.workflow.repo.datasource.jdbc.driver=your.jdbc.Driver

# Spring command line option and action store properties
org.apache.oodt.cas.cli.action.spring.config=src/main/resources/cmd-line-actions.xml
org.apache.oodt.cas.cli.option.spring.config=src/main/resources/cmd-line-options.xml
