###
# ============LICENSE_START=======================================================
# ONAP-PDP
# ================================================================================
# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
# ================================================================================
# Licensed 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.
# ============LICENSE_END=========================================================
###

#
# This is our factory that will create our engine
#
xacml.PAP.papEngineFactory=org.onap.policy.xacml.std.pap.StdEngineFactory

#
# Where we store our PAP PDP Group/Node information
#
xacml.pap.pdps=pdps
#
# Need the PAP's url (how PDPs will reach it) configured here
# because we need it to generate the URLs of the Policy Files
# sent to the PDPs in the configuration when the PAP is first brought up.
# (In other cases, such as the PDP calling the PAP, we could generate this URL, 
# but for startup there is no other way to get it.)
#
#

xacml.rest.pap.url=http://localhost:8070/pap/

#
# Upon startup, have the PAP servlet send latest configuration information to all
# the PDP nodes it knows about.
#
xacml.rest.pap.initiate.pdp=true
#
# Heartbeat from PAP to PDPs
#
# How much time (in milliseconds) between heartbeats
# (i.e. the time between completing the heartbeat with all PDPs and starting the next cycle)
#
xacml.rest.pap.heartbeat.interval=10000
#
# Heartbeat connection timeout (in milliseconds)
#
xacml.rest.pap.heartbeat.timeout=10000

################################################################################################
# Adding properties for getting properties previously used by PAP-ADMIN for creating Policies
# THis is part of the Policy Creation API project
################################################################################################

# Set your domain here:
xacml.rest.pap.domain=com

# Location where all the user workspaces are located.
xacml.rest.pap.workspace=workspace

# Location where the GIT repository is located
xacml.rest.pap.repository=repository

# new Property Please mention your PAP-REST webapps Location here. 
xacml.rest.config.webapps=C:\\Second Tomcat\\apache-tomcat-8.0.23\\webapps\\ConfigPAP\\

#Turn the audit on to synchronize the DB/file system
#xacml.rest.pap.run.audit.flag=true
#Turn the audit off to not synchronize the DB/file system
#xacml.rest.pap.run.audit.flag=false
xacml.rest.pap.run.audit.flag=false

#Audit will synchronize the file system to match the contents of the DB
#xacml.rest.pap.filesystem.audit=true
#Audit will synchronize the DB to match the contents of the file system 
#xacml.rest.pap.filesystem.audit=false
xacml.rest.pap.filesystem.audit=false

# id
xacml.rest.pap.userid=testpap
# pass
xacml.rest.pap.password=alpha123
# pdps file
xacml.rest.pdp.idfile=test.properties

#Properties for db access
javax.persistence.jdbc.driver=org.h2.Driver
javax.persistence.jdbc.url=jdbc:h2:file:./sql/xacmlTest
javax.persistence.jdbc.user=sa
javax.persistence.jdbc.password=

#Time in ms which a Policy DB transaction will wait to get the transaction lock object
xacml.rest.pap.transaction.waitms=1000
	
#Policy DB transaction timeout in ms after it has obtained the transaction lock object
xacml.rest.pap.transaction.timeoutms=500
	
#Policy Audit timeout in ms after it has obtained the transaction lock object
xacml.rest.pap.audit.timeoutms=5000
