#    Copyright 2013 Red Hat, Inc. and/or its affiliates.
#
#    This file is part of jcliff.
#
#    This program is free software: you can redistribute it and/or modify
#    it under the terms of the GNU General Public License as published by
#    the Free Software Foundation, either version 3 of the License, or
#    (at your option) any later version.
#
#    This program is distributed in the hope that it will be useful,
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#    GNU General Public License for more details.
#
#    You should have received a copy of the GNU General Public License
#    along with this program.  If not, see <http://www.gnu.org/licenses/>.

name=resource-adapter
getContents=/subsystem=resource-adapters:read-resource(recursive=true)

prefix.modify=modify:/
modify.rule.1=/subsystem=resource-adapters${cmdpath(${path(..)})}:write-attribute(name=${name(.)},value=${value(.)})

prefix.remove=remove:/
remove.rule.1=/subsystem=resource-adapters${cmdpath(${path(.)})}:remove
remove.refresh=true

prefix.undefine=undefine:/
undefine.rule.1=/subsystem=resource-adapters${cmdpath(${path(..)})}:undefine-attribute(name=${name(.)})
undefine.refresh=true


#first add/modify/delete resource adapter, then enable it
match.addAdapter=add:/resource-adapter/*
addAdapter.rule.1=/subsystem=resource-adapters/resource-adapter=${name(.)}:add(${if-defined (archive), (archive=${value(archive)}), (module=${value(module)}) })
addAdapter.rule.2=/subsystem=resource-adapters/resource-adapter=${name(.)}:activate
addAdapter.precedence=10
addAdapter.refresh=true

match.removeAdapter=remove:/resource-adapter/*
removeAdapter.rule=/subsystem=resource-adapters/resource-adapter=${name(.)}:remove


match.addCnxnDefinition=add:/resource-adapter/*/connection-definitions/*
addCnxnDefinition.rule=/subsystem=resource-adapters/resource-adapter=${name(../..)}/connection-definitions=${name(.)}:add(class-name=${value(class-name)}, jndi-name=${value(jndi-name)})
addCnxnDefinition.refresh=true
addCnxnDefinition.precedence=20

match.removeCnxnDefinition=remove:/resource-adapter/*/connection-definitions/*
removeCnxnDefinition.rule=/subsystem=resource-adapters/resource-adapter=${name(../..)}/connection-definitions=${name(.)}:remove

match.addCnxnDefinitionConfig=add:/resource-adapter/*/connection-definitions/*/*
addCnxnDefinitionConfig.rule=/subsystem=resource-adapters/resource-adapter=${name(../../..)}/connection-definitions=${name(..)}:write-attribute(name=${name(.)}, value=${value(.)})
addCnxnDefinitionConfig.precedence=25

match.modifyCnxnDefinitionConfig=modify:/resource-adapter/*/connection-definitions/*/*
modifyCnxnDefinitionConfig.rule=/subsystem=resource-adapters/resource-adapter=${name(../../..)}/connection-definitions=${name(..)}:write-attribute(name=${name(.)}, value=${value(.)})
modifyCnxnDefinitionConfig.precedence=26

#admin objects = JMS queues, for example
match.addAdminObjects=add:/resource-adapter/*/admin-objects/*
addAdminObjects.rule=/subsystem=resource-adapters/resource-adapter=${name(../..)}/admin-objects=${name(.)}:add(class-name=${value(class-name)}, jndi-name=${value(jndi-name)})
addAdminObjects.refresh=true
addAdminObjects.precedence=20

#admin object config properties
match.addAdminObjectsConfig=add:/resource-adapter/*/admin-objects/*/config-properties/*
addAdminObjectsConfig.rule=/subsystem=resource-adapters/resource-adapter=${name(../../../..)}/admin-objects=${name(../..)}/config-properties=${name(.)}:add(value=${value(value)})
addAdminObjectsConfig.precedence=30

#Due to a JBoss bug, this will fail the first time, and you will have to run again after restarting jboss
#This is because it fails to unregister the removed config
match.modifyAdminObjectsConfig=modify:/resource-adapter/*/admin-objects/*/config-properties/*/value
modifyAdminObjectsConfig.rule.1=/subsystem=resource-adapters/resource-adapter=${name(../../../../..)}/admin-objects=${name(../../..)}/config-properties=${name(..)}:remove
modifyAdminObjectsConfig.rule.2=:reload
modifyAdminObjectsConfig.rule.3=/subsystem=resource-adapters/resource-adapter=${name(../../../../..)}/admin-objects=${name(../../..)}/config-properties=${name(..)}:add(value=${value(.)})
modifyAdminObjectsConfig=30

