From e263f56c0c62b6941249f3541fd2c89e9ebb0306 Mon Sep 17 00:00:00 2001
From: matthew_swift <matthew_swift@localhost>
Date: Tue, 29 May 2007 11:59:21 +0000
Subject: [PATCH] Fix issue 1580: support overriding of property default values.
---
opendj-sdk/opends/resource/admin/preprocessor.xsl | 115 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 113 insertions(+), 2 deletions(-)
diff --git a/opendj-sdk/opends/resource/admin/preprocessor.xsl b/opendj-sdk/opends/resource/admin/preprocessor.xsl
index 246a4e2..2931923 100644
--- a/opendj-sdk/opends/resource/admin/preprocessor.xsl
+++ b/opendj-sdk/opends/resource/admin/preprocessor.xsl
@@ -208,11 +208,15 @@
<!--
Copy all inherited properties.
-->
- <xsl:copy-of select="$hierarchy/adm:managed-object/adm:property" />
+ <xsl:variable name="property-overrides"
+ select="adm:property-override" />
+ <xsl:copy-of
+ select="$hierarchy/adm:managed-object/adm:property[not(@name=$property-overrides/@name)]" />
<!--
Copy all local properties.
-->
- <xsl:apply-templates select="adm:property|adm:property-reference"
+ <xsl:apply-templates
+ select="adm:property|adm:property-reference|adm:property-override"
mode="pre-process">
<xsl:with-param name="moname" select="@name" />
<xsl:with-param name="mopackage" select="@package" />
@@ -463,6 +467,113 @@
</xsl:element>
</xsl:template>
<!--
+ Pre-process a property override pulling in the inherited property
+ definition and by adding a "preprocessor" profile which contains
+ information about where the property was redefined.
+ -->
+ <xsl:template match="adm:property-override" mode="pre-process">
+ <xsl:param name="mopackage" select="/.." />
+ <xsl:param name="moname" select="/.." />
+ <xsl:param name="hierarchy" />
+ <!--
+ Make sure that this property override does not have the same name as another
+ property override in this managed object.
+ -->
+ <xsl:variable name="name" select="@name" />
+ <xsl:if test="../adm:property-override[@name=$name][2]">
+ <xsl:message terminate="yes">
+ <xsl:value-of
+ select="concat('Property override ', @name, ' is already overridden in this managed object')" />
+ </xsl:message>
+ </xsl:if>
+ <!--
+ Make sure that this property overrides an existing property.
+ -->
+ <xsl:if
+ test="not($hierarchy/adm:managed-object/adm:property[@name=$name])">
+ <xsl:message terminate="yes">
+ <xsl:value-of
+ select="concat('Cannot find inherited property ', @name, ' for property override')" />
+ </xsl:message>
+ </xsl:if>
+ <!--
+ Copy the inherited property definition taking care to override
+ the default behavior and admin action if required.
+ -->
+ <xsl:variable name="property"
+ select="$hierarchy/adm:managed-object/adm:property[@name=$name]" />
+ <xsl:element name="adm:property">
+ <xsl:copy-of select="$property/@*" />
+ <xsl:apply-templates
+ select="$property/adm:TODO | $property/adm:synopsis | $property/adm:description"
+ mode="pre-process">
+ <xsl:with-param name="mopackage" select="$mopackage" />
+ <xsl:with-param name="moname" select="$moname" />
+ <xsl:with-param name="hierarchy" select="$hierarchy" />
+ </xsl:apply-templates>
+ <xsl:choose>
+ <xsl:when test="adm:requires-admin-action">
+ <xsl:apply-templates select="adm:requires-admin-action"
+ mode="pre-process">
+ <xsl:with-param name="mopackage" select="$mopackage" />
+ <xsl:with-param name="moname" select="$moname" />
+ <xsl:with-param name="hierarchy" select="$hierarchy" />
+ </xsl:apply-templates>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-templates
+ select="$property/adm:requires-admin-action"
+ mode="pre-process">
+ <xsl:with-param name="mopackage" select="$mopackage" />
+ <xsl:with-param name="moname" select="$moname" />
+ <xsl:with-param name="hierarchy" select="$hierarchy" />
+ </xsl:apply-templates>
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:choose>
+ <xsl:when test="adm:default-behavior">
+ <xsl:apply-templates select="adm:default-behavior"
+ mode="pre-process">
+ <xsl:with-param name="mopackage" select="$mopackage" />
+ <xsl:with-param name="moname" select="$moname" />
+ <xsl:with-param name="hierarchy" select="$hierarchy" />
+ </xsl:apply-templates>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-templates select="$property/adm:default-behavior"
+ mode="pre-process">
+ <xsl:with-param name="mopackage" select="$mopackage" />
+ <xsl:with-param name="moname" select="$moname" />
+ <xsl:with-param name="hierarchy" select="$hierarchy" />
+ </xsl:apply-templates>
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:apply-templates
+ select="$property/adm:syntax | $property/adm:profile[@name!='preprocessor']"
+ mode="pre-process">
+ <xsl:with-param name="mopackage" select="$mopackage" />
+ <xsl:with-param name="moname" select="$moname" />
+ <xsl:with-param name="hierarchy" select="$hierarchy" />
+ </xsl:apply-templates>
+ <!--
+ Now append the preprocessor profile.
+ -->
+ <xsl:element name="adm:profile">
+ <xsl:attribute name="name">
+ <xsl:value-of select="'preprocessor'" />
+ </xsl:attribute>
+ <xsl:element name="admpp:managed-object">
+ <xsl:attribute name="name">
+ <xsl:value-of select="$moname" />
+ </xsl:attribute>
+ <xsl:attribute name="package">
+ <xsl:value-of select="$mopackage" />
+ </xsl:attribute>
+ </xsl:element>
+ </xsl:element>
+ </xsl:element>
+ </xsl:template>
+ <!--
Pre-process a relation, merging information from the referenced
managed object where required, and by adding a "preprocessor" profile
which contains information about where the relation was defined.
--
Gitblit v1.10.0