###
# ============LICENSE_START=======================================================
# ECOMP-PAP-REST
# ================================================================================
# 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.openecomp.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:tcp://localhost/xacmlpolicy
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

#***Properties for IntegrityMonitor integration defined in IntegrityMonitorProperties.java***

#JMX URL for the PAP-REST.  Need to update to real IP and port
xacml.rest.pap.jmx.url=service:jmx:rmi:///jndi/rmi://localhost:9990/jmxrmi

#The name of the PAP.  Must be unique across the system
xacml.rest.pap.resource.name=site_1.pap_1

#***Properties for IntegrityMonitor integration defined in IntegrityMonitorProperties.java***

#Interval between forward progress counter updates in seconds
fp_monitor_interval=30

#Number of forward progress counter failures before failover
failed_counter_threshold=3

#Interval in seconds between test transactions if there is no other traffic
test_trans_interval=10

#Interval in seconds between updates of the forward progress counter in the DB
write_fpc_interval=5

#Name of the site
site_name=site_1

#Node type. Can take values of: pdp-xacml, pdp-drools, pap, pap-admin, logparser, brms-gateway, 
#astra-gateway, elk-server and pypdp
node_type=pap
 
#Dependency groups are groups of resources upon which a node operational state is dependent upon (dependency_groups). 
#Each group is a comma-separated list of resource names and groups are separated by a semicolon. A group may contain
#one or more members.
dependency_groups=site_1.logparser_1;site_1.adminconsole_1;site_1.elk_1

# The (optional) period of time in seconds between executions of the integrity audit.
# Value < 0 : Audit does not run (default value if property is not present = -1)
# Value = 0 : Audit runs continuously
# Value > 0 : The period of time in seconds between execution of the audit on a particular node
#integrity_audit_period_seconds=-1
integrity_audit_period_seconds=0

ENVIRONMENT=DEVL
