For installation instructions see the manual in the docs subdirectory | |||||
or online at <http://ant.apache.org/manual/index.html>. |
This file contains the PGP keys of various developers. | |||||
Users: pgp < KEYS | |||||
gpg --import KEYS | |||||
Developers: | |||||
pgp -kxa <your name> and append it to this file. | |||||
(pgpk -ll <your name> && pgpk -xa <your name>) >> this file. | |||||
(gpg --list-sigs <your name> | |||||
&& gpg --armor --export <your name>) >> this file. | |||||
Type Bits/KeyID Date User ID | |||||
pub 1024/FEECAAED 1998/11/11 Stefan Bodewig <bodewig@bost.de> | |||||
Stefan Bodewig <bodewig@apache.org> | |||||
-----BEGIN PGP PUBLIC KEY BLOCK----- | |||||
Version: 2.6.3i | |||||
mQCNAzZJoiMAAAEEAMzhUxTOC20Nprp6K4nLTiARt+EXii/dovNWWcfzZcYXi/lX | |||||
r3zpUTTZxlKQpd4RaHjFmGgoOraZE4jCRFARVcFJgYmGUKpcWJZO7YKL36WUizTM | |||||
+dyB2ycOtzlty1W5VmRL3FGqo67pKA9F/QHg3NSu9hY1W9xPPK7Kq3f+7KrtAAUR | |||||
tCBTdGVmYW4gQm9kZXdpZyA8Ym9kZXdpZ0Bib3N0LmRlPokAlQIFEDZSrGXHcgyK | |||||
jiW9zQEBshEEAMlG4qVjKp4/agdJG56M6izx9oaKecFLXHQJrFUy3w2PvZHFYtXc | |||||
osXKorX6bPrE8uB57MxbY2WapKeVRodlG0+j39vAf501duK8q2rktfWt9Cl4JjJ4 | |||||
DbWhSWfV1ci62u2gCxwYQe22F9Wh+vhOR5NK9RTbSKhupdlFsnrk/i7xiQCVAwUQ | |||||
NkmiI67Kq3f+7KrtAQGdxQQAlcFOzSv7G6M4uGbgvw7IGgrhx7rawtIyv9hLXgVC | |||||
7ua9xaZV8G0Fl9gh8RnbdcZ4R/aT+KIiAFaslfZ3t6hlC4MTbnAJqvdS/NO98ZkJ | |||||
YvnzZSKHflAbd5gyE7IVxBC9/xRlF/Wls5sYNwb6RjoRCaOjxN/y3WCLa3Va101v | |||||
zNy0I1N0ZWZhbiBCb2Rld2lnIDxib2Rld2lnQGFwYWNoZS5vcmc+iQCVAwUQOxIo | |||||
BK7Kq3f+7KrtAQGn6gP/SBACdHakA4H//otpyESSrk4PmyOaYF0Kyok43Gee2mT+ | |||||
m9+jZ3jLcC0oav6iH+otL/lhk9t/JDM8LjD2kAkdWWoIvvuPyCx97gOzojIo0Ve2 | |||||
1wuxJTF/VIjwyOtE8FzE7p4tkc6EubVpeZkV9Pq9HFRBCUcyKJDLnF4tbstScLU= | |||||
=OBLe | |||||
-----END PGP PUBLIC KEY BLOCK----- | |||||
pub 1024D/51898504 2001-05-29 Conor MacNeill <conor@cortexebusiness.com.au> | |||||
sig 3 51898504 2001-05-29 Conor MacNeill <conor@cortexebusiness.com.au> | |||||
sig 5F6B8B72 2002-01-11 Stefan Bodewig <bodewig@apache.org> | |||||
uid Conor MacNeill <conor@apache.org> | |||||
sig 3 51898504 2001-05-29 Conor MacNeill <conor@cortexebusiness.com.au> | |||||
sig 5F6B8B72 2002-01-11 Stefan Bodewig <bodewig@apache.org> | |||||
sub 1024g/D1ECBA5D 2001-05-29 | |||||
sig 51898504 2001-05-29 Conor MacNeill <conor@cortexebusiness.com.au> | |||||
-----BEGIN PGP PUBLIC KEY BLOCK----- | |||||
Version: GnuPG v1.2.0 (GNU/Linux) | |||||
mQGiBDsTqygRBACiZckNdclTlQFonLaIKBFGhMy0KKByw0x8XA4iwdbCXuF6xNIc | |||||
HIFHajJ74AHchQ4d8xtomBy6b8yvFgWVeaZensvn69BlLeqGdyeJRzfPt6TgRnzZ | |||||
2eWhb0HXdG3JwxL/2BabDhHfs4YJOrgB/vhRFQku6oCMRiBPtJj2werD6wCg0/zp | |||||
jacYTw6+CR+sVvneCNyySFED/R3j10c4RnR8djgv1jKT8CKPuHYraupI9INEe+I6 | |||||
7qWjtJ02GzvMO6TElAtUsf4aysu45GgwkwEBnuG6mYb3Pq0V2c5tJc2A3Tj3DrdR | |||||
i3HUNwurbus76I0sPyyENPu12QPeC6mvWLEsxVJ9o0hRKFayGvYUmrwWK9UFLjvp | |||||
p9cXBACDHgLn7MAVLqUdYhRrUj/M+GOUpvBikEgoJJrEUmb5X4+++dffMh5HBIO4 | |||||
5LA11qEKuM2xnKqOilP7NLYXz1Fe0ocqv0jsHB4SprFTTai7ma31uwuRQvCQXVv1 | |||||
yJ5CLqYda64h/UA2kmmR2dfopmvDogYEMz/HU5voozxe7BEI7bQhQ29ub3IgTWFj | |||||
TmVpbGwgPGNvbm9yQGFwYWNoZS5vcmc+iFcEExECABcFAjsTqygFCwcKAwQDFQMC | |||||
AxYCAQIXgAAKCRCBBGRPUYmFBDgIAKCZztXqKhK6kXOnoGy7opCNmWU0lwCgsPDa | |||||
4m+ruW3ch0rfbqtR75S52R+IRgQQEQIABgUCPD6eTgAKCRCiEVrhX2uLcqCcAKCr | |||||
1Wylqju9YjBi5Twej9ze69JFBQCeOaMgo6yjnkcV3PnVInLlaMwPr5q0LUNvbm9y | |||||
IE1hY05laWxsIDxjb25vckBjb3J0ZXhlYnVzaW5lc3MuY29tLmF1PohXBBMRAgAX | |||||
BQI7E6xMBQsHCgMEAxUDAgMWAgECF4AACgkQgQRkT1GJhQTY0ACgmZmKheHzjPJs | |||||
5hybpyvnvEiPYqYAn2+ryxdtz8XyOMExGRmHNlhG7svsiEYEEBECAAYFAjw+nlUA | |||||
CgkQohFa4V9ri3JYYACg1WN+NCptfKVP1mbrIa+0ajztsiIAnAn+m70iwRRFZCxr | |||||
jcULoY5SjyTLuQENBDsTqy0QBACfsCxJ6iCtgX8zjlVtMsMfDqu72x5sYatWKn8c | |||||
u+4Oj5mi0x6azZIhwCa+K3ihLVOyG1mCRnzztGTIxWYRhq3TESIVOfgm+NgLGrmA | |||||
XUTFyCT+21TExLCpuVZKmUHsWXLxDtfQ1diPeQpiQ8+Fvb/4jLGFjFIrQ2VjtFQn | |||||
kumkSwADBgP9H0bF4hdMuVEcSJ9imxSoJshcOOA3Vd2+YiCTZhBygWM49wY5jNos | |||||
/DArIjNCE53IlOu/UtHB2jqkSqjF0soGYsUjeCWouiTP9hLuMKPjnqj9ryJPTDKz | |||||
nTCZ4TuB5CtzrKTlWLmPCPpFsGqe4KjMeKg/mqGqjPKl97xgStK9N9GIRgQYEQIA | |||||
BgUCOxOrLQAKCRCBBGRPUYmFBMM6AJsF3FFyZGEmbt9aGG1W/u0oI9mcLgCfQyJ+ | |||||
aalbspazea4J9zgi59SSwOM= | |||||
=cBdR | |||||
-----END PGP PUBLIC KEY BLOCK----- | |||||
pub 1024D/5F6B8B72 2001-05-28 Stefan Bodewig <bodewig@apache.org> | |||||
sig 3 5F6B8B72 2001-05-28 Stefan Bodewig <bodewig@apache.org> | |||||
sig 51898504 2002-01-11 Conor MacNeill <conor@cortexebusiness.com.au> | |||||
sig 3 F88341D9 2003-03-17 Lars Eilebrecht <lars@eilebrecht.org> | |||||
sig 3 2261D073 2003-03-17 Astrid Keáler (Kess) <kess@kess-net.de> | |||||
sig 21D0A71B 2003-03-17 Dirk-Willem van Gulik <dirkx@apache.org> | |||||
sig 75A67692 2003-03-18 Erik Abele <erik@codefaktor.de> | |||||
sig B3B2A12C 2003-05-20 ct magazine CERTIFICATE <pgpCA@ct.heise.de> | |||||
sig 3 8103A37E 2003-04-04 Andre Malo <nd@apache.org> | |||||
uid Stefan Bodewig <bodewig@bost.de> | |||||
sig 3 5F6B8B72 2001-05-28 Stefan Bodewig <bodewig@apache.org> | |||||
sig 51898504 2002-01-11 Conor MacNeill <conor@cortexebusiness.com.au> | |||||
sig 3 F88341D9 2003-03-17 Lars Eilebrecht <lars@eilebrecht.org> | |||||
sig 3 2261D073 2003-03-17 Astrid Keáler (Kess) <kess@kess-net.de> | |||||
sig 21D0A71B 2003-03-17 Dirk-Willem van Gulik <dirkx@apache.org> | |||||
sig 75A67692 2003-03-18 Erik Abele <erik@codefaktor.de> | |||||
sig B3B2A12C 2003-05-20 ct magazine CERTIFICATE <pgpCA@ct.heise.de> | |||||
sig 3 8103A37E 2003-04-04 Andre Malo <nd@apache.org> | |||||
uid Stefan Bodewig <stefan.bodewig@freenet.de> | |||||
sig 3 5F6B8B72 2003-03-07 Stefan Bodewig <bodewig@apache.org> | |||||
sig 3 F88341D9 2003-03-17 Lars Eilebrecht <lars@eilebrecht.org> | |||||
sig 3 2261D073 2003-03-17 Astrid Keáler (Kess) <kess@kess-net.de> | |||||
sig 21D0A71B 2003-03-17 Dirk-Willem van Gulik <dirkx@apache.org> | |||||
sig 75A67692 2003-03-18 Erik Abele <erik@codefaktor.de> | |||||
sig B3B2A12C 2003-05-20 ct magazine CERTIFICATE <pgpCA@ct.heise.de> | |||||
sig 3 8103A37E 2003-04-04 Andre Malo <nd@apache.org> | |||||
sub 1024g/24774157 2001-05-28 | |||||
sig 5F6B8B72 2001-05-28 Stefan Bodewig <bodewig@apache.org> | |||||
-----BEGIN PGP PUBLIC KEY BLOCK----- | |||||
Version: GnuPG v1.2.0 (GNU/Linux) | |||||
mQGiBDsSIk4RBADSCj6rUjV64tYCGT1DYKYR7GthyWpNdGHSYLbETBcDatAe1dzQ | |||||
5NsCgfrlybfyeY+y1lxr3T9bqf6zJWDw/718wff96qmmv1qzexSYtmIrj+h53V82 | |||||
EXwWOFuYMJisuxdT940iQzosm3GOv4MJdEg3oI2SgfEyRQQ6vO4Ob5rHDwCg5taZ | |||||
nrHOrXx2dIGHxpxRZ0SUl30D/jmtttFjYOQ3LBMriikz5mh2sK3ZnoSRF4o5O0zW | |||||
Ve6e2SFXOEjVjImKsH6KCbdQNelrAdgiyOoXClyQKsQ27pncbdWo6bO0E3POJZVm | |||||
XaeW7iudHVr63rU5PViXObIQrdQl0D59j5brKj4vdlTyUw8kaHPvbKPDEOwvZq4Y | |||||
LJQ5BACA1YilTeXRJqwFsNlpcxCHwlULD4QUVP496prQWf1B7Z6g0KvLGrQsO0Vn | |||||
Jcn+fEqukysTJixSXCPebosltd4RalJIupVYkp4w6MJ7biaDAlLuNhDcI/AiXTmV | |||||
dXUedVXIaM8I3Ne23gucwbAyc0Hvb+3cSAKRhl/azFQhuHBvlrQjU3RlZmFuIEJv | |||||
ZGV3aWcgPGJvZGV3aWdAYXBhY2hlLm9yZz6IWgQTEQIAGgULBwoDBAMVAwIDFgIB | |||||
AheAAhkBBQI7EiJPAAoJEKIRWuFfa4tyjzgAn3a+nFeNb3mAZQR4lRcXy3F+8eTh | |||||
AJ4iuLt4No6TUB9xNETrm3Y/0TvkU4hGBBARAgAGBQI8PtWPAAoJEIEEZE9RiYUE | |||||
nZIAnjOkQx1BfxN9+E7Yiz4MOxqZjSUpAKDQi0Alv/VR61fmR7KHZ11J2g+HSIiZ | |||||
BBMBAgAGBQI+dd8MAAoJED6Pt/L4g0HZJ2QD5RzYjJ0fi1Gr6NsjmIiU/lvfvPqj | |||||
bNoK2A2flkmLo2lk9jSa1AmF0ETOoCg8hZZHCbxyPZRdsmDJFXrZZWVTdUyZHhHb | |||||
Wx53DR3HavmVEEdDZBSkxfXdSu1CNq31sbdcumtd03FI6SV827cPzl1/RGUiOkEL | |||||
eK0hZb3IvSd5iEYEExECAAYFAj512sEACgkQ7tHqOSJh0HNFuACfb7quMJZHOk5p | |||||
pmTxf4GVS5bh3E4AniLa5788ktdcZCBE5Or+G+yuIGooiD8DBRA+daoa/W+IxiHQ | |||||
pxsRAkQFAKDmlWVuQnWfaGK9z8CP4vESTfiXyQCgpnf1yJWDgqWvUHOAvOeaTPDR | |||||
cOmIRgQQEQIABgUCPnekEAAKCRAVP6DNdaZ2ki/rAJ9Q0x5m4SE3hMNGUoMgS0MN | |||||
mYXDOQCdGa0QW2fZW4B1wSjiUIi6VgY+F7GIRgQQEQIABgUCPsoulgAKCRDb0kX8 | |||||
s7KhLBfwAKDV6uwqf9AMBJlr4aE45rWOnlWAeQCgjBYQVHWFjV1cmpT06vE4bMDV | |||||
J6+IRgQTEQIABgUCPo3OLAAKCRDKaTl0gQOjfpFKAJ9TY+mKmq0INLC9iqxbEETj | |||||
NwOn0gCgspeNEqX1SUjt932Lj3IvXR6fkAi0IFN0ZWZhbiBCb2Rld2lnIDxib2Rl | |||||
d2lnQGJvc3QuZGU+iFcEExECABcFAjsSOYEFCwcKAwQDFQMCAxYCAQIXgAAKCRCi | |||||
EVrhX2uLcsm6AKDaA//SYJv2pcXwGBC89OSzGvxy3gCg1kx6qu6zJKaWaE1L9oFq | |||||
Vc65OUSIRgQQEQIABgUCPD7VlQAKCRCBBGRPUYmFBNCzAJ9tv7tNS6NwaOZQ8cR0 | |||||
pGslJGKtuQCgpttMmhhRrUwyVuEXc+dKX7rdQMKImQQTAQIABgUCPnXfDwAKCRA+ | |||||
j7fy+INB2Vm6A+IDxiYtMvd/mad+7hRoKXvD5AddB1SwnvQdJe0ewStFBYZxZdNO | |||||
LXdkVngCwAJziPGZcQmocEHVMrN+Mxe+3OX0PEZ+3KOOsAUi+fTov2xvf8EWKgX9 | |||||
d0li9iEytVA4M0c52a3bPTC0Kki/KAY3m8oNvAmTwWB9dBSooFFDMIhGBBMRAgAG | |||||
BQI+ddrHAAoJEO7R6jkiYdBzruYAnAzvTrvDQNvoAoaDQJ+o/ydqMA8ZAJwNEOQD | |||||
Hsz+6ynbMPoQmKmUqfEISIg/AwUQPnWqIf1viMYh0KcbEQIkpwCeInf4o3C5Ykh/ | |||||
xBodVImrp2Cvcy8AoMn3me5p4Sl2rm2tjVxTJZt2sUr7iEYEEBECAAYFAj53pBoA | |||||
CgkQFT+gzXWmdpIpGgCgiTARP6Cf+JKOxUaVFr0L9DC5oUcAoIxF7D5mOVK/AFcp | |||||
1cxNk3BLtdq3iEYEEBECAAYFAj7KLjIACgkQ29JF/LOyoSwAbACglNp7V2Pw4U57 | |||||
5IuooM677bZf8pwAn2U2TcHj7PYprU+qYRkyJ3pa7FyyiEYEExECAAYFAj6NzjUA | |||||
CgkQymk5dIEDo35YPwCeJIU/monN96nP4jJjAuflEXMbemUAoJXq7oVCYuOCqWr/ | |||||
T3VW0DM3W+dntCpTdGVmYW4gQm9kZXdpZyA8c3RlZmFuLmJvZGV3aWdAZnJlZW5l | |||||
dC5kZT6IXAQTEQIAHAUCPmiBXAIbAwQLBwMCAxUCAwMWAgECHgECF4AACgkQohFa | |||||
4V9ri3JPKACfXhFOr4gMMIQwEGvUb6J/X4asuzIAnje2H9T1r/jSVi1NbIEtQfbp | |||||
myQXiJkEEwECAAYFAj513w8ACgkQPo+38viDQdmGkgPnUYJfHlDrQ2jYJWuPDve9 | |||||
n4pV9OvyIllKyLdfULjsLWXw4Jm+fMQJgWr2GEov1ZYIyS2+rGDZpbz/vxaBVbgq | |||||
M8TPdiXzxwU8AFq4k+Em4fKXR58ByLSJjvLLza61spNHJennEUFp3tTpEsr4bNuu | |||||
aoRYhtiKzTqNuoC+0x+IRgQTEQIABgUCPnXaxwAKCRDu0eo5ImHQc5lcAJ9FOoAL | |||||
4uHMuqHXrrxsEVPJvEJ2/ACggaOR62EziUqcqpdm/1Zy3P4T22iIPwMFED51qjj9 | |||||
b4jGIdCnGxECWssAoKnkR63bWGCFDB5YJtfZJ+nQq3TAAKD1bzG/kITQpIHsT2vC | |||||
Y1yBmlWbBYhGBBARAgAGBQI+d6QaAAoJEBU/oM11pnaS+9IAn0kFlXAzOhhu4r5f | |||||
glMVuw5bTAd0AKCtYRX2ESU/+tsE8vuXWtsMCGeI5YhGBBARAgAGBQI+yi67AAoJ | |||||
ENvSRfyzsqEsSccAoKqG39X2y6xoQa56nviF5iCj/oTFAJwLKx9GyKEUbSM9f/IQ | |||||
7AsZPhHT54hGBBMRAgAGBQI+jc41AAoJEMppOXSBA6N+xYgAn1HbGamcXTDYSFjn | |||||
3U5ik2vQa8nuAKC/uUM01gsdn+71EiAkmrjlH6H9MLkBDQQ7EiJUEAQAzVKWS8Qr | |||||
kysydbTJu2/14wIbz2Coi93aAGelwCwXSxf50JpYdY3Lkcvd0FqT8bcEnz43MCSx | |||||
8vlKubQtUpx9WMGIb4ixtShLJ4lAa6FJldhychz/dnxSNyz5N8W6sby4dTVxac0r | |||||
loxjAOurGanhG7TMtgfDi0cEEoXRyAVoKyMAAwUD/j1pJm4Npq2mlJoE7MK3vAhg | |||||
KwYHFflmJusmqvSAtRuFdT15pbMJrA5bAK+lA3SVOOhhWTCItlphSR2qxJCAcBTe | |||||
OMqUi5ohFcCkSRNvwmDtH+80B3BehlEsEKNk8Z3moa2ch7Oxnb6XEXH5tGJ5Qvx9 | |||||
Qid6ZfBaXx7bc8yKyCb4iEYEGBECAAYFAjsSIlQACgkQohFa4V9ri3INMgCgnc22 | |||||
kj8TfjktU6u4SUUqud25ZZcAn0B2b0zPjKjGuiwdKSnkFbNcFS3g | |||||
=9dY9 | |||||
-----END PGP PUBLIC KEY BLOCK----- | |||||
pub 1024R/697ECEDD 2000-04-06 Henri Gomez <hgomez@slib.fr> | |||||
sig 697ECEDD 2000-04-06 Henri Gomez <hgomez@slib.fr> | |||||
-----BEGIN PGP PUBLIC KEY BLOCK----- | |||||
Version: GnuPG v1.2.0 (GNU/Linux) | |||||
mQCNAzjsydwAAAEEAMpwFU/ci3/wR3ryCGp9Exr+Rx/hTQ7hWAJcVw8ejlBXlT4T | |||||
yITlRUs0HGfRWxME2J55PuXXsIEPZzjfozNtvOyq8WlLlJ7iaiyWxVRoPJ25sSEj | |||||
C9etm6wjj4E66ZgzuElZkm1m69uEsCHPPNuz1oQ/g1O+SmIVxIYirlxpfs7dAAUR | |||||
tBxIZW5yaSBHb21leiA8aGdvbWV6QHNsaWIuZnI+iQCVAwUQOOzJ3IYirlxpfs7d | |||||
AQFQyQQAj0D9G0hEL7SQGaSCkkoXwvamQw42N8+tNm+jfWHWdE4HAiVlhJmI2GyD | |||||
sdcXVAcR8R7ILIRB5AY7a3bF+qMk0r+vO6oR878RKKn9AvtaAIOnrh6tr0tiPwf5 | |||||
XDUMySxIWJEF3SmJAy9Lq3bAl5GMzZCFHiS0NW2gtWgmr/u1RuM= | |||||
=6l+I | |||||
-----END PGP PUBLIC KEY BLOCK----- | |||||
pub 1024R/397DCAD5 2002-07-03 Henri Gomez <hgomez@users.sourceforge.net> | |||||
sig 397DCAD5 2002-07-03 Henri Gomez <hgomez@users.sourceforge.net> | |||||
-----BEGIN PGP PUBLIC KEY BLOCK----- | |||||
Version: GnuPG v1.2.0 (GNU/Linux) | |||||
mQCNAz0i0UUAAAEEALXePN6IHne0W96YRMnR+4EXB6402QY5f8ZLcnSUZUH55Fb1 | |||||
qcZGBc3WRKlPiUvwBD+eVYgCpNSXF/H+oV1mawxNJN5XwqBEpfYmY8MRIPcqa61h | |||||
bJc3LBSm1qNf05G5Cwxeed+OgVm0r1HBy6DAgDHAqNlkC8DZ/BVgqMA5fcrVAAUR | |||||
tCpIZW5yaSBHb21leiA8aGdvbWV6QHVzZXJzLnNvdXJjZWZvcmdlLm5ldD6JAJUD | |||||
BRA9ItFFFWCowDl9ytUBASNyA/458T84LUVhqq6Y9fPBAfcFMWY2kehuDWsQEXkO | |||||
46XoK+AnFZCkKuyDLqPHchVUO5pK/gZYsDK/xJkfh3u4FTDTsecb9wFmIeyayVIN | |||||
SI8o6l8EZzDX/PGwqEwzxHrbQkIgIktNn5ApIoazvdBpbkQfNj1vr2wWoMYPLAWM | |||||
8xzecA== | |||||
=UmZ8 | |||||
-----END PGP PUBLIC KEY BLOCK----- | |||||
pub 1024D/307A10A5 2002-07-18 Henri Gomez <hgomez@users.sourceforge.net> | |||||
sig 3 307A10A5 2002-07-18 Henri Gomez <hgomez@users.sourceforge.net> | |||||
sub 2048g/862B8F70 2002-07-18 | |||||
sig 307A10A5 2002-07-18 Henri Gomez <hgomez@users.sourceforge.net> | |||||
-----BEGIN PGP PUBLIC KEY BLOCK----- | |||||
Version: GnuPG v1.2.0 (GNU/Linux) | |||||
mQGiBD02vbERBAC1v8fR6gjERpaz4UMfdy0hRVWCPSbOdF+Swm/IenjVzErco6zb | |||||
MTa13umUNrDPBy/tTWiCCZrOnqi7fgDzWqPEqrXJjKAFVLEWE6MmKylPPEPG1/bm | |||||
idkNGERSAZduvhKv777PzvEJJ/8eGe3wy/O8NbgIjCPtr4UklwCZS8cFuwCg8oMO | |||||
UdT8qZRtzdxdAyu1m5fUb+MD/3IKJYWXsdtb6iBphCU4f/BoyjVC9EZJ1ywLuiVM | |||||
siKbuaDUaXU9nWcbNKv+fx8uZ1NaadpfLokqqhnWcpnSiqw8HNR7SwsF1D33rkXK | |||||
O4FSuVss/tIoqGdWFcJyPkP4yP5shxqR335narVw2vDa0+BiWkALbA2qVsSIdZDB | |||||
LeFZA/47AMBS0U2BRk2rQT8LmMuFl7mR+wNBM4n7FUGdxsGn3TcYd4pXTNrEQPrV | |||||
YNdooKlikgGk4hgFnIFX09Spmimqgq0goFue81rttVdZZ4uep8dTghY6gwmvcOxX | |||||
jATbhWStBhdu9B35kzfHc+1QihD5Z94u4uyWIVBIzikcdiY8LbQqSGVucmkgR29t | |||||
ZXogPGhnb21lekB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+iFcEExECABcFAj02vbEF | |||||
CwcKAwQDFQMCAxYCAQIXgAAKCRAZMdaEMHoQpYijAKCCP68ndU/kTXR9XAKLvibC | |||||
3S8+1QCfUFQYte3Jo+MHKaWjsu9JGptRzo+5Ag0EPTa93RAIAKlsRJ5gOGTFsmaR | |||||
W9k6MIh4c/MCy7J7HUxT5xTdHROa+3zUh+FAE/JaOx9ZtZtH863DFHA8cP4L+tpi | |||||
PjBT6g2E94dwGcuH/OiSSCT4JSBukbGbOuLLdmFXqUl8+4gsL90Xal67FtNLwyLG | |||||
1n7geLir0byD+OT7VLA5w+6G0NOpJEveV/FIa2qLgdRZ8vz73ybgMh18hBUrUmro | |||||
jncp0rln2VU7VCH1C2aClKm7kK4mGAjIFIzKbguK+kM3b8NDHmXKpT6syyCtIM3h | |||||
prkV1TUCAFqLI32aSdlTN79lpeA2zDga9k4/4X/RDHsFpRN2neRFGTNUtuUgYpQQ | |||||
E5zWBmMAAwUH/RiGxyeBsad923IwE1+GAjxFl2tqF9xWk0J6yTnSK4nfhYAE9evV | |||||
jwDEok9jRl4ILCcXx6YN/d/lWNuSbARKHz/3hLiTouPpwd3SSJ8is2x9PgpJz5JX | |||||
cD0y1SkbPLvs3jH3ZmdcxZpuAmJeI/typqFKK5pWP44oXIH+XH/8nWDtmLEBkgKQ | |||||
/ATQWenMTmZ6MIJ6aWKWGkO9QS6iYRz3PPPGQ1O8W02CeprM2wBtlb8J1Z3RxNhM | |||||
rZcg/1Qi3V3D1HI4zw6tAFmDeBb8J4PaBQzqlhzx2EBTbfwNPhV8AlPvpxHEeGGn | |||||
v+O1yhZr33SnyZdINNoNDn+owVMdmkobe9GIRgQYEQIABgUCPTa93QAKCRAZMdaE | |||||
MHoQpRsTAJ4qst3MhLm48fBAEnzuzi/BIKr+AgCfYaCB/AvPoncQbHc8BcNGRimR | |||||
P9A= | |||||
=hQhz | |||||
-----END PGP PUBLIC KEY BLOCK----- | |||||
pub 1024D/EDF62C35 2002-04-10 Magesh Umasankar <umagesh@apache.org> | |||||
sig 3 EDF62C35 2002-04-10 Magesh Umasankar <umagesh@apache.org> | |||||
sig 3 5F6B8B72 2003-03-07 Stefan Bodewig <bodewig@apache.org> | |||||
sub 1024g/B5FFC53F 2002-04-10 | |||||
sig EDF62C35 2002-04-10 Magesh Umasankar <umagesh@apache.org> | |||||
-----BEGIN PGP PUBLIC KEY BLOCK----- | |||||
Version: GnuPG v1.2.0 (GNU/Linux) | |||||
mQGiBDy0ebgRBADuKIKD8PuJ4wKEV1h2AprwJjxCRx8vn48XNwfLZuvhw8cpArtK | |||||
rZwhoGPPUPEEXgtTNerlKq4VwpAwcnvRz7oC/7aWkUbcR2sAyhfe2scohwPgw7Xv | |||||
+isWC0NDPdrxvXG/PUOG/cnELunr51ymybBqBxUd2gMhYIxPo67D+YPYLwCgwcZp | |||||
yc/6kJa116ESWHrti342GD8D/1srpnRs9CiS1DQF1uZ1wW4vzj4VD61tKsjdWD8D | |||||
V573R22iMDLSj4oMB536WxUH7snz8XsAKm/peqJ6G9m0smtmWA1ago5yzQj70WqF | |||||
xzWBhHn2I/YfAQ8pb2s9q1lClj8elnCxT65L27ydBAZteejb2VqjtQ6iGy86PUT2 | |||||
wRUvBADZmoV1eIZJEM5NnxBv1EtvRYZtIQEzZ8dO2A1LOS7qlVr8IypljNPLGhzX | |||||
VHNvVsjC9QMUSWeBsDedvQHQ3hJpIMnTI32XE1V4gX06gfVTZdhf2fLTtwnsHZp0 | |||||
oumqshGDVRhNJJdDYLikxWOxOfkNveKEqJFvtuBR+ZqqluQKebQlTWFnZXNoIFVt | |||||
YXNhbmthciA8dW1hZ2VzaEBhcGFjaGUub3JnPohXBBMRAgAXBQI8tHm4BQsHCgME | |||||
AxUDAgMWAgECF4AACgkQ76Pnee32LDWSRwCfeASWXvpdt7bSFPMtszU/7uPEktsA | |||||
n23mYUN5WKJA1ZreW+0CcZ2ESnOviEYEExECAAYFAj5ogYgACgkQohFa4V9ri3IW | |||||
YACgsxGig0PL0M86rJsA/IpXjBdg3ysAoJzsoUZ/7s2BxDfzF/FRTVIzS+TMuQEN | |||||
BDy0eb8QBACBVb9YDJRp9Irzmq71Jf9FIPw+4g/cWpF3t/Eb7eSzMcOvTAXyNIWz | |||||
aaOjHre7lFctHfq8ls/6gR7uqajiAnfQcfTcu7pp+F5KsU0Embt83SFzZ3aoJwET | |||||
mB/LqUyrrGDiue3lU+flJO7UmcsRvtk0+BDkyCeB9HgfdpXbBLCyuwADBQP+PNxX | |||||
4e1tg3ZJo/xNEnD2Re3HjmQRrr0RYJLUGjgQrAEONSgowx3IW8/JssmNJVjnYm0q | |||||
jSKsb8rergCFJhPNZ8Dd/k00pKcrq+IN6j7WTYLqPce87zrGAZUtmDwDSp5mxy5E | |||||
xWJJxsgBPk4YBQLzJt21A3BgK/i24Sze2VLbaZuIRgQYEQIABgUCPLR5vwAKCRDv | |||||
o+d57fYsNa8xAJ4mLfonZbd64+YY9rfvhIh3Vsl3AACeLPPKtma2K6XCfhTBEDnj | |||||
hzSr4vo= | |||||
=lBfF | |||||
-----END PGP PUBLIC KEY BLOCK----- | |||||
pub 1024D/265B4C63 2003-08-18 Antoine Levy-Lambert (Apache Ant Committer) <antoine@apache.org> | |||||
sig 3 265B4C63 2003-12-06 Antoine Levy-Lambert (Apache Ant Committer) <antoine@apache.org> | |||||
sig 3 5F6B8B72 2003-12-12 Stefan Bodewig <bodewig@apache.org> | |||||
uid Antoine Levy-Lambert (Apache Ant Committer) <antoine@antbuild.com> | |||||
sig 3 265B4C63 2003-08-18 Antoine Levy-Lambert (Apache Ant Committer) <antoine@apache.org> | |||||
sig 3 5F6B8B72 2003-12-12 Stefan Bodewig <bodewig@apache.org> | |||||
sub 1024g/A3060393 2003-08-18 | |||||
sig 265B4C63 2003-08-18 Antoine Levy-Lambert (Apache Ant Committer) <antoine@apache.org> | |||||
-----BEGIN PGP PUBLIC KEY BLOCK----- | |||||
Version: GnuPG v1.2.2 (MingW32) | |||||
mQGiBD9AzmcRBACMqgb7IFvC/nLxw7mUAgHENeZXY3JOQJ8wVBevIbbMEeFvzHE2 | |||||
diFydqUXocPexduYr0ahkf033WvWdAiNqDLfVW/HFOsc1TpjbHkqPUHtJ62Ya5tg | |||||
nH4UGN9BYZfMbfVDOSz41lYwmfK5HYgpZN/sBQBSKf2qgoFB+LxYaae8YwCgrWlu | |||||
fYhf7fkKbbdSf3BGS67ggNkD/0VvkXkw1SEnPaqrkKGkPKomCTb2auGxcYYI3/rP | |||||
1m+SGRf0gE1NtocmIEitiR6WvfKUjoMAXSCp5KdnUXmO9rwzkM002KCA7K5CY+e/ | |||||
2bLDuiQ3rNiD4mFfG6M+UnmZ+GMFba1p9Cp4PqLNLsCHz67t7hEsscTZQ8mZ9xKM | |||||
+GCsA/9P+XFM7JDn9MLhYab9qo1CkceBkthUP6jWGjuAZ00elmBCkpkzNv5aIzss | |||||
xih2GpaU/tmcMjw8FGp0dTwzqdpmbZBLjunRnuBTir4m4l5G9rwl4JbfK1PVqk4a | |||||
VKkh9W7/yqBcEfNcsfJO9cqaQ+PzcnCoDiD9UHEBYzUhrCKwhLRCQW50b2luZSBM | |||||
ZXZ5LUxhbWJlcnQgKEFwYWNoZSBBbnQgQ29tbWl0dGVyKSA8YW50b2luZUBhbnRi | |||||
dWlsZC5jb20+iFsEExECABsFAj9AzmcGCwkIBwMCAxUCAwMWAgECHgECF4AACgkQ | |||||
hhTWqyZbTGMnOgCeJV2gI+1CIxMR7dcIhXjPkiusreIAn2SGOsPS0o89l0EIVuc9 | |||||
J2F03aB+iEYEExECAAYFAj/ZwioACgkQohFa4V9ri3J8CACgiGlh+td0BAnJPq19 | |||||
ovEQR2DJ02MAoLP203EF+BLPpykeTcGp8UEWmeGQtEBBbnRvaW5lIExldnktTGFt | |||||
YmVydCAoQXBhY2hlIEFudCBDb21taXR0ZXIpIDxhbnRvaW5lQGFwYWNoZS5vcmc+ | |||||
iF4EExECAB4FAj/SSwYCGwMGCwkIBwMCAxUCAwMWAgECHgECF4AACgkQhhTWqyZb | |||||
TGOh/QCfbrSoipMlizyGT6c8BOPEd9zzfi0AnRRTqTDzXzsGk4CG/BJME9CCm7Ts | |||||
iEYEExECAAYFAj/ZwiMACgkQohFa4V9ri3IOVACgh2QHS1+cVjvM4eLjls1bJwWi | |||||
o5IAoLtAszHrwHS5qrhvr2rtnlyyyV2guQENBD9AzmkQBACNpBfqi2PweozCtxoX | |||||
PqzKdRDKqCw7TOrDR6lbP3z/ov/1SN5Vc0XqNzBSGqwBcmGWtneABkX7n4uzJrC5 | |||||
wvX/TZ/DkMvypPyeNVMu+/ZMlzdbx06OUDKr6Fy/NtaI7cN1rw+Igyv22Q8ilhhg | |||||
s/5Rdj84EtJkWQjVRml6wXSAZwADBwP/TqyhOC4sA5YrePYGH8i46h0SU9dXjfEF | |||||
JijC8vXZ+BNQHQVK3fjEXedZL8Zvvp1bsMu7Muz9SMnqygM1unp2NGxLRd/9315p | |||||
Qh0VStYKn0xq13ybOKr0Gsyx5yyl3Nzlu/1qAR0es/zN4jV7/IQi3R2GOvezcpHX | |||||
mkbsYiZAhu2IRgQYEQIABgUCP0DOaQAKCRCGFNarJltMYxcsAKCSJJUABlXYnLBj | |||||
b+WtmAzu0JjZNACdFJ4KIATJDK/5ajFq5+irOpodoHc= | |||||
=UomR | |||||
-----END PGP PUBLIC KEY BLOCK----- |
/* | |||||
* Apache License | |||||
* Version 2.0, January 2004 | |||||
* http://www.apache.org/licenses/ | |||||
* | |||||
* TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION | |||||
* | |||||
* 1. Definitions. | |||||
* | |||||
* "License" shall mean the terms and conditions for use, reproduction, | |||||
* and distribution as defined by Sections 1 through 9 of this document. | |||||
* | |||||
* "Licensor" shall mean the copyright owner or entity authorized by | |||||
* the copyright owner that is granting the License. | |||||
* | |||||
* "Legal Entity" shall mean the union of the acting entity and all | |||||
* other entities that control, are controlled by, or are under common | |||||
* control with that entity. For the purposes of this definition, | |||||
* "control" means (i) the power, direct or indirect, to cause the | |||||
* direction or management of such entity, whether by contract or | |||||
* otherwise, or (ii) ownership of fifty percent (50%) or more of the | |||||
* outstanding shares, or (iii) beneficial ownership of such entity. | |||||
* | |||||
* "You" (or "Your") shall mean an individual or Legal Entity | |||||
* exercising permissions granted by this License. | |||||
* | |||||
* "Source" form shall mean the preferred form for making modifications, | |||||
* including but not limited to software source code, documentation | |||||
* source, and configuration files. | |||||
* | |||||
* "Object" form shall mean any form resulting from mechanical | |||||
* transformation or translation of a Source form, including but | |||||
* not limited to compiled object code, generated documentation, | |||||
* and conversions to other media types. | |||||
* | |||||
* "Work" shall mean the work of authorship, whether in Source or | |||||
* Object form, made available under the License, as indicated by a | |||||
* copyright notice that is included in or attached to the work | |||||
* (an example is provided in the Appendix below). | |||||
* | |||||
* "Derivative Works" shall mean any work, whether in Source or Object | |||||
* form, that is based on (or derived from) the Work and for which the | |||||
* editorial revisions, annotations, elaborations, or other modifications | |||||
* represent, as a whole, an original work of authorship. For the purposes | |||||
* of this License, Derivative Works shall not include works that remain | |||||
* separable from, or merely link (or bind by name) to the interfaces of, | |||||
* the Work and Derivative Works thereof. | |||||
* | |||||
* "Contribution" shall mean any work of authorship, including | |||||
* the original version of the Work and any modifications or additions | |||||
* to that Work or Derivative Works thereof, that is intentionally | |||||
* submitted to Licensor for inclusion in the Work by the copyright owner | |||||
* or by an individual or Legal Entity authorized to submit on behalf of | |||||
* the copyright owner. For the purposes of this definition, "submitted" | |||||
* means any form of electronic, verbal, or written communication sent | |||||
* to the Licensor or its representatives, including but not limited to | |||||
* communication on electronic mailing lists, source code control systems, | |||||
* and issue tracking systems that are managed by, or on behalf of, the | |||||
* Licensor for the purpose of discussing and improving the Work, but | |||||
* excluding communication that is conspicuously marked or otherwise | |||||
* designated in writing by the copyright owner as "Not a Contribution." | |||||
* | |||||
* "Contributor" shall mean Licensor and any individual or Legal Entity | |||||
* on behalf of whom a Contribution has been received by Licensor and | |||||
* subsequently incorporated within the Work. | |||||
* | |||||
* 2. Grant of Copyright License. Subject to the terms and conditions of | |||||
* this License, each Contributor hereby grants to You a perpetual, | |||||
* worldwide, non-exclusive, no-charge, royalty-free, irrevocable | |||||
* copyright license to reproduce, prepare Derivative Works of, | |||||
* publicly display, publicly perform, sublicense, and distribute the | |||||
* Work and such Derivative Works in Source or Object form. | |||||
* | |||||
* 3. Grant of Patent License. Subject to the terms and conditions of | |||||
* this License, each Contributor hereby grants to You a perpetual, | |||||
* worldwide, non-exclusive, no-charge, royalty-free, irrevocable | |||||
* (except as stated in this section) patent license to make, have made, | |||||
* use, offer to sell, sell, import, and otherwise transfer the Work, | |||||
* where such license applies only to those patent claims licensable | |||||
* by such Contributor that are necessarily infringed by their | |||||
* Contribution(s) alone or by combination of their Contribution(s) | |||||
* with the Work to which such Contribution(s) was submitted. If You | |||||
* institute patent litigation against any entity (including a | |||||
* cross-claim or counterclaim in a lawsuit) alleging that the Work | |||||
* or a Contribution incorporated within the Work constitutes direct | |||||
* or contributory patent infringement, then any patent licenses | |||||
* granted to You under this License for that Work shall terminate | |||||
* as of the date such litigation is filed. | |||||
* | |||||
* 4. Redistribution. You may reproduce and distribute copies of the | |||||
* Work or Derivative Works thereof in any medium, with or without | |||||
* modifications, and in Source or Object form, provided that You | |||||
* meet the following conditions: | |||||
* | |||||
* (a) You must give any other recipients of the Work or | |||||
* Derivative Works a copy of this License; and | |||||
* | |||||
* (b) You must cause any modified files to carry prominent notices | |||||
* stating that You changed the files; and | |||||
* | |||||
* (c) You must retain, in the Source form of any Derivative Works | |||||
* that You distribute, all copyright, patent, trademark, and | |||||
* attribution notices from the Source form of the Work, | |||||
* excluding those notices that do not pertain to any part of | |||||
* the Derivative Works; and | |||||
* | |||||
* (d) If the Work includes a "NOTICE" text file as part of its | |||||
* distribution, then any Derivative Works that You distribute must | |||||
* include a readable copy of the attribution notices contained | |||||
* within such NOTICE file, excluding those notices that do not | |||||
* pertain to any part of the Derivative Works, in at least one | |||||
* of the following places: within a NOTICE text file distributed | |||||
* as part of the Derivative Works; within the Source form or | |||||
* documentation, if provided along with the Derivative Works; or, | |||||
* within a display generated by the Derivative Works, if and | |||||
* wherever such third-party notices normally appear. The contents | |||||
* of the NOTICE file are for informational purposes only and | |||||
* do not modify the License. You may add Your own attribution | |||||
* notices within Derivative Works that You distribute, alongside | |||||
* or as an addendum to the NOTICE text from the Work, provided | |||||
* that such additional attribution notices cannot be construed | |||||
* as modifying the License. | |||||
* | |||||
* You may add Your own copyright statement to Your modifications and | |||||
* may provide additional or different license terms and conditions | |||||
* for use, reproduction, or distribution of Your modifications, or | |||||
* for any such Derivative Works as a whole, provided Your use, | |||||
* reproduction, and distribution of the Work otherwise complies with | |||||
* the conditions stated in this License. | |||||
* | |||||
* 5. Submission of Contributions. Unless You explicitly state otherwise, | |||||
* any Contribution intentionally submitted for inclusion in the Work | |||||
* by You to the Licensor shall be under the terms and conditions of | |||||
* this License, without any additional terms or conditions. | |||||
* Notwithstanding the above, nothing herein shall supersede or modify | |||||
* the terms of any separate license agreement you may have executed | |||||
* with Licensor regarding such Contributions. | |||||
* | |||||
* 6. Trademarks. This License does not grant permission to use the trade | |||||
* names, trademarks, service marks, or product names of the Licensor, | |||||
* except as required for reasonable and customary use in describing the | |||||
* origin of the Work and reproducing the content of the NOTICE file. | |||||
* | |||||
* 7. Disclaimer of Warranty. Unless required by applicable law or | |||||
* agreed to in writing, Licensor provides the Work (and each | |||||
* Contributor provides its Contributions) on an "AS IS" BASIS, | |||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or | |||||
* implied, including, without limitation, any warranties or conditions | |||||
* of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A | |||||
* PARTICULAR PURPOSE. You are solely responsible for determining the | |||||
* appropriateness of using or redistributing the Work and assume any | |||||
* risks associated with Your exercise of permissions under this License. | |||||
* | |||||
* 8. Limitation of Liability. In no event and under no legal theory, | |||||
* whether in tort (including negligence), contract, or otherwise, | |||||
* unless required by applicable law (such as deliberate and grossly | |||||
* negligent acts) or agreed to in writing, shall any Contributor be | |||||
* liable to You for damages, including any direct, indirect, special, | |||||
* incidental, or consequential damages of any character arising as a | |||||
* result of this License or out of the use or inability to use the | |||||
* Work (including but not limited to damages for loss of goodwill, | |||||
* work stoppage, computer failure or malfunction, or any and all | |||||
* other commercial damages or losses), even if such Contributor | |||||
* has been advised of the possibility of such damages. | |||||
* | |||||
* 9. Accepting Warranty or Additional Liability. While redistributing | |||||
* the Work or Derivative Works thereof, You may choose to offer, | |||||
* and charge a fee for, acceptance of support, warranty, indemnity, | |||||
* or other liability obligations and/or rights consistent with this | |||||
* License. However, in accepting such obligations, You may act only | |||||
* on Your own behalf and on Your sole responsibility, not on behalf | |||||
* of any other Contributor, and only if You agree to indemnify, | |||||
* defend, and hold each Contributor harmless for any liability | |||||
* incurred by, or claims asserted against, such Contributor by reason | |||||
* of your accepting any such warranty or additional liability. | |||||
* | |||||
* END OF TERMS AND CONDITIONS | |||||
* | |||||
* APPENDIX: How to apply the Apache License to your work. | |||||
* | |||||
* To apply the Apache License to your work, attach the following | |||||
* boilerplate notice, with the fields enclosed by brackets "[]" | |||||
* replaced with your own identifying information. (Don't include | |||||
* the brackets!) The text should be enclosed in the appropriate | |||||
* comment syntax for the file format. We also recommend that a | |||||
* file or class name and description of purpose be included on the | |||||
* same "printed page" as the copyright notice for easier | |||||
* identification within third-party archives. | |||||
* | |||||
* Copyright [yyyy] [name of copyright owner] | |||||
* | |||||
* 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. | |||||
*/ |
This license came from: | |||||
http://www.w3.org/Consortium/Legal/copyright-software-19980720 | |||||
W3C® SOFTWARE NOTICE AND LICENSE | |||||
Copyright © 1994-2001 World | |||||
Wide Web Consortium, <a href="http://www.w3.org/">World | |||||
Wide Web Consortium</a>, (<a href= | |||||
"http://www.lcs.mit.edu/">Massachusetts Institute of | |||||
Technology</a>, <a href="http://www.inria.fr/">Institut National de | |||||
Recherche en Informatique et en Automatique</a>, <a href= | |||||
"http://www.keio.ac.jp/">Keio University</a>). All Rights Reserved. | |||||
http://www.w3.org/Consortium/Legal/ | |||||
This W3C work (including software, documents, or other related | |||||
items) is being provided by the copyright holders under the | |||||
following license. By obtaining, using and/or copying this work, | |||||
you (the licensee) agree that you have read, understood, and will | |||||
comply with the following terms and conditions: | |||||
Permission to use, copy, modify, and distribute this software | |||||
and its documentation, with or without modification, for any | |||||
purpose and without fee or royalty is hereby granted, provided that | |||||
you include the following on ALL copies of the software and | |||||
documentation or portions thereof, including modifications, that | |||||
you make: | |||||
The full text of this NOTICE in a location viewable to users of | |||||
the redistributed or derivative work. | |||||
Any pre-existing intellectual property disclaimers, notices, or | |||||
terms and conditions. If none exist, a short notice of the | |||||
following form (hypertext is preferred, text is permitted) should | |||||
be used within the body of any redistributed or derivative code: | |||||
"Copyright © [$date-of-software] World Wide Web Consortium, (Massachusetts Institute of | |||||
Technology, Institut National de | |||||
Recherche en Informatique et en Automatique, Keio University). All Rights Reserved. | |||||
http://www.w3.org/Consortium/Legal/" | |||||
Notice of any changes or modifications to the W3C files, | |||||
including the date changes were made. (We recommend you provide | |||||
URIs to the location from which the code is derived.) | |||||
THIS SOFTWARE AND DOCUMENTATION IS PROVIDED "AS IS," AND | |||||
COPYRIGHT HOLDERS MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR | |||||
IMPLIED, INCLUDING BUT NOT LIMITED TO, WARRANTIES OF | |||||
MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE | |||||
USE OF THE SOFTWARE OR DOCUMENTATION WILL NOT INFRINGE ANY THIRD | |||||
PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS. | |||||
COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, | |||||
SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE | |||||
SOFTWARE OR DOCUMENTATION. | |||||
The name and trademarks of copyright holders may NOT be used in | |||||
advertising or publicity pertaining to the software without | |||||
specific, written prior permission. Title to copyright in this | |||||
software and any associated documentation will at all times remain | |||||
with copyright holders. | |||||
____________________________________ | |||||
This formulation of W3C's notice and license became active on | |||||
August 14 1998 so as to improve compatibility with GPL. This | |||||
version ensures that W3C software licensing terms are no more | |||||
restrictive than GPL and consequently W3C software may be | |||||
distributed in GPL packages. See the older formulation for the | |||||
policy prior to this date. Please see our Copyright FAQ for common | |||||
questions about using materials from | |||||
our site, including specific terms and conditions for packages like | |||||
libwww, Amaya, and Jigsaw. | |||||
Other questions about this notice can be | |||||
directed to site-policy@w3.org. | |||||
webmaster |
This license came from: http://www.megginson.com/SAX/copying.html | |||||
However please note future versions of SAX may be covered | |||||
under http://saxproject.org/?selected=pd | |||||
This page is now out of date -- see the new SAX site at | |||||
http://www.saxproject.org/ for more up-to-date | |||||
releases and other information. Please change your bookmarks. | |||||
SAX2 is Free! | |||||
I hereby abandon any property rights to SAX 2.0 (the Simple API for | |||||
XML), and release all of the SAX 2.0 source code, compiled code, and | |||||
documentation contained in this distribution into the Public Domain. | |||||
SAX comes with NO WARRANTY or guarantee of fitness for any | |||||
purpose. | |||||
David Megginson, david@megginson.com | |||||
2000-05-05 |
/* | |||||
* The Apache Software License, Version 1.1 | |||||
* | |||||
* | |||||
* Copyright (c) 1999-2002 The Apache Software Foundation. All rights | |||||
* reserved. | |||||
* | |||||
* Redistribution and use in source and binary forms, with or without | |||||
* modification, are permitted provided that the following conditions | |||||
* are met: | |||||
* | |||||
* 1. Redistributions of source code must retain the above copyright | |||||
* notice, this list of conditions and the following disclaimer. | |||||
* | |||||
* 2. Redistributions in binary form must reproduce the above copyright | |||||
* notice, this list of conditions and the following disclaimer in | |||||
* the documentation and/or other materials provided with the | |||||
* distribution. | |||||
* | |||||
* 3. The end-user documentation included with the redistribution, | |||||
* if any, must include the following acknowledgment: | |||||
* "This product includes software developed by the | |||||
* Apache Software Foundation (http://www.apache.org/)." | |||||
* Alternately, this acknowledgment may appear in the software itself, | |||||
* if and wherever such third-party acknowledgments normally appear. | |||||
* | |||||
* 4. The names "Xerces" and "Apache Software Foundation" must | |||||
* not be used to endorse or promote products derived from this | |||||
* software without prior written permission. For written | |||||
* permission, please contact apache@apache.org. | |||||
* | |||||
* 5. Products derived from this software may not be called "Apache", | |||||
* nor may "Apache" appear in their name, without prior written | |||||
* permission of the Apache Software Foundation. | |||||
* | |||||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED | |||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |||||
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR | |||||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | |||||
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | |||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT | |||||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |||||
* SUCH DAMAGE. | |||||
* ==================================================================== | |||||
* | |||||
* This software consists of voluntary contributions made by many | |||||
* individuals on behalf of the Apache Software Foundation and was | |||||
* originally based on software copyright (c) 1999, International | |||||
* Business Machines, Inc., http://www.ibm.com. For more | |||||
* information on the Apache Software Foundation, please see | |||||
* <http://www.apache.org/>. | |||||
*/ |
========================================================================= | |||||
== NOTICE file corresponding to the section 4 d of == | |||||
== the Apache License, Version 2.0, == | |||||
== in this case for the Apache Ant distribution. == | |||||
========================================================================= | |||||
This product includes software developed by | |||||
The Apache Software Foundation (http://www.apache.org/). | |||||
This product includes also software developed by : | |||||
- the W3C consortium (http://www.w3c.org) , | |||||
- the SAX project (http://www.saxproject.org) | |||||
Please read the different LICENSE files present in the root directory of | |||||
this distribution. |
A N T | |||||
What is it? | |||||
----------- | |||||
Ant is a Java based build tool. In theory it is kind of like "make" | |||||
without makes wrinkles and with the full portability of pure java code. | |||||
Why? | |||||
---- | |||||
Why another build tool when there is already make, gnumake, nmake, jam, | |||||
and others? Because all of those tools have limitations that its original | |||||
author couldn't live with when developing software across multiple platforms. | |||||
Make-like tools are inherently shell based. They evaluate a set of | |||||
dependencies and then execute commands not unlike what you would issue on a | |||||
shell. This means that you can easily extend these tools by using or writing | |||||
any program for the OS that you are working on. However, this also means that | |||||
you limit yourself to the OS, or at least the OS type such as Unix, that you | |||||
are working on. | |||||
Makefiles are inherently evil as well. Anybody who has worked on them for any | |||||
time has run into the dreaded tab problem. "Is my command not executing | |||||
because I have a space in front of my tab!!!" said the original author of Ant | |||||
way too many times. Tools like Jam took care of this to a great degree, but | |||||
still use yet another format to use and remember. | |||||
Ant is different. Instead a model where it is extended with shell based | |||||
commands, it is extended using Java classes. Instead of writing shell | |||||
commands, the configuration files are XML based calling out a target tree | |||||
where various tasks get executed. Each task is run by an object which | |||||
implements a particular Task interface. | |||||
Granted, this removes some of the expressive power that is inherent by being | |||||
able to construct a shell command such as `find . -name foo -exec rm {}` but | |||||
it gives you the ability to be cross platform. To work anywhere and | |||||
everywhere. And hey, if you really need to execute a shell command, Ant has | |||||
an exec rule that allows different commands to be executed based on the OS | |||||
that it is executing on. | |||||
The Latest Version | |||||
------------------ | |||||
Details of the latest version can be found on the Apache Ant | |||||
Project web site <http://ant.apache.org/>. | |||||
Documentation | |||||
------------- | |||||
Documentation is available in HTML format, in the docs/ directory. | |||||
For information about building and installing Ant, see | |||||
docs/manual/index.html | |||||
Licensing | |||||
--------- | |||||
This software is licensed under the terms you may find in the file | |||||
named "LICENSE" in this directory. | |||||
Thanks for using Ant. | |||||
The Apache Ant Project | |||||
<http://ant.apache.org/> |
Things that are scheduled for Ant 1.6.2. Once this list is empty, we | |||||
can roll the first beta. | |||||
Please go ahead and assign things that are not already assigned to | |||||
anybody else (assignments look like [Stefan]) to yourself - and please | |||||
remove items from this list once they are complete. | |||||
/* | |||||
Copyright 2003-2004 The Apache Software Foundation | |||||
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. | |||||
Run ant | |||||
*/ | |||||
'@echo off' | |||||
parse arg mode envarg '::' antarg | |||||
if mode\='.' & mode\='..' & mode\='/' then do | |||||
envarg = mode envarg | |||||
mode = '' | |||||
end | |||||
if antarg = '' then do | |||||
antarg = envarg | |||||
envarg = '' | |||||
end | |||||
x = setlocal() | |||||
env="OS2ENVIRONMENT" | |||||
antenv = _getenv_('antenv') | |||||
if _testenv_() = 0 then interpret 'call "' || antenv || '"' '"' || envarg || '"' | |||||
if mode = '' then mode = _getenv_('ANT_MODE' '..') | |||||
if mode \= '/' then do | |||||
runrc = _getenv_('runrc') | |||||
antrc = _getenv_('antrc' 'antrc.cmd') | |||||
if mode = '..' then mode = '-r' | |||||
else mode = '' | |||||
interpret 'call "' || runrc || '"' antrc '"' || mode || '"' | |||||
end | |||||
if _testenv_() = 0 then do | |||||
say 'Ant environment is not set properly' | |||||
x = endlocal() | |||||
exit 16 | |||||
end | |||||
settings = '-Dant.home=' || ANT_HOME '-Djava.home=' || JAVA_HOME | |||||
java = _getenv_('javacmd' 'java') | |||||
opts = value('ANT_OPTS',,env) | |||||
args = value('ANT_ARGS',,env) | |||||
lcp = value('LOCALCLASSPATH',,env) | |||||
cp = value('CLASSPATH',,env) | |||||
if value('ANT_USE_CP',,env) \= '' then do | |||||
if lcp \= '' & right(lcp, 1) \= ';' then lcp = lcp || ';' | |||||
lcp = lcp || cp | |||||
'SET CLASSPATH=' | |||||
end | |||||
if lcp\='' then lcp = '-classpath' lcp | |||||
cmd = java opts lcp '-jar' ANT_HOME ||'\lib\ant-launcher.jar' settings args antarg | |||||
launcher = stream(ANT_HOME ||'\lib\ant-launcher.jar', 'C', 'query exists') | |||||
if launcher = '' then entry = 'org.apache.tools.ant.Main' | |||||
else entry = 'org.apache.tools.ant.launch.Launcher' | |||||
java opts lcp entry settings args antarg | |||||
x = endlocal() | |||||
return rc | |||||
_testenv_: procedure expose env ANT_HOME JAVA_HOME | |||||
ANT_HOME = value('ANT_HOME',,env) | |||||
if ANT_HOME = '' then return 0 | |||||
JAVA_HOME = value('JAVA_HOME',,env) | |||||
if JAVA_HOME = '' then return 0 | |||||
cp = translate(value('CLASSPATH',,env)) | |||||
if pos(translate(ANT_HOME), cp) = 0 then return 0 | |||||
if pos(translate(JAVA_HOME), cp) = 0 then return 0 | |||||
return 1 | |||||
_getenv_: procedure expose env | |||||
parse arg envar default | |||||
if default = '' then default = envar | |||||
var = value(translate(envar),,env) | |||||
if var = '' then var = default | |||||
return var |
/* | |||||
Copyright 2003-2004 The Apache Software Foundation | |||||
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. | |||||
Ant environment | |||||
*/ | |||||
'@echo off' | |||||
call RxFuncAdd "SysLoadFuncs", "RexxUtil", "SysLoadFuncs" | |||||
call SysLoadFuncs | |||||
/* Prepare the parameters for later use */ | |||||
parse arg argv | |||||
mode = '' | |||||
args = '' | |||||
opts = '' | |||||
cp = '' | |||||
lcp = '' | |||||
do i = 1 to words(argv) | |||||
param = word(argv, i) | |||||
select | |||||
when param='-lcp' then mode = 'l' | |||||
when param='-cp' | param='-classpath' then mode = 'c' | |||||
when abbrev('-opts', param, 4) then mode = 'o' | |||||
when abbrev('-args', param, 4) then mode = 'a' | |||||
otherwise | |||||
select | |||||
when mode = 'a' then args = space(args param, 1) | |||||
when mode = 'c' then cp = space(cp param, 1) | |||||
when mode = 'l' then lcp = space(lcp param, 1) | |||||
when mode = 'o' then opts = space(opts param, 1) | |||||
otherwise | |||||
say 'Option' param 'ignored' | |||||
end | |||||
end | |||||
end | |||||
env="OS2ENVIRONMENT" | |||||
antconf = _getenv_('antconf' 'antconf.cmd') | |||||
runrc = _getenv_('runrc') | |||||
interpret 'call "' || runrc || '"' '"' || antconf || '"' 'ETC' | |||||
ANT_HOME = value('ANT_HOME',,env) | |||||
JAVA_HOME = value('JAVA_HOME',,env) | |||||
classpath = value('CLASSPATH',,env) | |||||
classes = stream(JAVA_HOME || "\lib\classes.zip", "C", "QUERY EXISTS") | |||||
if classes \= '' then classpath = prepend(classpath classes) | |||||
classes = stream(JAVA_HOME || "\lib\tools.jar", "C", "QUERY EXISTS") | |||||
if classes \= '' then classpath = prepend(classpath classes) | |||||
classpath = prepend(classpath ANT_HOME || '\lib\ant-launcher.jar') | |||||
'SET CLASSPATH=' || classpath | |||||
/* Setting classpathes, options and arguments */ | |||||
envset = _getenv_('envset') | |||||
if cp\='' then interpret 'call "' || envset || '"' '"; CLASSPATH"' '"' || cp || '"' | |||||
if lcp\='' then interpret 'call "' || envset || '"' '"; LOCALCLASSPATH"' '"' || lcp || '"' | |||||
if opts\='' then interpret 'call "' || envset || '"' '"-D ANT_OPTS"' '"' || opts || '"' | |||||
if args\='' then interpret 'call "' || envset || '"' '"ANT_ARGS"' '"' || args || '"' | |||||
exit 0 | |||||
addpath: procedure | |||||
parse arg path elem | |||||
if elem = '' then do | |||||
if path\='' & right(path, 1)\=';' then path = path || ';' | |||||
return path | |||||
end | |||||
if substr(path, length(path)) = ';' then glue = '' | |||||
else glue = ';' | |||||
if pos(translate(elem), translate(path)) = 0 then path = path || glue || elem || ';' | |||||
return path | |||||
prepend: procedure | |||||
parse arg path elem | |||||
if elem = '' then do | |||||
if path\='' & right(path, 1)\=';' then path = path || ';' | |||||
return path | |||||
end | |||||
if pos(translate(elem), translate(path)) = 0 then path = elem || ';' || path | |||||
return path | |||||
_getenv_: procedure expose env | |||||
parse arg envar default | |||||
if default = '' then default = envar | |||||
var = value(translate(envar),,env) | |||||
if var = '' then var = default | |||||
return var |
/* | |||||
Copyright 2003-2004 The Apache Software Foundation | |||||
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. | |||||
SET environment variables | |||||
First optional parameter: | |||||
; parameters are considered parts of a path variable, semicolons are | |||||
appended to each element if not already present | |||||
-D parameters are properties for Java or Makefile etc., -D will be | |||||
prepended and the parameters will be separated by a space | |||||
=D the same as above but equal sign is not required | |||||
, parameters should be comma separated in the environment variable | |||||
- parameters should be separated by the next parameter | |||||
Other values mean that the first parameter is missing and the environment | |||||
variable will be set to the space separated parameters | |||||
Second parameter: name of the environment variable | |||||
Next parameters: values | |||||
; implies that the equal sign is considered a part of the parameter and is | |||||
not interpreted | |||||
-D requires parameters in the form name=value. If the equal sign is not found, | |||||
the parameters are changed to name=expanded_name | |||||
Other options have optional equal sign. If it is found, only the part after | |||||
the equal sign will be oprionally expanded. | |||||
If the parameter is the minus sign, the next parameter will not be expanded. | |||||
If the parameter is a single dot, it will be replaced with the value of the | |||||
environment variable as it existed before envset was invoked. | |||||
For other parameters the batch looks for the environment variable with the | |||||
same name (in uppercase). If it is found, it forms the expanded_name. If | |||||
the environment variable with such a name does not exist, the expanded_name | |||||
will hold the parameter name without case conversion. | |||||
*/ | |||||
parse arg mode envar args | |||||
equal = 0 | |||||
sep = ' ' | |||||
/* Parse command line parameters */ | |||||
select | |||||
when mode='-' then do | |||||
sep = envar | |||||
parse var args envar args | |||||
end | |||||
when mode=';' then do | |||||
sep = '' | |||||
equal = -1 | |||||
end | |||||
when mode='-D' then equal = 1 | |||||
when mode='=D' then mode = '-D' | |||||
when mode=',' then sep = ',' | |||||
otherwise | |||||
args = envar args | |||||
envar = mode | |||||
mode = '' | |||||
end | |||||
env = 'OS2ENVIRONMENT' | |||||
envar = translate(envar) | |||||
orig = value(envar,,env) | |||||
newval = '' | |||||
expand = 1 | |||||
/* for each parameter... */ | |||||
do i = 1 to words(args) | |||||
if expand > 0 & word(args, i) = '-' then expand = 0 | |||||
else call addval word(args, i) | |||||
end | |||||
/* Optionally enclose path variable by quotes */ | |||||
if mode = ';' & pos(' ', newval) > 0 then newval = '"' || newval || '"' | |||||
/* Set the new value, 'SET' cannot be used since it does not allow '=' */ | |||||
x = value(envar, newval, env) | |||||
exit 0 | |||||
addval: procedure expose sep equal orig expand newval mode env | |||||
parse arg var | |||||
if var = '.' then expvar = orig | |||||
else do | |||||
if equal >= 0 then do | |||||
parse var var name '=' val | |||||
if val = '' then var = name | |||||
else var = val | |||||
end | |||||
if expand = 0 then expvar = var | |||||
else expvar = value(translate(var),,env) | |||||
if expvar = '' then expvar = var | |||||
if equal >= 0 then do | |||||
if val = '' then do | |||||
parse var expvar key '=' val | |||||
if val <> '' then name = key | |||||
else do | |||||
if equal > 0 then val = key | |||||
else name = key | |||||
end | |||||
end | |||||
else val = expvar | |||||
if pos(' ', val) > 0 | pos('=', val) > 0 then val = '"' || val || '"' | |||||
if val = '' then expvar = name | |||||
else expvar = name || '=' || val | |||||
end | |||||
if mode = '-D' then expvar = '-D' || expvar | |||||
if mode = ';' then do | |||||
if right(expvar, 1) <> ';' then expvar = expvar || ';' | |||||
end | |||||
end | |||||
if newval = '' then newval = expvar | |||||
else newval = newval || sep || expvar | |||||
expand = 1 | |||||
return |
/* | |||||
Copyright 2003-2004 The Apache Software Foundation | |||||
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. | |||||
Run RC file, name is in the first arg, second arg is either PATH | |||||
ENV or -r or nothing | |||||
*/ | |||||
parse arg name path rest | |||||
if name = '' then do | |||||
say 'RC file name is missing' | |||||
exit 1 | |||||
end | |||||
if rest \= '' then do | |||||
say 'Too many parameters' | |||||
exit 1 | |||||
end | |||||
call runit name path | |||||
exit 0 | |||||
runit: procedure | |||||
parse arg name path dir | |||||
if path \= '' & path \= '-r' then do | |||||
dir = value(translate(path),,'OS2ENVIRONMENT') | |||||
if dir = '' then return | |||||
dir = translate(dir, '\', '/') /* change UNIX-like path to OS/2 */ | |||||
end | |||||
if dir = '' then dir = directory() | |||||
if path = '-r' then do /* recursive call */ | |||||
subdir = filespec('path', dir) | |||||
if subdir \= '\' then do | |||||
subdir = left(subdir, length(subdir)-1) | |||||
call runit name path filespec('drive', dir) || subdir | |||||
end | |||||
end | |||||
/* Look for the file and run it */ | |||||
if right(dir, 1) \= '\' then dir = dir || '\' | |||||
rcfile = stream(dir || name, 'c', 'query exists') | |||||
if rcfile \= '' then interpret 'call "' || rcfile || '"' | |||||
return |
<?xml version="1.0" encoding="ISO-8859-1"?> | |||||
<xsl:stylesheet | |||||
xmlns:xsl='http://www.w3.org/1999/XSL/Transform' | |||||
version='1.0'> | |||||
<!-- | |||||
Copyright 2002,2004-2005 The Apache Software Foundation | |||||
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. | |||||
--> | |||||
<xsl:param name="title"/> | |||||
<xsl:param name="module"/> | |||||
<xsl:param name="cvsweb"/> | |||||
<xsl:output method="html" indent="yes" encoding="US-ASCII" | |||||
doctype-public="-//W3C//DTD HTML 4.01//EN" | |||||
doctype-system="http://www.w3.org/TR/html401/strict.dtd"/> | |||||
<!-- Copy standard document elements. Elements that | |||||
should be ignored must be filtered by apply-templates | |||||
tags. --> | |||||
<xsl:template match="*"> | |||||
<xsl:copy> | |||||
<xsl:copy-of select="attribute::*[. != '']"/> | |||||
<xsl:apply-templates/> | |||||
</xsl:copy> | |||||
</xsl:template> | |||||
<xsl:template match="changelog"> | |||||
<html> | |||||
<head> | |||||
<title><xsl:value-of select="$title"/></title> | |||||
<style type="text/css"> | |||||
body, p { | |||||
font-family: Verdana, Arial, Helvetica, sans-serif; | |||||
font-size: 80%; | |||||
color: #000000; | |||||
background-color: #ffffff; | |||||
} | |||||
tr, td { | |||||
font-family: Verdana, Arial, Helvetica, sans-serif; | |||||
background: #eeeee0; | |||||
} | |||||
td { | |||||
padding-left: 20px; | |||||
} | |||||
.dateAndAuthor { | |||||
font-family: Verdana, Arial, Helvetica, sans-serif; | |||||
font-weight: bold; | |||||
text-align: left; | |||||
background: #a6caf0; | |||||
padding-left: 3px; | |||||
} | |||||
a { | |||||
color: #000000; | |||||
} | |||||
pre { | |||||
font-weight: bold; | |||||
} | |||||
</style> | |||||
</head> | |||||
<body> | |||||
<h1> | |||||
<a name="top"><xsl:value-of select="$title"/></a> | |||||
</h1> | |||||
<p style="text-align: right">Designed for use with <a href="http://ant.apache.org/">Apache Ant</a>.</p> | |||||
<hr/> | |||||
<table border="0" width="100%" cellspacing="1"> | |||||
<xsl:apply-templates select=".//entry"> | |||||
<xsl:sort select="date" data-type="text" order="descending"/> | |||||
<xsl:sort select="time" data-type="text" order="descending"/> | |||||
</xsl:apply-templates> | |||||
</table> | |||||
</body> | |||||
</html> | |||||
</xsl:template> | |||||
<xsl:template match="entry"> | |||||
<tr> | |||||
<td class="dateAndAuthor"> | |||||
<xsl:value-of select="date"/><xsl:text> </xsl:text><xsl:value-of select="time"/><xsl:text> </xsl:text><xsl:value-of select="author"/> | |||||
</td> | |||||
</tr> | |||||
<tr> | |||||
<td> | |||||
<pre> | |||||
<xsl:apply-templates select="msg"/></pre> | |||||
<ul> | |||||
<xsl:apply-templates select="file"/> | |||||
</ul> | |||||
</td> | |||||
</tr> | |||||
</xsl:template> | |||||
<xsl:template match="date"> | |||||
<i><xsl:value-of select="."/></i> | |||||
</xsl:template> | |||||
<xsl:template match="time"> | |||||
<i><xsl:value-of select="."/></i> | |||||
</xsl:template> | |||||
<xsl:template match="author"> | |||||
<i> | |||||
<a> | |||||
<xsl:attribute name="href">mailto:<xsl:value-of select="."/></xsl:attribute> | |||||
<xsl:value-of select="."/></a> | |||||
</i> | |||||
</xsl:template> | |||||
<xsl:template match="file"> | |||||
<li> | |||||
<a> | |||||
<xsl:choose> | |||||
<xsl:when test="string-length(prevrevision) = 0 "> | |||||
<xsl:attribute name="href"><xsl:value-of select="$cvsweb"/><xsl:value-of select="$module" />/<xsl:value-of select="name" />?rev=<xsl:value-of select="revision" />&content-type=text/x-cvsweb-markup</xsl:attribute> | |||||
</xsl:when> | |||||
<xsl:otherwise> | |||||
<xsl:attribute name="href"><xsl:value-of select="$cvsweb"/><xsl:value-of select="$module" />/<xsl:value-of select="name" />?r1=<xsl:value-of select="revision" />&r2=<xsl:value-of select="prevrevision"/></xsl:attribute> | |||||
</xsl:otherwise> | |||||
</xsl:choose> | |||||
<xsl:value-of select="name" /> (<xsl:value-of select="revision"/>)</a> | |||||
</li> | |||||
</xsl:template> | |||||
<!-- Any elements within a msg are processed, | |||||
so that we can preserve HTML tags. --> | |||||
<xsl:template match="msg"> | |||||
<xsl:apply-templates/> | |||||
</xsl:template> | |||||
</xsl:stylesheet> |
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" | |||||
xmlns:lxslt="http://xml.apache.org/xslt" | |||||
xmlns:redirect="org.apache.xalan.lib.Redirect" | |||||
extension-element-prefixes="redirect"> | |||||
<!-- | |||||
Copyright 2002-2004 The Apache Software Foundation | |||||
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. | |||||
--> | |||||
<xsl:output method="html" indent="yes" encoding="US-ASCII"/> | |||||
<xsl:decimal-format decimal-separator="." grouping-separator="," /> | |||||
<xsl:param name="output.dir" select="'.'"/> | |||||
<xsl:param name="basedir" select="'.'"/> | |||||
<xsl:template match="checkstyle"> | |||||
<!-- create the index.html --> | |||||
<redirect:write file="{$output.dir}/index.html"> | |||||
<xsl:call-template name="index.html"/> | |||||
</redirect:write> | |||||
<!-- create the stylesheet.css --> | |||||
<redirect:write file="{$output.dir}/stylesheet.css"> | |||||
<xsl:call-template name="stylesheet.css"/> | |||||
</redirect:write> | |||||
<!-- create the overview-summary.html at the root --> | |||||
<redirect:write file="{$output.dir}/overview-frame.html"> | |||||
<xsl:apply-templates select="." mode="overview"/> | |||||
</redirect:write> | |||||
<!-- create the all-classes.html at the root --> | |||||
<redirect:write file="{$output.dir}/allclasses-frame.html"> | |||||
<xsl:apply-templates select="." mode="all.classes"/> | |||||
</redirect:write> | |||||
<!-- process all files --> | |||||
<xsl:apply-templates select="file[count(error) != 0]"/> | |||||
</xsl:template> | |||||
<xsl:template name="index.html"> | |||||
<html> | |||||
<head> | |||||
<title>CheckStyle Audit</title> | |||||
</head> | |||||
<frameset cols="20%,80%"> | |||||
<frame src="allclasses-frame.html" name="fileListFrame"/> | |||||
<frame src="overview-frame.html" name="fileFrame"/> | |||||
</frameset> | |||||
<noframes> | |||||
<h2>Frame Alert</h2> | |||||
<p> | |||||
This document is designed to be viewed using the frames feature. | |||||
If you see this message, you are using a non-frame-capable web client. | |||||
</p> | |||||
</noframes> | |||||
</html> | |||||
</xsl:template> | |||||
<xsl:template name="pageHeader"> | |||||
<table border="0" cellpadding="0" cellspacing="0" width="100%"> | |||||
<tr> | |||||
<td class="text-align:right"><h2>CheckStyle Audit</h2></td> | |||||
</tr> | |||||
<tr> | |||||
<td class="text-align:right">Designed for use with | |||||
<a href='http://checkstyle.sourceforge.net/'>CheckStyle</a> and | |||||
<a href='http://ant.apache.org/'>Ant</a>.</td> | |||||
</tr> | |||||
</table> | |||||
<hr size="1"/> | |||||
</xsl:template> | |||||
<xsl:template match="checkstyle" mode="overview"> | |||||
<html> | |||||
<head> | |||||
<link rel="stylesheet" type="text/css" href="stylesheet.css"/> | |||||
</head> | |||||
<body> | |||||
<!-- page header --> | |||||
<xsl:call-template name="pageHeader"/> | |||||
<!-- Summary part --> | |||||
<xsl:apply-templates select="." mode="summary"/> | |||||
<hr size="1" width="100%" align="left"/> | |||||
<!-- File list part --> | |||||
<xsl:apply-templates select="." mode="filelist"/> | |||||
</body> | |||||
</html> | |||||
</xsl:template> | |||||
<xsl:template name="stylesheet.css"> | |||||
.bannercell { | |||||
border: 0px; | |||||
padding: 0px; | |||||
} | |||||
body { | |||||
margin-left: 10; | |||||
margin-right: 10; | |||||
font:normal 80% arial,helvetica,sanserif; | |||||
background-color:#FFFFFF; | |||||
color:#000000; | |||||
} | |||||
.oddrow td { | |||||
background: #efefef; | |||||
} | |||||
.evenrow td { | |||||
background: #fff; | |||||
} | |||||
th, td { | |||||
text-align: left; | |||||
vertical-align: top; | |||||
} | |||||
th { | |||||
font-weight:bold; | |||||
background: #ccc; | |||||
color: black; | |||||
} | |||||
table, th, td { | |||||
font-size:100%; | |||||
border: none | |||||
} | |||||
table.log tr td, tr th { | |||||
} | |||||
h2 { | |||||
font-weight:bold; | |||||
font-size:140%; | |||||
margin-bottom: 5; | |||||
} | |||||
h3 { | |||||
font-size:100%; | |||||
font-weight:bold; | |||||
background: #525D76; | |||||
color: white; | |||||
text-decoration: none; | |||||
padding: 5px; | |||||
margin-right: 2px; | |||||
margin-left: 2px; | |||||
margin-bottom: 0; | |||||
} | |||||
</xsl:template> | |||||
<!-- | |||||
Creates an all-classes.html file that contains a link to all files. | |||||
--> | |||||
<xsl:template match="checkstyle" mode="all.classes"> | |||||
<html> | |||||
<head> | |||||
<link rel="stylesheet" type="text/css" href="stylesheet.css"/> | |||||
</head> | |||||
<body> | |||||
<h2>Files</h2> | |||||
<p> | |||||
<table width="100%"> | |||||
<!-- For each file create its part --> | |||||
<xsl:apply-templates select="file[count(error) != 0]" mode="all.classes"> | |||||
<xsl:sort select="substring-after(@name, $basedir)"/> | |||||
</xsl:apply-templates> | |||||
</table> | |||||
</p> | |||||
</body> | |||||
</html> | |||||
</xsl:template> | |||||
<xsl:template match="checkstyle" mode="filelist"> | |||||
<h3>Files</h3> | |||||
<table class="log" border="0" cellpadding="5" cellspacing="2" width="100%"> | |||||
<tr> | |||||
<th>Name</th> | |||||
<th>Errors</th> | |||||
</tr> | |||||
<xsl:apply-templates select="file[count(error) != 0]" mode="filelist"> | |||||
<xsl:sort select="count(error)" order="descending" data-type="number"/> | |||||
</xsl:apply-templates> | |||||
</table> | |||||
</xsl:template> | |||||
<xsl:template match="file" mode="filelist"> | |||||
<tr> | |||||
<xsl:call-template name="alternated-row"/> | |||||
<td nowrap="nowrap"> | |||||
<a> | |||||
<xsl:attribute name="href"> | |||||
<xsl:text>files/</xsl:text><xsl:value-of select="substring-after(@name, $basedir)"/><xsl:text>.html</xsl:text> | |||||
</xsl:attribute> | |||||
<xsl:value-of select="substring-after(@name, $basedir)"/> | |||||
</a> | |||||
</td> | |||||
<td><xsl:value-of select="count(error)"/></td> | |||||
</tr> | |||||
</xsl:template> | |||||
<xsl:template match="file" mode="all.classes"> | |||||
<tr> | |||||
<td nowrap="nowrap"> | |||||
<a target="fileFrame"> | |||||
<xsl:attribute name="href"> | |||||
<xsl:text>files/</xsl:text><xsl:value-of select="substring-after(@name, $basedir)"/><xsl:text>.html</xsl:text> | |||||
</xsl:attribute> | |||||
<xsl:value-of select="substring-after(@name, $basedir)"/> | |||||
</a> | |||||
</td> | |||||
</tr> | |||||
</xsl:template> | |||||
<!-- | |||||
transform string like a/b/c to ../../../ | |||||
@param path the path to transform into a descending directory path | |||||
--> | |||||
<xsl:template name="path"> | |||||
<xsl:param name="path"/> | |||||
<xsl:if test="contains($path,'/')"> | |||||
<xsl:text>../</xsl:text> | |||||
<xsl:call-template name="path"> | |||||
<xsl:with-param name="path"><xsl:value-of select="substring-after($path,'/')"/></xsl:with-param> | |||||
</xsl:call-template> | |||||
</xsl:if> | |||||
<xsl:if test="not(contains($path,'/')) and not($path = '')"> | |||||
<xsl:text>../</xsl:text> | |||||
</xsl:if> | |||||
</xsl:template> | |||||
<xsl:template match="file"> | |||||
<redirect:write file="{$output.dir}/files/{substring-after(@name, $basedir)}.html"> | |||||
<html> | |||||
<head> | |||||
<link rel="stylesheet" type="text/css"> | |||||
<xsl:attribute name="href"><xsl:call-template name="path"><xsl:with-param name="path" select="substring-after(@name, $basedir)"/></xsl:call-template><xsl:text>stylesheet.css</xsl:text></xsl:attribute> | |||||
</link> | |||||
</head> | |||||
<body> | |||||
<xsl:call-template name="pageHeader"/> | |||||
<h3>File <xsl:value-of select="substring-after(@name, $basedir)"/></h3> | |||||
<table class="log" border="0" cellpadding="5" cellspacing="2" width="100%"> | |||||
<tr> | |||||
<th>Error Description</th> | |||||
<th>Line:Column</th> | |||||
</tr> | |||||
<xsl:for-each select="error"> | |||||
<tr> | |||||
<xsl:call-template name="alternated-row"/> | |||||
<td><a title="{@source}"><xsl:value-of select="@message"/></a></td> | |||||
<td align="center"><xsl:value-of select="@line"/><xsl:if test="@column">:<xsl:value-of select="@column"/></xsl:if></td> | |||||
</tr> | |||||
</xsl:for-each> | |||||
</table> | |||||
</body> | |||||
</html> | |||||
</redirect:write> | |||||
</xsl:template> | |||||
<xsl:template match="checkstyle" mode="summary"> | |||||
<h3>Summary</h3> | |||||
<xsl:variable name="fileCount" select="count(file)"/> | |||||
<xsl:variable name="errorCount" select="count(file/error)"/> | |||||
<xsl:variable name="fileErrorCount" select="count(file[count(error) != 0])"/> | |||||
<table class="log" border="0" cellpadding="5" cellspacing="2" width="100%"> | |||||
<tr> | |||||
<th>Total Files</th> | |||||
<th>Files With Errors</th> | |||||
<th>Errors</th> | |||||
</tr> | |||||
<tr> | |||||
<xsl:call-template name="alternated-row"/> | |||||
<td><xsl:value-of select="$fileCount"/></td> | |||||
<td><xsl:value-of select="$fileErrorCount"/></td> | |||||
<td><xsl:value-of select="$errorCount"/></td> | |||||
</tr> | |||||
</table> | |||||
</xsl:template> | |||||
<xsl:template name="alternated-row"> | |||||
<xsl:attribute name="class"> | |||||
<xsl:if test="position() mod 2 = 1">oddrow</xsl:if> | |||||
<xsl:if test="position() mod 2 = 0">evenrow</xsl:if> | |||||
</xsl:attribute> | |||||
</xsl:template> | |||||
</xsl:stylesheet> |
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> | |||||
<!-- | |||||
Copyright 2003-2004 The Apache Software Foundation | |||||
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. | |||||
--> | |||||
<xsl:strip-space elements="checkstyle"/> | |||||
<xsl:preserve-space elements="file"/> | |||||
<xsl:output method="text"/> | |||||
<xsl:template match="checkstyle/file/error"> | |||||
<xsl:value-of select="../@name"/> | |||||
<xsl:text>:</xsl:text> | |||||
<xsl:value-of select="@line"/> | |||||
<xsl:text>:</xsl:text> | |||||
<xsl:value-of select="@column"/> | |||||
<xsl:text> </xsl:text> | |||||
<xsl:value-of select="@message"/> | |||||
</xsl:template> | |||||
</xsl:stylesheet> | |||||
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" | |||||
xmlns:lxslt="http://xml.apache.org/xslt" | |||||
xmlns:redirect="org.apache.xalan.lib.Redirect" | |||||
extension-element-prefixes="redirect"> | |||||
<!-- | |||||
Copyright 2003-2004 The Apache Software Foundation | |||||
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. | |||||
--> | |||||
<xsl:output method="xml" indent="yes"/> | |||||
<xsl:decimal-format decimal-separator="." grouping-separator="," /> | |||||
<xsl:param name="output.dir" select="'.'"/> | |||||
<xsl:param name="basedir" select="'.'"/> | |||||
<xsl:template match="checkstyle"> | |||||
<document> | |||||
<properties> | |||||
<title>Checkstyle Audit</title> | |||||
</properties> | |||||
<body> | |||||
<xsl:apply-templates select="." mode="summary"/> | |||||
<!-- File list part --> | |||||
<xsl:apply-templates select="." mode="filelist"/> | |||||
<xsl:apply-templates select="file[count(error) != 0]"/> | |||||
</body> | |||||
</document> | |||||
</xsl:template> | |||||
<xsl:template match="checkstyle" mode="filelist"> | |||||
<section name="Files"> | |||||
<table> | |||||
<tr> | |||||
<th>Name</th> | |||||
<th>Errors</th> | |||||
</tr> | |||||
<xsl:apply-templates select="file[count(error) != 0]" mode="filelist"> | |||||
<xsl:sort select="count(error)" order="descending" data-type="number"/> | |||||
</xsl:apply-templates> | |||||
</table> | |||||
</section> | |||||
</xsl:template> | |||||
<xsl:template match="file" mode="filelist"> | |||||
<tr> | |||||
<xsl:call-template name="alternated-row"/> | |||||
<td nowrap="nowrap"> | |||||
<a> | |||||
<xsl:attribute name="href"> | |||||
<xsl:text>files</xsl:text><xsl:value-of select="substring-after(@name, $basedir)"/><xsl:text>.html</xsl:text> | |||||
</xsl:attribute> | |||||
<xsl:value-of select="substring-after(@name, $basedir)"/> | |||||
</a> | |||||
</td> | |||||
<td><xsl:value-of select="count(error)"/></td> | |||||
</tr> | |||||
</xsl:template> | |||||
<xsl:template match="file"> | |||||
<redirect:write file="{$output.dir}/files{substring-after(@name, $basedir)}.xml"> | |||||
<document> | |||||
<properties> | |||||
<title>Checkstyle Audit</title> | |||||
</properties> | |||||
<body> | |||||
<section name="Details for {substring-after(@name, $basedir)}"> | |||||
<table> | |||||
<tr> | |||||
<th>Error Description</th> | |||||
<th>Line</th> | |||||
</tr> | |||||
<xsl:for-each select="error"> | |||||
<tr> | |||||
<xsl:call-template name="alternated-row"/> | |||||
<td><a title="{@source}"><xsl:value-of select="@message"/></a></td> | |||||
<td><xsl:value-of select="@line"/></td> | |||||
</tr> | |||||
</xsl:for-each> | |||||
</table> | |||||
</section> | |||||
</body> | |||||
</document> | |||||
</redirect:write> | |||||
</xsl:template> | |||||
<xsl:template match="checkstyle" mode="summary"> | |||||
<section name="Summary"> | |||||
<xsl:variable name="fileCount" select="count(file)"/> | |||||
<xsl:variable name="errorCount" select="count(file/error)"/> | |||||
<xsl:variable name="fileErrorCount" select="count(file[count(error) != 0])"/> | |||||
<table> | |||||
<tr> | |||||
<th>Files</th> | |||||
<th>Files With Errors</th> | |||||
<th>Errors</th> | |||||
</tr> | |||||
<tr> | |||||
<xsl:call-template name="alternated-row"/> | |||||
<td><xsl:value-of select="$fileCount"/></td> | |||||
<td><xsl:value-of select="$fileErrorCount"/></td> | |||||
<td><xsl:value-of select="$errorCount"/></td> | |||||
</tr> | |||||
</table> | |||||
</section> | |||||
</xsl:template> | |||||
<xsl:template name="alternated-row"> | |||||
<xsl:attribute name="class"> | |||||
<xsl:if test="position() mod 2 = 1">oddrow</xsl:if> | |||||
<xsl:if test="position() mod 2 = 0">evenrow</xsl:if> | |||||
</xsl:attribute> | |||||
</xsl:template> | |||||
</xsl:stylesheet> | |||||
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" | |||||
xmlns:lxslt="http://xml.apache.org/xslt" | |||||
xmlns:redirect="org.apache.xalan.lib.Redirect" | |||||
extension-element-prefixes="redirect"> | |||||
<xsl:output method="html" indent="yes"/> | |||||
<xsl:decimal-format decimal-separator="." grouping-separator="," /> | |||||
<!-- | |||||
Copyright 2001-2004 The Apache Software Foundation | |||||
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. | |||||
--> | |||||
<!-- | |||||
Sample stylesheet to be used with JProbe 3.0 XML output. | |||||
It creates a set of HTML files a la javadoc where you can browse easily | |||||
through all packages and classes. | |||||
It is best used with JProbe Coverage Ant task that gives you the benefit | |||||
of a reference classpath so that you have the list of classes/methods | |||||
that are not used at all in a given classpath. | |||||
@author Stephane Bailliez <a href="mailto:sbailliez@apache.org"/> | |||||
--> | |||||
<!-- default output directory is current directory --> | |||||
<xsl:param name="output.dir" select="'.'"/> | |||||
<!-- ====================================================================== | |||||
Root element | |||||
======================================================================= --> | |||||
<xsl:template match="/snapshot"> | |||||
<!-- create the index.html --> | |||||
<redirect:write file="{$output.dir}/index.html"> | |||||
<xsl:call-template name="index.html"/> | |||||
</redirect:write> | |||||
<!-- create the stylesheet.css --> | |||||
<redirect:write file="{$output.dir}/stylesheet.css"> | |||||
<xsl:call-template name="stylesheet.css"/> | |||||
</redirect:write> | |||||
<!-- create the overview-packages.html at the root --> | |||||
<redirect:write file="{$output.dir}/overview-summary.html"> | |||||
<xsl:apply-templates select="." mode="overview.packages"/> | |||||
</redirect:write> | |||||
<!-- create the all-packages.html at the root --> | |||||
<redirect:write file="{$output.dir}/overview-frame.html"> | |||||
<xsl:apply-templates select="." mode="all.packages"/> | |||||
</redirect:write> | |||||
<!-- create the all-classes.html at the root --> | |||||
<redirect:write file="{$output.dir}/allclasses-frame.html"> | |||||
<xsl:apply-templates select="." mode="all.classes"/> | |||||
</redirect:write> | |||||
<!-- process all packages --> | |||||
<xsl:apply-templates select="./package" mode="write"/> | |||||
</xsl:template> | |||||
<!-- ======================================================================= | |||||
Frameset definition. Entry point for the report. | |||||
3 frames: packageListFrame, classListFrame, classFrame | |||||
======================================================================= --> | |||||
<xsl:template name="index.html"> | |||||
<html> | |||||
<head><title>Coverage Results.</title></head> | |||||
<frameset cols="20%,80%"> | |||||
<frameset rows="30%,70%"> | |||||
<frame src="overview-frame.html" name="packageListFrame"/> | |||||
<frame src="allclasses-frame.html" name="classListFrame"/> | |||||
</frameset> | |||||
<frame src="overview-summary.html" name="classFrame"/> | |||||
</frameset> | |||||
<noframes> | |||||
<h2>Frame Alert</h2> | |||||
<p> | |||||
This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client. | |||||
</p> | |||||
</noframes> | |||||
</html> | |||||
</xsl:template> | |||||
<!-- ======================================================================= | |||||
Stylesheet CSS used | |||||
======================================================================= --> | |||||
<!-- this is the stylesheet css to use for nearly everything --> | |||||
<xsl:template name="stylesheet.css"> | |||||
.bannercell { | |||||
border: 0px; | |||||
padding: 0px; | |||||
} | |||||
body { | |||||
margin-left: 10; | |||||
margin-right: 10; | |||||
font:normal 80% arial,helvetica,sanserif; | |||||
background-color:#FFFFFF; | |||||
color:#000000; | |||||
} | |||||
.a td { | |||||
background: #efefef; | |||||
} | |||||
.b td { | |||||
background: #fff; | |||||
} | |||||
th, td { | |||||
text-align: left; | |||||
vertical-align: top; | |||||
} | |||||
th { | |||||
font-weight:bold; | |||||
background: #ccc; | |||||
color: black; | |||||
} | |||||
table, th, td { | |||||
font-size:100%; | |||||
border: none | |||||
} | |||||
table.log tr td, tr th { | |||||
} | |||||
h2 { | |||||
font-weight:bold; | |||||
font-size:140%; | |||||
margin-bottom: 5; | |||||
} | |||||
h3 { | |||||
font-size:100%; | |||||
font-weight:bold; | |||||
background: #525D76; | |||||
color: white; | |||||
text-decoration: none; | |||||
padding: 5px; | |||||
margin-right: 2px; | |||||
margin-left: 2px; | |||||
margin-bottom: 0; | |||||
} | |||||
</xsl:template> | |||||
<!-- ======================================================================= | |||||
List of all classes in all packages | |||||
This will be the first page in the classListFrame | |||||
======================================================================= --> | |||||
<xsl:template match="snapshot" mode="all.classes"> | |||||
<html> | |||||
<head> | |||||
<xsl:call-template name="create.stylesheet.link"/> | |||||
</head> | |||||
<body> | |||||
<h2>Classes</h2> | |||||
<table width="100%"> | |||||
<xsl:for-each select="package/class"> | |||||
<xsl:sort select="@name"/> | |||||
<xsl:variable name="package.name" select="(ancestor::package)[last()]/@name"/> | |||||
<xsl:variable name="link"> | |||||
<xsl:if test="not($package.name='')"> | |||||
<xsl:value-of select="translate($package.name,'.','/')"/><xsl:text>/</xsl:text> | |||||
</xsl:if><xsl:value-of select="@name"/><xsl:text>.html</xsl:text> | |||||
</xsl:variable> | |||||
<tr> | |||||
<td nowrap="nowrap"> | |||||
<a target="classFrame" href="{$link}"><xsl:value-of select="@name"/></a> | |||||
</td> | |||||
</tr> | |||||
</xsl:for-each> | |||||
</table> | |||||
</body> | |||||
</html> | |||||
</xsl:template> | |||||
<!-- list of all packages --> | |||||
<xsl:template match="snapshot" mode="all.packages"> | |||||
<html> | |||||
<head> | |||||
<xsl:call-template name="create.stylesheet.link"/> | |||||
</head> | |||||
<body> | |||||
<h2><a href="overview-summary.html" target="classFrame">Home</a></h2> | |||||
<h2>Packages</h2> | |||||
<table width="100%"> | |||||
<xsl:for-each select="package"> | |||||
<xsl:sort select="@name" order="ascending"/> | |||||
<tr> | |||||
<td nowrap="nowrap"> | |||||
<a href="{translate(@name,'.','/')}/package-summary.html" target="classFrame"> | |||||
<xsl:value-of select="@name"/> | |||||
</a> | |||||
</td> | |||||
</tr> | |||||
</xsl:for-each> | |||||
</table> | |||||
</body> | |||||
</html> | |||||
</xsl:template> | |||||
<!-- overview of statistics in packages --> | |||||
<xsl:template match="snapshot" mode="overview.packages"> | |||||
<html> | |||||
<head> | |||||
<xsl:call-template name="create.stylesheet.link"/> | |||||
</head> | |||||
<body onload="open('allclasses-frame.html','classListFrame')"> | |||||
<xsl:call-template name="pageHeader"/> | |||||
<h3>Summary</h3> | |||||
<table class="log" cellpadding="5" cellspacing="2" width="100%"> | |||||
<tr> | |||||
<!--th width="10%" nowrap="nowrap">Date</th> | |||||
<th width="10%" nowrap="nowrap">Elapsed time</th--> | |||||
<th width="10%" nowrap="nowrap">Reported Classes</th> | |||||
<th width="10%" nowrap="nowrap">Methods Hit</th> | |||||
<th width="10%" nowrap="nowrap">Lines Hit</th> | |||||
</tr> | |||||
<tr class="a"> | |||||
<!--td nowrap="nowrap"><xsl:value-of select="execution_log/@program_start"/></td> | |||||
<td><xsl:value-of select="format-number(execution_log/@elapsed_time div 1000,'0.0')"/>secs</td--> | |||||
<td><xsl:value-of select="count(package/class)"/></td> | |||||
<td><xsl:value-of select="format-number(cov.data/@hit_methods div cov.data/@total_methods,'0.0%')"/></td> | |||||
<td><xsl:value-of select="format-number(cov.data/@hit_lines div cov.data/@total_lines,'0.0%')"/></td> | |||||
</tr> | |||||
</table> | |||||
<table border="0" width="100%"> | |||||
<tr> | |||||
<td style="text-align: justify;"> | |||||
To ensure accurate test runs on Java applications, developers need to know how much of | |||||
the code has been tested, and where to find any untested code. Coverage helps you | |||||
locate untested code, and measure precisely how much code has been exercised. | |||||
The result is a higher quality application in a shorter period of time. | |||||
<p/> | |||||
</td> | |||||
</tr> | |||||
</table> | |||||
<h3>Packages</h3> | |||||
<table class="log" cellpadding="5" cellspacing="2" width="100%"> | |||||
<xsl:apply-templates select="package[1]" mode="stats.header"/> | |||||
<!-- display packages and sort them via their coverage rate --> | |||||
<xsl:for-each select="package"> | |||||
<xsl:sort data-type="number" select="cov.data/@hit_lines div cov.data/@total_lines"/> | |||||
<tr> | |||||
<xsl:call-template name="alternate-row"/> | |||||
<td><a href="{translate(@name,'.','/')}/package-summary.html"><xsl:value-of select="@name"/></a></td> | |||||
<td><xsl:value-of select="format-number(cov.data/@hit_methods div cov.data/@total_methods,'0.0%')"/></td> | |||||
<td><xsl:value-of select="format-number(cov.data/@hit_lines div cov.data/@total_lines,'0.0%')"/></td> | |||||
</tr> | |||||
</xsl:for-each> | |||||
</table> | |||||
<xsl:call-template name="pageFooter"/> | |||||
</body> | |||||
</html> | |||||
</xsl:template> | |||||
<!-- | |||||
detailed info for a package. It will output the list of classes | |||||
, the summary page, and the info for each class | |||||
--> | |||||
<xsl:template match="package" mode="write"> | |||||
<xsl:variable name="package.dir"> | |||||
<xsl:if test="not(@name = '')"><xsl:value-of select="translate(@name,'.','/')"/></xsl:if> | |||||
<xsl:if test="@name = ''">.</xsl:if> | |||||
</xsl:variable> | |||||
<!-- create a classes-list.html in the package directory --> | |||||
<redirect:write file="{$output.dir}/{$package.dir}/package-frame.html"> | |||||
<xsl:apply-templates select="." mode="classes.list"/> | |||||
</redirect:write> | |||||
<!-- create a package-summary.html in the package directory --> | |||||
<redirect:write file="{$output.dir}/{$package.dir}/package-summary.html"> | |||||
<xsl:apply-templates select="." mode="package.summary"/> | |||||
</redirect:write> | |||||
<!-- for each class, creates a @name.html --> | |||||
<xsl:for-each select="class"> | |||||
<redirect:write file="{$output.dir}/{$package.dir}/{@name}.html"> | |||||
<xsl:apply-templates select="." mode="class.details"/> | |||||
</redirect:write> | |||||
</xsl:for-each> | |||||
</xsl:template> | |||||
<!-- list of classes in a package --> | |||||
<xsl:template match="package" mode="classes.list"> | |||||
<html> | |||||
<HEAD> | |||||
<xsl:call-template name="create.stylesheet.link"> | |||||
<xsl:with-param name="package.name" select="@name"/> | |||||
</xsl:call-template> | |||||
</HEAD> | |||||
<BODY> | |||||
<table width="100%"> | |||||
<tr> | |||||
<td nowrap="nowrap"> | |||||
<H2><a href="package-summary.html" target="classFrame"><xsl:value-of select="@name"/></a></H2> | |||||
</td> | |||||
</tr> | |||||
</table> | |||||
<H2>Classes</H2> | |||||
<TABLE WIDTH="100%"> | |||||
<xsl:for-each select="class"> | |||||
<xsl:sort select="@name"/> | |||||
<tr> | |||||
<td nowrap="nowrap"> | |||||
<a href="{@name}.html" target="classFrame"><xsl:value-of select="@name"/></a> | |||||
</td> | |||||
</tr> | |||||
</xsl:for-each> | |||||
</TABLE> | |||||
</BODY> | |||||
</html> | |||||
</xsl:template> | |||||
<!-- summary of a package --> | |||||
<xsl:template match="package" mode="package.summary"> | |||||
<HTML> | |||||
<HEAD> | |||||
<xsl:call-template name="create.stylesheet.link"> | |||||
<xsl:with-param name="package.name" select="@name"/> | |||||
</xsl:call-template> | |||||
</HEAD> | |||||
<!-- when loading this package, it will open the classes into the frame --> | |||||
<BODY onload="open('package-frame.html','classListFrame')"> | |||||
<xsl:call-template name="pageHeader"/> | |||||
<h3>Package <xsl:value-of select="@name"/></h3> | |||||
<table class="log" cellpadding="5" cellspacing="2" width="100%"> | |||||
<xsl:apply-templates select="." mode="stats.header"/> | |||||
<xsl:apply-templates select="." mode="stats"/> | |||||
</table> | |||||
<xsl:if test="count(class) > 0"> | |||||
<H3>Classes</H3> | |||||
<table class="log" cellpadding="5" cellspacing="2" width="100%"> | |||||
<xsl:apply-templates select="." mode="stats.header"/> | |||||
<xsl:apply-templates select="class" mode="stats"> | |||||
<xsl:sort data-type="number" select="cov.data/@hit_lines div cov.data/@total_lines"/> | |||||
</xsl:apply-templates> | |||||
</table> | |||||
</xsl:if> | |||||
<xsl:call-template name="pageFooter"/> | |||||
</BODY> | |||||
</HTML> | |||||
</xsl:template> | |||||
<!-- details of a class --> | |||||
<xsl:template match="class" mode="class.details"> | |||||
<xsl:variable name="package.name" select="(ancestor::package)[last()]/@name"/> | |||||
<HTML> | |||||
<HEAD> | |||||
<xsl:call-template name="create.stylesheet.link"> | |||||
<xsl:with-param name="package.name" select="$package.name"/> | |||||
</xsl:call-template> | |||||
</HEAD> | |||||
<BODY> | |||||
<xsl:call-template name="pageHeader"/> | |||||
<H3>Class <xsl:if test="not($package.name = '')"><xsl:value-of select="$package.name"/>.</xsl:if><xsl:value-of select="@name"/></H3> | |||||
<!-- class summary --> | |||||
<table class="log" cellpadding="5" cellspacing="2" width="100%"> | |||||
<xsl:apply-templates select="." mode="stats.header"/> | |||||
<xsl:apply-templates select="." mode="stats"/> | |||||
</table> | |||||
<!-- details of methods --> | |||||
<H3>Methods</H3> | |||||
<table class="log" cellpadding="5" cellspacing="2" width="100%"> | |||||
<xsl:apply-templates select="method[1]" mode="stats.header"/> | |||||
<xsl:apply-templates select="method" mode="stats"> | |||||
<xsl:sort data-type="number" select="cov.data/@hit_lines div cov.data/@total_lines"/> | |||||
</xsl:apply-templates> | |||||
</table> | |||||
<xsl:call-template name="pageFooter"/> | |||||
</BODY> | |||||
</HTML> | |||||
</xsl:template> | |||||
<!-- Page Header --> | |||||
<xsl:template name="pageHeader"> | |||||
<!-- jakarta logo --> | |||||
<table border="0" cellpadding="0" cellspacing="0" width="100%"> | |||||
<tr> | |||||
<td class="bannercell" rowspan="2"> | |||||
<a href="http://jakarta.apache.org/"> | |||||
<img src="http://jakarta.apache.org/images/jakarta-logo.gif" alt="http://jakarta.apache.org" align="left" border="0"/> | |||||
</a> | |||||
</td> | |||||
<td style="text-align:right"><h2>Source Code Coverage</h2></td> | |||||
</tr> | |||||
<tr> | |||||
<td style="text-align:right">Designed for use with <a href='http://www.sitraka.com/jprobe'>Sitraka JProbe</a> and <a href='http://jakarta.apache.org'>Ant</a>.</td> | |||||
</tr> | |||||
</table> | |||||
<hr size="1"/> | |||||
</xsl:template> | |||||
<!-- Page Footer --> | |||||
<xsl:template name="pageFooter"> | |||||
<table width="100%"> | |||||
<tr><td><hr noshade="yes" size="1"/></td></tr> | |||||
<tr><td> | |||||
<div align="center"><font color="#525D76" size="-1"><em> | |||||
Copyright © 1999-2001, Apache Software Foundation | |||||
</em></font></div> | |||||
</td></tr> | |||||
</table> | |||||
</xsl:template> | |||||
<xsl:template name="table.header"> | |||||
<tr> | |||||
<th width="80%">Name</th> | |||||
<th width="10%" nowrap="nowrap">Methods Hit</th> | |||||
<th width="10%" nowrap="nowrap">Lines Hit</th> | |||||
</tr> | |||||
</xsl:template> | |||||
<xsl:template match="method" mode="stats.header"> | |||||
<tr> | |||||
<th width="90%">Name</th> | |||||
<th width="10%" nowrap="nowrap">Lines Hit</th> | |||||
</tr> | |||||
</xsl:template> | |||||
<xsl:template match="method" mode="stats"> | |||||
<tr> | |||||
<xsl:call-template name="alternate-row"/> | |||||
<td><xsl:value-of select="@name"/></td> | |||||
<td> | |||||
<xsl:value-of select="format-number(cov.data/@hit_lines div cov.data/@total_lines,'0.0%')"/> | |||||
</td> | |||||
</tr> | |||||
</xsl:template> | |||||
<xsl:template match="package|class" mode="stats.header"> | |||||
<tr> | |||||
<th width="80%">Name</th> | |||||
<th width="10%" nowrap="nowrap">Methods Hit</th> | |||||
<th width="10%" nowrap="nowrap">Lines Hit</th> | |||||
</tr> | |||||
</xsl:template> | |||||
<xsl:template match="package|class" mode="stats"> | |||||
<tr> | |||||
<xsl:call-template name="alternate-row"/> | |||||
<td><xsl:value-of select="@name"/></td> | |||||
<td><xsl:value-of select="format-number(cov.data/@hit_methods div cov.data/@total_methods,'0.0%')"/></td> | |||||
<td><xsl:value-of select="format-number(cov.data/@hit_lines div cov.data/@total_lines,'0.0%')"/></td> | |||||
</tr> | |||||
</xsl:template> | |||||
<!-- | |||||
transform string like a.b.c to ../../../ | |||||
@param path the path to transform into a descending directory path | |||||
--> | |||||
<xsl:template name="path"> | |||||
<xsl:param name="path"/> | |||||
<xsl:if test="contains($path,'.')"> | |||||
<xsl:text>../</xsl:text> | |||||
<xsl:call-template name="path"> | |||||
<xsl:with-param name="path"><xsl:value-of select="substring-after($path,'.')"/></xsl:with-param> | |||||
</xsl:call-template> | |||||
</xsl:if> | |||||
<xsl:if test="not(contains($path,'.')) and not($path = '')"> | |||||
<xsl:text>../</xsl:text> | |||||
</xsl:if> | |||||
</xsl:template> | |||||
<!-- create the link to the stylesheet based on the package name --> | |||||
<xsl:template name="create.stylesheet.link"> | |||||
<xsl:param name="package.name"/> | |||||
<LINK REL ="stylesheet" TYPE="text/css" TITLE="Style"><xsl:attribute name="href"><xsl:if test="not($package.name = 'unnamed package')"><xsl:call-template name="path"><xsl:with-param name="path" select="$package.name"/></xsl:call-template></xsl:if>stylesheet.css</xsl:attribute></LINK> | |||||
</xsl:template> | |||||
<!-- alternated row style --> | |||||
<xsl:template name="alternate-row"> | |||||
<xsl:attribute name="class"> | |||||
<xsl:if test="position() mod 2 = 1">a</xsl:if> | |||||
<xsl:if test="position() mod 2 = 0">b</xsl:if> | |||||
</xsl:attribute> | |||||
</xsl:template> | |||||
</xsl:stylesheet> | |||||
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" | |||||
xmlns:lxslt="http://xml.apache.org/xslt" | |||||
xmlns:redirect="org.apache.xalan.lib.Redirect" | |||||
extension-element-prefixes="redirect"> | |||||
<xsl:output method="html" indent="yes" encoding="US-ASCII"/> | |||||
<!-- | |||||
Copyright 2002-2004 The Apache Software Foundation | |||||
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. | |||||
--> | |||||
<!-- | |||||
Sample stylesheet to be used with JDepend XML output. | |||||
It creates a set of HTML files a la javadoc where you can browse easily | |||||
through all packages and classes. | |||||
@author <a href="mailto:jtulley@novell.com">Jeff Tulley</a> | |||||
--> | |||||
<xsl:param name="output.dir" select="'.'"/> | |||||
<xsl:template match="JDepend"> | |||||
<!-- create the index.html --> | |||||
<redirect:write file="{$output.dir}/index.html"> | |||||
<xsl:call-template name="index.html"/> | |||||
</redirect:write> | |||||
<!-- create the stylesheet.css --> | |||||
<redirect:write file="{$output.dir}/stylesheet.css"> | |||||
<xsl:call-template name="stylesheet.css"/> | |||||
</redirect:write> | |||||
<!-- create the overview-packages.html at the root --> | |||||
<redirect:write file="{$output.dir}/overview-summary.html"> | |||||
<xsl:apply-templates select="." mode="overview.packages"/> | |||||
</redirect:write> | |||||
<!-- create the overview-packages.html at the root --> | |||||
<redirect:write file="{$output.dir}/overview-packages.html"> | |||||
<xsl:apply-templates select="." mode="packages.details"/> | |||||
</redirect:write> | |||||
<!-- create the overview-cycles.html at the root --> | |||||
<redirect:write file="{$output.dir}/overview-cycles.html"> | |||||
<xsl:apply-templates select="." mode="cycles.details"/> | |||||
</redirect:write> | |||||
<!-- create the overview-cycles.html at the root --> | |||||
<redirect:write file="{$output.dir}/overview-explanations.html"> | |||||
<xsl:apply-templates select="." mode="explanations"/> | |||||
</redirect:write> | |||||
<!-- create the all-packages.html at the root --> | |||||
<redirect:write file="{$output.dir}/all-packages.html"> | |||||
<xsl:apply-templates select="Packages" mode="all.packages"/> | |||||
</redirect:write> | |||||
<!-- create the all-cycles.html at the root --> | |||||
<redirect:write file="{$output.dir}/all-cycles.html"> | |||||
<xsl:apply-templates select="Cycles" mode="all.cycles"/> | |||||
</redirect:write> | |||||
</xsl:template> | |||||
<xsl:template name="index.html"> | |||||
<html> | |||||
<head> | |||||
<title>JDepend Analysis</title> | |||||
</head> | |||||
<frameset cols="20%,80%"> | |||||
<frameset rows="30%,70%"> | |||||
<frame src="all-packages.html" name="packageListFrame"/> | |||||
<frame src="all-cycles.html" name="classListFrame"/> | |||||
</frameset> | |||||
<frame src="overview-summary.html" name="classFrame"/> | |||||
</frameset> | |||||
<noframes> | |||||
<h2>Frame Alert</h2> | |||||
<p> | |||||
This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client. | |||||
</p> | |||||
</noframes> | |||||
</html> | |||||
</xsl:template> | |||||
<!-- this is the stylesheet css to use for nearly everything --> | |||||
<xsl:template name="stylesheet.css"> | |||||
<style type="text/css"> | |||||
body { | |||||
font:normal 68% verdana,arial,helvetica; | |||||
color:#000000; | |||||
} | |||||
table tr td, tr th { | |||||
font-size: 68%; | |||||
} | |||||
table.details tr th{ | |||||
font-weight: bold; | |||||
text-align:left; | |||||
background:#a6caf0; | |||||
} | |||||
table.details tr td{ | |||||
background:#eeeee0; | |||||
} | |||||
p { | |||||
line-height:1.5em; | |||||
margin-top:0.5em; margin-bottom:1.0em; | |||||
margin-left:2em; | |||||
margin-right:2em; | |||||
} | |||||
h1 { | |||||
margin: 0px 0px 5px; font: 165% verdana,arial,helvetica | |||||
} | |||||
h2 { | |||||
margin-top: 1em; margin-bottom: 0.5em; font: bold 125% verdana,arial,helvetica | |||||
} | |||||
h3 { | |||||
margin-bottom: 0.5em; font: bold 115% verdana,arial,helvetica | |||||
} | |||||
h4 { | |||||
margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica | |||||
} | |||||
h5 { | |||||
margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica | |||||
} | |||||
h6 { | |||||
margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica | |||||
} | |||||
.Error { | |||||
font-weight:bold; color:red; | |||||
} | |||||
.Failure { | |||||
font-weight:bold; color:purple; | |||||
} | |||||
.Properties { | |||||
text-align:right; | |||||
} | |||||
</style> | |||||
</xsl:template> | |||||
<xsl:template match="JDepend" mode="overview.packages"> | |||||
<html> | |||||
<head> | |||||
<link rel="stylesheet" type="text/css" href="stylesheet.css"/> | |||||
</head> | |||||
<body> | |||||
<xsl:call-template name="pageHeader"/> | |||||
<table width="100%"><tr align="left"><h2>Summary</h2><td> | |||||
</td><td align="right"> | |||||
[summary] | |||||
[<a href="overview-packages.html">packages</a>] | |||||
[<a href="overview-cycles.html">cycles</a>] | |||||
[<a href="overview-explanations.html">explanations</a>] | |||||
</td></tr></table> | |||||
<table width="100%" class="details"> | |||||
<tr> | |||||
<th>Package</th> | |||||
<th>Total Classes</th> | |||||
<th><a href="overview-explanations.html#EXnumber">Abstract Classes</a></th> | |||||
<th><a href="overview-explanations.html#EXnumber">Concrete Classes</a></th> | |||||
<th><a href="overview-explanations.html#EXafferent">Afferent Couplings</a></th> | |||||
<th><a href="overview-explanations.html#EXefferent">Efferent Couplings</a></th> | |||||
<th><a href="overview-explanations.html#EXabstractness">Abstractness</a></th> | |||||
<th><a href="overview-explanations.html#EXinstability">Instability</a></th> | |||||
<th><a href="overview-explanations.html#EXdistance">Distance</a></th> | |||||
</tr> | |||||
<xsl:for-each select="./Packages/Package"> | |||||
<xsl:if test="count(error) = 0"> | |||||
<tr> | |||||
<td align="left"> | |||||
<a> | |||||
<xsl:attribute name="href">overview-packages.html#PK<xsl:value-of select="@name"/> | |||||
</xsl:attribute> | |||||
<xsl:value-of select="@name"/> | |||||
</a> | |||||
</td> | |||||
<td align="right"><xsl:value-of select="Stats/TotalClasses"/></td> | |||||
<td align="right"><xsl:value-of select="Stats/AbstractClasses"/></td> | |||||
<td align="right"><xsl:value-of select="Stats/ConcreteClasses"/></td> | |||||
<td align="right"><xsl:value-of select="Stats/Ca"/></td> | |||||
<td align="right"><xsl:value-of select="Stats/Ce"/></td> | |||||
<td align="right"><xsl:value-of select="Stats/A"/></td> | |||||
<td align="right"><xsl:value-of select="Stats/I"/></td> | |||||
<td align="right"><xsl:value-of select="Stats/D"/></td> | |||||
</tr> | |||||
</xsl:if> | |||||
</xsl:for-each> | |||||
<xsl:for-each select="./Packages/Package"> | |||||
<xsl:if test="count(error) > 0"> | |||||
<tr> | |||||
<td align="left"> | |||||
<xsl:value-of select="@name"/> | |||||
</td> | |||||
<td align="left" colspan="8"><xsl:value-of select="error"/></td> | |||||
</tr> | |||||
</xsl:if> | |||||
</xsl:for-each> | |||||
</table> | |||||
</body> | |||||
</html> | |||||
</xsl:template> | |||||
<xsl:template match="JDepend" mode="packages.details"> | |||||
<html> | |||||
<head> | |||||
<link rel="stylesheet" type="text/css" href="stylesheet.css"/> | |||||
</head> | |||||
<body> | |||||
<xsl:call-template name="pageHeader"/> | |||||
<table width="100%"><tr align="left"><h2>Packages</h2><td> | |||||
</td><td align="right"> | |||||
[<a href="overview-summary.html">summary</a>] | |||||
[packages] | |||||
[<a href="overview-cycles.html">cycles</a>] | |||||
[<a href="overview-explanations.html">explanations</a>] | |||||
</td></tr></table> | |||||
<xsl:for-each select="./Packages/Package"> | |||||
<xsl:if test="count(error) = 0"> | |||||
<h3><a><xsl:attribute name="name">PK<xsl:value-of select="@name"/></xsl:attribute> | |||||
<xsl:value-of select="@name"/></a></h3> | |||||
<table width="100%"><tr> | |||||
<td><a href="overview-explanations.html#EXafferent">Afferent Couplings</a>: <xsl:value-of select="Stats/Ca"/></td> | |||||
<td><a href="overview-explanations.html#EXefferent">Efferent Couplings</a>: <xsl:value-of select="Stats/Ce"/></td> | |||||
<td><a href="overview-explanations.html#EXabstractness">Abstractness</a>: <xsl:value-of select="Stats/A"/></td> | |||||
<td><a href="overview-explanations.html#EXinstability">Instability</a>: <xsl:value-of select="Stats/I"/></td> | |||||
<td><a href="overview-explanations.html#EXdistance">Distance</a>: <xsl:value-of select="Stats/D"/></td> | |||||
</tr></table> | |||||
<table width="100%" class="details"> | |||||
<tr> | |||||
<th>Abstract Classes</th> | |||||
<th>Concrete Classes</th> | |||||
<th>Used by Packages</th> | |||||
<th>Uses Packages</th> | |||||
</tr> | |||||
<tr> | |||||
<td valign="top" width="25%"> | |||||
<xsl:if test="count(AbstractClasses/Class)=0"> | |||||
<i>None</i> | |||||
</xsl:if> | |||||
<xsl:for-each select="AbstractClasses/Class"> | |||||
<xsl:value-of select="node()"/><br/> | |||||
</xsl:for-each> | |||||
</td> | |||||
<td valign="top" width="25%"> | |||||
<xsl:if test="count(ConcreteClasses/Class)=0"> | |||||
<i>None</i> | |||||
</xsl:if> | |||||
<xsl:for-each select="ConcreteClasses/Class"> | |||||
<xsl:value-of select="node()"/><br/> | |||||
</xsl:for-each> | |||||
</td> | |||||
<td valign="top" width="25%"> | |||||
<xsl:if test="count(UsedBy/Package)=0"> | |||||
<i>None</i> | |||||
</xsl:if> | |||||
<xsl:for-each select="UsedBy/Package"> | |||||
<a> | |||||
<xsl:attribute name="href">overview-packages.html#PK<xsl:value-of select="node()"/></xsl:attribute> | |||||
<xsl:value-of select="node()"/> | |||||
</a><br/> | |||||
</xsl:for-each> | |||||
</td> | |||||
<td valign="top" width="25%"> | |||||
<xsl:if test="count(DependsUpon/Package)=0"> | |||||
<i>None</i> | |||||
</xsl:if> | |||||
<xsl:for-each select="DependsUpon/Package"> | |||||
<a> | |||||
<xsl:attribute name="href">overview-packages.html#PK<xsl:value-of select="node()"/></xsl:attribute> | |||||
<xsl:value-of select="node()"/> | |||||
</a><br/> | |||||
</xsl:for-each> | |||||
</td> | |||||
</tr> | |||||
</table> | |||||
</xsl:if> | |||||
</xsl:for-each> | |||||
<!-- this is often a long listing; provide a lower navigation table also --> | |||||
<table width="100%"><tr align="left"><td></td><td align="right"> | |||||
[<a href="overview-summary.html">summary</a>] | |||||
[packages] | |||||
[<a href="overview-cycles.html">cycles</a>] | |||||
[<a href="overview-explanations.html">explanations</a>] | |||||
</td></tr></table> | |||||
</body> | |||||
</html> | |||||
</xsl:template> | |||||
<xsl:template match="JDepend" mode="cycles.details"> | |||||
<html> | |||||
<head> | |||||
<link rel="stylesheet" type="text/css" href="stylesheet.css"/> | |||||
</head> | |||||
<body> | |||||
<xsl:call-template name="pageHeader"/> | |||||
<table width="100%"><tr align="left"><h2>Cycles</h2><td> | |||||
</td><td align="right"> | |||||
[<a href="overview-summary.html">summary</a>] | |||||
[<a href="overview-packages.html">packages</a>] | |||||
[cycles] | |||||
[<a href="overview-explanations.html">explanations</a>] | |||||
</td></tr></table> | |||||
<!--<table width="100%"><tr><td> | |||||
</td><td align="right"> | |||||
[<a href="#NVsummary">summary</a>] | |||||
[<a href="#NVpackages">packages</a>] | |||||
[<a href="#NVcycles">cycles</a>] | |||||
[<a href="#NVexplanations">explanations</a>] | |||||
</td></tr></table> --> | |||||
<xsl:if test="count(Cycles/Package) = 0"> | |||||
<p>There are no cyclic dependancies.</p> | |||||
</xsl:if> | |||||
<xsl:for-each select="Cycles/Package"> | |||||
<h3><a><xsl:attribute name="name">#CY<xsl:value-of select="@Name"/></xsl:attribute><xsl:value-of select="@Name"/></a></h3><p> | |||||
<xsl:for-each select="Package"> | |||||
<xsl:value-of select="."/><br/> | |||||
</xsl:for-each></p> | |||||
</xsl:for-each> | |||||
<!-- this is often a long listing; provide a lower navigation table also --> | |||||
<table width="100%"><tr align="left"><td></td><td align="right"> | |||||
[<a href="overview-summary.html">summary</a>] | |||||
[<a href="overview-packages.html">packages</a>] | |||||
[cycles] | |||||
[<a href="overview-explanations.html">explanations</a>] | |||||
</td></tr></table> | |||||
</body> | |||||
</html> | |||||
</xsl:template> | |||||
<xsl:template match="JDepend" mode="explanations"> | |||||
<html> | |||||
<head> | |||||
<link rel="stylesheet" type="text/css" href="stylesheet.css"/> | |||||
</head> | |||||
<body> | |||||
<xsl:call-template name="pageHeader"/> | |||||
<table width="100%"><tr align="left"><h2>Explanations</h2><td> | |||||
</td><td align="right"> | |||||
[<a href="overview-summary.html">summary</a>] | |||||
[<a href="overview-packages.html">packages</a>] | |||||
[<a href="overview-cycles.html">cycles</a>] | |||||
[explanations] | |||||
</td></tr></table> | |||||
<p>The following explanations are for quick reference and are lifted directly from the original <a href="http://www.clarkware.com/software/JDepend.html">JDepend documentation</a>.</p> | |||||
<h3><a name="EXnumber">Number of Classes</a></h3> | |||||
<p>The number of concrete and abstract classes (and interfaces) in the package is an indicator of the extensibility of the package.</p> | |||||
<h3><a name="EXafferent">Afferent Couplings</a></h3> | |||||
<p>The number of other packages that depend upon classes within the package is an indicator of the package's responsibility. </p> | |||||
<h3><a name="EXefferent">Efferent Couplings</a></h3> | |||||
<p>The number of other packages that the classes in the package depend upon is an indicator of the package's independence. </p> | |||||
<h3><a name="EXabstractness">Abstractness</a></h3> | |||||
<p>The ratio of the number of abstract classes (and interfaces) in the analyzed package to the total number of classes in the analyzed package. </p> | |||||
<p>The range for this metric is 0 to 1, with A=0 indicating a completely concrete package and A=1 indicating a completely abstract package. </p> | |||||
<h3><a name="EXinstability">Instability</a></h3> | |||||
<p>The ratio of efferent coupling (Ce) to total coupling (Ce / (Ce + Ca)). This metric is an indicator of the package's resilience to change. </p> | |||||
<p>The range for this metric is 0 to 1, with I=0 indicating a completely stable package and I=1 indicating a completely instable package. </p> | |||||
<h3><a name="EXdistance">Distance</a></h3> | |||||
<p>The perpendicular distance of a package from the idealized line A + I = 1. This metric is an indicator of the package's balance between abstractness and stability. </p> | |||||
<p>A package squarely on the main sequence is optimally balanced with respect to its abstractness and stability. Ideal packages are either completely abstract and stable (x=0, y=1) or completely concrete and instable (x=1, y=0). </p> | |||||
<p>The range for this metric is 0 to 1, with D=0 indicating a package that is coincident with the main sequence and D=1 indicating a package that is as far from the main sequence as possible. </p> | |||||
</body> | |||||
</html> | |||||
</xsl:template> | |||||
<!-- | |||||
Creates an html file that contains a link to all package links in overview-packages.html. | |||||
@bug there will be a problem here, I don't know yet how to handle unnamed package :( | |||||
--> | |||||
<xsl:template match="JDepend/Packages" mode="all.packages"> | |||||
<html> | |||||
<head> | |||||
<link rel="stylesheet" type="text/css" href="stylesheet.css"/> | |||||
</head> | |||||
<body> | |||||
<table width="100%"><tr align="left"><td></td><td nowrap="nowrap" align="right"> | |||||
[<a href="overview-summary.html" target="classFrame">summary</a>] | |||||
[<a href="overview-packages.html" target="classFrame">packages</a>] | |||||
[<a href="overview-cycles.html" target="classFrame">cycles</a>] | |||||
[<a href="overview-explanations.html" target="classFrame">explanations</a>] | |||||
</td></tr></table> | |||||
<h2>Packages</h2> | |||||
<table width="100%"> | |||||
<xsl:apply-templates select="Package[count(error)=0]" mode="all.packages.link"> | |||||
<xsl:sort select="@name"/> | |||||
</xsl:apply-templates> | |||||
<xsl:apply-templates select="Package[count(error) > 0]" mode="all.packages.nolink"> | |||||
<xsl:sort select="@name"/> | |||||
</xsl:apply-templates> | |||||
</table> | |||||
</body> | |||||
</html> | |||||
</xsl:template> | |||||
<xsl:template match="JDepend/Packages/Package" mode="all.packages.link"> | |||||
<tr> | |||||
<td nowrap="nowrap"> | |||||
<a href="overview-packages.html#PK{@name}" target="classFrame"> | |||||
<xsl:value-of select="@name"/> | |||||
</a> | |||||
</td> | |||||
</tr> | |||||
</xsl:template> | |||||
<!-- | |||||
I do not know JDepend enough to know if every error results in a non-analyzed package, | |||||
but that is how I am presenting it to the viewer. This may need to change. | |||||
@bug there will be a problem here, I don't know yet how to handle unnamed package :( | |||||
--> | |||||
<xsl:template match="JDepend/Packages/Package" mode="all.packages.nolink"> | |||||
<tr> | |||||
<td nowrap="nowrap"> | |||||
Not Analyzed: <xsl:value-of select="@name"/> | |||||
</td> | |||||
</tr> | |||||
</xsl:template> | |||||
<!-- | |||||
Creates an html file that contains a link to all package links in overview-cycles.html. | |||||
@bug there will be a problem here, I don't know yet how to handle unnamed package :( | |||||
--> | |||||
<xsl:template match="JDepend/Cycles" mode="all.cycles"> | |||||
<html> | |||||
<head> | |||||
<link rel="stylesheet" type="text/css" href="stylesheet.css"/> | |||||
</head> | |||||
<body> | |||||
<table width="100%"><tr align="left"><td></td><td nowrap="nowrap" align="right"> | |||||
[<a href="overview-summary.html" target="classFrame">summary</a>] | |||||
[<a href="overview-packages.html" target="classFrame">packages</a>] | |||||
[<a href="overview-cycles.html" target="classFrame">cycles</a>] | |||||
[<a href="overview-explanations.html" target="classFrame">explanations</a>] | |||||
</td></tr></table> | |||||
<h2>Cycles</h2> | |||||
<table width="100%"> | |||||
<xsl:apply-templates select="Package" mode="all.cycles"> | |||||
<xsl:sort select="@Name"/> | |||||
</xsl:apply-templates> | |||||
</table> | |||||
</body> | |||||
</html> | |||||
</xsl:template> | |||||
<xsl:template match="JDepend/Cycles/Package" mode="all.cycles"> | |||||
<tr> | |||||
<td nowrap="nowrap"> | |||||
<a href="overview-cycles.html#CY{@Name}" target="classFrame"><xsl:value-of select="@Name"/></a> | |||||
</td> | |||||
</tr> | |||||
</xsl:template> | |||||
<!-- Page HEADER --> | |||||
<xsl:template name="pageHeader"> | |||||
<h1>JDepend Analysis</h1> | |||||
<table width="100%"> | |||||
<tr> | |||||
<td align="left"></td> | |||||
<td align="right">Designed for use with <a href="http://www.clarkware.com/software/JDepend.html">JDepend</a> and <a href="http://jakarta.apache.org">Ant</a>.</td> | |||||
</tr> | |||||
</table> | |||||
<hr size="1"/> | |||||
</xsl:template> | |||||
</xsl:stylesheet> |
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> | |||||
<!-- | |||||
Copyright 2002,2004 The Apache Software Foundation | |||||
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. | |||||
--> | |||||
<xsl:output method="html" indent="yes" encoding="US-ASCII"/> | |||||
<xsl:template match="JDepend"> | |||||
<html> | |||||
<head> | |||||
<title>JDepend Analysis</title> | |||||
<style type="text/css"> | |||||
body { | |||||
font:normal 68% verdana,arial,helvetica; | |||||
color:#000000; | |||||
} | |||||
table tr td, tr th { | |||||
font-size: 68%; | |||||
} | |||||
table.details tr th{ | |||||
font-weight: bold; | |||||
text-align:left; | |||||
background:#a6caf0; | |||||
} | |||||
table.details tr td{ | |||||
background:#eeeee0; | |||||
} | |||||
p { | |||||
line-height:1.5em; | |||||
margin-top:0.5em; margin-bottom:1.0em; | |||||
margin-left:2em; | |||||
margin-right:2em; | |||||
} | |||||
h1 { | |||||
margin: 0px 0px 5px; font: 165% verdana,arial,helvetica | |||||
} | |||||
h2 { | |||||
margin-top: 1em; margin-bottom: 0.5em; font: bold 125% verdana,arial,helvetica | |||||
} | |||||
h3 { | |||||
margin-bottom: 0.5em; font: bold 115% verdana,arial,helvetica | |||||
} | |||||
h4 { | |||||
margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica | |||||
} | |||||
h5 { | |||||
margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica | |||||
} | |||||
h6 { | |||||
margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica | |||||
} | |||||
.Error { | |||||
font-weight:bold; color:red; | |||||
} | |||||
.Failure { | |||||
font-weight:bold; color:purple; | |||||
} | |||||
.Properties { | |||||
text-align:right; | |||||
} | |||||
</style> | |||||
</head> | |||||
<body> | |||||
<!--h1>JDepend Report</h1> | |||||
<ul> | |||||
<xsl:for-each select="./Packages/Package"> | |||||
<xsl:sort select="@name"/> | |||||
<li><xsl:value-of select="@name"/></li> | |||||
</xsl:for-each> | |||||
</ul--> | |||||
<h1><a name="top">JDepend Analysis</a></h1> | |||||
<p align="right">Designed for use with <a href="http://www.clarkware.com/software/JDepend.html">JDepend</a> and <a href="http://jakarta.apache.org">Ant</a>.</p> | |||||
<hr size="2" /> | |||||
<table width="100%"><tr><td> | |||||
<a name="NVsummary"><h2>Summary</h2></a> | |||||
</td><td align="right"> | |||||
[<a href="#NVsummary">summary</a>] | |||||
[<a href="#NVpackages">packages</a>] | |||||
[<a href="#NVcycles">cycles</a>] | |||||
[<a href="#NVexplanations">explanations</a>] | |||||
</td></tr></table> | |||||
<table width="100%" class="details"> | |||||
<tr> | |||||
<th>Package</th> | |||||
<th>Total Classes</th> | |||||
<th><a href="#EXnumber">Abstract Classes</a></th> | |||||
<th><a href="#EXnumber">Concrete Classes</a></th> | |||||
<th><a href="#EXafferent">Afferent Couplings</a></th> | |||||
<th><a href="#EXefferent">Efferent Couplings</a></th> | |||||
<th><a href="#EXabstractness">Abstractness</a></th> | |||||
<th><a href="#EXinstability">Instability</a></th> | |||||
<th><a href="#EXdistance">Distance</a></th> | |||||
</tr> | |||||
<xsl:for-each select="./Packages/Package"> | |||||
<xsl:if test="count(error) = 0"> | |||||
<tr> | |||||
<td align="left"> | |||||
<a> | |||||
<xsl:attribute name="href">#PK<xsl:value-of select="@name"/> | |||||
</xsl:attribute> | |||||
<xsl:value-of select="@name"/> | |||||
</a> | |||||
</td> | |||||
<td align="right"><xsl:value-of select="Stats/TotalClasses"/></td> | |||||
<td align="right"><xsl:value-of select="Stats/AbstractClasses"/></td> | |||||
<td align="right"><xsl:value-of select="Stats/ConcreteClasses"/></td> | |||||
<td align="right"><xsl:value-of select="Stats/Ca"/></td> | |||||
<td align="right"><xsl:value-of select="Stats/Ce"/></td> | |||||
<td align="right"><xsl:value-of select="Stats/A"/></td> | |||||
<td align="right"><xsl:value-of select="Stats/I"/></td> | |||||
<td align="right"><xsl:value-of select="Stats/D"/></td> | |||||
</tr> | |||||
</xsl:if> | |||||
</xsl:for-each> | |||||
<xsl:for-each select="./Packages/Package"> | |||||
<xsl:if test="count(error) > 0"> | |||||
<tr> | |||||
<td align="left"> | |||||
<xsl:value-of select="@name"/> | |||||
</td> | |||||
<td align="left" colspan="8"><xsl:value-of select="error"/></td> | |||||
</tr> | |||||
</xsl:if> | |||||
</xsl:for-each> | |||||
</table> | |||||
<table width="100%"><tr><td> | |||||
<a name="NVpackages"><h2>Packages</h2></a> | |||||
</td><td align="right"> | |||||
[<a href="#NVsummary">summary</a>] | |||||
[<a href="#NVpackages">packages</a>] | |||||
[<a href="#NVcycles">cycles</a>] | |||||
[<a href="#NVexplanations">explanations</a>] | |||||
</td></tr></table> | |||||
<xsl:for-each select="./Packages/Package"> | |||||
<xsl:if test="count(error) = 0"> | |||||
<h3><a><xsl:attribute name="name">PK<xsl:value-of select="@name"/></xsl:attribute> | |||||
<xsl:value-of select="@name"/></a></h3> | |||||
<table width="100%"><tr> | |||||
<td><a href="#EXafferent">Afferent Couplings</a>: <xsl:value-of select="Stats/Ca"/></td> | |||||
<td><a href="#EXefferent">Efferent Couplings</a>: <xsl:value-of select="Stats/Ce"/></td> | |||||
<td><a href="#EXabstractness">Abstractness</a>: <xsl:value-of select="Stats/A"/></td> | |||||
<td><a href="#EXinstability">Instability</a>: <xsl:value-of select="Stats/I"/></td> | |||||
<td><a href="#EXdistance">Distance</a>: <xsl:value-of select="Stats/D"/></td> | |||||
</tr></table> | |||||
<table width="100%" class="details"> | |||||
<tr> | |||||
<th>Abstract Classes</th> | |||||
<th>Concrete Classes</th> | |||||
<th>Used by Packages</th> | |||||
<th>Uses Packages</th> | |||||
</tr> | |||||
<tr> | |||||
<td valign="top" width="25%"> | |||||
<xsl:if test="count(AbstractClasses/Class)=0"> | |||||
<i>None</i> | |||||
</xsl:if> | |||||
<xsl:for-each select="AbstractClasses/Class"> | |||||
<xsl:value-of select="node()"/><br/> | |||||
</xsl:for-each> | |||||
</td> | |||||
<td valign="top" width="25%"> | |||||
<xsl:if test="count(ConcreteClasses/Class)=0"> | |||||
<i>None</i> | |||||
</xsl:if> | |||||
<xsl:for-each select="ConcreteClasses/Class"> | |||||
<xsl:value-of select="node()"/><br/> | |||||
</xsl:for-each> | |||||
</td> | |||||
<td valign="top" width="25%"> | |||||
<xsl:if test="count(UsedBy/Package)=0"> | |||||
<i>None</i> | |||||
</xsl:if> | |||||
<xsl:for-each select="UsedBy/Package"> | |||||
<a> | |||||
<xsl:attribute name="href">#PK<xsl:value-of select="node()"/></xsl:attribute> | |||||
<xsl:value-of select="node()"/> | |||||
</a><br/> | |||||
</xsl:for-each> | |||||
</td> | |||||
<td valign="top" width="25%"> | |||||
<xsl:if test="count(DependsUpon/Package)=0"> | |||||
<i>None</i> | |||||
</xsl:if> | |||||
<xsl:for-each select="DependsUpon/Package"> | |||||
<a> | |||||
<xsl:attribute name="href">#PK<xsl:value-of select="node()"/></xsl:attribute> | |||||
<xsl:value-of select="node()"/> | |||||
</a><br/> | |||||
</xsl:for-each> | |||||
</td> | |||||
</tr> | |||||
</table> | |||||
</xsl:if> | |||||
</xsl:for-each> | |||||
<table width="100%"><tr><td> | |||||
<a name="NVcycles"><h2>Cycles</h2></a> | |||||
</td><td align="right"> | |||||
[<a href="#NVsummary">summary</a>] | |||||
[<a href="#NVpackages">packages</a>] | |||||
[<a href="#NVcycles">cycles</a>] | |||||
[<a href="#NVexplanations">explanations</a>] | |||||
</td></tr></table> | |||||
<xsl:if test="count(Cycles/Package) = 0"> | |||||
<p>There are no cyclic dependancies.</p> | |||||
</xsl:if> | |||||
<xsl:for-each select="Cycles/Package"> | |||||
<h3><xsl:value-of select="@Name"/></h3><p> | |||||
<xsl:for-each select="Package"> | |||||
<xsl:value-of select="."/><br/> | |||||
</xsl:for-each></p> | |||||
</xsl:for-each> | |||||
<table width="100%"><tr><td> | |||||
<a name="NVexplanations"><h2>Explanations</h2></a> | |||||
</td><td align="right"> | |||||
[<a href="#NVsummary">summary</a>] | |||||
[<a href="#NVpackages">packages</a>] | |||||
[<a href="#NVcycles">cycles</a>] | |||||
[<a href="#NVexplanations">explanations</a>] | |||||
</td></tr></table> | |||||
<p>The following explanations are for quick reference and are lifted directly from the original <a href="http://www.clarkware.com/software/JDepend.html">JDepend documentation</a>.</p> | |||||
<h3><a name="EXnumber">Number of Classes</a></h3> | |||||
<p>The number of concrete and abstract classes (and interfaces) in the package is an indicator of the extensibility of the package.</p> | |||||
<h3><a name="EXafferent">Afferent Couplings</a></h3> | |||||
<p>The number of other packages that depend upon classes within the package is an indicator of the package's responsibility. </p> | |||||
<h3><a name="EXefferent">Efferent Couplings</a></h3> | |||||
<p>The number of other packages that the classes in the package depend upon is an indicator of the package's independence. </p> | |||||
<h3><a name="EXabstractness">Abstractness</a></h3> | |||||
<p>The ratio of the number of abstract classes (and interfaces) in the analyzed package to the total number of classes in the analyzed package. </p> | |||||
<p>The range for this metric is 0 to 1, with A=0 indicating a completely concrete package and A=1 indicating a completely abstract package. </p> | |||||
<h3><a name="EXinstability">Instability</a></h3> | |||||
<p>The ratio of efferent coupling (Ce) to total coupling (Ce / (Ce + Ca)). This metric is an indicator of the package's resilience to change. </p> | |||||
<p>The range for this metric is 0 to 1, with I=0 indicating a completely stable package and I=1 indicating a completely instable package. </p> | |||||
<h3><a name="EXdistance">Distance</a></h3> | |||||
<p>The perpendicular distance of a package from the idealized line A + I = 1. This metric is an indicator of the package's balance between abstractness and stability. </p> | |||||
<p>A package squarely on the main sequence is optimally balanced with respect to its abstractness and stability. Ideal packages are either completely abstract and stable (x=0, y=1) or completely concrete and instable (x=1, y=0). </p> | |||||
<p>The range for this metric is 0 to 1, with D=0 indicating a package that is coincident with the main sequence and D=1 indicating a package that is as far from the main sequence as possible. </p> | |||||
</body> | |||||
</html> | |||||
</xsl:template> | |||||
</xsl:stylesheet> |
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" | |||||
xmlns:lxslt="http://xml.apache.org/xslt" | |||||
xmlns:redirect="org.apache.xalan.lib.Redirect" | |||||
xmlns:stringutils="xalan://org.apache.tools.ant.util.StringUtils" | |||||
extension-element-prefixes="redirect"> | |||||
<xsl:output method="html" indent="yes" encoding="US-ASCII"/> | |||||
<xsl:decimal-format decimal-separator="." grouping-separator=","/> | |||||
<!-- | |||||
Copyright 2001-2004 The Apache Software Foundation | |||||
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. | |||||
--> | |||||
<!-- | |||||
Sample stylesheet to be used with Ant JUnitReport output. | |||||
It creates a set of HTML files a la javadoc where you can browse easily | |||||
through all packages and classes. | |||||
--> | |||||
<xsl:param name="output.dir" select="'.'"/> | |||||
<xsl:template match="testsuites"> | |||||
<!-- create the index.html --> | |||||
<redirect:write file="{$output.dir}/index.html"> | |||||
<xsl:call-template name="index.html"/> | |||||
</redirect:write> | |||||
<!-- create the stylesheet.css --> | |||||
<redirect:write file="{$output.dir}/stylesheet.css"> | |||||
<xsl:call-template name="stylesheet.css"/> | |||||
</redirect:write> | |||||
<!-- create the overview-packages.html at the root --> | |||||
<redirect:write file="{$output.dir}/overview-summary.html"> | |||||
<xsl:apply-templates select="." mode="overview.packages"/> | |||||
</redirect:write> | |||||
<!-- create the all-packages.html at the root --> | |||||
<redirect:write file="{$output.dir}/overview-frame.html"> | |||||
<xsl:apply-templates select="." mode="all.packages"/> | |||||
</redirect:write> | |||||
<!-- create the all-classes.html at the root --> | |||||
<redirect:write file="{$output.dir}/allclasses-frame.html"> | |||||
<xsl:apply-templates select="." mode="all.classes"/> | |||||
</redirect:write> | |||||
<!-- process all packages --> | |||||
<xsl:for-each select="./testsuite[not(./@package = preceding-sibling::testsuite/@package)]"> | |||||
<xsl:call-template name="package"> | |||||
<xsl:with-param name="name" select="@package"/> | |||||
</xsl:call-template> | |||||
</xsl:for-each> | |||||
</xsl:template> | |||||
<xsl:template name="package"> | |||||
<xsl:param name="name"/> | |||||
<xsl:variable name="package.dir"> | |||||
<xsl:if test="not($name = '')"><xsl:value-of select="translate($name,'.','/')"/></xsl:if> | |||||
<xsl:if test="$name = ''">.</xsl:if> | |||||
</xsl:variable> | |||||
<!--Processing package <xsl:value-of select="@name"/> in <xsl:value-of select="$output.dir"/> --> | |||||
<!-- create a classes-list.html in the package directory --> | |||||
<redirect:write file="{$output.dir}/{$package.dir}/package-frame.html"> | |||||
<xsl:call-template name="classes.list"> | |||||
<xsl:with-param name="name" select="$name"/> | |||||
</xsl:call-template> | |||||
</redirect:write> | |||||
<!-- create a package-summary.html in the package directory --> | |||||
<redirect:write file="{$output.dir}/{$package.dir}/package-summary.html"> | |||||
<xsl:call-template name="package.summary"> | |||||
<xsl:with-param name="name" select="$name"/> | |||||
</xsl:call-template> | |||||
</redirect:write> | |||||
<!-- for each class, creates a @name.html --> | |||||
<!-- @bug there will be a problem with inner classes having the same name, it will be overwritten --> | |||||
<xsl:for-each select="/testsuites/testsuite[@package = $name]"> | |||||
<redirect:write file="{$output.dir}/{$package.dir}/{@name}.html"> | |||||
<xsl:apply-templates select="." mode="class.details"/> | |||||
</redirect:write> | |||||
<xsl:if test="string-length(./system-out)!=0"> | |||||
<redirect:write file="{$output.dir}/{$package.dir}/{@name}-out.txt"> | |||||
<xsl:value-of select="./system-out" /> | |||||
</redirect:write> | |||||
</xsl:if> | |||||
<xsl:if test="string-length(./system-err)!=0"> | |||||
<redirect:write file="{$output.dir}/{$package.dir}/{@name}-err.txt"> | |||||
<xsl:value-of select="./system-err" /> | |||||
</redirect:write> | |||||
</xsl:if> | |||||
</xsl:for-each> | |||||
</xsl:template> | |||||
<xsl:template name="index.html"> | |||||
<html> | |||||
<head> | |||||
<title>Unit Test Results.</title> | |||||
</head> | |||||
<frameset cols="20%,80%"> | |||||
<frameset rows="30%,70%"> | |||||
<frame src="overview-frame.html" name="packageListFrame"/> | |||||
<frame src="allclasses-frame.html" name="classListFrame"/> | |||||
</frameset> | |||||
<frame src="overview-summary.html" name="classFrame"/> | |||||
<noframes> | |||||
<h2>Frame Alert</h2> | |||||
<p> | |||||
This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client. | |||||
</p> | |||||
</noframes> | |||||
</frameset> | |||||
</html> | |||||
</xsl:template> | |||||
<!-- this is the stylesheet css to use for nearly everything --> | |||||
<xsl:template name="stylesheet.css"> | |||||
body { | |||||
font:normal 68% verdana,arial,helvetica; | |||||
color:#000000; | |||||
} | |||||
table tr td, table tr th { | |||||
font-size: 68%; | |||||
} | |||||
table.details tr th{ | |||||
font-weight: bold; | |||||
text-align:left; | |||||
background:#a6caf0; | |||||
} | |||||
table.details tr td{ | |||||
background:#eeeee0; | |||||
} | |||||
p { | |||||
line-height:1.5em; | |||||
margin-top:0.5em; margin-bottom:1.0em; | |||||
} | |||||
h1 { | |||||
margin: 0px 0px 5px; font: 165% verdana,arial,helvetica | |||||
} | |||||
h2 { | |||||
margin-top: 1em; margin-bottom: 0.5em; font: bold 125% verdana,arial,helvetica | |||||
} | |||||
h3 { | |||||
margin-bottom: 0.5em; font: bold 115% verdana,arial,helvetica | |||||
} | |||||
h4 { | |||||
margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica | |||||
} | |||||
h5 { | |||||
margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica | |||||
} | |||||
h6 { | |||||
margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica | |||||
} | |||||
.Error { | |||||
font-weight:bold; color:red; | |||||
} | |||||
.Failure { | |||||
font-weight:bold; color:purple; | |||||
} | |||||
.Properties { | |||||
text-align:right; | |||||
} | |||||
</xsl:template> | |||||
<!-- ====================================================================== | |||||
This page is created for every testsuite class. | |||||
It prints a summary of the testsuite and detailed information about | |||||
testcase methods. | |||||
====================================================================== --> | |||||
<xsl:template match="testsuite" mode="class.details"> | |||||
<xsl:variable name="package.name" select="@package"/> | |||||
<xsl:variable name="class.name"><xsl:if test="not($package.name = '')"><xsl:value-of select="$package.name"/>.</xsl:if><xsl:value-of select="@name"/></xsl:variable> | |||||
<html> | |||||
<head> | |||||
<title>Unit Test Results: <xsl:value-of select="$class.name"/></title> | |||||
<xsl:call-template name="create.stylesheet.link"> | |||||
<xsl:with-param name="package.name" select="$package.name"/> | |||||
</xsl:call-template> | |||||
<script type="text/javascript" language="JavaScript"> | |||||
var TestCases = new Array(); | |||||
var cur; | |||||
<xsl:apply-templates select="properties"/> | |||||
</script> | |||||
<script type="text/javascript" language="JavaScript"><![CDATA[ | |||||
function displayProperties (name) { | |||||
var win = window.open('','JUnitSystemProperties','scrollbars=1,resizable=1'); | |||||
var doc = win.document.open(); | |||||
doc.write("<html><head><title>Properties of " + name + "</title>"); | |||||
doc.write("<style type=\"text/css\">"); | |||||
doc.write("body {font:normal 68% verdana,arial,helvetica; color:#000000; }"); | |||||
doc.write("table tr td, table tr th { font-size: 68%; }"); | |||||
doc.write("table.properties { border-collapse:collapse; border-left:solid 1 #cccccc; border-top:solid 1 #cccccc; padding:5px; }"); | |||||
doc.write("table.properties th { text-align:left; border-right:solid 1 #cccccc; border-bottom:solid 1 #cccccc; background-color:#eeeeee; }"); | |||||
doc.write("table.properties td { font:normal; text-align:left; border-right:solid 1 #cccccc; border-bottom:solid 1 #cccccc; background-color:#fffffff; }"); | |||||
doc.write("h3 { margin-bottom: 0.5em; font: bold 115% verdana,arial,helvetica }"); | |||||
doc.write("</style>"); | |||||
doc.write("</head><body>"); | |||||
doc.write("<h3>Properties of " + name + "</h3>"); | |||||
doc.write("<div align=\"right\"><a href=\"javascript:window.close();\">Close</a></div>"); | |||||
doc.write("<table class='properties'>"); | |||||
doc.write("<tr><th>Name</th><th>Value</th></tr>"); | |||||
for (prop in TestCases[name]) { | |||||
doc.write("<tr><th>" + prop + "</th><td>" + TestCases[name][prop] + "</td></tr>"); | |||||
} | |||||
doc.write("</table>"); | |||||
doc.write("</body></html>"); | |||||
doc.close(); | |||||
win.focus(); | |||||
} | |||||
]]> | |||||
</script> | |||||
</head> | |||||
<body> | |||||
<xsl:call-template name="pageHeader"/> | |||||
<h3>Class <xsl:value-of select="$class.name"/></h3> | |||||
<table class="details" border="0" cellpadding="5" cellspacing="2" width="95%"> | |||||
<xsl:call-template name="testsuite.test.header"/> | |||||
<xsl:apply-templates select="." mode="print.test"/> | |||||
</table> | |||||
<h2>Tests</h2> | |||||
<table class="details" border="0" cellpadding="5" cellspacing="2" width="95%"> | |||||
<xsl:call-template name="testcase.test.header"/> | |||||
<!-- | |||||
test can even not be started at all (failure to load the class) | |||||
so report the error directly | |||||
--> | |||||
<xsl:if test="./error"> | |||||
<tr class="Error"> | |||||
<td colspan="4"><xsl:apply-templates select="./error"/></td> | |||||
</tr> | |||||
</xsl:if> | |||||
<xsl:apply-templates select="./testcase" mode="print.test"/> | |||||
</table> | |||||
<div class="Properties"> | |||||
<a> | |||||
<xsl:attribute name="href">javascript:displayProperties('<xsl:value-of select="@package"/>.<xsl:value-of select="@name"/>');</xsl:attribute> | |||||
Properties » | |||||
</a> | |||||
</div> | |||||
<xsl:if test="string-length(./system-out)!=0"> | |||||
<div class="Properties"> | |||||
<a> | |||||
<xsl:attribute name="href">./<xsl:value-of select="@name"/>-out.txt</xsl:attribute> | |||||
System.out » | |||||
</a> | |||||
</div> | |||||
</xsl:if> | |||||
<xsl:if test="string-length(./system-err)!=0"> | |||||
<div class="Properties"> | |||||
<a> | |||||
<xsl:attribute name="href">./<xsl:value-of select="@name"/>-err.txt</xsl:attribute> | |||||
System.err » | |||||
</a> | |||||
</div> | |||||
</xsl:if> | |||||
</body> | |||||
</html> | |||||
</xsl:template> | |||||
<!-- | |||||
Write properties into a JavaScript data structure. | |||||
This is based on the original idea by Erik Hatcher (ehatcher@apache.org) | |||||
--> | |||||
<xsl:template match="properties"> | |||||
cur = TestCases['<xsl:value-of select="../@package"/>.<xsl:value-of select="../@name"/>'] = new Array(); | |||||
<xsl:for-each select="property"> | |||||
<xsl:sort select="@name"/> | |||||
cur['<xsl:value-of select="@name"/>'] = '<xsl:call-template name="JS-escape"><xsl:with-param name="string" select="@value"/></xsl:call-template>'; | |||||
</xsl:for-each> | |||||
</xsl:template> | |||||
<!-- ====================================================================== | |||||
This page is created for every package. | |||||
It prints the name of all classes that belongs to this package. | |||||
@param name the package name to print classes. | |||||
====================================================================== --> | |||||
<!-- list of classes in a package --> | |||||
<xsl:template name="classes.list"> | |||||
<xsl:param name="name"/> | |||||
<html> | |||||
<head> | |||||
<title>Unit Test Classes: <xsl:value-of select="$name"/></title> | |||||
<xsl:call-template name="create.stylesheet.link"> | |||||
<xsl:with-param name="package.name" select="$name"/> | |||||
</xsl:call-template> | |||||
</head> | |||||
<body> | |||||
<table width="100%"> | |||||
<tr> | |||||
<td nowrap="nowrap"> | |||||
<h2><a href="package-summary.html" target="classFrame"> | |||||
<xsl:value-of select="$name"/> | |||||
<xsl:if test="$name = ''"><none></xsl:if> | |||||
</a></h2> | |||||
</td> | |||||
</tr> | |||||
</table> | |||||
<h2>Classes</h2> | |||||
<table width="100%"> | |||||
<xsl:for-each select="/testsuites/testsuite[./@package = $name]"> | |||||
<xsl:sort select="@name"/> | |||||
<tr> | |||||
<td nowrap="nowrap"> | |||||
<a href="{@name}.html" target="classFrame"><xsl:value-of select="@name"/></a> | |||||
</td> | |||||
</tr> | |||||
</xsl:for-each> | |||||
</table> | |||||
</body> | |||||
</html> | |||||
</xsl:template> | |||||
<!-- | |||||
Creates an all-classes.html file that contains a link to all package-summary.html | |||||
on each class. | |||||
--> | |||||
<xsl:template match="testsuites" mode="all.classes"> | |||||
<html> | |||||
<head> | |||||
<title>All Unit Test Classes</title> | |||||
<xsl:call-template name="create.stylesheet.link"> | |||||
<xsl:with-param name="package.name"/> | |||||
</xsl:call-template> | |||||
</head> | |||||
<body> | |||||
<h2>Classes</h2> | |||||
<table width="100%"> | |||||
<xsl:apply-templates select="testsuite" mode="all.classes"> | |||||
<xsl:sort select="@name"/> | |||||
</xsl:apply-templates> | |||||
</table> | |||||
</body> | |||||
</html> | |||||
</xsl:template> | |||||
<xsl:template match="testsuite" mode="all.classes"> | |||||
<xsl:variable name="package.name" select="@package"/> | |||||
<tr> | |||||
<td nowrap="nowrap"> | |||||
<a target="classFrame"> | |||||
<xsl:attribute name="href"> | |||||
<xsl:if test="not($package.name='')"> | |||||
<xsl:value-of select="translate($package.name,'.','/')"/><xsl:text>/</xsl:text> | |||||
</xsl:if><xsl:value-of select="@name"/><xsl:text>.html</xsl:text> | |||||
</xsl:attribute> | |||||
<xsl:value-of select="@name"/> | |||||
</a> | |||||
</td> | |||||
</tr> | |||||
</xsl:template> | |||||
<!-- | |||||
Creates an html file that contains a link to all package-summary.html files on | |||||
each package existing on testsuites. | |||||
@bug there will be a problem here, I don't know yet how to handle unnamed package :( | |||||
--> | |||||
<xsl:template match="testsuites" mode="all.packages"> | |||||
<html> | |||||
<head> | |||||
<title>All Unit Test Packages</title> | |||||
<xsl:call-template name="create.stylesheet.link"> | |||||
<xsl:with-param name="package.name"/> | |||||
</xsl:call-template> | |||||
</head> | |||||
<body> | |||||
<h2><a href="overview-summary.html" target="classFrame">Home</a></h2> | |||||
<h2>Packages</h2> | |||||
<table width="100%"> | |||||
<xsl:apply-templates select="testsuite[not(./@package = preceding-sibling::testsuite/@package)]" mode="all.packages"> | |||||
<xsl:sort select="@package"/> | |||||
</xsl:apply-templates> | |||||
</table> | |||||
</body> | |||||
</html> | |||||
</xsl:template> | |||||
<xsl:template match="testsuite" mode="all.packages"> | |||||
<tr> | |||||
<td nowrap="nowrap"> | |||||
<a href="./{translate(@package,'.','/')}/package-summary.html" target="classFrame"> | |||||
<xsl:value-of select="@package"/> | |||||
<xsl:if test="@package = ''"><none></xsl:if> | |||||
</a> | |||||
</td> | |||||
</tr> | |||||
</xsl:template> | |||||
<xsl:template match="testsuites" mode="overview.packages"> | |||||
<html> | |||||
<head> | |||||
<title>Unit Test Results: Summary</title> | |||||
<xsl:call-template name="create.stylesheet.link"> | |||||
<xsl:with-param name="package.name"/> | |||||
</xsl:call-template> | |||||
</head> | |||||
<body> | |||||
<xsl:attribute name="onload">open('allclasses-frame.html','classListFrame')</xsl:attribute> | |||||
<xsl:call-template name="pageHeader"/> | |||||
<h2>Summary</h2> | |||||
<xsl:variable name="testCount" select="sum(testsuite/@tests)"/> | |||||
<xsl:variable name="errorCount" select="sum(testsuite/@errors)"/> | |||||
<xsl:variable name="failureCount" select="sum(testsuite/@failures)"/> | |||||
<xsl:variable name="timeCount" select="sum(testsuite/@time)"/> | |||||
<xsl:variable name="successRate" select="($testCount - $failureCount - $errorCount) div $testCount"/> | |||||
<table class="details" border="0" cellpadding="5" cellspacing="2" width="95%"> | |||||
<tr valign="top"> | |||||
<th>Tests</th> | |||||
<th>Failures</th> | |||||
<th>Errors</th> | |||||
<th>Success rate</th> | |||||
<th>Time</th> | |||||
</tr> | |||||
<tr valign="top"> | |||||
<xsl:attribute name="class"> | |||||
<xsl:choose> | |||||
<xsl:when test="$errorCount > 0">Error</xsl:when> | |||||
<xsl:when test="$failureCount > 0">Failure</xsl:when> | |||||
<xsl:otherwise>Pass</xsl:otherwise> | |||||
</xsl:choose> | |||||
</xsl:attribute> | |||||
<td><xsl:value-of select="$testCount"/></td> | |||||
<td><xsl:value-of select="$failureCount"/></td> | |||||
<td><xsl:value-of select="$errorCount"/></td> | |||||
<td> | |||||
<xsl:call-template name="display-percent"> | |||||
<xsl:with-param name="value" select="$successRate"/> | |||||
</xsl:call-template> | |||||
</td> | |||||
<td> | |||||
<xsl:call-template name="display-time"> | |||||
<xsl:with-param name="value" select="$timeCount"/> | |||||
</xsl:call-template> | |||||
</td> | |||||
</tr> | |||||
</table> | |||||
<table border="0" width="95%"> | |||||
<tr> | |||||
<td style="text-align: justify;"> | |||||
Note: <em>failures</em> are anticipated and checked for with assertions while <em>errors</em> are unanticipated. | |||||
</td> | |||||
</tr> | |||||
</table> | |||||
<h2>Packages</h2> | |||||
<table class="details" border="0" cellpadding="5" cellspacing="2" width="95%"> | |||||
<xsl:call-template name="testsuite.test.header"/> | |||||
<xsl:for-each select="testsuite[not(./@package = preceding-sibling::testsuite/@package)]"> | |||||
<xsl:sort select="@package" order="ascending"/> | |||||
<!-- get the node set containing all testsuites that have the same package --> | |||||
<xsl:variable name="insamepackage" select="/testsuites/testsuite[./@package = current()/@package]"/> | |||||
<tr valign="top"> | |||||
<!-- display a failure if there is any failure/error in the package --> | |||||
<xsl:attribute name="class"> | |||||
<xsl:choose> | |||||
<xsl:when test="sum($insamepackage/@errors) > 0">Error</xsl:when> | |||||
<xsl:when test="sum($insamepackage/@failures) > 0">Failure</xsl:when> | |||||
<xsl:otherwise>Pass</xsl:otherwise> | |||||
</xsl:choose> | |||||
</xsl:attribute> | |||||
<td><a href="./{translate(@package,'.','/')}/package-summary.html"> | |||||
<xsl:value-of select="@package"/> | |||||
<xsl:if test="@package = ''"><none></xsl:if> | |||||
</a></td> | |||||
<td><xsl:value-of select="sum($insamepackage/@tests)"/></td> | |||||
<td><xsl:value-of select="sum($insamepackage/@errors)"/></td> | |||||
<td><xsl:value-of select="sum($insamepackage/@failures)"/></td> | |||||
<td> | |||||
<xsl:call-template name="display-time"> | |||||
<xsl:with-param name="value" select="sum($insamepackage/@time)"/> | |||||
</xsl:call-template> | |||||
</td> | |||||
<td><xsl:value-of select="$insamepackage/@timestamp"/></td> | |||||
<td><xsl:value-of select="$insamepackage/@hostname"/></td> | |||||
</tr> | |||||
</xsl:for-each> | |||||
</table> | |||||
</body> | |||||
</html> | |||||
</xsl:template> | |||||
<xsl:template name="package.summary"> | |||||
<xsl:param name="name"/> | |||||
<html> | |||||
<head> | |||||
<xsl:call-template name="create.stylesheet.link"> | |||||
<xsl:with-param name="package.name" select="$name"/> | |||||
</xsl:call-template> | |||||
</head> | |||||
<body> | |||||
<xsl:attribute name="onload">open('package-frame.html','classListFrame')</xsl:attribute> | |||||
<xsl:call-template name="pageHeader"/> | |||||
<h3>Package <xsl:value-of select="$name"/></h3> | |||||
<!--table border="0" cellpadding="5" cellspacing="2" width="95%"> | |||||
<xsl:call-template name="class.metrics.header"/> | |||||
<xsl:apply-templates select="." mode="print.metrics"/> | |||||
</table--> | |||||
<xsl:variable name="insamepackage" select="/testsuites/testsuite[./@package = $name]"/> | |||||
<xsl:if test="count($insamepackage) > 0"> | |||||
<h2>Classes</h2> | |||||
<p> | |||||
<table class="details" border="0" cellpadding="5" cellspacing="2" width="95%"> | |||||
<xsl:call-template name="testsuite.test.header"/> | |||||
<xsl:apply-templates select="$insamepackage" mode="print.test"> | |||||
<xsl:sort select="@name"/> | |||||
</xsl:apply-templates> | |||||
</table> | |||||
</p> | |||||
</xsl:if> | |||||
</body> | |||||
</html> | |||||
</xsl:template> | |||||
<!-- | |||||
transform string like a.b.c to ../../../ | |||||
@param path the path to transform into a descending directory path | |||||
--> | |||||
<xsl:template name="path"> | |||||
<xsl:param name="path"/> | |||||
<xsl:if test="contains($path,'.')"> | |||||
<xsl:text>../</xsl:text> | |||||
<xsl:call-template name="path"> | |||||
<xsl:with-param name="path"><xsl:value-of select="substring-after($path,'.')"/></xsl:with-param> | |||||
</xsl:call-template> | |||||
</xsl:if> | |||||
<xsl:if test="not(contains($path,'.')) and not($path = '')"> | |||||
<xsl:text>../</xsl:text> | |||||
</xsl:if> | |||||
</xsl:template> | |||||
<!-- create the link to the stylesheet based on the package name --> | |||||
<xsl:template name="create.stylesheet.link"> | |||||
<xsl:param name="package.name"/> | |||||
<link rel="stylesheet" type="text/css" title="Style"><xsl:attribute name="href"><xsl:if test="not($package.name = 'unnamed package')"><xsl:call-template name="path"><xsl:with-param name="path" select="$package.name"/></xsl:call-template></xsl:if>stylesheet.css</xsl:attribute></link> | |||||
</xsl:template> | |||||
<!-- Page HEADER --> | |||||
<xsl:template name="pageHeader"> | |||||
<h1>Unit Test Results</h1> | |||||
<table width="100%"> | |||||
<tr> | |||||
<td align="left"></td> | |||||
<td align="right">Designed for use with <a href="http://www.junit.org/">JUnit</a> and <a href="http://jakarta.apache.org/">Ant</a>.</td> | |||||
</tr> | |||||
</table> | |||||
<hr size="1"/> | |||||
</xsl:template> | |||||
<!-- class header --> | |||||
<xsl:template name="testsuite.test.header"> | |||||
<tr valign="top"> | |||||
<th width="80%">Name</th> | |||||
<th>Tests</th> | |||||
<th>Errors</th> | |||||
<th>Failures</th> | |||||
<th nowrap="nowrap">Time(s)</th> | |||||
<th nowrap="nowrap">Time Stamp</th> | |||||
<th>Host</th> | |||||
</tr> | |||||
</xsl:template> | |||||
<!-- method header --> | |||||
<xsl:template name="testcase.test.header"> | |||||
<tr valign="top"> | |||||
<th>Name</th> | |||||
<th>Status</th> | |||||
<th width="80%">Type</th> | |||||
<th nowrap="nowrap">Time(s)</th> | |||||
</tr> | |||||
</xsl:template> | |||||
<!-- class information --> | |||||
<xsl:template match="testsuite" mode="print.test"> | |||||
<tr valign="top"> | |||||
<xsl:attribute name="class"> | |||||
<xsl:choose> | |||||
<xsl:when test="@errors[.> 0]">Error</xsl:when> | |||||
<xsl:when test="@failures[.> 0]">Failure</xsl:when> | |||||
<xsl:otherwise>Pass</xsl:otherwise> | |||||
</xsl:choose> | |||||
</xsl:attribute> | |||||
<td><a href="{@name}.html"><xsl:value-of select="@name"/></a></td> | |||||
<td><xsl:apply-templates select="@tests"/></td> | |||||
<td><xsl:apply-templates select="@errors"/></td> | |||||
<td><xsl:apply-templates select="@failures"/></td> | |||||
<td><xsl:call-template name="display-time"> | |||||
<xsl:with-param name="value" select="@time"/> | |||||
</xsl:call-template> | |||||
</td> | |||||
<td><xsl:apply-templates select="@timestamp"/></td> | |||||
<td><xsl:apply-templates select="@hostname"/></td> | |||||
</tr> | |||||
</xsl:template> | |||||
<xsl:template match="testcase" mode="print.test"> | |||||
<tr valign="top"> | |||||
<xsl:attribute name="class"> | |||||
<xsl:choose> | |||||
<xsl:when test="error">Error</xsl:when> | |||||
<xsl:when test="failure">Failure</xsl:when> | |||||
<xsl:otherwise>TableRowColor</xsl:otherwise> | |||||
</xsl:choose> | |||||
</xsl:attribute> | |||||
<td><xsl:value-of select="@name"/></td> | |||||
<xsl:choose> | |||||
<xsl:when test="failure"> | |||||
<td>Failure</td> | |||||
<td><xsl:apply-templates select="failure"/></td> | |||||
</xsl:when> | |||||
<xsl:when test="error"> | |||||
<td>Error</td> | |||||
<td><xsl:apply-templates select="error"/></td> | |||||
</xsl:when> | |||||
<xsl:otherwise> | |||||
<td>Success</td> | |||||
<td></td> | |||||
</xsl:otherwise> | |||||
</xsl:choose> | |||||
<td> | |||||
<xsl:call-template name="display-time"> | |||||
<xsl:with-param name="value" select="@time"/> | |||||
</xsl:call-template> | |||||
</td> | |||||
</tr> | |||||
</xsl:template> | |||||
<!-- Note : the below template error and failure are the same style | |||||
so just call the same style store in the toolkit template --> | |||||
<xsl:template match="failure"> | |||||
<xsl:call-template name="display-failures"/> | |||||
</xsl:template> | |||||
<xsl:template match="error"> | |||||
<xsl:call-template name="display-failures"/> | |||||
</xsl:template> | |||||
<!-- Style for the error and failure in the testcase template --> | |||||
<xsl:template name="display-failures"> | |||||
<xsl:choose> | |||||
<xsl:when test="not(@message)">N/A</xsl:when> | |||||
<xsl:otherwise> | |||||
<xsl:value-of select="@message"/> | |||||
</xsl:otherwise> | |||||
</xsl:choose> | |||||
<!-- display the stacktrace --> | |||||
<br/><br/> | |||||
<code> | |||||
<xsl:call-template name="br-replace"> | |||||
<xsl:with-param name="word" select="."/> | |||||
</xsl:call-template> | |||||
</code> | |||||
<!-- the latter is better but might be problematic for non-21" monitors... --> | |||||
<!--pre><xsl:value-of select="."/></pre--> | |||||
</xsl:template> | |||||
<xsl:template name="JS-escape"> | |||||
<xsl:param name="string"/> | |||||
<xsl:param name="tmp1" select="stringutils:replace(string($string),'\','\\')"/> | |||||
<xsl:param name="tmp2" select="stringutils:replace(string($tmp1),"'","\'")"/> | |||||
<xsl:value-of select="$tmp2"/> | |||||
</xsl:template> | |||||
<!-- | |||||
template that will convert a carriage return into a br tag | |||||
@param word the text from which to convert CR to BR tag | |||||
--> | |||||
<xsl:template name="br-replace"> | |||||
<xsl:param name="word"/> | |||||
<xsl:param name="br"><br/></xsl:param> | |||||
<xsl:value-of select='stringutils:replace(string($word),"
",$br)'/> | |||||
</xsl:template> | |||||
<xsl:template name="display-time"> | |||||
<xsl:param name="value"/> | |||||
<xsl:value-of select="format-number($value,'0.000')"/> | |||||
</xsl:template> | |||||
<xsl:template name="display-percent"> | |||||
<xsl:param name="value"/> | |||||
<xsl:value-of select="format-number($value,'0.00%')"/> | |||||
</xsl:template> | |||||
</xsl:stylesheet> |
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" | |||||
xmlns:lxslt="http://xml.apache.org/xslt" | |||||
xmlns:redirect="http://xml.apache.org/xalan/redirect" | |||||
xmlns:stringutils="xalan://org.apache.tools.ant.util.StringUtils" | |||||
extension-element-prefixes="redirect"> | |||||
<xsl:output method="html" indent="yes" encoding="US-ASCII"/> | |||||
<xsl:decimal-format decimal-separator="." grouping-separator=","/> | |||||
<!-- | |||||
Copyright 2001-2005 The Apache Software Foundation | |||||
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. | |||||
--> | |||||
<!-- | |||||
Sample stylesheet to be used with Ant JUnitReport output. | |||||
It creates a set of HTML files a la javadoc where you can browse easily | |||||
through all packages and classes. | |||||
--> | |||||
<xsl:param name="output.dir" select="'.'"/> | |||||
<xsl:template match="testsuites"> | |||||
<!-- create the index.html --> | |||||
<redirect:write file="{$output.dir}/index.html"> | |||||
<xsl:call-template name="index.html"/> | |||||
</redirect:write> | |||||
<!-- create the stylesheet.css --> | |||||
<redirect:write file="{$output.dir}/stylesheet.css"> | |||||
<xsl:call-template name="stylesheet.css"/> | |||||
</redirect:write> | |||||
<!-- create the overview-packages.html at the root --> | |||||
<redirect:write file="{$output.dir}/overview-summary.html"> | |||||
<xsl:apply-templates select="." mode="overview.packages"/> | |||||
</redirect:write> | |||||
<!-- create the all-packages.html at the root --> | |||||
<redirect:write file="{$output.dir}/overview-frame.html"> | |||||
<xsl:apply-templates select="." mode="all.packages"/> | |||||
</redirect:write> | |||||
<!-- create the all-classes.html at the root --> | |||||
<redirect:write file="{$output.dir}/allclasses-frame.html"> | |||||
<xsl:apply-templates select="." mode="all.classes"/> | |||||
</redirect:write> | |||||
<!-- process all packages --> | |||||
<xsl:for-each select="./testsuite[not(./@package = preceding-sibling::testsuite/@package)]"> | |||||
<xsl:call-template name="package"> | |||||
<xsl:with-param name="name" select="@package"/> | |||||
</xsl:call-template> | |||||
</xsl:for-each> | |||||
</xsl:template> | |||||
<xsl:template name="package"> | |||||
<xsl:param name="name"/> | |||||
<xsl:variable name="package.dir"> | |||||
<xsl:if test="not($name = '')"><xsl:value-of select="translate($name,'.','/')"/></xsl:if> | |||||
<xsl:if test="$name = ''">.</xsl:if> | |||||
</xsl:variable> | |||||
<!--Processing package <xsl:value-of select="@name"/> in <xsl:value-of select="$output.dir"/> --> | |||||
<!-- create a classes-list.html in the package directory --> | |||||
<redirect:write file="{$output.dir}/{$package.dir}/package-frame.html"> | |||||
<xsl:call-template name="classes.list"> | |||||
<xsl:with-param name="name" select="$name"/> | |||||
</xsl:call-template> | |||||
</redirect:write> | |||||
<!-- create a package-summary.html in the package directory --> | |||||
<redirect:write file="{$output.dir}/{$package.dir}/package-summary.html"> | |||||
<xsl:call-template name="package.summary"> | |||||
<xsl:with-param name="name" select="$name"/> | |||||
</xsl:call-template> | |||||
</redirect:write> | |||||
<!-- for each class, creates a @name.html --> | |||||
<!-- @bug there will be a problem with inner classes having the same name, it will be overwritten --> | |||||
<xsl:for-each select="/testsuites/testsuite[@package = $name]"> | |||||
<redirect:write file="{$output.dir}/{$package.dir}/{@id}_{@name}.html"> | |||||
<xsl:apply-templates select="." mode="class.details"/> | |||||
</redirect:write> | |||||
<xsl:if test="string-length(./system-out)!=0"> | |||||
<redirect:write file="{$output.dir}/{$package.dir}/{@id}_{@name}-out.txt"> | |||||
<xsl:value-of select="./system-out" /> | |||||
</redirect:write> | |||||
</xsl:if> | |||||
<xsl:if test="string-length(./system-err)!=0"> | |||||
<redirect:write file="{$output.dir}/{$package.dir}/{@id}_{@name}-err.txt"> | |||||
<xsl:value-of select="./system-err" /> | |||||
</redirect:write> | |||||
</xsl:if> | |||||
</xsl:for-each> | |||||
</xsl:template> | |||||
<xsl:template name="index.html"> | |||||
<html> | |||||
<head> | |||||
<title>Unit Test Results.</title> | |||||
</head> | |||||
<frameset cols="20%,80%"> | |||||
<frameset rows="30%,70%"> | |||||
<frame src="overview-frame.html" name="packageListFrame"/> | |||||
<frame src="allclasses-frame.html" name="classListFrame"/> | |||||
</frameset> | |||||
<frame src="overview-summary.html" name="classFrame"/> | |||||
<noframes> | |||||
<h2>Frame Alert</h2> | |||||
<p> | |||||
This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client. | |||||
</p> | |||||
</noframes> | |||||
</frameset> | |||||
</html> | |||||
</xsl:template> | |||||
<!-- this is the stylesheet css to use for nearly everything --> | |||||
<xsl:template name="stylesheet.css"> | |||||
body { | |||||
font:normal 68% verdana,arial,helvetica; | |||||
color:#000000; | |||||
} | |||||
table tr td, table tr th { | |||||
font-size: 68%; | |||||
} | |||||
table.details tr th{ | |||||
font-weight: bold; | |||||
text-align:left; | |||||
background:#a6caf0; | |||||
} | |||||
table.details tr td{ | |||||
background:#eeeee0; | |||||
} | |||||
p { | |||||
line-height:1.5em; | |||||
margin-top:0.5em; margin-bottom:1.0em; | |||||
} | |||||
h1 { | |||||
margin: 0px 0px 5px; font: 165% verdana,arial,helvetica | |||||
} | |||||
h2 { | |||||
margin-top: 1em; margin-bottom: 0.5em; font: bold 125% verdana,arial,helvetica | |||||
} | |||||
h3 { | |||||
margin-bottom: 0.5em; font: bold 115% verdana,arial,helvetica | |||||
} | |||||
h4 { | |||||
margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica | |||||
} | |||||
h5 { | |||||
margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica | |||||
} | |||||
h6 { | |||||
margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica | |||||
} | |||||
.Error { | |||||
font-weight:bold; color:red; | |||||
} | |||||
.Failure { | |||||
font-weight:bold; color:purple; | |||||
} | |||||
.Properties { | |||||
text-align:right; | |||||
} | |||||
</xsl:template> | |||||
<!-- ====================================================================== | |||||
This page is created for every testsuite class. | |||||
It prints a summary of the testsuite and detailed information about | |||||
testcase methods. | |||||
====================================================================== --> | |||||
<xsl:template match="testsuite" mode="class.details"> | |||||
<xsl:variable name="package.name" select="@package"/> | |||||
<xsl:variable name="class.name"><xsl:if test="not($package.name = '')"><xsl:value-of select="$package.name"/>.</xsl:if><xsl:value-of select="@name"/></xsl:variable> | |||||
<html> | |||||
<head> | |||||
<title>Unit Test Results: <xsl:value-of select="$class.name"/></title> | |||||
<xsl:call-template name="create.stylesheet.link"> | |||||
<xsl:with-param name="package.name" select="$package.name"/> | |||||
</xsl:call-template> | |||||
<script type="text/javascript" language="JavaScript"> | |||||
var TestCases = new Array(); | |||||
var cur; | |||||
<xsl:apply-templates select="properties"/> | |||||
</script> | |||||
<script type="text/javascript" language="JavaScript"><![CDATA[ | |||||
function displayProperties (name) { | |||||
var win = window.open('','JUnitSystemProperties','scrollbars=1,resizable=1'); | |||||
var doc = win.document.open(); | |||||
doc.write("<html><head><title>Properties of " + name + "</title>"); | |||||
doc.write("<style type=\"text/css\">"); | |||||
doc.write("body {font:normal 68% verdana,arial,helvetica; color:#000000; }"); | |||||
doc.write("table tr td, table tr th { font-size: 68%; }"); | |||||
doc.write("table.properties { border-collapse:collapse; border-left:solid 1 #cccccc; border-top:solid 1 #cccccc; padding:5px; }"); | |||||
doc.write("table.properties th { text-align:left; border-right:solid 1 #cccccc; border-bottom:solid 1 #cccccc; background-color:#eeeeee; }"); | |||||
doc.write("table.properties td { font:normal; text-align:left; border-right:solid 1 #cccccc; border-bottom:solid 1 #cccccc; background-color:#fffffff; }"); | |||||
doc.write("h3 { margin-bottom: 0.5em; font: bold 115% verdana,arial,helvetica }"); | |||||
doc.write("</style>"); | |||||
doc.write("</head><body>"); | |||||
doc.write("<h3>Properties of " + name + "</h3>"); | |||||
doc.write("<div align=\"right\"><a href=\"javascript:window.close();\">Close</a></div>"); | |||||
doc.write("<table class='properties'>"); | |||||
doc.write("<tr><th>Name</th><th>Value</th></tr>"); | |||||
for (prop in TestCases[name]) { | |||||
doc.write("<tr><th>" + prop + "</th><td>" + TestCases[name][prop] + "</td></tr>"); | |||||
} | |||||
doc.write("</table>"); | |||||
doc.write("</body></html>"); | |||||
doc.close(); | |||||
win.focus(); | |||||
} | |||||
]]> | |||||
</script> | |||||
</head> | |||||
<body> | |||||
<xsl:call-template name="pageHeader"/> | |||||
<h3>Class <xsl:value-of select="$class.name"/></h3> | |||||
<table class="details" border="0" cellpadding="5" cellspacing="2" width="95%"> | |||||
<xsl:call-template name="testsuite.test.header"/> | |||||
<xsl:apply-templates select="." mode="print.test"/> | |||||
</table> | |||||
<h2>Tests</h2> | |||||
<table class="details" border="0" cellpadding="5" cellspacing="2" width="95%"> | |||||
<xsl:call-template name="testcase.test.header"/> | |||||
<!-- | |||||
test can even not be started at all (failure to load the class) | |||||
so report the error directly | |||||
--> | |||||
<xsl:if test="./error"> | |||||
<tr class="Error"> | |||||
<td colspan="4"><xsl:apply-templates select="./error"/></td> | |||||
</tr> | |||||
</xsl:if> | |||||
<xsl:apply-templates select="./testcase" mode="print.test"/> | |||||
</table> | |||||
<div class="Properties"> | |||||
<a> | |||||
<xsl:attribute name="href">javascript:displayProperties('<xsl:value-of select="@package"/>.<xsl:value-of select="@name"/>');</xsl:attribute> | |||||
Properties » | |||||
</a> | |||||
</div> | |||||
<xsl:if test="string-length(./system-out)!=0"> | |||||
<div class="Properties"> | |||||
<a> | |||||
<xsl:attribute name="href">./<xsl:value-of select="@id"/>_<xsl:value-of select="@name"/>-out.txt</xsl:attribute> | |||||
System.out » | |||||
</a> | |||||
</div> | |||||
</xsl:if> | |||||
<xsl:if test="string-length(./system-err)!=0"> | |||||
<div class="Properties"> | |||||
<a> | |||||
<xsl:attribute name="href">./<xsl:value-of select="@id"/>_<xsl:value-of select="@name"/>-err.txt</xsl:attribute> | |||||
System.err » | |||||
</a> | |||||
</div> | |||||
</xsl:if> | |||||
</body> | |||||
</html> | |||||
</xsl:template> | |||||
<!-- | |||||
Write properties into a JavaScript data structure. | |||||
This is based on the original idea by Erik Hatcher (ehatcher@apache.org) | |||||
--> | |||||
<xsl:template match="properties"> | |||||
cur = TestCases['<xsl:value-of select="../@package"/>.<xsl:value-of select="../@name"/>'] = new Array(); | |||||
<xsl:for-each select="property"> | |||||
<xsl:sort select="@name"/> | |||||
cur['<xsl:value-of select="@name"/>'] = '<xsl:call-template name="JS-escape"><xsl:with-param name="string" select="@value"/></xsl:call-template>'; | |||||
</xsl:for-each> | |||||
</xsl:template> | |||||
<!-- ====================================================================== | |||||
This page is created for every package. | |||||
It prints the name of all classes that belongs to this package. | |||||
@param name the package name to print classes. | |||||
====================================================================== --> | |||||
<!-- list of classes in a package --> | |||||
<xsl:template name="classes.list"> | |||||
<xsl:param name="name"/> | |||||
<html> | |||||
<head> | |||||
<title>Unit Test Classes: <xsl:value-of select="$name"/></title> | |||||
<xsl:call-template name="create.stylesheet.link"> | |||||
<xsl:with-param name="package.name" select="$name"/> | |||||
</xsl:call-template> | |||||
</head> | |||||
<body> | |||||
<table width="100%"> | |||||
<tr> | |||||
<td nowrap="nowrap"> | |||||
<h2><a href="package-summary.html" target="classFrame"> | |||||
<xsl:value-of select="$name"/> | |||||
<xsl:if test="$name = ''"><none></xsl:if> | |||||
</a></h2> | |||||
</td> | |||||
</tr> | |||||
</table> | |||||
<h2>Classes</h2> | |||||
<table width="100%"> | |||||
<xsl:for-each select="/testsuites/testsuite[./@package = $name]"> | |||||
<xsl:sort select="@name"/> | |||||
<tr> | |||||
<td nowrap="nowrap"> | |||||
<a href="{@id}_{@name}.html" target="classFrame"><xsl:value-of select="@name"/></a> | |||||
</td> | |||||
</tr> | |||||
</xsl:for-each> | |||||
</table> | |||||
</body> | |||||
</html> | |||||
</xsl:template> | |||||
<!-- | |||||
Creates an all-classes.html file that contains a link to all package-summary.html | |||||
on each class. | |||||
--> | |||||
<xsl:template match="testsuites" mode="all.classes"> | |||||
<html> | |||||
<head> | |||||
<title>All Unit Test Classes</title> | |||||
<xsl:call-template name="create.stylesheet.link"> | |||||
<xsl:with-param name="package.name"/> | |||||
</xsl:call-template> | |||||
</head> | |||||
<body> | |||||
<h2>Classes</h2> | |||||
<table width="100%"> | |||||
<xsl:apply-templates select="testsuite" mode="all.classes"> | |||||
<xsl:sort select="@name"/> | |||||
</xsl:apply-templates> | |||||
</table> | |||||
</body> | |||||
</html> | |||||
</xsl:template> | |||||
<xsl:template match="testsuite" mode="all.classes"> | |||||
<xsl:variable name="package.name" select="@package"/> | |||||
<tr> | |||||
<td nowrap="nowrap"> | |||||
<a target="classFrame"> | |||||
<xsl:attribute name="href"> | |||||
<xsl:if test="not($package.name='')"> | |||||
<xsl:value-of select="translate($package.name,'.','/')"/><xsl:text>/</xsl:text> | |||||
</xsl:if><xsl:value-of select="@id"/>_<xsl:value-of select="@name"/><xsl:text>.html</xsl:text> | |||||
</xsl:attribute> | |||||
<xsl:value-of select="@name"/> | |||||
</a> | |||||
</td> | |||||
</tr> | |||||
</xsl:template> | |||||
<!-- | |||||
Creates an html file that contains a link to all package-summary.html files on | |||||
each package existing on testsuites. | |||||
@bug there will be a problem here, I don't know yet how to handle unnamed package :( | |||||
--> | |||||
<xsl:template match="testsuites" mode="all.packages"> | |||||
<html> | |||||
<head> | |||||
<title>All Unit Test Packages</title> | |||||
<xsl:call-template name="create.stylesheet.link"> | |||||
<xsl:with-param name="package.name"/> | |||||
</xsl:call-template> | |||||
</head> | |||||
<body> | |||||
<h2><a href="overview-summary.html" target="classFrame">Home</a></h2> | |||||
<h2>Packages</h2> | |||||
<table width="100%"> | |||||
<xsl:apply-templates select="testsuite[not(./@package = preceding-sibling::testsuite/@package)]" mode="all.packages"> | |||||
<xsl:sort select="@package"/> | |||||
</xsl:apply-templates> | |||||
</table> | |||||
</body> | |||||
</html> | |||||
</xsl:template> | |||||
<xsl:template match="testsuite" mode="all.packages"> | |||||
<tr> | |||||
<td nowrap="nowrap"> | |||||
<a href="./{translate(@package,'.','/')}/package-summary.html" target="classFrame"> | |||||
<xsl:value-of select="@package"/> | |||||
<xsl:if test="@package = ''"><none></xsl:if> | |||||
</a> | |||||
</td> | |||||
</tr> | |||||
</xsl:template> | |||||
<xsl:template match="testsuites" mode="overview.packages"> | |||||
<html> | |||||
<head> | |||||
<title>Unit Test Results: Summary</title> | |||||
<xsl:call-template name="create.stylesheet.link"> | |||||
<xsl:with-param name="package.name"/> | |||||
</xsl:call-template> | |||||
</head> | |||||
<body> | |||||
<xsl:attribute name="onload">open('allclasses-frame.html','classListFrame')</xsl:attribute> | |||||
<xsl:call-template name="pageHeader"/> | |||||
<h2>Summary</h2> | |||||
<xsl:variable name="testCount" select="sum(testsuite/@tests)"/> | |||||
<xsl:variable name="errorCount" select="sum(testsuite/@errors)"/> | |||||
<xsl:variable name="failureCount" select="sum(testsuite/@failures)"/> | |||||
<xsl:variable name="timeCount" select="sum(testsuite/@time)"/> | |||||
<xsl:variable name="successRate" select="($testCount - $failureCount - $errorCount) div $testCount"/> | |||||
<table class="details" border="0" cellpadding="5" cellspacing="2" width="95%"> | |||||
<tr valign="top"> | |||||
<th>Tests</th> | |||||
<th>Failures</th> | |||||
<th>Errors</th> | |||||
<th>Success rate</th> | |||||
<th>Time</th> | |||||
</tr> | |||||
<tr valign="top"> | |||||
<xsl:attribute name="class"> | |||||
<xsl:choose> | |||||
<xsl:when test="$errorCount > 0">Error</xsl:when> | |||||
<xsl:when test="$failureCount > 0">Failure</xsl:when> | |||||
<xsl:otherwise>Pass</xsl:otherwise> | |||||
</xsl:choose> | |||||
</xsl:attribute> | |||||
<td><xsl:value-of select="$testCount"/></td> | |||||
<td><xsl:value-of select="$failureCount"/></td> | |||||
<td><xsl:value-of select="$errorCount"/></td> | |||||
<td> | |||||
<xsl:call-template name="display-percent"> | |||||
<xsl:with-param name="value" select="$successRate"/> | |||||
</xsl:call-template> | |||||
</td> | |||||
<td> | |||||
<xsl:call-template name="display-time"> | |||||
<xsl:with-param name="value" select="$timeCount"/> | |||||
</xsl:call-template> | |||||
</td> | |||||
</tr> | |||||
</table> | |||||
<table border="0" width="95%"> | |||||
<tr> | |||||
<td style="text-align: justify;"> | |||||
Note: <em>failures</em> are anticipated and checked for with assertions while <em>errors</em> are unanticipated. | |||||
</td> | |||||
</tr> | |||||
</table> | |||||
<h2>Packages</h2> | |||||
<table class="details" border="0" cellpadding="5" cellspacing="2" width="95%"> | |||||
<xsl:call-template name="testsuite.test.header"/> | |||||
<xsl:for-each select="testsuite[not(./@package = preceding-sibling::testsuite/@package)]"> | |||||
<xsl:sort select="@package" order="ascending"/> | |||||
<!-- get the node set containing all testsuites that have the same package --> | |||||
<xsl:variable name="insamepackage" select="/testsuites/testsuite[./@package = current()/@package]"/> | |||||
<tr valign="top"> | |||||
<!-- display a failure if there is any failure/error in the package --> | |||||
<xsl:attribute name="class"> | |||||
<xsl:choose> | |||||
<xsl:when test="sum($insamepackage/@errors) > 0">Error</xsl:when> | |||||
<xsl:when test="sum($insamepackage/@failures) > 0">Failure</xsl:when> | |||||
<xsl:otherwise>Pass</xsl:otherwise> | |||||
</xsl:choose> | |||||
</xsl:attribute> | |||||
<td><a href="./{translate(@package,'.','/')}/package-summary.html"> | |||||
<xsl:value-of select="@package"/> | |||||
<xsl:if test="@package = ''"><none></xsl:if> | |||||
</a></td> | |||||
<td><xsl:value-of select="sum($insamepackage/@tests)"/></td> | |||||
<td><xsl:value-of select="sum($insamepackage/@errors)"/></td> | |||||
<td><xsl:value-of select="sum($insamepackage/@failures)"/></td> | |||||
<td> | |||||
<xsl:call-template name="display-time"> | |||||
<xsl:with-param name="value" select="sum($insamepackage/@time)"/> | |||||
</xsl:call-template> | |||||
</td> | |||||
</tr> | |||||
</xsl:for-each> | |||||
</table> | |||||
</body> | |||||
</html> | |||||
</xsl:template> | |||||
<xsl:template name="package.summary"> | |||||
<xsl:param name="name"/> | |||||
<html> | |||||
<head> | |||||
<xsl:call-template name="create.stylesheet.link"> | |||||
<xsl:with-param name="package.name" select="$name"/> | |||||
</xsl:call-template> | |||||
</head> | |||||
<body> | |||||
<xsl:attribute name="onload">open('package-frame.html','classListFrame')</xsl:attribute> | |||||
<xsl:call-template name="pageHeader"/> | |||||
<h3>Package <xsl:value-of select="$name"/></h3> | |||||
<!--table border="0" cellpadding="5" cellspacing="2" width="95%"> | |||||
<xsl:call-template name="class.metrics.header"/> | |||||
<xsl:apply-templates select="." mode="print.metrics"/> | |||||
</table--> | |||||
<xsl:variable name="insamepackage" select="/testsuites/testsuite[./@package = $name]"/> | |||||
<xsl:if test="count($insamepackage) > 0"> | |||||
<h2>Classes</h2> | |||||
<p> | |||||
<table class="details" border="0" cellpadding="5" cellspacing="2" width="95%"> | |||||
<xsl:call-template name="testsuite.test.header"/> | |||||
<xsl:apply-templates select="$insamepackage" mode="print.test"> | |||||
<xsl:sort select="@name"/> | |||||
</xsl:apply-templates> | |||||
</table> | |||||
</p> | |||||
</xsl:if> | |||||
</body> | |||||
</html> | |||||
</xsl:template> | |||||
<!-- | |||||
transform string like a.b.c to ../../../ | |||||
@param path the path to transform into a descending directory path | |||||
--> | |||||
<xsl:template name="path"> | |||||
<xsl:param name="path"/> | |||||
<xsl:if test="contains($path,'.')"> | |||||
<xsl:text>../</xsl:text> | |||||
<xsl:call-template name="path"> | |||||
<xsl:with-param name="path"><xsl:value-of select="substring-after($path,'.')"/></xsl:with-param> | |||||
</xsl:call-template> | |||||
</xsl:if> | |||||
<xsl:if test="not(contains($path,'.')) and not($path = '')"> | |||||
<xsl:text>../</xsl:text> | |||||
</xsl:if> | |||||
</xsl:template> | |||||
<!-- create the link to the stylesheet based on the package name --> | |||||
<xsl:template name="create.stylesheet.link"> | |||||
<xsl:param name="package.name"/> | |||||
<link rel="stylesheet" type="text/css" title="Style"><xsl:attribute name="href"><xsl:if test="not($package.name = 'unnamed package')"><xsl:call-template name="path"><xsl:with-param name="path" select="$package.name"/></xsl:call-template></xsl:if>stylesheet.css</xsl:attribute></link> | |||||
</xsl:template> | |||||
<!-- Page HEADER --> | |||||
<xsl:template name="pageHeader"> | |||||
<h1>Unit Test Results</h1> | |||||
<table width="100%"> | |||||
<tr> | |||||
<td align="left"></td> | |||||
<td align="right">Designed for use with <a href="http://www.junit.org/">JUnit</a> and <a href="http://jakarta.apache.org/">Ant</a>.</td> | |||||
</tr> | |||||
</table> | |||||
<hr size="1"/> | |||||
</xsl:template> | |||||
<!-- class header --> | |||||
<xsl:template name="testsuite.test.header"> | |||||
<tr valign="top"> | |||||
<th width="80%">Name</th> | |||||
<th>Tests</th> | |||||
<th>Errors</th> | |||||
<th>Failures</th> | |||||
<th nowrap="nowrap">Time(s)</th> | |||||
</tr> | |||||
</xsl:template> | |||||
<!-- method header --> | |||||
<xsl:template name="testcase.test.header"> | |||||
<tr valign="top"> | |||||
<th>Name</th> | |||||
<th>Status</th> | |||||
<th width="80%">Type</th> | |||||
<th nowrap="nowrap">Time(s)</th> | |||||
</tr> | |||||
</xsl:template> | |||||
<!-- class information --> | |||||
<xsl:template match="testsuite" mode="print.test"> | |||||
<tr valign="top"> | |||||
<xsl:attribute name="class"> | |||||
<xsl:choose> | |||||
<xsl:when test="@errors[.> 0]">Error</xsl:when> | |||||
<xsl:when test="@failures[.> 0]">Failure</xsl:when> | |||||
<xsl:otherwise>Pass</xsl:otherwise> | |||||
</xsl:choose> | |||||
</xsl:attribute> | |||||
<td><a href="{@id}_{@name}.html"><xsl:value-of select="@name"/></a></td> | |||||
<td><xsl:apply-templates select="@tests"/></td> | |||||
<td><xsl:apply-templates select="@errors"/></td> | |||||
<td><xsl:apply-templates select="@failures"/></td> | |||||
<td><xsl:call-template name="display-time"> | |||||
<xsl:with-param name="value" select="@time"/> | |||||
</xsl:call-template> | |||||
</td> | |||||
</tr> | |||||
</xsl:template> | |||||
<xsl:template match="testcase" mode="print.test"> | |||||
<tr valign="top"> | |||||
<xsl:attribute name="class"> | |||||
<xsl:choose> | |||||
<xsl:when test="error">Error</xsl:when> | |||||
<xsl:when test="failure">Failure</xsl:when> | |||||
<xsl:otherwise>TableRowColor</xsl:otherwise> | |||||
</xsl:choose> | |||||
</xsl:attribute> | |||||
<td><xsl:value-of select="@name"/></td> | |||||
<xsl:choose> | |||||
<xsl:when test="failure"> | |||||
<td>Failure</td> | |||||
<td><xsl:apply-templates select="failure"/></td> | |||||
</xsl:when> | |||||
<xsl:when test="error"> | |||||
<td>Error</td> | |||||
<td><xsl:apply-templates select="error"/></td> | |||||
</xsl:when> | |||||
<xsl:otherwise> | |||||
<td>Success</td> | |||||
<td></td> | |||||
</xsl:otherwise> | |||||
</xsl:choose> | |||||
<td> | |||||
<xsl:call-template name="display-time"> | |||||
<xsl:with-param name="value" select="@time"/> | |||||
</xsl:call-template> | |||||
</td> | |||||
</tr> | |||||
</xsl:template> | |||||
<!-- Note : the below template error and failure are the same style | |||||
so just call the same style store in the toolkit template --> | |||||
<xsl:template match="failure"> | |||||
<xsl:call-template name="display-failures"/> | |||||
</xsl:template> | |||||
<xsl:template match="error"> | |||||
<xsl:call-template name="display-failures"/> | |||||
</xsl:template> | |||||
<!-- Style for the error and failure in the testcase template --> | |||||
<xsl:template name="display-failures"> | |||||
<xsl:choose> | |||||
<xsl:when test="not(@message)">N/A</xsl:when> | |||||
<xsl:otherwise> | |||||
<xsl:value-of select="@message"/> | |||||
</xsl:otherwise> | |||||
</xsl:choose> | |||||
<!-- display the stacktrace --> | |||||
<br/><br/> | |||||
<code> | |||||
<xsl:call-template name="br-replace"> | |||||
<xsl:with-param name="word" select="."/> | |||||
</xsl:call-template> | |||||
</code> | |||||
<!-- the latter is better but might be problematic for non-21" monitors... --> | |||||
<!--pre><xsl:value-of select="."/></pre--> | |||||
</xsl:template> | |||||
<xsl:template name="JS-escape"> | |||||
<xsl:param name="string"/> | |||||
<xsl:param name="tmp1" select="stringutils:replace(string($string),'\','\\')"/> | |||||
<xsl:param name="tmp2" select="stringutils:replace(string($tmp1),"'","\'")"/> | |||||
<xsl:value-of select="$tmp2"/> | |||||
</xsl:template> | |||||
<!-- | |||||
template that will convert a carriage return into a br tag | |||||
@param word the text from which to convert CR to BR tag | |||||
--> | |||||
<xsl:template name="br-replace"> | |||||
<xsl:param name="word"/> | |||||
<xsl:param name="br"><br/></xsl:param> | |||||
<xsl:value-of select='stringutils:replace(string($word),"
",$br)'/> | |||||
</xsl:template> | |||||
<xsl:template name="display-time"> | |||||
<xsl:param name="value"/> | |||||
<xsl:value-of select="format-number($value,'0.000')"/> | |||||
</xsl:template> | |||||
<xsl:template name="display-percent"> | |||||
<xsl:param name="value"/> | |||||
<xsl:value-of select="format-number($value,'0.00%')"/> | |||||
</xsl:template> | |||||
</xsl:stylesheet> | |||||
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" | |||||
xmlns:lxslt="http://xml.apache.org/xslt" | |||||
xmlns:stringutils="xalan://org.apache.tools.ant.util.StringUtils"> | |||||
<xsl:output method="html" indent="yes" encoding="US-ASCII" | |||||
doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN" /> | |||||
<xsl:decimal-format decimal-separator="." grouping-separator="," /> | |||||
<!-- | |||||
Copyright 2001-2004 The Apache Software Foundation | |||||
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. | |||||
--> | |||||
<!-- | |||||
Sample stylesheet to be used with Ant JUnitReport output. | |||||
It creates a non-framed report that can be useful to send via | |||||
e-mail or such. | |||||
@author Stephane Bailliez <a href="mailto:sbailliez@apache.org"/> | |||||
@author Erik Hatcher <a href="mailto:ehatcher@apache.org"/> | |||||
--> | |||||
<xsl:template match="testsuites"> | |||||
<html> | |||||
<head> | |||||
<title>Unit Test Results</title> | |||||
<style type="text/css"> | |||||
body { | |||||
font:normal 68% verdana,arial,helvetica; | |||||
color:#000000; | |||||
} | |||||
table tr td, table tr th { | |||||
font-size: 68%; | |||||
} | |||||
table.details tr th{ | |||||
font-weight: bold; | |||||
text-align:left; | |||||
background:#a6caf0; | |||||
} | |||||
table.details tr td{ | |||||
background:#eeeee0; | |||||
} | |||||
p { | |||||
line-height:1.5em; | |||||
margin-top:0.5em; margin-bottom:1.0em; | |||||
} | |||||
h1 { | |||||
margin: 0px 0px 5px; font: 165% verdana,arial,helvetica | |||||
} | |||||
h2 { | |||||
margin-top: 1em; margin-bottom: 0.5em; font: bold 125% verdana,arial,helvetica | |||||
} | |||||
h3 { | |||||
margin-bottom: 0.5em; font: bold 115% verdana,arial,helvetica | |||||
} | |||||
h4 { | |||||
margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica | |||||
} | |||||
h5 { | |||||
margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica | |||||
} | |||||
h6 { | |||||
margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica | |||||
} | |||||
.Error { | |||||
font-weight:bold; color:red; | |||||
} | |||||
.Failure { | |||||
font-weight:bold; color:purple; | |||||
} | |||||
.Properties { | |||||
text-align:right; | |||||
} | |||||
</style> | |||||
<script type="text/javascript" language="JavaScript"> | |||||
var TestCases = new Array(); | |||||
var cur; | |||||
<xsl:for-each select="./testsuite"> | |||||
<xsl:apply-templates select="properties"/> | |||||
</xsl:for-each> | |||||
</script> | |||||
<script type="text/javascript" language="JavaScript"><![CDATA[ | |||||
function displayProperties (name) { | |||||
var win = window.open('','JUnitSystemProperties','scrollbars=1,resizable=1'); | |||||
var doc = win.document.open(); | |||||
doc.write("<html><head><title>Properties of " + name + "</title>"); | |||||
doc.write("<style>") | |||||
doc.write("body {font:normal 68% verdana,arial,helvetica; color:#000000; }"); | |||||
doc.write("table tr td, table tr th { font-size: 68%; }"); | |||||
doc.write("table.properties { border-collapse:collapse; border-left:solid 1 #cccccc; border-top:solid 1 #cccccc; padding:5px; }"); | |||||
doc.write("table.properties th { text-align:left; border-right:solid 1 #cccccc; border-bottom:solid 1 #cccccc; background-color:#eeeeee; }"); | |||||
doc.write("table.properties td { font:normal; text-align:left; border-right:solid 1 #cccccc; border-bottom:solid 1 #cccccc; background-color:#fffffff; }"); | |||||
doc.write("h3 { margin-bottom: 0.5em; font: bold 115% verdana,arial,helvetica }"); | |||||
doc.write("</style>"); | |||||
doc.write("</head><body>"); | |||||
doc.write("<h3>Properties of " + name + "</h3>"); | |||||
doc.write("<div align=\"right\"><a href=\"javascript:window.close();\">Close</a></div>"); | |||||
doc.write("<table class='properties'>"); | |||||
doc.write("<tr><th>Name</th><th>Value</th></tr>"); | |||||
for (prop in TestCases[name]) { | |||||
doc.write("<tr><th>" + prop + "</th><td>" + TestCases[name][prop] + "</td></tr>"); | |||||
} | |||||
doc.write("</table>"); | |||||
doc.write("</body></html>"); | |||||
doc.close(); | |||||
win.focus(); | |||||
} | |||||
]]> | |||||
</script> | |||||
</head> | |||||
<body> | |||||
<a name="top"></a> | |||||
<xsl:call-template name="pageHeader"/> | |||||
<!-- Summary part --> | |||||
<xsl:call-template name="summary"/> | |||||
<hr size="1" width="95%" align="left"/> | |||||
<!-- Package List part --> | |||||
<xsl:call-template name="packagelist"/> | |||||
<hr size="1" width="95%" align="left"/> | |||||
<!-- For each package create its part --> | |||||
<xsl:call-template name="packages"/> | |||||
<hr size="1" width="95%" align="left"/> | |||||
<!-- For each class create the part --> | |||||
<xsl:call-template name="classes"/> | |||||
</body> | |||||
</html> | |||||
</xsl:template> | |||||
<!-- ================================================================== --> | |||||
<!-- Write a list of all packages with an hyperlink to the anchor of --> | |||||
<!-- of the package name. --> | |||||
<!-- ================================================================== --> | |||||
<xsl:template name="packagelist"> | |||||
<h2>Packages</h2> | |||||
Note: package statistics are not computed recursively, they only sum up all of its testsuites numbers. | |||||
<table class="details" border="0" cellpadding="5" cellspacing="2" width="95%"> | |||||
<xsl:call-template name="testsuite.test.header"/> | |||||
<!-- list all packages recursively --> | |||||
<xsl:for-each select="./testsuite[not(./@package = preceding-sibling::testsuite/@package)]"> | |||||
<xsl:sort select="@package"/> | |||||
<xsl:variable name="testsuites-in-package" select="/testsuites/testsuite[./@package = current()/@package]"/> | |||||
<xsl:variable name="testCount" select="sum($testsuites-in-package/@tests)"/> | |||||
<xsl:variable name="errorCount" select="sum($testsuites-in-package/@errors)"/> | |||||
<xsl:variable name="failureCount" select="sum($testsuites-in-package/@failures)"/> | |||||
<xsl:variable name="timeCount" select="sum($testsuites-in-package/@time)"/> | |||||
<!-- write a summary for the package --> | |||||
<tr valign="top"> | |||||
<!-- set a nice color depending if there is an error/failure --> | |||||
<xsl:attribute name="class"> | |||||
<xsl:choose> | |||||
<xsl:when test="$failureCount > 0">Failure</xsl:when> | |||||
<xsl:when test="$errorCount > 0">Error</xsl:when> | |||||
</xsl:choose> | |||||
</xsl:attribute> | |||||
<td><a href="#{@package}"><xsl:value-of select="@package"/></a></td> | |||||
<td><xsl:value-of select="$testCount"/></td> | |||||
<td><xsl:value-of select="$errorCount"/></td> | |||||
<td><xsl:value-of select="$failureCount"/></td> | |||||
<td> | |||||
<xsl:call-template name="display-time"> | |||||
<xsl:with-param name="value" select="$timeCount"/> | |||||
</xsl:call-template> | |||||
</td> | |||||
</tr> | |||||
</xsl:for-each> | |||||
</table> | |||||
</xsl:template> | |||||
<!-- ================================================================== --> | |||||
<!-- Write a package level report --> | |||||
<!-- It creates a table with values from the document: --> | |||||
<!-- Name | Tests | Errors | Failures | Time --> | |||||
<!-- ================================================================== --> | |||||
<xsl:template name="packages"> | |||||
<!-- create an anchor to this package name --> | |||||
<xsl:for-each select="/testsuites/testsuite[not(./@package = preceding-sibling::testsuite/@package)]"> | |||||
<xsl:sort select="@package"/> | |||||
<a name="{@package}"></a> | |||||
<h3>Package <xsl:value-of select="@package"/></h3> | |||||
<table class="details" border="0" cellpadding="5" cellspacing="2" width="95%"> | |||||
<xsl:call-template name="testsuite.test.header"/> | |||||
<!-- match the testsuites of this package --> | |||||
<xsl:apply-templates select="/testsuites/testsuite[./@package = current()/@package]" mode="print.test"/> | |||||
</table> | |||||
<a href="#top">Back to top</a> | |||||
<p/> | |||||
<p/> | |||||
</xsl:for-each> | |||||
</xsl:template> | |||||
<xsl:template name="classes"> | |||||
<xsl:for-each select="testsuite"> | |||||
<xsl:sort select="@name"/> | |||||
<!-- create an anchor to this class name --> | |||||
<a name="{@name}"></a> | |||||
<h3>TestCase <xsl:value-of select="@name"/></h3> | |||||
<table class="details" border="0" cellpadding="5" cellspacing="2" width="95%"> | |||||
<xsl:call-template name="testcase.test.header"/> | |||||
<!-- | |||||
test can even not be started at all (failure to load the class) | |||||
so report the error directly | |||||
--> | |||||
<xsl:if test="./error"> | |||||
<tr class="Error"> | |||||
<td colspan="4"><xsl:apply-templates select="./error"/></td> | |||||
</tr> | |||||
</xsl:if> | |||||
<xsl:apply-templates select="./testcase" mode="print.test"/> | |||||
</table> | |||||
<div class="Properties"> | |||||
<a> | |||||
<xsl:attribute name="href">javascript:displayProperties('<xsl:value-of select="@package"/>.<xsl:value-of select="@name"/>');</xsl:attribute> | |||||
Properties » | |||||
</a> | |||||
</div> | |||||
<p/> | |||||
<a href="#top">Back to top</a> | |||||
</xsl:for-each> | |||||
</xsl:template> | |||||
<xsl:template name="summary"> | |||||
<h2>Summary</h2> | |||||
<xsl:variable name="testCount" select="sum(testsuite/@tests)"/> | |||||
<xsl:variable name="errorCount" select="sum(testsuite/@errors)"/> | |||||
<xsl:variable name="failureCount" select="sum(testsuite/@failures)"/> | |||||
<xsl:variable name="timeCount" select="sum(testsuite/@time)"/> | |||||
<xsl:variable name="successRate" select="($testCount - $failureCount - $errorCount) div $testCount"/> | |||||
<table class="details" border="0" cellpadding="5" cellspacing="2" width="95%"> | |||||
<tr valign="top"> | |||||
<th>Tests</th> | |||||
<th>Failures</th> | |||||
<th>Errors</th> | |||||
<th>Success rate</th> | |||||
<th>Time</th> | |||||
</tr> | |||||
<tr valign="top"> | |||||
<xsl:attribute name="class"> | |||||
<xsl:choose> | |||||
<xsl:when test="$failureCount > 0">Failure</xsl:when> | |||||
<xsl:when test="$errorCount > 0">Error</xsl:when> | |||||
</xsl:choose> | |||||
</xsl:attribute> | |||||
<td><xsl:value-of select="$testCount"/></td> | |||||
<td><xsl:value-of select="$failureCount"/></td> | |||||
<td><xsl:value-of select="$errorCount"/></td> | |||||
<td> | |||||
<xsl:call-template name="display-percent"> | |||||
<xsl:with-param name="value" select="$successRate"/> | |||||
</xsl:call-template> | |||||
</td> | |||||
<td> | |||||
<xsl:call-template name="display-time"> | |||||
<xsl:with-param name="value" select="$timeCount"/> | |||||
</xsl:call-template> | |||||
</td> | |||||
</tr> | |||||
</table> | |||||
<table border="0" width="95%"> | |||||
<tr> | |||||
<td style="text-align: justify;"> | |||||
Note: <i>failures</i> are anticipated and checked for with assertions while <i>errors</i> are unanticipated. | |||||
</td> | |||||
</tr> | |||||
</table> | |||||
</xsl:template> | |||||
<!-- | |||||
Write properties into a JavaScript data structure. | |||||
This is based on the original idea by Erik Hatcher (ehatcher@apache.org) | |||||
--> | |||||
<xsl:template match="properties"> | |||||
cur = TestCases['<xsl:value-of select="../@package"/>.<xsl:value-of select="../@name"/>'] = new Array(); | |||||
<xsl:for-each select="property"> | |||||
<xsl:sort select="@name"/> | |||||
cur['<xsl:value-of select="@name"/>'] = '<xsl:call-template name="JS-escape"><xsl:with-param name="string" select="@value"/></xsl:call-template>'; | |||||
</xsl:for-each> | |||||
</xsl:template> | |||||
<!-- Page HEADER --> | |||||
<xsl:template name="pageHeader"> | |||||
<h1>Unit Test Results</h1> | |||||
<table width="100%"> | |||||
<tr> | |||||
<td align="left"></td> | |||||
<td align="right">Designed for use with <a href='http://www.junit.org'>JUnit</a> and <a href='http://jakarta.apache.org/ant'>Ant</a>.</td> | |||||
</tr> | |||||
</table> | |||||
<hr size="1"/> | |||||
</xsl:template> | |||||
<xsl:template match="testsuite" mode="header"> | |||||
<tr valign="top"> | |||||
<th width="80%">Name</th> | |||||
<th>Tests</th> | |||||
<th>Errors</th> | |||||
<th>Failures</th> | |||||
<th nowrap="nowrap">Time(s)</th> | |||||
</tr> | |||||
</xsl:template> | |||||
<!-- class header --> | |||||
<xsl:template name="testsuite.test.header"> | |||||
<tr valign="top"> | |||||
<th width="80%">Name</th> | |||||
<th>Tests</th> | |||||
<th>Errors</th> | |||||
<th>Failures</th> | |||||
<th nowrap="nowrap">Time(s)</th> | |||||
</tr> | |||||
</xsl:template> | |||||
<!-- method header --> | |||||
<xsl:template name="testcase.test.header"> | |||||
<tr valign="top"> | |||||
<th>Name</th> | |||||
<th>Status</th> | |||||
<th width="80%">Type</th> | |||||
<th nowrap="nowrap">Time(s)</th> | |||||
</tr> | |||||
</xsl:template> | |||||
<!-- class information --> | |||||
<xsl:template match="testsuite" mode="print.test"> | |||||
<tr valign="top"> | |||||
<!-- set a nice color depending if there is an error/failure --> | |||||
<xsl:attribute name="class"> | |||||
<xsl:choose> | |||||
<xsl:when test="@failures[.> 0]">Failure</xsl:when> | |||||
<xsl:when test="@errors[.> 0]">Error</xsl:when> | |||||
</xsl:choose> | |||||
</xsl:attribute> | |||||
<!-- print testsuite information --> | |||||
<td><a href="#{@name}"><xsl:value-of select="@name"/></a></td> | |||||
<td><xsl:value-of select="@tests"/></td> | |||||
<td><xsl:value-of select="@errors"/></td> | |||||
<td><xsl:value-of select="@failures"/></td> | |||||
<td> | |||||
<xsl:call-template name="display-time"> | |||||
<xsl:with-param name="value" select="@time"/> | |||||
</xsl:call-template> | |||||
</td> | |||||
</tr> | |||||
</xsl:template> | |||||
<xsl:template match="testcase" mode="print.test"> | |||||
<tr valign="top"> | |||||
<xsl:attribute name="class"> | |||||
<xsl:choose> | |||||
<xsl:when test="failure | error">Error</xsl:when> | |||||
</xsl:choose> | |||||
</xsl:attribute> | |||||
<td><xsl:value-of select="@name"/></td> | |||||
<xsl:choose> | |||||
<xsl:when test="failure"> | |||||
<td>Failure</td> | |||||
<td><xsl:apply-templates select="failure"/></td> | |||||
</xsl:when> | |||||
<xsl:when test="error"> | |||||
<td>Error</td> | |||||
<td><xsl:apply-templates select="error"/></td> | |||||
</xsl:when> | |||||
<xsl:otherwise> | |||||
<td>Success</td> | |||||
<td></td> | |||||
</xsl:otherwise> | |||||
</xsl:choose> | |||||
<td> | |||||
<xsl:call-template name="display-time"> | |||||
<xsl:with-param name="value" select="@time"/> | |||||
</xsl:call-template> | |||||
</td> | |||||
</tr> | |||||
</xsl:template> | |||||
<xsl:template match="failure"> | |||||
<xsl:call-template name="display-failures"/> | |||||
</xsl:template> | |||||
<xsl:template match="error"> | |||||
<xsl:call-template name="display-failures"/> | |||||
</xsl:template> | |||||
<!-- Style for the error and failure in the tescase template --> | |||||
<xsl:template name="display-failures"> | |||||
<xsl:choose> | |||||
<xsl:when test="not(@message)">N/A</xsl:when> | |||||
<xsl:otherwise> | |||||
<xsl:value-of select="@message"/> | |||||
</xsl:otherwise> | |||||
</xsl:choose> | |||||
<!-- display the stacktrace --> | |||||
<code> | |||||
<br/><br/> | |||||
<xsl:call-template name="br-replace"> | |||||
<xsl:with-param name="word" select="."/> | |||||
</xsl:call-template> | |||||
</code> | |||||
<!-- the later is better but might be problematic for non-21" monitors... --> | |||||
<!--pre><xsl:value-of select="."/></pre--> | |||||
</xsl:template> | |||||
<xsl:template name="JS-escape"> | |||||
<xsl:param name="string"/> | |||||
<xsl:param name="tmp1" select="stringutils:replace(string($string),'\','\\')"/> | |||||
<xsl:param name="tmp2" select="stringutils:replace(string($tmp1),"'","\'")"/> | |||||
<xsl:value-of select="$tmp2"/> | |||||
</xsl:template> | |||||
<!-- | |||||
template that will convert a carriage return into a br tag | |||||
@param word the text from which to convert CR to BR tag | |||||
--> | |||||
<xsl:template name="br-replace"> | |||||
<xsl:param name="word"/> | |||||
<xsl:param name="br"><br/></xsl:param> | |||||
<xsl:value-of select='stringutils:replace(string($word),"
",$br)'/> | |||||
</xsl:template> | |||||
<xsl:template name="display-time"> | |||||
<xsl:param name="value"/> | |||||
<xsl:value-of select="format-number($value,'0.000')"/> | |||||
</xsl:template> | |||||
<xsl:template name="display-percent"> | |||||
<xsl:param name="value"/> | |||||
<xsl:value-of select="format-number($value,'0.00%')"/> | |||||
</xsl:template> | |||||
</xsl:stylesheet> | |||||
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> | |||||
<xsl:output method="html" indent="yes" encoding="US-ASCII"/> | |||||
<!-- | |||||
Copyright 2000-2004 The Apache Software Foundation | |||||
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. | |||||
--> | |||||
<!-- | |||||
The purpose have this XSL is to provide a nice way to look at the output | |||||
from the Ant XmlLogger (ie: ant -listener org.apache.tools.ant.XmlLogger ) | |||||
@author <a href="mailto:sbailliez@apache.org">Stephane Bailliez</a> | |||||
--> | |||||
<xsl:decimal-format decimal-separator="." grouping-separator="," /> | |||||
<xsl:template match="/"> | |||||
<html> | |||||
<head> | |||||
<style type="text/css"> | |||||
.bannercell { | |||||
border: 0px; | |||||
padding: 0px; | |||||
} | |||||
body { | |||||
margin: 0; | |||||
font:normal 100% arial,helvetica,sanserif; | |||||
background-color:#FFFFFF; | |||||
color:#000000; | |||||
} | |||||
table.status { | |||||
font:bold 80% arial,helvetica,sanserif; | |||||
background-color:#525D76; | |||||
color:#ffffff; | |||||
} | |||||
table.log tr td, tr th { | |||||
font-size: 80%; | |||||
} | |||||
.error { | |||||
color:red; | |||||
} | |||||
.warn { | |||||
color:brown; | |||||
} | |||||
.info { | |||||
color:gray; | |||||
} | |||||
.debug{ | |||||
color:gray; | |||||
} | |||||
.failed { | |||||
font-size:80%; | |||||
background-color: red; | |||||
color:#FFFFFF; | |||||
font-weight: bold | |||||
} | |||||
.complete { | |||||
font-size:80%; | |||||
background-color: #525D76; | |||||
color:#FFFFFF; | |||||
font-weight: bold | |||||
} | |||||
.a td { | |||||
background: #efefef; | |||||
} | |||||
.b td { | |||||
background: #fff; | |||||
} | |||||
th, td { | |||||
text-align: left; | |||||
vertical-align: top; | |||||
} | |||||
th { | |||||
background: #ccc; | |||||
color: black; | |||||
} | |||||
table, th, td { | |||||
border: none | |||||
} | |||||
h3 { | |||||
font:bold 80% arial,helvetica,sanserif; | |||||
background: #525D76; | |||||
color: white; | |||||
text-decoration: none; | |||||
padding: 5px; | |||||
margin-right: 2px; | |||||
margin-left: 2px; | |||||
margin-bottom: 0; | |||||
} | |||||
</style> | |||||
</head> | |||||
<body> | |||||
<!-- jakarta logo --> | |||||
<table border="0" cellpadding="0" cellspacing="0" width="100%"> | |||||
<tr> | |||||
<td valign="top" class="bannercell"> | |||||
<a href="http://jakarta.apache.org/"> | |||||
<img src="http://jakarta.apache.org/images/jakarta-logo.gif" alt="http://jakarta.apache.org" align="left" border="0"/> | |||||
</a> | |||||
</td> | |||||
<td style="text-align:right;vertical-align:bottom"> | |||||
<a href="http://jakarta.apache.org/ant">Apache Ant</a> | |||||
</td> | |||||
</tr> | |||||
</table> | |||||
<table border="0" width="100%"> | |||||
<tr><td><hr noshade="yes" size="1"/></td></tr> | |||||
</table> | |||||
<xsl:apply-templates select="build"/> | |||||
<!-- FOOTER --> | |||||
<table width="100%"> | |||||
<tr><td><hr noshade="yes" size="1"/></td></tr> | |||||
<tr><td> | |||||
<div align="center"><font color="#525D76" size="-1"><em> | |||||
Copyright © 2000-2002, Apache Software Foundation | |||||
</em></font></div> | |||||
</td></tr> | |||||
</table> | |||||
</body> | |||||
</html> | |||||
</xsl:template> | |||||
<xsl:template match="build"> | |||||
<!-- build status --> | |||||
<table width="100%"> | |||||
<xsl:attribute name="class"> | |||||
<xsl:if test="@error">failed</xsl:if> | |||||
<xsl:if test="not(@error)">complete</xsl:if> | |||||
</xsl:attribute> | |||||
<tr> | |||||
<xsl:if test="@error"> | |||||
<td nowrap="yes">Build Failed</td> | |||||
</xsl:if> | |||||
<xsl:if test="not(@error)"> | |||||
<td nowrap="yes">Build Complete</td> | |||||
</xsl:if> | |||||
<td style="text-align:right" nowrap="yes">Total Time: <xsl:value-of select="@time"/></td> | |||||
</tr> | |||||
<tr> | |||||
<td colspan="2"> | |||||
<xsl:if test="@error"> | |||||
<tt><xsl:value-of select="@error"/></tt><br/> | |||||
<i style="font-size:80%">See the <a href="#stacktrace" alt="Click for details">stacktrace</a>.</i> | |||||
</xsl:if> | |||||
</td> | |||||
</tr> | |||||
</table> | |||||
<table border="1" cellspacing="2" cellpadding="3" width="100%" style="font-size:80%"> | |||||
<tr class="a"><td width="1">ant.file</td><td><xsl:value-of select="substring-after(//message[contains(text(),'ant.file')], '->')"/></td></tr> | |||||
<tr class="b"><td width="1">ant.version</td><td><xsl:value-of select="substring-after(//message[contains(text(),'ant.version')], '->')"/></td></tr> | |||||
<tr class="a"><td width="1">java.version</td><td><xsl:value-of select="substring-after(//message[contains(text(),'java.vm.version')], '->')"/></td></tr> | |||||
<tr class="b"><td width="1">os.name</td><td><xsl:value-of select="substring-after(//message[contains(text(),'os.name')], '->')"/></td></tr> | |||||
</table> | |||||
<!-- build information --> | |||||
<h3>Build events</h3> | |||||
<table class="log" border="1" cellspacing="2" cellpadding="3" width="100%"> | |||||
<tr> | |||||
<th nowrap="yes" align="left" width="1%">target</th> | |||||
<th nowrap="yes" align="left" width="1%">task</th> | |||||
<th nowrap="yes" align="left">message</th> | |||||
</tr> | |||||
<xsl:apply-templates select=".//message[@priority != 'debug']"/> | |||||
</table> | |||||
<p> | |||||
<!-- stacktrace --> | |||||
<xsl:if test="stacktrace"> | |||||
<a name="stacktrace"/> | |||||
<h3>Error details</h3> | |||||
<table width="100%"> | |||||
<tr><td> | |||||
<pre><xsl:value-of select="stacktrace"/></pre> | |||||
</td></tr> | |||||
</table> | |||||
</xsl:if> | |||||
</p> | |||||
</xsl:template> | |||||
<!-- report every message but those with debug priority --> | |||||
<xsl:template match="message[@priority!='debug']"> | |||||
<tr valign="top"> | |||||
<!-- alternated row style --> | |||||
<xsl:attribute name="class"> | |||||
<xsl:if test="position() mod 2 = 1">a</xsl:if> | |||||
<xsl:if test="position() mod 2 = 0">b</xsl:if> | |||||
</xsl:attribute> | |||||
<td nowrap="yes" width="1%"><xsl:value-of select="../../@name"/></td> | |||||
<td nowrap="yes" style="text-align:right" width="1%">[ <xsl:value-of select="../@name"/> ]</td> | |||||
<td class="{@priority}" nowrap="yes"> | |||||
<xsl:value-of select="text()"/> | |||||
</td> | |||||
</tr> | |||||
</xsl:template> | |||||
</xsl:stylesheet> |
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" | |||||
xmlns:lxslt="http://xml.apache.org/xslt" | |||||
xmlns:redirect="org.apache.xalan.lib.Redirect" | |||||
extension-element-prefixes="redirect"> | |||||
<xsl:output method="html" indent="yes" encoding="US-ASCII"/> | |||||
<xsl:decimal-format decimal-separator="." grouping-separator="," /> | |||||
<!-- | |||||
Copyright 2001-2004 The Apache Software Foundation | |||||
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. | |||||
--> | |||||
<!-- | |||||
Stylesheet to transform an XML file generated by the Ant MAudit task into | |||||
a set of JavaDoc-like HTML page to make pages more convenient to be browsed. | |||||
It use the Xalan redirect extension to write to multiple output files. | |||||
@author Stephane Bailliez <a href="mailto:sbailliez@apache.org"/> | |||||
--> | |||||
<xsl:param name="output.dir" select="'.'"/> | |||||
<xsl:template match="classes"> | |||||
<!-- create the index.html --> | |||||
<redirect:write file="{$output.dir}/index.html"> | |||||
<xsl:call-template name="index.html"/> | |||||
</redirect:write> | |||||
<!-- create the stylesheet.css --> | |||||
<redirect:write file="{$output.dir}/stylesheet.css"> | |||||
<xsl:call-template name="stylesheet.css"/> | |||||
</redirect:write> | |||||
<!-- create the overview-packages.html at the root --> | |||||
<redirect:write file="{$output.dir}/overview-summary.html"> | |||||
<xsl:apply-templates select="." mode="overview.packages"/> | |||||
</redirect:write> | |||||
<!-- create the all-packages.html at the root --> | |||||
<redirect:write file="{$output.dir}/overview-frame.html"> | |||||
<xsl:apply-templates select="." mode="all.packages"/> | |||||
</redirect:write> | |||||
<!-- create the all-classes.html at the root --> | |||||
<redirect:write file="{$output.dir}/allclasses-frame.html"> | |||||
<xsl:apply-templates select="." mode="all.classes"/> | |||||
</redirect:write> | |||||
<!-- process all packages --> | |||||
<xsl:for-each select="./class[not(./@package = preceding-sibling::class/@package)]"> | |||||
<xsl:call-template name="package"> | |||||
<xsl:with-param name="name" select="@package"/> | |||||
</xsl:call-template> | |||||
</xsl:for-each> | |||||
</xsl:template> | |||||
<xsl:template name="package"> | |||||
<xsl:param name="name"/> | |||||
<xsl:variable name="package.dir"> | |||||
<xsl:if test="not($name = '')"><xsl:value-of select="translate($name,'.','/')"/></xsl:if> | |||||
<xsl:if test="$name = ''">.</xsl:if> | |||||
</xsl:variable> | |||||
<!--Processing package <xsl:value-of select="@name"/> in <xsl:value-of select="$output.dir"/> --> | |||||
<!-- create a classes-list.html in the package directory --> | |||||
<redirect:write file="{$output.dir}/{$package.dir}/package-frame.html"> | |||||
<xsl:call-template name="classes.list"> | |||||
<xsl:with-param name="name" select="$name"/> | |||||
</xsl:call-template> | |||||
</redirect:write> | |||||
<!-- create a package-summary.html in the package directory --> | |||||
<redirect:write file="{$output.dir}/{$package.dir}/package-summary.html"> | |||||
<xsl:call-template name="package.summary"> | |||||
<xsl:with-param name="name" select="$name"/> | |||||
</xsl:call-template> | |||||
</redirect:write> | |||||
<!-- for each class, creates a @name.html --> | |||||
<!-- @bug there will be a problem with inner classes having the same name, it will be overwritten --> | |||||
<xsl:for-each select="/classes/class[@package = $name]"> | |||||
<redirect:write file="{$output.dir}/{$package.dir}/{@name}.html"> | |||||
<xsl:apply-templates select="." mode="class.details"/> | |||||
</redirect:write> | |||||
</xsl:for-each> | |||||
</xsl:template> | |||||
<xsl:template name="index.html"> | |||||
<HTML> | |||||
<HEAD><TITLE>Audit Results.</TITLE></HEAD> | |||||
<FRAMESET cols="20%,80%"> | |||||
<FRAMESET rows="30%,70%"> | |||||
<FRAME src="overview-frame.html" name="packageListFrame"/> | |||||
<FRAME src="allclasses-frame.html" name="classListFrame"/> | |||||
</FRAMESET> | |||||
<FRAME src="overview-summary.html" name="classFrame"/> | |||||
</FRAMESET> | |||||
<noframes> | |||||
<H2>Frame Alert</H2> | |||||
<P> | |||||
This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client. | |||||
</P> | |||||
</noframes> | |||||
</HTML> | |||||
</xsl:template> | |||||
<!-- this is the stylesheet css to use for nearly everything --> | |||||
<xsl:template name="stylesheet.css"> | |||||
.bannercell { | |||||
border: 0px; | |||||
padding: 0px; | |||||
} | |||||
body { | |||||
margin-left: 10; | |||||
margin-right: 10; | |||||
font:normal 80% arial,helvetica,sanserif; | |||||
background-color:#FFFFFF; | |||||
color:#000000; | |||||
} | |||||
.a td { | |||||
background: #efefef; | |||||
} | |||||
.b td { | |||||
background: #fff; | |||||
} | |||||
th, td { | |||||
text-align: left; | |||||
vertical-align: top; | |||||
} | |||||
th { | |||||
font-weight:bold; | |||||
background: #ccc; | |||||
color: black; | |||||
} | |||||
table, th, td { | |||||
font-size:100%; | |||||
border: none | |||||
} | |||||
table.log tr td, tr th { | |||||
} | |||||
h2 { | |||||
font-weight:bold; | |||||
font-size:140%; | |||||
margin-bottom: 5; | |||||
} | |||||
h3 { | |||||
font-size:100%; | |||||
font-weight:bold; | |||||
background: #525D76; | |||||
color: white; | |||||
text-decoration: none; | |||||
padding: 5px; | |||||
margin-right: 2px; | |||||
margin-left: 2px; | |||||
margin-bottom: 0; | |||||
} | |||||
</xsl:template> | |||||
<!-- print the violations of the class --> | |||||
<xsl:template match="class" mode="class.details"> | |||||
<xsl:variable name="package.name" select="@package"/> | |||||
<HTML> | |||||
<HEAD> | |||||
<xsl:call-template name="create.stylesheet.link"> | |||||
<xsl:with-param name="package.name" select="$package.name"/> | |||||
</xsl:call-template> | |||||
</HEAD> | |||||
<BODY> | |||||
<xsl:call-template name="pageHeader"/> | |||||
<H3>Class <xsl:if test="not($package.name = '')"><xsl:value-of select="$package.name"/>.</xsl:if><xsl:value-of select="@name"/></H3> | |||||
<table class="log" border="0" cellpadding="5" cellspacing="2" width="100%"> | |||||
<xsl:call-template name="class.audit.header"/> | |||||
<xsl:apply-templates select="." mode="print.audit"/> | |||||
</table> | |||||
<H3>Violations</H3> | |||||
<table class="log" border="0" cellpadding="5" cellspacing="2" width="100%"> | |||||
<xsl:call-template name="violation.audit.header"/> | |||||
<xsl:apply-templates select="./violation" mode="print.audit"> | |||||
<xsl:sort data-type="number" select="@line"/> | |||||
</xsl:apply-templates> | |||||
</table> | |||||
<xsl:call-template name="pageFooter"/> | |||||
</BODY> | |||||
</HTML> | |||||
</xsl:template> | |||||
<!-- list of classes in a package --> | |||||
<xsl:template name="classes.list"> | |||||
<xsl:param name="name"/> | |||||
<HTML> | |||||
<HEAD> | |||||
<xsl:call-template name="create.stylesheet.link"> | |||||
<xsl:with-param name="package.name" select="$name"/> | |||||
</xsl:call-template> | |||||
</HEAD> | |||||
<BODY> | |||||
<table width="100%"> | |||||
<tr> | |||||
<td nowrap="nowrap"> | |||||
<H2><a href="package-summary.html" target="classFrame"><xsl:value-of select="$name"/></a></H2> | |||||
</td> | |||||
</tr> | |||||
</table> | |||||
<h2>Classes</h2> | |||||
<TABLE WIDTH="100%"> | |||||
<xsl:apply-templates select="/classes/class[./@package = $name]" mode="classes.list"> | |||||
<xsl:sort select="@name"/> | |||||
</xsl:apply-templates> | |||||
</TABLE> | |||||
</BODY> | |||||
</HTML> | |||||
</xsl:template> | |||||
<!-- the class to list --> | |||||
<xsl:template match="class" mode="classes.list"> | |||||
<tr> | |||||
<td nowrap="nowrap"> | |||||
<!-- @bug naming to fix for inner classes --> | |||||
<a href="{@name}.html" target="classFrame"><xsl:value-of select="@name"/></a> | |||||
</td> | |||||
</tr> | |||||
</xsl:template> | |||||
<!-- | |||||
Creates an all-classes.html file that contains a link to all package-summary.html | |||||
on each class. | |||||
--> | |||||
<xsl:template match="classes" mode="all.classes"> | |||||
<html> | |||||
<head> | |||||
<xsl:call-template name="create.stylesheet.link"> | |||||
<xsl:with-param name="package.name"/> | |||||
</xsl:call-template> | |||||
</head> | |||||
<body> | |||||
<h2>Classes</h2> | |||||
<table width="100%"> | |||||
<xsl:apply-templates select=".//class" mode="all.classes"> | |||||
<xsl:sort select="@name"/> | |||||
</xsl:apply-templates> | |||||
</table> | |||||
</body> | |||||
</html> | |||||
</xsl:template> | |||||
<xsl:template match="class" mode="all.classes"> | |||||
<!-- (ancestor::package)[last()] is buggy in MSXML3 ? --> | |||||
<xsl:variable name="package.name" select="@package"/> | |||||
<tr> | |||||
<td nowrap="nowrap"> | |||||
<a target="classFrame"> | |||||
<xsl:attribute name="href"> | |||||
<xsl:if test="not($package.name='')"> | |||||
<xsl:value-of select="translate($package.name,'.','/')"/><xsl:text>/</xsl:text> | |||||
</xsl:if><xsl:value-of select="@name"/><xsl:text>.html</xsl:text> | |||||
</xsl:attribute> | |||||
<xsl:value-of select="@name"/> | |||||
</a> | |||||
</td> | |||||
</tr> | |||||
</xsl:template> | |||||
<!-- | |||||
Creates an html file that contains a link to all package-summary.html files on | |||||
each package existing on testsuites. | |||||
@bug there will be a problem here, I don't know yet how to handle unnamed package :( | |||||
--> | |||||
<xsl:template match="classes" mode="all.packages"> | |||||
<html> | |||||
<head> | |||||
<xsl:call-template name="create.stylesheet.link"> | |||||
<xsl:with-param name="package.name"/> | |||||
</xsl:call-template> | |||||
</head> | |||||
<body> | |||||
<h2><a href="overview-summary.html" target="classFrame">Home</a></h2> | |||||
<h2>Packages</h2> | |||||
<table width="100%"> | |||||
<xsl:apply-templates select="class[not(./@package = preceding-sibling::class/@package)]" mode="all.packages"> | |||||
<xsl:sort select="@package" order="ascending"/> | |||||
</xsl:apply-templates> | |||||
</table> | |||||
</body> | |||||
</html> | |||||
</xsl:template> | |||||
<xsl:template match="class" mode="all.packages"> | |||||
<tr> | |||||
<td nowrap="nowrap"> | |||||
<a href="{translate(@package,'.','/')}/package-summary.html" target="classFrame"> | |||||
<xsl:value-of select="@package"/> | |||||
</a> | |||||
</td> | |||||
</tr> | |||||
</xsl:template> | |||||
<xsl:template match="classes" mode="overview.packages"> | |||||
<html> | |||||
<head> | |||||
<xsl:call-template name="create.stylesheet.link"> | |||||
<xsl:with-param name="package.name"/> | |||||
</xsl:call-template> | |||||
</head> | |||||
<body onload="open('allclasses-frame.html','classListFrame')"> | |||||
<xsl:call-template name="pageHeader"/> | |||||
<h3>Summary</h3> | |||||
<table class="log" border="0" cellpadding="5" cellspacing="2" width="100%"> | |||||
<tr> | |||||
<th>Audited classes</th> | |||||
<th>Reported classes</th> | |||||
<th>Violations</th> | |||||
</tr> | |||||
<tr class="a"> | |||||
<td><xsl:value-of select="@audited"/></td> | |||||
<td><xsl:value-of select="@reported"/></td> | |||||
<td><xsl:value-of select="@violations"/></td> | |||||
</tr> | |||||
</table> | |||||
<table border="0" width="100%"> | |||||
<tr> | |||||
<td style="text-align: justify;"> | |||||
Note: Rules checked have originated from style guidelines suggested by the language designers, | |||||
experience from the Java development community and insite experience. Violations are generally | |||||
reported with a reference to the <a href="http://java.sun.com/docs/books/jls/second_edition/html/jTOC.doc.html">Java Language Specifications</a> (JLS x.x.x) | |||||
and Metamata Audit rules (x.x). | |||||
Please consult these documents for additional information about violations. | |||||
<p/> | |||||
Rules checked also enforce adherence to <a href="http://java.sun.com/docs/codeconv/html/CodeConvTOC.doc.html">Sun Java coding guidelines</a> in use at Jakarta. | |||||
<p/> | |||||
One should note that these violations do not necessary underline errors but should be used | |||||
as an indication for <i>possible</i> errors. As always, use your best judgment and review | |||||
them carefully, it might save you hours of debugging. | |||||
</td> | |||||
</tr> | |||||
</table> | |||||
<h3>Packages</h3> | |||||
<table class="log" border="0" cellpadding="5" cellspacing="2" width="100%"> | |||||
<xsl:call-template name="class.audit.header"/> | |||||
<xsl:for-each select="class[not(./@package = preceding-sibling::class/@package)]"> | |||||
<xsl:sort select="@package" order="ascending"/> | |||||
<tr> | |||||
<xsl:call-template name="alternate-row"/> | |||||
<td><a href="{translate(@package,'.','/')}/package-summary.html"><xsl:value-of select="@package"/></a></td> | |||||
<td><xsl:value-of select="sum(/classes/class[./@package = current()/@package]/@violations)"/></td> | |||||
</tr> | |||||
</xsl:for-each> | |||||
</table> | |||||
<xsl:call-template name="pageFooter"/> | |||||
</body> | |||||
</html> | |||||
</xsl:template> | |||||
<xsl:template name="package.summary"> | |||||
<xsl:param name="name"/> | |||||
<HTML> | |||||
<HEAD> | |||||
<xsl:call-template name="create.stylesheet.link"> | |||||
<xsl:with-param name="package.name" select="$name"/> | |||||
</xsl:call-template> | |||||
</HEAD> | |||||
<BODY> | |||||
<xsl:attribute name="onload">open('package-frame.html','classListFrame')</xsl:attribute> | |||||
<xsl:call-template name="pageHeader"/> | |||||
<h3>Package <xsl:value-of select="$name"/></h3> | |||||
<!--table border="0" cellpadding="5" cellspacing="2" width="100%"> | |||||
<xsl:call-template name="class.metrics.header"/> | |||||
<xsl:apply-templates select="." mode="print.metrics"/> | |||||
</table--> | |||||
<xsl:if test="count(/classes/class[./@package = $name]) > 0"> | |||||
<H3>Classes</H3> | |||||
<table class="log" border="0" cellpadding="5" cellspacing="2" width="100%"> | |||||
<xsl:call-template name="class.audit.header"/> | |||||
<xsl:apply-templates select="/classes/class[./@package = $name]" mode="print.audit"> | |||||
<xsl:sort select="@name"/> | |||||
</xsl:apply-templates> | |||||
</table> | |||||
</xsl:if> | |||||
<xsl:call-template name="pageFooter"/> | |||||
</BODY> | |||||
</HTML> | |||||
</xsl:template> | |||||
<!-- | |||||
transform string like a.b.c to ../../../ | |||||
@param path the path to transform into a descending directory path | |||||
--> | |||||
<xsl:template name="path"> | |||||
<xsl:param name="path"/> | |||||
<xsl:if test="contains($path,'.')"> | |||||
<xsl:text>../</xsl:text> | |||||
<xsl:call-template name="path"> | |||||
<xsl:with-param name="path"><xsl:value-of select="substring-after($path,'.')"/></xsl:with-param> | |||||
</xsl:call-template> | |||||
</xsl:if> | |||||
<xsl:if test="not(contains($path,'.')) and not($path = '')"> | |||||
<xsl:text>../</xsl:text> | |||||
</xsl:if> | |||||
</xsl:template> | |||||
<!-- create the link to the stylesheet based on the package name --> | |||||
<xsl:template name="create.stylesheet.link"> | |||||
<xsl:param name="package.name"/> | |||||
<LINK REL ="stylesheet" TYPE="text/css" TITLE="Style"><xsl:attribute name="href"><xsl:if test="not($package.name = 'unnamed package')"><xsl:call-template name="path"><xsl:with-param name="path" select="$package.name"/></xsl:call-template></xsl:if>stylesheet.css</xsl:attribute></LINK> | |||||
</xsl:template> | |||||
<!-- Page HEADER --> | |||||
<xsl:template name="pageHeader"> | |||||
<!-- jakarta logo --> | |||||
<table border="0" cellpadding="0" cellspacing="0" width="100%"> | |||||
<tr> | |||||
<td class="bannercell" rowspan="2"> | |||||
<a href="http://jakarta.apache.org/"> | |||||
<img src="http://jakarta.apache.org/images/jakarta-logo.gif" alt="http://jakarta.apache.org" align="left" border="0"/> | |||||
</a> | |||||
</td> | |||||
<td style="text-align:right"><h2>Source Code Audit</h2></td> | |||||
</tr> | |||||
<tr> | |||||
<td style="text-align:right">Designed for use with <a href='http://www.webgain.com/products/quality_analyzer/'>Webgain QA/Metamata Audit</a> and <a href='http://jakarta.apache.org'>Ant</a>.</td> | |||||
</tr> | |||||
</table> | |||||
<hr size="1"/> | |||||
</xsl:template> | |||||
<!-- Page HEADER --> | |||||
<xsl:template name="pageFooter"> | |||||
<table width="100%"> | |||||
<tr><td><hr noshade="yes" size="1"/></td></tr> | |||||
<tr><td> | |||||
<div align="center"><font color="#525D76" size="-1"><em> | |||||
Copyright © 1999-2001, Apache Software Foundation | |||||
</em></font></div> | |||||
</td></tr> | |||||
</table> | |||||
</xsl:template> | |||||
<!-- class header --> | |||||
<xsl:template name="class.audit.header"> | |||||
<tr> | |||||
<th width="80%">Name</th> | |||||
<th>Violations</th> | |||||
</tr> | |||||
</xsl:template> | |||||
<!-- method header --> | |||||
<xsl:template name="violation.audit.header"> | |||||
<tr> | |||||
<th>Line</th> | |||||
<th>Message</th> | |||||
</tr> | |||||
</xsl:template> | |||||
<!-- class information --> | |||||
<xsl:template match="class" mode="print.audit"> | |||||
<tr> | |||||
<xsl:call-template name="alternate-row"/> | |||||
<td><a href="{@name}.html"><xsl:value-of select="@name"/></a></td> | |||||
<td><xsl:apply-templates select="@violations"/></td> | |||||
</tr> | |||||
</xsl:template> | |||||
<xsl:template match="violation" mode="print.audit"> | |||||
<tr> | |||||
<xsl:call-template name="alternate-row"/> | |||||
<td><xsl:value-of select="@line"/></td> | |||||
<td><xsl:apply-templates select="@message"/></td> | |||||
</tr> | |||||
</xsl:template> | |||||
<!-- alternated row style --> | |||||
<xsl:template name="alternate-row"> | |||||
<xsl:attribute name="class"> | |||||
<xsl:if test="position() mod 2 = 1">a</xsl:if> | |||||
<xsl:if test="position() mod 2 = 0">b</xsl:if> | |||||
</xsl:attribute> | |||||
</xsl:template> | |||||
</xsl:stylesheet> | |||||
<!-- | |||||
Copyright 2004 The Apache Software Foundation | |||||
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. | |||||
--> | |||||
<!-- a stylesheet to display changelogs ala netbeans --> | |||||
<xsl:stylesheet | |||||
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" | |||||
version="1.0"> | |||||
<xsl:param name="title"/> | |||||
<xsl:param name="module"/> | |||||
<xsl:param name="cvsweb"/> | |||||
<xsl:output method="html" indent="yes"/> | |||||
<!-- Copy standard document elements. Elements that | |||||
should be ignored must be filtered by apply-templates | |||||
tags. --> | |||||
<xsl:template match="*"> | |||||
<xsl:copy> | |||||
<xsl:copy-of select="attribute::*[. != '']"/> | |||||
<xsl:apply-templates/> | |||||
</xsl:copy> | |||||
</xsl:template> | |||||
<xsl:template match="tagdiff"> | |||||
<HTML> | |||||
<HEAD> | |||||
<TITLE><xsl:value-of select="$title"/></TITLE> | |||||
</HEAD> | |||||
<BODY link="#000000" alink="#000000" vlink="#000000" text="#000000"> | |||||
<style type="text/css"> | |||||
body, p { | |||||
font-family: verdana,arial,helvetica; | |||||
font-size: 80%; | |||||
color:#000000; | |||||
} | |||||
.dateAndAuthor { | |||||
font-family: verdana,arial,helvetica; | |||||
font-size: 80%; | |||||
font-weight: bold; | |||||
text-align:left; | |||||
background:#a6caf0; | |||||
} | |||||
tr, td{ | |||||
font-family: verdana,arial,helvetica; | |||||
font-size: 80%; | |||||
background:#eeeee0; | |||||
} | |||||
</style> | |||||
<h1> | |||||
<a name="top"><xsl:value-of select="$title"/></a> | |||||
</h1> | |||||
Tagdiff between <xsl:value-of select="@startTag"/> <xsl:value-of select="@startDate"/> and | |||||
<xsl:value-of select="@endTag"/> <xsl:value-of select="@endDate"/> | |||||
<p align="right">Designed for use with <a href="http://ant.apache.org/">Ant</a>.</p> | |||||
<hr size="2"/> | |||||
<a name="TOP"/> | |||||
<table width="100%"> | |||||
<tr> | |||||
<td align="right"> | |||||
<a href="#New">New Files</a> | | |||||
<a href="#Modified">Modified Files</a> | | |||||
<a href="#Removed">Removed Files</a> | |||||
</td> | |||||
</tr> | |||||
</table> | |||||
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="3" CELLSPACING="1"> | |||||
<xsl:call-template name="show-entries"> | |||||
<xsl:with-param name="title">New Files</xsl:with-param> | |||||
<xsl:with-param name="anchor">New</xsl:with-param> | |||||
<xsl:with-param name="entries" select=".//entry[file/revision][not(file/prevrevision)]"/> | |||||
</xsl:call-template> | |||||
<xsl:call-template name="show-entries"> | |||||
<xsl:with-param name="title">Modified Files</xsl:with-param> | |||||
<xsl:with-param name="anchor">Modified</xsl:with-param> | |||||
<xsl:with-param name="entries" select=".//entry[file/revision][file/prevrevision]"/> | |||||
</xsl:call-template> | |||||
<xsl:call-template name="show-entries"> | |||||
<xsl:with-param name="title">Removed Files</xsl:with-param> | |||||
<xsl:with-param name="anchor">Removed</xsl:with-param> | |||||
<xsl:with-param name="entries" select=".//entry[not(file/revision)][not(file/prevrevision)]"/> | |||||
</xsl:call-template> | |||||
</TABLE> | |||||
</BODY> | |||||
</HTML> | |||||
</xsl:template> | |||||
<xsl:template name="show-entries"> | |||||
<xsl:param name="title"/> | |||||
<xsl:param name="anchor"/> | |||||
<xsl:param name="entries"/> | |||||
<TR> | |||||
<TD colspan="2" class="dateAndAuthor"> | |||||
<a> | |||||
<xsl:attribute name="name"><xsl:value-of select="$anchor"/></xsl:attribute> | |||||
<xsl:value-of select="$title"/> - <xsl:value-of select="count($entries)"/> entries | |||||
</a> | |||||
<a href="#TOP">(back to top)</a> | |||||
</TD> | |||||
</TR> | |||||
<TR> | |||||
<TD width="20"> | |||||
<xsl:text> </xsl:text> | |||||
</TD> | |||||
<TD> | |||||
<ul> | |||||
<xsl:apply-templates select="$entries"/> | |||||
</ul> | |||||
</TD> | |||||
</TR> | |||||
</xsl:template> | |||||
<xsl:template match="entry"> | |||||
<xsl:apply-templates select="file"/> | |||||
</xsl:template> | |||||
<xsl:template match="date"> | |||||
<i><xsl:value-of select="."/></i> | |||||
</xsl:template> | |||||
<xsl:template match="time"> | |||||
<i><xsl:value-of select="."/></i> | |||||
</xsl:template> | |||||
<xsl:template match="author"> | |||||
<i> | |||||
<a> | |||||
<xsl:attribute name="href">mailto:<xsl:value-of select="."/></xsl:attribute> | |||||
<xsl:value-of select="."/> | |||||
</a> | |||||
</i> | |||||
</xsl:template> | |||||
<xsl:template match="file"> | |||||
<li> | |||||
<a target="_new"> | |||||
<xsl:attribute name="href"><xsl:value-of select="$cvsweb"/><xsl:value-of select="$module" />/<xsl:value-of select="name" /></xsl:attribute> | |||||
<xsl:value-of select="name" /> | |||||
</a> | |||||
<xsl:if test="string-length(prevrevision) > 0 or string-length(revision) > 0"> | |||||
<xsl:text> </xsl:text> | |||||
<a target="_new"> | |||||
<xsl:choose> | |||||
<xsl:when test="string-length(prevrevision) = 0 "> | |||||
<xsl:attribute name="href"><xsl:value-of select="$cvsweb"/><xsl:value-of select="$module" />/<xsl:value-of select="name" />?rev=<xsl:value-of select="revision" />&content-type=text/x-cvsweb-markup</xsl:attribute> | |||||
</xsl:when> | |||||
<xsl:otherwise> | |||||
<xsl:attribute name="href"><xsl:value-of select="$cvsweb"/><xsl:value-of select="$module" />/<xsl:value-of select="name" />?r1=<xsl:value-of select="revision" />&r2=<xsl:value-of select="prevrevision"/>&diff_format=h</xsl:attribute> | |||||
</xsl:otherwise> | |||||
</xsl:choose> (<xsl:value-of select="revision"/>) | |||||
</a> | |||||
</xsl:if> | |||||
</li> | |||||
</xsl:template> | |||||
<!-- Any elements within a msg are processed, | |||||
so that we can preserve HTML tags. --> | |||||
<xsl:template match="msg"> | |||||
<b><xsl:apply-templates/></b> | |||||
</xsl:template> | |||||
</xsl:stylesheet> |
Please refer to the Ant manual under Installing Ant / Library | |||||
Dependencies for a list of the jar requirements for various optional | |||||
tasks and features. | |||||
This directory contains xercesImpl.jar from the 2.6.2 release of | |||||
Apache Xerces. For more information or newer releases see | |||||
<http://xml.apache.org/xerces2-j/>. See the file LICENSE.xerces for | |||||
the terms of distribution. | |||||
It also contains xml-apis.jar from the 2.6.2 release of Apache Xerces. | |||||
For more information or newer releases see | |||||
<http://xml.apache.org/commons/>. See the files LICENSE.dom and | |||||
LICENSE.sax for the terms of distribution. | |||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> | |||||
<HTML> | |||||
<HEAD> | |||||
<META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=windows-1252"> | |||||
<TITLE>Welcome to Apache Ant 1.6</TITLE> | |||||
</HEAD> | |||||
<BODY LANG="en-US" BGCOLOR="#ffffff" DIR="LTR"> | |||||
<H1>Welcome to Apache Ant 1.6</H1> | |||||
<P><BR><BR> | |||||
</P> | |||||
<H2>Your life just got better. | |||||
</H2> | |||||
<P>Not in big ways. Your social life isn't going to be helped, though | |||||
with any luck you may now have more time for one. Nor is it going to | |||||
take less time to write your Java code -although we note that running | |||||
<A HREF="http://xdoclet.sf.net/" TARGET="other">XDoclet</A> under Ant | |||||
lets you avoid writing so much code. Nor is a new release of Ant | |||||
likely to provide a fundamental kick-start to the currently somewhat | |||||
subdued technology and software industries. | |||||
</P> | |||||
<P>No, Ant1.6 will not fundamentally change your life. But if you do | |||||
have to get software out on time -"roughly what you asked for, | |||||
roughly when you asked", then Ant1.6 provides lots of little | |||||
improvements over the existing version. | |||||
</P> | |||||
<P>Before we look at those details, lets look at the world of The | |||||
Automated Build.</P> | |||||
<P>Firstly, we'd like to thank everyone for all those awards that | |||||
have been flowing in. The JavaWorld Editors' Choice Award for "Most | |||||
Useful Java Community-Developed Technology", The Java | |||||
Developer's Journal "Editors Choice Award", and Java Pro | |||||
Reader's Choice award for "Most Valuable Java Deployment | |||||
Technology." Wow. That's a lot of awards. Aardman Animations | |||||
keep all their Wallace and Gromit -related oscars in a cabinet in | |||||
their tea room. If the Apache organization had a tea room, those Ant | |||||
awards would be forcing all the other (excellent) Apache products to | |||||
fight hard for their cabinet space. | |||||
</P> | |||||
<P>All those awards come for a reason: everyone, at least everyone | |||||
working on any project of moderate complexity, needs to control their | |||||
build process. Ant is one of the best ways to do it in Java, and, | |||||
over the past four years, it has moved from a tool used simply to | |||||
build Tomcat cross-platform, to a tool used across many open source | |||||
projects, and now to a tool used by almost all Java projects. Indeed, | |||||
pretty much the only competitor in the Java space is a sibling | |||||
project under the Apache banner, <A HREF="http://maven.apache.org/" TARGET="other">Maven</A>. | |||||
One of the obvious signs of Ant's success is that all the popular | |||||
IDEs, from the Open Source -Emacs JDE, Eclipse, NetBeans and jEdit - | |||||
to the commercial: IntelliJ IDEA, Borland JBuilder- all ship with | |||||
built in Ant support. This lets you use your favourite IDE for what | |||||
it is good at: editing text, creating Java source, refactoring | |||||
existing code, debugging and the like, and you can turn to Ant for | |||||
co-ordinating the build-test-deploy/deliver process. That Ant based | |||||
process can be triggered from keystrokes in the IDE, command line | |||||
invocations for those so inclined, and in automated scheduled builds | |||||
so the machines can keep an eye on the engineers. Another sign is how | |||||
Ant is helping the Java aisle of bookstores fight back against | |||||
attempts by books about Macromedia Flash to take over all the space | |||||
-there are now seven or eight books on the subject, with more on the | |||||
way. Germany and Korea have their own native language books too, | |||||
which shows how global the tool is -in use and in development terms. | |||||
</P> | |||||
<P>The other metric of success is the pre-announcement hints from our | |||||
distant software colleagues in Redmond, Microsoft, of a new build | |||||
tool, "MSBuild", which "might be the single most | |||||
important feature innovation in our pipeline", according to one | |||||
MS developer. That is surely the greatest metric of success: XML | |||||
based build tools are now viewed as so essential to the modern build | |||||
process, that Microsoft has to come up with a competitor to Ant to | |||||
win Java developers over to .NET. Let's hope they discover we like | |||||
ubiquitous JUnit testing too, and refactoring IDEs that create and | |||||
run the tests for us. | |||||
</P> | |||||
<P>Success comes at a price, of course. One price is all those | |||||
support calls. We try and stay on top of the bug reports, but one | |||||
thing we cannot do is fix inconsistencies or things that seem like | |||||
defects if they stand a significant chance of breaking existing | |||||
builds. Its sad, but there are lots of little minor faults with Ant | |||||
that we don't dare fix because, well, things might break. For | |||||
example, why don't if= and unless= clauses also support | |||||
<code>if="${property}"</code> clauses? Alternatively, why isn't it an | |||||
error to use a property that isn't defined. Everyone that has ever | |||||
seen directories called ${build.dir} popping up the source tree will | |||||
understand why that behaviour is not always what you want. Well, we | |||||
could fix these things, but we won't, because backwards compatibility | |||||
is sacred. | |||||
</P> | |||||
<P>That is the other price of success: all those users who have | |||||
existing build files they want to work. And all those IDEs that host | |||||
Ant, and who want an easy upgrade to a new version. This means we | |||||
have lost a lot of the flexibility we used to have in the early days | |||||
of the project, when different versions of Ant could have completely | |||||
different property evaluation algorithms and nobody would bat an | |||||
eyelid. Now, even the most obscure bug fix ends up generating 'you | |||||
broke my build complaints'. | |||||
</P> | |||||
<P>This explains why there will not be the 'incompatible upgrade' | |||||
version of Ant, Ant2.0, that has long been discussed on our web site. | |||||
</P> | |||||
<H2>Where is Ant2.0?</H2> | |||||
<P>For years we have been discussing Ant2.0, the complete rewrite | |||||
version that would be cleaner and faster, and slightly incompatible | |||||
with Ant1.x. It would be the opportunity to take the lessons from the | |||||
1.x line, and support them cleanly. We even got as far as having | |||||
multiple implementations of new Ant engines in the CVS repository, | |||||
especially Mutant and Myrmidion. But we always seemed to have a hard | |||||
time making progress -everyone was too busy using and firefighting | |||||
Ant1.x that nobody got time to work on the 2.x codebase. Which is a | |||||
shame, as all the proposals had interesting ideas.</P> | |||||
<P>After Ant1.5 shipped, the future of Ant effectively resolved into | |||||
one of evolution rather than revolution. There will be no Ant2.0 with | |||||
a complete new engine underneath. There will be no need to run XSL | |||||
transforms over existing build files to move them to the Ant2.0 | |||||
world. Instead Ant1.x is getting better underneath the build file | |||||
-improving its internal design while retaining five-nines backwards | |||||
compatibility with existing build files. | |||||
</P> | |||||
<P>And that is what we have been up to.</P> | |||||
<P>Under the hood, Ant1.6 contains some of the most major reworkings | |||||
of the core Ant system yet seen. We haven't finished yet, and are | |||||
holding back some of the more visible developments so we can see what | |||||
works before their release in a product forces us to maintain them. | |||||
But the underlying parts of Ant are now set up for the next stage in | |||||
development. | |||||
</P> | |||||
<P>Whether we call the next version of Ant 1.7 or 2.0 is something we | |||||
have yet to decide. Maybe we should call it 3.0 just to surprise | |||||
people.</P> | |||||
<H2>What has changed</H2> | |||||
<P>Look at the <A HREF="WHATSNEW" TARGET="other">WHATSNEW</A> | |||||
document to get a full list of changes. Here are some of the core | |||||
conceptual differences.</P> | |||||
<H3>No more Java1.1</H3> | |||||
<P>We got fed up of jumping through reflection hoops to do everything | |||||
from weak references to setting file timestamps. After consultation | |||||
with the Ant user mail list, Ant1.6 only runs on Java1.2 or later. It | |||||
can still cross compile to Java1.1 if that is what you have to do. We | |||||
haven't completely purged all 1.1 references in the docs, or 1.1 | |||||
support from the source, but that will come over time.</P> | |||||
<H3>New classloader use.</H3> | |||||
<P>This is going to make people nervous. If there is one thing Java | |||||
developers have learned over time, only the very naive, the very | |||||
brave, or the very competent do things with classloaders. We will let | |||||
the Ant users decide what category to put us in, but before everyone | |||||
panics, Costin, of Tomcat fame, did a lot of the work here. You don't | |||||
write application servers without understanding classloaders inside | |||||
and out. | |||||
</P> | |||||
<P>The impact of these changes will trickle out over Ant versions. In | |||||
1.6, the key features are | |||||
</P> | |||||
<OL> | |||||
<LI><P>We have got rid of the bit in the batch file/shell script | |||||
that built up a really big classpath environment variable from | |||||
everything in ANT_HOME/lib. Now that is done in a launcher class | |||||
that does the work then calls tools.ant.Main as before.</P> | |||||
<LI><P>You can add new library directories to that classloader with | |||||
the -lib option on the command line. This option is interpreted by | |||||
the launcher class, so will not work with IDEs and other apps that | |||||
use the inner entry point.</P> | |||||
<LI><P>We have broken up optional.jar into many-many jar files, such | |||||
as ant-commons-logging.jar, ant-xalan2.jar, etc etc, and a | |||||
nodeps.jar for optional stuff without any dependencies. This creates | |||||
a lot of jar files.</P> | |||||
<LI><P>You can now <taskdef> existing tasks -like <junit>- | |||||
by including the specific ant jar <I>and</I> the dependent libraries | |||||
(i.e. junit.jar) in the declaration. This solves the problem of | |||||
ANT_HOME/lib needing to contain every jar possibly needed by every | |||||
user/project. You still have to declare the tasks one by one, | |||||
something we will fix in Ant1.7</P> | |||||
</OL> | |||||
<H3>Adapters</H3> | |||||
<P>These are Java classes that <I>adapt</I>> arbitrary Java | |||||
classes into ant tasks or types. There has always been some of this | |||||
stuff inside Ant, but now you can <taskdef> a task by naming | |||||
not just the implementation class, but the adapter class. An adapter | |||||
is essentially a meta task implementation -something that can be used | |||||
to create new tasks dynamically. Which, when you consider that the | |||||
core of Ant is fundamentally an XML to java mapping system and a | |||||
simple workflow engine, may let you do very unusual things with Ant. | |||||
</P> | |||||
<H3>Antlib: Ant libraries</H3> | |||||
<P>This is something we will expand in future. Till now you could | |||||
declare tasks and types with <taskdef> and <typedef>. If | |||||
they were in a jar, you could write a properties file and name the | |||||
resource path of the file in the jar. If you wanted to have both | |||||
tasks and types, you had name a shared classloader. If you wanted to | |||||
add more things -such as conditions or mappers, you were out of luck.</P> | |||||
<P>Antlibs are Ant Libraries, JAR files containing the code to extend | |||||
Ant, and an XML description file to describe how Ant is extended. | |||||
Before anyone panics at 'yet another XML descriptor syntax' to learn: | |||||
you may already know the syntax. We call it "Ant build files". | |||||
Actually it is a subset: it can only contain those task declarations | |||||
that are derived from org.apache.tools.ant.taskdefs.AntlibDefinition. | |||||
That includes <taskdef> and <typedef>, and <I>any other | |||||
task you choose to derive. </I>We are experimenting with scripting | |||||
and some kind of task predefinition declarations in antlibs. With the | |||||
latter, you will be able to write a predefined task -such as a | |||||
<javac> derivative with the compiler options set, and then use | |||||
it any of your build files. This is all too experimental to get into | |||||
Ant1.6 -expect it in the successor. For now, start using antlibs and | |||||
use the <taskdef> task to load them into your projects.</P> | |||||
<H3>XML Namespace aware</H3> | |||||
<P>Ant finally adopts XML namespaces. This is to address build file | |||||
scalability; antlibs can be imported into their own namespaces, and | |||||
so you can avoid namespace clashes with other libraries. If you do | |||||
not know what namespaces are, do not worry -they are not compulsory.</P> | |||||
<h3>All tasks can go in at the toplevel</h3> | |||||
<p> | |||||
Prior to Ant1.6, only three tasks were allowed outside | |||||
targets : <taskdef>,<typedef> and <property>. | |||||
Ant 1.6 puts an end to this distinction; anything can go in at the top | |||||
level. This is partly because there were many more tasks that merited the | |||||
option based on the original rationale of "global initialization tasks": | |||||
<import> and <antlib> were the new additions, but existing | |||||
tasks like <condition>, <available>, <xmlproperties> | |||||
and <loadproperties> had equal rights. | |||||
</p> | |||||
<p> | |||||
Rather that expand the set slightly, now all tasks are allowed outside | |||||
targets. This gives external tasks the same rights as built in code, | |||||
eliminates sporadic bug reports, and annoying error messages. It gives | |||||
users the ability to write build files without any targets at all; the | |||||
top-level declarations are processed in sequence. | |||||
</p> | |||||
On a style note, we strongly advocate using this feature carefully. It | |||||
is best if zero-side-effect, initialization-only tasks get put into the | |||||
top level. Remember also that all top level statements are processed in | |||||
order, before any targets are executed. Even tasks at the end of the | |||||
file will get executed before targets declared above them. | |||||
<H2>New Tasks</H2> | |||||
<P>As usual, the task base is growing and expanding. These days the | |||||
ant core is resisting adopting many of the highly worthy donations of | |||||
tasks from people, because they make maintenance and firefighting | |||||
worse. Our current stance is that except in special circumstances, | |||||
Ant tasks to support third party open source projects, should live | |||||
with the projects themselves. This keeps them in sync with the | |||||
libraries they integrate with, avoids GPL/Apache licensing issues, | |||||
and reduces the Ant team's support workload, letting them focus on | |||||
the core. The antlib mechanism is intended to make it easier for | |||||
people to load tasks from libraries for this very reason.</P> | |||||
<P>That said, we are pleased to introduce many new tasks. Of | |||||
particular interest may be the SSH tasks, which let one deploy code | |||||
to remote servers securely. Now you really can do live updates with | |||||
Ant -if the operations team will let you. The other one that is quite | |||||
interesting is <subant>. This is an extension of the <ant> | |||||
task, to take an entire fileset of directories and run their build | |||||
files. This is incredibly useful in very large projects. This does | |||||
not mean that we are advocating the many-build-file development | |||||
pattern, but in a sufficiently complex project it happens anyway. | |||||
<subant> keeps things manageable.</P> | |||||
<H2>What else</H2> | |||||
<P>So, what is new in Ant1.6? Lots of stuff. You will have to look at | |||||
the <A HREF="WHATSNEW">whatsnew</A> file to see, but here are some | |||||
key points. | |||||
</P> | |||||
<OL> | |||||
<LI><P STYLE="margin-bottom: 0in">Bug fixes. We know, some things | |||||
were broken in 1.5. In ant1.6 we have moved the bugs, fixing the | |||||
ones we could, and no doubt adding different ones. Hopefully the | |||||
total bug count has decreased. | |||||
</P> | |||||
<LI><P STYLE="margin-bottom: 0in">New platforms: Open VMS and HP's | |||||
NonStop Kernel (Tandem) OS. OpenVMS is very different from the rest; | |||||
Read the <exec> task documentation carefully. | |||||
</P> | |||||
<LI><P STYLE="margin-bottom: 0in">Spawning. <java> and <exec> | |||||
started applications can outlive Ant if you set spawn=true. Note | |||||
that the moment you do so, Ant cannot bind to their input or output, | |||||
for obvious reasons. | |||||
</P> | |||||
<LI><P>Synchronisation with Java versions (heh, thought by moving | |||||
javah's entry point that you could hide from us? Think again).</P> | |||||
<LI><P>Synchronization with third party libraries. Of special note: | |||||
we have moved to the Apache commons-net.jar, the successor to | |||||
NetComponents for telnet and FTP as well as Apache BSF, the | |||||
successor to IBM BSF, for script.</P> | |||||
</OL> | |||||
<P>There are many more enhancements, so we hope you will find your | |||||
build projects easier. We have, as usual, jumped through hoops to | |||||
keep existing builds working. If your build file stops working, and | |||||
it isn't something listed on the 'changes that may break your build' | |||||
part of the WHATSNEW file, or something we know about on bugzilla, | |||||
please don't hesitate to file a new bug report, preferably one with a | |||||
replicable test and a patch to fix the problem. Please, please, | |||||
please, do a search on bugzilla first. You do not want to be the | |||||
seventy-third person to complain that Ant1.6 doesn't do something | |||||
that it should. | |||||
</P> | |||||
<P>Thanks, | |||||
</P> | |||||
<P>The Ant development team. | |||||
</P> | |||||
<H3>Acknowledgements</H3> | |||||
<UL> | |||||
<LI><P>Many thanks for Antoine to being the build manager for this | |||||
release! | |||||
</P> | |||||
<LI><P>Thank you to everyone who supplies the components we use in | |||||
Ant, particularly JUnit, commons-logging, log4J, bcel, ORO, Xerces, and Xalan. | |||||
</P> | |||||
<LI><P>Everyone who has supplied bug reports, especially those with | |||||
patches and tests.</P> | |||||
<LI><P>IDE projects who incorporate Ant into their products. Not | |||||
only does this help Ant's success, you find lots of interesting | |||||
integration defects. Special mention to the Eclipse team for fixing | |||||
our memory leaks :)</P> | |||||
</UL> | |||||
<H3>Call to Action</H3> | |||||
<P> | |||||
It is an interesting time for Java. .NET is a serious challenger, and | |||||
will get better. A core strength of Java over .NET is its community. It | |||||
is the community that gave the world leading edge development tools and | |||||
other core components: Ant, JUnit, XDoclet, hsqldb, Hibernate, Struts, | |||||
etc. These things weren't created by JCP committees, or built according | |||||
to the strategic vision of a Fortune 100 company. They were written by | |||||
Java developers, for Java developers, usually to meet their own tactical | |||||
goals. | |||||
</P> | |||||
<P>If Java is to survive -and we think it ought to- everyone who can | |||||
needs to become active members of that community. It could be helping | |||||
with Ant, but it could just as easily be helping with any other open | |||||
source Java project, be hosted by Apache, FSF, Sourceforge or someone | |||||
else, be it server-side, client-side or mobile-side. It could be an | |||||
existing project, or it could be your own idea as to how things could | |||||
be better. The key is: things will only be better if you put in the | |||||
time to make it so. | |||||
</P> | |||||
<H3>Call to Inaction</H3> | |||||
<P>A special message to whoever it is in charge of commands in | |||||
tools.jar: stop moving your entry points! In Ant1.5 we had to deal | |||||
with the 'classic' javac entry point going away in Java1.4.0, | |||||
seemingly coming back later. In Java 1.4.2, the javah entry point | |||||
moved. The traditional command line invocation mechanism has been | |||||
replaced by hosted invocation -Ant, Maven, IDEs, etc, and moving | |||||
entry points around breaks these host applications. Even if we get a | |||||
bug fix out in Ant a few weeks after the Java release, it takes | |||||
months for this to trickle down to end users, especially via IDEs and | |||||
other distributions. For example, Sun's own Java Web Services | |||||
Developer Pack ships with Ant1.5.1, and so cannot run <javah> | |||||
on a 1.4.2 installation. | |||||
</P> | |||||
</BODY> | |||||
</HTML> |