From e9d59ae1b6f7da18a4de6ae58cb5ba275cc0bbfc Mon Sep 17 00:00:00 2001
From: matthew_swift <matthew_swift@localhost>
Date: Fri, 14 Sep 2007 09:28:12 +0000
Subject: [PATCH] Add support to the admin framework code generation scripts so that properties can define their own syntax specific getters and setters.
---
opends/resource/admin/metaMO.xsl | 136 ------------------
opends/resource/admin/property-types.xsl | 252 ++++++++++++++++++++++++++++++++++-
opends/resource/admin/serverMO.xsl | 4
opends/resource/admin/clientMO.xsl | 14 +
4 files changed, 263 insertions(+), 143 deletions(-)
diff --git a/opends/resource/admin/clientMO.xsl b/opends/resource/admin/clientMO.xsl
index 674072c..f04bd52 100644
--- a/opends/resource/admin/clientMO.xsl
+++ b/opends/resource/admin/clientMO.xsl
@@ -362,19 +362,24 @@
<xsl:call-template name="generate-import-statements">
<xsl:with-param name="imports">
<xsl:for-each select="$this-local-properties">
- <xsl:call-template name="get-property-java-imports" />
+ <xsl:call-template name="get-property-java-imports">
+ <xsl:with-param name="interface" select="'client'" />
+ </xsl:call-template>
</xsl:for-each>
<xsl:if test="$this-local-properties[@multi-valued='true']">
<import>java.util.Collection</import>
<import>java.util.SortedSet</import>
</xsl:if>
- <xsl:if test="$this-local-properties[not(@monitoring='true')]">
+ <xsl:if
+ test="$this-local-properties[not(@monitoring='true')]">
<import>
org.opends.server.admin.IllegalPropertyValueException
</import>
</xsl:if>
<xsl:if test="$this-local-properties[@read-only='true']">
- <import>org.opends.server.admin.PropertyIsReadOnlyException</import>
+ <import>
+ org.opends.server.admin.PropertyIsReadOnlyException
+ </import>
</xsl:if>
<xsl:if test="$this-local-relations">
<import>
@@ -396,7 +401,8 @@
org.opends.server.admin.client.CommunicationException
</import>
</xsl:if>
- <xsl:for-each select="$this-local-relations[adm:one-to-zero-or-one]|$this-local-relations[adm:one-to-many]">
+ <xsl:for-each
+ select="$this-local-relations[adm:one-to-zero-or-one]|$this-local-relations[adm:one-to-many]">
<xsl:variable name="java-class-name">
<xsl:call-template name="name-to-java">
<xsl:with-param name="value"
diff --git a/opends/resource/admin/metaMO.xsl b/opends/resource/admin/metaMO.xsl
index c5db99f..d11b125 100644
--- a/opends/resource/admin/metaMO.xsl
+++ b/opends/resource/admin/metaMO.xsl
@@ -368,13 +368,13 @@
<xsl:text>
</xsl:text>
<xsl:text>
</xsl:text>
<xsl:text>
</xsl:text>
- <xsl:call-template name="generate-property-getter">
+ <xsl:call-template name="generate-property-getter-implementation">
<xsl:with-param name="interface" select="'client'" />
</xsl:call-template>
<xsl:text>
</xsl:text>
<xsl:text>
</xsl:text>
<xsl:text>
</xsl:text>
- <xsl:call-template name="generate-property-setter" />
+ <xsl:call-template name="generate-property-setter-implementation" />
</xsl:for-each>
<!--
Relation methods.
@@ -485,7 +485,7 @@
<xsl:text>
</xsl:text>
<xsl:text>
</xsl:text>
<xsl:text>
</xsl:text>
- <xsl:call-template name="generate-property-getter">
+ <xsl:call-template name="generate-property-getter-implementation">
<xsl:with-param name="interface" select="'server'" />
</xsl:call-template>
</xsl:for-each>
@@ -1022,131 +1022,6 @@
</xsl:choose>
</xsl:template>
<!--
- Generate a property value getter.
- -->
- <xsl:template name="generate-property-getter">
- <xsl:param name="interface" select="/.." />
- <xsl:variable name="java-prop-name">
- <xsl:call-template name="name-to-java">
- <xsl:with-param name="value" select="@name" />
- </xsl:call-template>
- </xsl:variable>
- <xsl:value-of
- select="concat(' /**
',
- ' * {@inheritDoc}
',
- ' */
',
- ' public ')" />
- <xsl:choose>
- <xsl:when test="string(@multi-valued) != 'true'">
- <xsl:choose>
- <xsl:when test="adm:default-behavior/adm:defined">
- <!--
- The method is guaranteed to return a value since there is a
- well-defined default value.
- -->
- <xsl:call-template name="get-property-java-primitive-type" />
- </xsl:when>
- <xsl:when
- test="$interface = 'server' and @mandatory = 'true'">
- <!--
- The method is guaranteed to return a value in the server interface, but
- not necessarily in the client, since the mandatory property might not
- have been created yet.
- -->
- <xsl:call-template name="get-property-java-primitive-type" />
- </xsl:when>
- <xsl:otherwise>
- <xsl:call-template name="get-property-java-type" />
- </xsl:otherwise>
- </xsl:choose>
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="'SortedSet<'" />
- <xsl:call-template name="get-property-java-type" />
- <xsl:value-of select="'>'" />
- </xsl:otherwise>
- </xsl:choose>
- <xsl:choose>
- <xsl:when test="adm:syntax/adm:boolean">
- <xsl:value-of select="' is'" />
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="' get'" />
- </xsl:otherwise>
- </xsl:choose>
- <xsl:choose>
- <xsl:when test="string(@multi-valued) != 'true'">
- <xsl:value-of
- select="concat($java-prop-name, '() {
',
- ' return impl.getPropertyValue',
- '(INSTANCE.get', $java-prop-name ,
- 'PropertyDefinition());
' ,
- ' }
')" />
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of
- select="concat($java-prop-name, '() {
',
- ' return impl.getPropertyValues',
- '(INSTANCE.get', $java-prop-name ,
- 'PropertyDefinition());
' ,
- ' }
')" />
- </xsl:otherwise>
- </xsl:choose>
- </xsl:template>
- <!--
- Generate a property value setter.
- -->
- <xsl:template name="generate-property-setter">
- <xsl:if test="not(@monitoring='true')">
- <xsl:variable name="java-prop-name">
- <xsl:call-template name="name-to-java">
- <xsl:with-param name="value" select="@name" />
- </xsl:call-template>
- </xsl:variable>
- <xsl:value-of
- select="concat(' /**
',
- ' * {@inheritDoc}
',
- ' */
',
- ' public void set',
- $java-prop-name ,
- '(')" />
- <xsl:choose>
- <xsl:when test="not(@multi-valued='true')">
- <xsl:choose>
- <xsl:when test="@mandatory='true'">
- <xsl:call-template
- name="get-property-java-primitive-type" />
- </xsl:when>
- <xsl:otherwise>
- <xsl:call-template name="get-property-java-type" />
- </xsl:otherwise>
- </xsl:choose>
- <xsl:value-of select="' value)'" />
- <xsl:if test="@read-only='true'">
- <xsl:value-of
- select="' throws PropertyIsReadOnlyException'" />
- </xsl:if>
- <xsl:value-of
- select="concat(' {
' ,
- ' impl.setPropertyValue(INSTANCE.get',
- $java-prop-name ,
- 'PropertyDefinition(), value);
',
- ' }
')" />
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="'Collection<'" />
- <xsl:call-template name="get-property-java-type" />
- <xsl:value-of
- select="concat('> values) {
' ,
- ' impl.setPropertyValues(INSTANCE.get',
- $java-prop-name ,
- 'PropertyDefinition(), values);
',
- ' }
')" />
- </xsl:otherwise>
- </xsl:choose>
- </xsl:if>
- </xsl:template>
- <!--
Generate client relation methods.
-->
<xsl:template name="generate-client-relation-methods">
@@ -1718,7 +1593,6 @@
<import>
org.opends.server.admin.AbsoluteInheritedDefaultBehaviorProvider
</import>
- <import>org.opends.server.admin.ManagedObjectPath</import>
</xsl:if>
<xsl:if
test="$this-local-properties/adm:default-behavior/adm:inherited/adm:relative">
@@ -1759,7 +1633,9 @@
select="concat($this-package, '.server.', $this-java-class, 'Cfg')" />
</xsl:element>
<xsl:for-each select="$this-inherited-properties">
- <xsl:call-template name="get-property-java-imports" />
+ <xsl:call-template name="get-property-java-imports">
+ <xsl:with-param name="interface" select="'server'" />
+ </xsl:call-template>
</xsl:for-each>
<xsl:for-each select="$this-all-properties">
<xsl:call-template
diff --git a/opends/resource/admin/property-types.xsl b/opends/resource/admin/property-types.xsl
index 58c5179..35cef9d 100644
--- a/opends/resource/admin/property-types.xsl
+++ b/opends/resource/admin/property-types.xsl
@@ -90,7 +90,9 @@
By default property values are represented using strings which
don't require an import statement - so do nothing.
-->
- <xsl:template match="*" mode="java-value-imports" />
+ <xsl:template match="*" mode="java-value-imports">
+ <xsl:param name="interface" select="/.." />
+ </xsl:template>
<!--
Generate the Java definition type used to define the property.
@@ -114,7 +116,9 @@
<xsl:value-of select="'org.opends.server.admin.'" />
<xsl:apply-templates select="." mode="java-definition-type" />
</xsl:element>
- <xsl:apply-templates select="." mode="java-value-imports" />
+ <xsl:apply-templates select="." mode="java-value-imports">
+ <xsl:with-param name="interface" select="'server'" />
+ </xsl:apply-templates>
</xsl:template>
<!--
If the property definition is generic, get the generic type. Otherwise,
@@ -136,6 +140,48 @@
-->
<xsl:template match="*" mode="java-definition-post-ctor" />
<!--
+ Generate property getter declaration(s).
+
+ By default, generate a single getter with minimal documentation.
+ -->
+ <xsl:template match="*" mode="java-property-getter-declaration">
+ <xsl:param name="interface" select="/.." />
+ <xsl:call-template
+ name="generate-default-property-getter-declaration">
+ <xsl:with-param name="interface" select="$interface" />
+ </xsl:call-template>
+ </xsl:template>
+ <!--
+ Generate property getter implementation(s).
+
+ By default, generate a single getter.
+ -->
+ <xsl:template match="*" mode="java-property-getter-implementation">
+ <xsl:param name="interface" select="/.." />
+ <xsl:call-template
+ name="generate-default-property-getter-implementation">
+ <xsl:with-param name="interface" select="$interface" />
+ </xsl:call-template>
+ </xsl:template>
+ <!--
+ Generate property setter declaration(s).
+
+ By default, generate a single setter with minimal documentation.
+ -->
+ <xsl:template match="*" mode="java-property-setter-declaration">
+ <xsl:call-template
+ name="generate-default-property-setter-declaration" />
+ </xsl:template>
+ <!--
+ Generate property setter implementation(s).
+
+ By default, generate a single setter.
+ -->
+ <xsl:template match="*" mode="java-property-setter-implementation">
+ <xsl:call-template
+ name="generate-default-property-setter-implementation" />
+ </xsl:template>
+ <!--
Wrapper templates which can be called directly instead of
@@ -148,8 +194,11 @@
Get the Java imports required for a property's values.
-->
<xsl:template name="get-property-java-imports">
+ <xsl:param name="interface" select="/.." />
<xsl:apply-templates select="adm:syntax/*"
- mode="java-value-imports" />
+ mode="java-value-imports">
+ <xsl:with-param name="interface" select="$interface" />
+ </xsl:apply-templates>
</xsl:template>
<!--
Get the Java imports required for a property's definition.
@@ -202,11 +251,53 @@
<xsl:apply-templates select="adm:syntax/*"
mode="java-definition-post-ctor" />
</xsl:template>
- <!--
+ <!--
Generate the property getter declarations.
-->
<xsl:template name="generate-property-getter-declaration">
<xsl:param name="interface" select="/.." />
+ <xsl:apply-templates select="adm:syntax/*"
+ mode="java-property-getter-declaration">
+ <xsl:with-param name="interface" select="$interface" />
+ </xsl:apply-templates>
+ </xsl:template>
+ <!--
+ Generate the property getter implementations.
+ -->
+ <xsl:template name="generate-property-getter-implementation">
+ <xsl:param name="interface" select="/.." />
+ <xsl:apply-templates select="adm:syntax/*"
+ mode="java-property-getter-implementation">
+ <xsl:with-param name="interface" select="$interface" />
+ </xsl:apply-templates>
+ </xsl:template>
+ <!--
+ Generate the property setter declarations.
+ -->
+ <xsl:template name="generate-property-setter-declaration">
+ <xsl:apply-templates select="adm:syntax/*"
+ mode="java-property-setter-declaration" />
+ </xsl:template>
+ <!--
+ Generate the property setter implementations.
+ -->
+ <xsl:template name="generate-property-setter-implementation">
+ <xsl:apply-templates select="adm:syntax/*"
+ mode="java-property-setter-implementation" />
+ </xsl:template>
+ <!--
+ Generate the default property getter declarations.
+ -->
+ <xsl:template name="generate-default-property-getter-declaration">
+ <xsl:param name="interface" select="/.." />
+ <xsl:apply-templates select="../.."
+ mode="generate-default-property-getter-declaration-aux">
+ <xsl:with-param name="interface" select="$interface" />
+ </xsl:apply-templates>
+ </xsl:template>
+ <xsl:template match="adm:property"
+ mode="generate-default-property-getter-declaration-aux">
+ <xsl:param name="interface" select="/.." />
<xsl:variable name="name" select="@name" />
<xsl:variable name="java-property-name">
<xsl:call-template name="name-to-java">
@@ -215,7 +306,7 @@
</xsl:variable>
<xsl:value-of
select="concat(' /**
',
- ' * Get the "', $name,'" property.
')" />
+ ' * Gets the "', $name,'" property.
')" />
<xsl:if test="adm:synopsis">
<xsl:value-of select="' * <p>
'" />
<xsl:call-template name="add-java-comment">
@@ -282,9 +373,95 @@
'();
')" />
</xsl:template>
<!--
- Generate the property setter declarations.
+ Generate the default property getter implementation.
-->
- <xsl:template name="generate-property-setter-declaration">
+ <xsl:template
+ name="generate-default-property-getter-implementation">
+ <xsl:param name="interface" select="/.." />
+ <xsl:apply-templates select="../.."
+ mode="generate-default-property-getter-implementation-aux">
+ <xsl:with-param name="interface" select="$interface" />
+ </xsl:apply-templates>
+ </xsl:template>
+ <xsl:template match="adm:property"
+ mode="generate-default-property-getter-implementation-aux">
+ <xsl:param name="interface" select="/.." />
+ <xsl:variable name="java-prop-name">
+ <xsl:call-template name="name-to-java">
+ <xsl:with-param name="value" select="@name" />
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:value-of
+ select="concat(' /**
',
+ ' * {@inheritDoc}
',
+ ' */
',
+ ' public ')" />
+ <xsl:choose>
+ <xsl:when test="string(@multi-valued) != 'true'">
+ <xsl:choose>
+ <xsl:when test="adm:default-behavior/adm:defined">
+ <!--
+ The method is guaranteed to return a value since there is a
+ well-defined default value.
+ -->
+ <xsl:call-template name="get-property-java-primitive-type" />
+ </xsl:when>
+ <xsl:when
+ test="$interface = 'server' and @mandatory = 'true'">
+ <!--
+ The method is guaranteed to return a value in the server interface, but
+ not necessarily in the client, since the mandatory property might not
+ have been created yet.
+ -->
+ <xsl:call-template name="get-property-java-primitive-type" />
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:call-template name="get-property-java-type" />
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="'SortedSet<'" />
+ <xsl:call-template name="get-property-java-type" />
+ <xsl:value-of select="'>'" />
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:choose>
+ <xsl:when test="adm:syntax/adm:boolean">
+ <xsl:value-of select="' is'" />
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="' get'" />
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:choose>
+ <xsl:when test="string(@multi-valued) != 'true'">
+ <xsl:value-of
+ select="concat($java-prop-name, '() {
',
+ ' return impl.getPropertyValue',
+ '(INSTANCE.get', $java-prop-name ,
+ 'PropertyDefinition());
' ,
+ ' }
')" />
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of
+ select="concat($java-prop-name, '() {
',
+ ' return impl.getPropertyValues',
+ '(INSTANCE.get', $java-prop-name ,
+ 'PropertyDefinition());
' ,
+ ' }
')" />
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+ <!--
+ Generate the default property setter declarations.
+ -->
+ <xsl:template name="generate-default-property-setter-declaration">
+ <xsl:apply-templates select="../.."
+ mode="generate-default-property-setter-declaration-aux" />
+ </xsl:template>
+ <xsl:template match="adm:property"
+ mode="generate-default-property-setter-declaration-aux">
<xsl:if test="not(@monitoring='true')">
<xsl:variable name="name" select="@name" />
<xsl:variable name="java-property-name">
@@ -294,7 +471,7 @@
</xsl:variable>
<xsl:value-of
select="concat(' /**
',
- ' * Set the "', $name, '" property.
')" />
+ ' * Sets the "', $name, '" property.
')" />
<xsl:if test="adm:synopsis">
<xsl:value-of select="' * <p>
'" />
<xsl:call-template name="add-java-comment">
@@ -371,4 +548,63 @@
<xsl:value-of select="';
'" />
</xsl:if>
</xsl:template>
+ <!--
+ Generate the default property setter implementation.
+ -->
+ <xsl:template
+ name="generate-default-property-setter-implementation">
+ <xsl:apply-templates select="../.."
+ mode="generate-default-property-setter-implementation-aux" />
+ </xsl:template>
+ <xsl:template match="adm:property"
+ mode="generate-default-property-setter-implementation-aux">
+ <xsl:if test="not(@monitoring='true')">
+ <xsl:variable name="java-prop-name">
+ <xsl:call-template name="name-to-java">
+ <xsl:with-param name="value" select="@name" />
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:value-of
+ select="concat(' /**
',
+ ' * {@inheritDoc}
',
+ ' */
',
+ ' public void set',
+ $java-prop-name ,
+ '(')" />
+ <xsl:choose>
+ <xsl:when test="not(@multi-valued='true')">
+ <xsl:choose>
+ <xsl:when test="@mandatory='true'">
+ <xsl:call-template
+ name="get-property-java-primitive-type" />
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:call-template name="get-property-java-type" />
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:value-of select="' value)'" />
+ <xsl:if test="@read-only='true'">
+ <xsl:value-of
+ select="' throws PropertyIsReadOnlyException'" />
+ </xsl:if>
+ <xsl:value-of
+ select="concat(' {
' ,
+ ' impl.setPropertyValue(INSTANCE.get',
+ $java-prop-name ,
+ 'PropertyDefinition(), value);
',
+ ' }
')" />
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="'Collection<'" />
+ <xsl:call-template name="get-property-java-type" />
+ <xsl:value-of
+ select="concat('> values) {
' ,
+ ' impl.setPropertyValues(INSTANCE.get',
+ $java-prop-name ,
+ 'PropertyDefinition(), values);
',
+ ' }
')" />
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:if>
+ </xsl:template>
</xsl:stylesheet>
diff --git a/opends/resource/admin/serverMO.xsl b/opends/resource/admin/serverMO.xsl
index e090765..1d5adb9 100644
--- a/opends/resource/admin/serverMO.xsl
+++ b/opends/resource/admin/serverMO.xsl
@@ -351,7 +351,9 @@
select="concat($this-package, '.client.', $this-java-class, 'CfgClient')" />
</xsl:element>
<xsl:for-each select="$this-local-properties">
- <xsl:call-template name="get-property-java-imports" />
+ <xsl:call-template name="get-property-java-imports" >
+ <xsl:with-param name="interface" select="'server'" />
+ </xsl:call-template>
</xsl:for-each>
<xsl:if test="$this-local-properties[@multi-valued='true']">
<import>java.util.SortedSet</import>
--
Gitblit v1.10.0