###
# ============LICENSE_START=======================================================
# ONAP-XACML
# ================================================================================
# 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