match.removeAdminObjects=remove:/resource-adapter/*/admin-objects/*
removeAdminObjects.rule=/subsystem=resource-adapters/resource-adapter=${name(../..)}/admin-objects=${name(.)}:remove

#Config properties
match.addConfigProps=add:/resource-adapter/*/config-properties/*
addConfigProps.rule=/subsystem=resource-adapters/resource-adapter=${name(../..)}/config-properties=${name(.)}:add(value=${value(value)})
addConfigProps.precedence=20

#Due to a bug in jboss, this will fail the first time, because it won't unregister the config property
#It has to be run a second time to land
match.modifyConfigProps=modify:/resource-adapter/*/config-properties/*/value
modifyConfigProps.rule.1=/subsystem=resource-adapters/resource-adapter=${name(../../..)}/config-properties=${name(..)}:remove
modifyConfigProps.rule.2=:reload
modifyConfigProps.rule.3=/subsystem=resource-adapters/resource-adapter=${name(../../..)}/config-properties=${name(..)}:add(value=${value(.)})
modifyConfigProps.precedence=20

match.removeConfigProps=remove:/resource-adapter/*/config-properties/*/value
removeConfigProps.rule.1=/subsystem=resource-adapters/resource-adapter=${name(../../..)}/config-properties=${name(..)}:remove
removeConfigProps.rule.2=:reload

#Connection Config properties
match.addConnectionConfigProps=add:/resource-adapter/*/connection-definitions/*/config-properties/*
addConnectionConfigProps.rule=/subsystem=resource-adapters/resource-adapter=${name(../../../..)}/connection-definitions=${name(../..)}/config-properties=${name(.)}:add(value=${value(value)})
addConnectionConfigProps.precedence=25

match.modifyConnectionConfigProps=modify:/resource-adapter/*/connection-definitions/*/config-properties/*/value
modifyConnectionConfigProps.rule.1=/subsystem=resource-adapters/resource-adapter=${name(../../../../..)}/connection-definitions=${name(../../..)}/config-properties=${name(..)}:remove
modifyConnectionConfigProps.rule.2=:reload
modifyConnectionConfigProps.rule.3=/subsystem=resource-adapters/resource-adapter=${name(../../../../..)}/connection-definitions=${name(../../..)}/config-properties=${name(..)}:add(value=${value(.)})
modifyConfigProps.precedence=24

match.removeConnectionConfigProps=remove:/resource-adapter/*/connection-definitions/*/config-properties/*/value
removeConnectionConfigProps.rule.1=/subsystem=resource-adapters/resource-adapter=${name(../../../../..)}/connection-definitions=${name(../..)}/config-properties=${name(..)}:remove
removeConnectionConfigProps.rule.2=:reload


#basic properties
match.addProperty=add:/resource-adapter/*/*
addProperty.rule=/subsystem=resource-adapters/resource-adapter=${name(..)}:write-attribute(name=${name(.)}, value=${value(.)})
addProperty.precedence=20

match.modifyProperty=modify:/resource-adapter/*/*
modifyProperty.rule=/subsystem=resource-adapters/resource-adapter=${name(..)}:write-attribute(name=${name(.)}, value=${value(.)})
modifyProperty.precedence=20

match.removeProperty=undefine:/resource-adapter/*/*
removeProperty.rule=/subsystem=resource-adapters/resource-adapter=${name(..)}:undefine-attribute(name=${name(.)})
