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


#
# Class which implemented Scheduler interface. It will be used to determine a Provider
#
scheduler.class= org.apache.airavata.core.gfac.scheduler.impl.SchedulerImpl

#
# Data Service Plugins classes
#
datachain.classes= org.apache.airavata.core.gfac.extension.data.RegistryDataService

#
# Pre execution Plugins classes. For example, GridFTP Input Staging
#
prechain.classes= org.apache.airavata.core.gfac.extension.pre.GridFtpInputStaging 
prechain.classes= org.apache.airavata.core.gfac.extension.pre.HttpInputStaging

#
# Post execution Plugins classes. For example, GridFTP Output Staging
#
postchain.classes= org.apache.airavata.core.gfac.extension.post.GridFtpOutputStaging
postchain.classes= org.apache.airavata.core.gfac.extension.post.OutputRegister

#
# SSH private key location. It will be used by SSHProvider
#
# ssh.key=/home/user/.ssh/id_rsa
# ssh.keypass=
# ssh.username=usernameAtHost

#
# MyProxy credential. It will be used by GridFTP Plugins and GramProvider.
#
# myproxy.server=myproxy.teragrid.org
# myproxy.user=username
# myproxy.pass=password
# myproxy.life=3600