@@ -0,0 +1,2 @@ | |||
For installation instructions see the manual in the docs subdirectory | |||
or online at <http://ant.apache.org/manual/index.html>. |
@@ -0,0 +1,310 @@ | |||
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----- |
@@ -0,0 +1,203 @@ | |||
/* | |||
* 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. | |||
*/ |
@@ -0,0 +1,71 @@ | |||
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 |
@@ -0,0 +1,20 @@ | |||
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 |
@@ -0,0 +1,56 @@ | |||
/* | |||
* 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/>. | |||
*/ |
@@ -0,0 +1,15 @@ | |||
========================================================================= | |||
== 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. |
@@ -0,0 +1,70 @@ | |||
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/> |
@@ -0,0 +1,9 @@ | |||
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. | |||
@@ -0,0 +1,92 @@ | |||
/* | |||
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 |
@@ -0,0 +1,99 @@ | |||
/* | |||
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 |
@@ -0,0 +1,130 @@ | |||
/* | |||
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 |
@@ -0,0 +1,59 @@ | |||
/* | |||
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 |
@@ -0,0 +1,147 @@ | |||
<?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> |
@@ -0,0 +1,293 @@ | |||
<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> |
@@ -0,0 +1,33 @@ | |||
<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> | |||
@@ -0,0 +1,129 @@ | |||
<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> | |||
@@ -0,0 +1,496 @@ | |||
<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> | |||
@@ -0,0 +1,485 @@ | |||
<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> |
@@ -0,0 +1,275 @@ | |||
<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> |
@@ -0,0 +1,716 @@ | |||
<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> |
@@ -0,0 +1,712 @@ | |||
<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> | |||
@@ -0,0 +1,461 @@ | |||
<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> | |||
@@ -0,0 +1,210 @@ | |||
<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> |
@@ -0,0 +1,510 @@ | |||
<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> | |||
@@ -0,0 +1,177 @@ | |||
<!-- | |||
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> |
@@ -0,0 +1,14 @@ | |||
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. | |||
@@ -0,0 +1,352 @@ | |||
<!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> |