java-utilities.xsl revision bb8874d71cdd8e5288297b9727703437c6dfcfed
0N/A ! The contents of this file are subject to the terms of the 0N/A ! Common Development and Distribution License, Version 1.0 only 0N/A ! (the "License"). You may not use this file except in compliance 0N/A ! You can obtain a copy of the license at 0N/A ! See the License for the specific language governing permissions 0N/A ! and limitations under the License. 0N/A ! When distributing Covered Code, include this CDDL HEADER in each 0N/A ! file and include the License file at 0N/A ! add the following below this CDDL HEADER, with the fields enclosed 2362N/A ! by brackets "[]" replaced with your own identifying information: 2362N/A ! Portions Copyright [yyyy] [name of copyright owner] 0N/A ! Portions Copyright 2007 Sun Microsystems, Inc. 0N/A<
xsl:
stylesheet version="1.0" 0N/A This XSLT file contains utility templates which can be used for any 0N/A generating Java code. 0N/A <
xsl:
output method="text" encoding="us-ascii" />
0N/A Add a copyright notice to the top of a Java source file. 0N/A TODO: it would be nice to generate the copyright year automatically. 0N/A <
xsl:
template name="copyright-notice">
0N/A select="concat('/*
', 0N/A ' * CDDL HEADER START
', 0N/A ' * The contents of this file are subject to the terms of the
', 0N/A ' * Common Development and Distribution License, Version 1.0 only
', 0N/A ' * (the "License"). You may not use this file except in compliance
', 0N/A ' * with the License.
', 0N/A ' * You can obtain a copy of the license at
', 0N/A ' * See the License for the specific language governing permissions
', 0N/A ' * and limitations under the License.
', 0N/A ' * When distributing Covered Code, include this CDDL HEADER in each
', 0N/A ' * file and include the License file at
', 0N/A ' * add the following below this CDDL HEADER, with the fields enclosed
', 0N/A ' * by brackets "[]" replaced with your own identifying information:
', 0N/A ' * Portions Copyright [yyyy] [name of copyright owner]
', 0N/A ' * CDDL HEADER END
', 0N/A ' * Portions Copyright 2007 Sun Microsystems, Inc.
', 0N/A Convert an entity or property ID to a Java mixed-cased name. 0N/A For example, the string "my-string-value" will be converted to 0N/A the string "myStringValue". 0N/A The ID string to be converted to a Java name. 0N/A <
xsl:
template name="name-to-java">
0N/A <
xsl:
param name="value" />
0N/A <
xsl:
if test="string-length($value)">
0N/A <
xsl:
when test="contains($value, '-')">
0N/A <
xsl:
variable name="head" 0N/A select="substring-before($value, '-')" />
0N/A <
xsl:
variable name="tail" 0N/A select="substring-after($value, '-')" />
0N/A <
xsl:
call-
template name="to-title-case">
0N/A <
xsl:
with-
param name="value" select="$head" />
0N/A </
xsl:
call-
template>
0N/A <
xsl:
call-
template name="name-to-java">
0N/A <
xsl:
with-
param name="value" select="$tail" />
0N/A <
xsl:
call-
template name="to-title-case">
0N/A <
xsl:
with-
param name="value" select="$value" />
0N/A </
xsl:
call-
template>
169N/A Convert an entity or property ID to a Java constant name. 169N/A For example, the string "my-string-value" will be converted to 0N/A the string "MY_STRING_VALUE". 169N/A The ID string to be converted to a Java constant. 0N/A <
xsl:
template name="name-to-java-constant">
0N/A <
xsl:
param name="value" />
0N/A select="translate($value, 0N/A 'abcdefghijklmnopqrstuvwxyz-', 0N/A 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_')" />
169N/A Add a Java comment. This template handles two levels of 0N/A indentation: the indentation string for the first line, and a 169N/A second indentation string used for subsequent lines. The template 169N/A will output the content wrapping at the nearest word boundary to 169N/A The indentation text used for the first line. 0N/A The indentation text used for all lines except the first - defaults to the value of indent-text. The content to be output in the comment. <
xsl:
template name="add-java-comment">
<
xsl:
param name="indent-text" />
<
xsl:
param name="indent-text2" select="$indent-text" />
<
xsl:
param name="content" />
<
xsl:
call-
template name="format-text">
<
xsl:
with-
param name="indent-text" select="$indent-text" />
<
xsl:
with-
param name="indent-text2" select="$indent-text2" />
<
xsl:
with-
param name="wrap-column" select="'70'" />
<
xsl:
with-
param name="content" select="$content" />
Utility template for removing duplicate values from a node-set. This template is based on the version published on the XSLT site. It is not capable of normalizing nodes - so they must be pre-normalized before this template is called. @param nodes A node-set containing the duplicate nodes. <
xsl:
template name="set-distinct">
<
xsl:
param name="nodes" select="/.." />
<
xsl:
call-
template name="_set-distinct">
<
xsl:
with-
param name="nodes" select="$nodes" />
<!-- set-distinct helper template --> <
xsl:
template name="_set-distinct">
<
xsl:
param name="nodes" select="/.." />
<
xsl:
param name="distinct" select="/.." />
<
xsl:
variable name="value" select="$nodes[1]" />
<
xsl:
when test="$distinct[. = $value]">
<
xsl:
call-
template name="_set-distinct">
<
xsl:
with-
param name="distinct" select="$distinct" />
<
xsl:
with-
param name="nodes" select="$nodes[position() > 1]" />
<
xsl:
call-
template name="_set-distinct">
<
xsl:
with-
param name="distinct" select="$distinct | $nodes[1]" />
<
xsl:
with-
param name="nodes" select="$nodes[position() > 1]" />
<
xsl:
apply-
templates select="$distinct" mode="set-distinct" />
<!-- set-distinct helper template --> <
xsl:
template match="node()|@*" mode="set-distinct">
<
xsl:
copy-
of select="." />
Generate a set of import statements. This template takes a result tree fragment as a parameter containing elements of the form: This template will normalize each element and remove duplicates before generating the output. @param imports The result tree fragment containing the import elements. <
xsl:
template name="generate-import-statements">
<
xsl:
param name="imports" select="/.." />
Normalize the import elements since the set-distinct template cannot handle additional whitespace <
xsl:
variable name="normalized-imports">
<
xsl:
for-
each select="exsl:node-set($imports)/import">
<
xsl:
element name="import">
<
xsl:
value-
of select="normalize-space()" />
Now remove the duplicates <
xsl:
variable name="unique">
<
xsl:
call-
template name="set-distinct">
<
xsl:
with-
param name="nodes" select="exsl:node-set($normalized-imports)/import" />
Now output the import statements <
xsl:
for-
each select="exsl:node-set($unique)/import">
<
xsl:
sort select="normalize-space()" />
select="concat('import ', normalize-space(),';
')" />