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

###########################################################################
#
#  This properties file provides configuration for Airavata Clients: 
#  XBaya and Airavata API
#
###########################################################################

###---------------------------REGISTRY API IMPLEMENTATION---------------------------###

class.registry.accessor=org.apache.airavata.persistance.registry.jpa.impl.AiravataJPARegistry
#class.registry.accessor=org.apache.airavata.rest.client.RegistryClient

###---------------------REGISTRY API IMPLEMENTATION - CUSTOM SETTINGS----------------------###

########################Registry JPA Implementation Settings########################
#for mysql [AiravataJPARegistry]
#registry.jdbc.driver=com.mysql.jdbc.Driver
#registry.jdbc.url=jdbc:mysql://localhost:3306/persistent_data

#for derby [AiravataJPARegistry]
registry.jdbc.driver=org.apache.derby.jdbc.ClientDriver
registry.jdbc.url=jdbc:derby://localhost:1527/persistent_data;create=true;user=airavata;password=airavata
registry.jdbc.user=airavata
registry.jdbc.password=airavata
start.derby.server.mode=true


validationQuery=SELECT 1 from CONFIGURATION
jpa.connection.properties=MaxActive=10,MaxIdle=5,MinIdle=2,MaxWait=60000,testWhileIdle=true,testOnBorrow=true
default.registry.user=admin
default.registry.password=admin
default.registry.password.hash.method=SHA
default.registry.gateway=default

#user defined registry accessor classes
#class.provenance.registry.accessor=org.apache.airavata.persistance.registry.jpa.impl.AiravataJPARegistry
#class.configuration.registry.accessor=org.apache.airavata.persistance.registry.jpa.impl.AiravataJPARegistry
#class.descriptor.registry.accessor=org.apache.airavata.persistance.registry.jpa.impl.AiravataJPARegistry
#class.project.registry.accessor=org.apache.airavata.persistance.registry.jpa.impl.AiravataJPARegistry
#class.user.workflow.registry.accessor=org.apache.airavata.persistance.registry.jpa.impl.AiravataJPARegistry
#class.published.workflow.registry.accessor=org.apache.airavata.persistance.registry.jpa.impl.AiravataJPARegistry

########################Registry Rest Implementation Settings########################

trust.store=aiaravata.jks
trust.store.password=airavata

#####################################################################################

#for xbaya
xbaya.registry.user=admin
xbaya.registry.url=http://localhost:8080/airavata/services/registry
xbaya.default.gateway=default



###########################################################################
# Airavata Thrift Server configurations
###########################################################################
thrift.server.host=localhost
thrift.server.port=8930

