/opennms-base-assembly/src/main/filtered/etc/rws-nbinventoryreport.xsl

https://github.com/ajakubo1/opennms · Extensible Stylesheet Language Transformations · 998 lines · 882 code · 116 blank · 0 comment · 0 complexity · 2dae10e5a0780d70120cce293df26332 MD5 · raw file

  1. <?xml version="1.0" encoding="ISO-8859-1"?>
  2. <xsl:stylesheet version="1.0"
  3. xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  4. <xsl:template match="/">
  5. <html>
  6. <STYLE TYPE="text/css" MEDIA="print">
  7. body {
  8. font-family: "lucida grande", verdana, sans-serif;
  9. font-size: small;
  10. }
  11. #headerinfo, #header .navbar, #header hr {
  12. display: none;
  13. }
  14. #footer, .pager, .key, input, #linkbar {
  15. display: none;
  16. }
  17. #graph-results div form {
  18. display: none;
  19. }
  20. #graph-results {
  21. text-align: center;
  22. }
  23. p, li, td, th { font-size:small; }
  24. table { width:100%; border-collapse:collapse; }
  25. td { border:1px solid black; }
  26. th { text-align:left; }
  27. h2 { font-size: small; }
  28. h3 {
  29. text-align: center;
  30. border:1px solid #366903;
  31. margin-top: 7px;
  32. margin-bottom: 4px;
  33. font-size: 70%;
  34. padding: 6px;
  35. }
  36. a {
  37. color: #366903;
  38. text-decoration: none;
  39. }
  40. select { font-size: small; }
  41. </STYLE>
  42. <STYLE TYPE="text/css" MEDIA="screen">
  43. /*
  44. Modifications:
  45. 2006 Aug 22: A few CSS tweaks - Note that we're overriding font size and
  46. margin within
  47. tables to make things a bit more readable. In general we should be
  48. removing HTML
  49. from event descriptions - need to fix this
  50. 2006 Apr 25: Added table.wdth600
  51. 2005 Oct 01: More CSS work. -- DJ Gregor
  52. 2005 Sep 30: Hacked up heavily to use CSS for layout and markup. Some
  53. code
  54. (particularly #nav bits) provided by Mike Huot. -- DJ Gregor
  55. */
  56. /* height and width stuff, width not really neccesary. */
  57. a {
  58. color: #366903;
  59. text-decoration:none;
  60. }
  61. a:hover {
  62. text-decoration: underline;
  63. }
  64. body {
  65. margin: 0px;
  66. padding: 0px;
  67. background: #FFF;
  68. color: #000;
  69. font-family: "Lucida Grande", Verdana, sans-serif;
  70. }
  71. p, td, th, li {
  72. font-size: 70%;
  73. line-height: 1.25em;
  74. }
  75. li li {
  76. font-size: 100%;
  77. }
  78. td td {
  79. font-size: 100%;
  80. }
  81. td th {
  82. font-size: 100%;
  83. }
  84. tr.even td {
  85. background-color: #fff;
  86. }
  87. tr.odd td {
  88. background-color: #fff;
  89. }
  90. p {
  91. margin: 0 0 7px 0;
  92. }
  93. p.noBottomMargin {
  94. margin-bottom: 0px;
  95. }
  96. form {
  97. margin: 0;
  98. }
  99. input, select {
  100. font-family: "lucida grande", verdana, sans-serif;
  101. font-size: 70%;
  102. }
  103. p input, p select, li input, li select, td input, td select {
  104. font-size: 100%;
  105. }
  106. .right {
  107. text-align: right;
  108. }
  109. hr {
  110. position: relative;
  111. visibility: hidden;
  112. margin: 0;
  113. padding: 0;
  114. height: 0;
  115. clear: both;
  116. }
  117. h2 {
  118. margin: 0;
  119. font-size: 80%;
  120. }
  121. p h2, td h2 {
  122. /* 70% * 114% = 80% */
  123. font-size: 114%;
  124. }
  125. h3 {
  126. background-image: url(../images/headingbg.png);
  127. background-repeat: repeat-x;
  128. background-position: center center;
  129. background-color: #366903;
  130. color: #FFF;
  131. border:1px solid #999;
  132. border-bottom: 0;
  133. margin-bottom: 0;
  134. margin-top: 7px;
  135. font-size: 70%;
  136. padding: 6px;
  137. }
  138. p h3, td h3 {
  139. font-size: 100%;
  140. }
  141. h3 a {
  142. color: #FFF;
  143. }
  144. ul.plain {
  145. list-style-type: none;
  146. margin:0;
  147. padding:0px;
  148. }
  149. ul.plain li {
  150. line-height:1.6em;
  151. }
  152. ul.error {
  153. list-style-type: none;
  154. margin:0;
  155. padding:0px;
  156. }
  157. ul.error li {
  158. line-height:1.6em;
  159. color: #F00;
  160. }
  161. span.error {
  162. color: #F00;
  163. }
  164. div.boxWrapper {
  165. background-color: #FFF;
  166. border: 1px solid #999;
  167. border-top: 0;
  168. padding: 4px 6px;
  169. overflow: auto;
  170. }
  171. div.boxWrapper div.col {
  172. margin: 20px auto;
  173. width: 50%;
  174. }
  175. div.formOnly {
  176. width:250px;
  177. text-align:right;
  178. margin:0 50px;
  179. padding:50px 0;
  180. }
  181. td div.clip {
  182. margin:0;
  183. padding:0;
  184. height:1.5em;
  185. overflow:hidden;
  186. }
  187. /* Layouts */
  188. div.TwoColLeft {
  189. width: 40%;
  190. float: left;
  191. position: relative;
  192. margin-right: 2%;
  193. }
  194. div.TwoColRight {
  195. width: 57%;
  196. float: left;
  197. position: relative;
  198. }
  199. div.TwoColLAdmin {
  200. width: 40%;
  201. float: left;
  202. position: relative;
  203. margin-right: 2%;
  204. }
  205. div.TwoColRAdmin {
  206. width: 58%;
  207. float: left;
  208. position: relative;
  209. }
  210. /* Treeview from UL/LI -- currently only in the scheduled outage page */
  211. .treeview
  212. {
  213. list-style-type: none;
  214. font-size: 120%;
  215. padding-left: 0;
  216. }
  217. .treeview ul li
  218. {
  219. list-style-type: none;
  220. font-size: 100%;
  221. margin-left: -2em;
  222. }
  223. /* Widget Box Body */
  224. .widget-box
  225. {
  226. background: #cccccc;
  227. }
  228. /*
  229. * value in a widget-box that serves as the fieldname for the value to its right
  230. */
  231. .widget-box-fieldname
  232. {
  233. background: #999999;
  234. }
  235. #nav, #nav ul /* all lists */
  236. {
  237. padding: 0;
  238. margin: 0;
  239. list-style: none;
  240. float: left;
  241. width: 11em;
  242. }
  243. #nav li /* all list items */
  244. {
  245. position: relative;
  246. float: left;
  247. line-height: 1.25em;
  248. margin-bottom: -1px;
  249. width: 11em;
  250. }
  251. #nav li ul/* second-level lists */
  252. {
  253. position: absolute;
  254. left: -999em;
  255. margin-left: 11.05em;
  256. margin-top: 0em;
  257. margin-bottom: 3px;
  258. }
  259. #nav li ul ul /* third-and-above-level lists */
  260. {
  261. left: -999em;
  262. }
  263. #nav li a
  264. {
  265. width: 11em;
  266. w\idth: 10em;
  267. display: block;
  268. text-decoration: none;
  269. background-color: white;
  270. border: 1px solid #c9dfc9;
  271. padding: 0 0.5em;
  272. }
  273. #nav li a:hover
  274. {
  275. color: #cccccc;
  276. background-color: black;
  277. }
  278. #nav li:hover ul ul, #nav li:hover ul ul ul, #nav li.sfhover ul ul, #nav li.sfhover ul ul ul
  279. {
  280. left: -999em;
  281. }
  282. #nav li:hover ul, #nav li li:hover ul, #nav li li li:hover ul, #nav li.sfhover ul, #nav li li.sfhover ul, #nav li li li.sfhover ul /* lists nested under hovered list items */
  283. {
  284. left: auto;
  285. }
  286. #content {
  287. position: relative;
  288. background-image: url(../images/mainbg.png);
  289. background-repeat: repeat-x;
  290. background-color: #EEE;
  291. margin: 0;
  292. padding: 15px 20px 30px 20px;
  293. }
  294. .navbar ul
  295. {
  296. list-style: none;
  297. display: inline;
  298. }
  299. .navbar li
  300. {
  301. padding: 0 10px 5px 0;
  302. list-style: none;
  303. display: inline;
  304. color: #999;
  305. }
  306. #linkbar
  307. {
  308. padding: 0 0 1em 0;
  309. }
  310. #linkbar ul
  311. {
  312. list-style: none;
  313. display: inline;
  314. padding: 0 0 0 0;
  315. }
  316. #linkbar li
  317. {
  318. list-style: none;
  319. display: inline;
  320. padding-right: 0.75em;
  321. }
  322. div.standard
  323. {
  324. clear: both;
  325. padding: 0.1em 1.0em 0.75em 0.75em;
  326. }
  327. span.filter {
  328. color: #444;
  329. border: 1px solid #CCC;
  330. background-color: #DDD;
  331. padding: 3px 4px;
  332. }
  333. table.top {
  334. width: auto;
  335. border: none;
  336. background-color: transparent;
  337. vertical-align: top;
  338. }
  339. table.top td {
  340. border: none;
  341. background-color: transparent;
  342. vertical-align: top;
  343. }
  344. table.normal {
  345. width: auto;
  346. }
  347. table.normal td {
  348. border: none;
  349. background-color: transparent;
  350. }
  351. td.normal {
  352. border: none;
  353. background-color: transparent;
  354. }
  355. table {
  356. border-collapse: collapse;
  357. width: 100%;
  358. margin-top: 0;
  359. margin-bottom: 10px;
  360. }
  361. aggr.status.table {
  362. border-collapse: collapse;
  363. width: 33%;
  364. margin-top: 0;
  365. }
  366. .noWrap {
  367. white-space: nowrap;
  368. }
  369. th {
  370. border:1px solid #999;
  371. padding: 4px 5px;
  372. background-color: #444;
  373. font-weight: bold;
  374. text-align: left;
  375. color: #FFF;
  376. }
  377. th a {
  378. text-decoration: underline;
  379. color: #FFF;
  380. }
  381. th a:hover {
  382. color: #CCC;
  383. }
  384. /*Conflicting style*/
  385. td {
  386. border: 1px solid #999;
  387. padding: 4px 5px;
  388. background-color: #FFF;
  389. }
  390. td td, td p {
  391. font-size: 100%;
  392. margin: 0;
  393. padding: 0px;
  394. }
  395. table.wdth600 {
  396. width: 600px;
  397. }
  398. td.standardnavlinks
  399. {
  400. width: 25%;
  401. }
  402. td.standardwarning
  403. {
  404. background-color: #00FFFF;
  405. }
  406. .bold {
  407. font-weight: bold;
  408. }
  409. td.status1 {
  410. background-color: #C7DBAF;
  411. }
  412. #nodelist table
  413. {
  414. width: 100%;
  415. border: 0;
  416. }
  417. td.availunmanaged
  418. {
  419. background-color: #CCC;
  420. font-weight: bold;
  421. text-align: right;
  422. }
  423. td.availgood
  424. {
  425. background-color: green;
  426. font-weight: bold;
  427. text-align: right;
  428. }
  429. td.availwarn
  430. {
  431. background-color: #ffff33;
  432. font-weight: bold;
  433. text-align: right;
  434. }
  435. td.availcrit
  436. {
  437. background-color: #ff3333;
  438. font-weight: bold;
  439. text-align: right;
  440. }
  441. #eventlist
  442. {
  443. clear: both;
  444. padding: 0.1em 1.0em 0.75em 0.75em;
  445. }
  446. #include-eventlist td.sev_indeterminate
  447. {
  448. background-color: #ADD8E6;
  449. padding: 2px;
  450. }
  451. #include-eventlist td.sev_cleared
  452. {
  453. background-color: #FFFFFF;
  454. padding: 2px;
  455. }
  456. #include-eventlist td.sev_normal
  457. {
  458. background-color: #00FF00;
  459. padding: 2px;
  460. }
  461. #include-eventlist td.sev_warning
  462. {
  463. background-color: #00FFFF;
  464. padding: 2px;
  465. }
  466. #include-eventlist td.sev_minor
  467. {
  468. background-color: #FFFF00;
  469. padding: 2px;
  470. }
  471. #include-eventlist td.sev_major
  472. {
  473. background-color: #FFA500;
  474. padding: 2px;
  475. }
  476. #include-eventlist td.sev_critical
  477. {
  478. background-color: #FF0000;
  479. padding: 2px;
  480. }
  481. #include-charts
  482. {
  483. text-align: center;
  484. clear: both;
  485. }
  486. #graph-results
  487. {
  488. text-align: center;
  489. }
  490. /*#graph-results-periods td */
  491. #graph-results .periods td
  492. {
  493. width: 80px;
  494. text-align: center;
  495. }
  496. #header {
  497. position: relative;
  498. margin: 0;
  499. padding: 0;
  500. background-color: #333;
  501. background-image: url(../images/headerbg.png);
  502. background-repeat: repeat-x;
  503. color: #FFF;
  504. }
  505. #header a {
  506. color:#FFF;
  507. }
  508. h1#headerlogo {
  509. position: absolute;
  510. z-index: 2;
  511. margin: 0;
  512. padding: 0;
  513. left: 15px;
  514. top: 13px;
  515. }
  516. #headerinfo {
  517. position: relative;
  518. margin: 0px;
  519. padding: 10px;
  520. text-align: right;
  521. }
  522. div.spacer {
  523. position: relative;
  524. clear: both;
  525. height: 1px;
  526. }
  527. div.center {
  528. text-align: center;
  529. }
  530. img {
  531. border: none;
  532. }
  533. #headerdate {
  534. float: right;
  535. text-align: right;
  536. font-weight: bold;
  537. vertical-align: middle;
  538. }
  539. #headernavbarright {
  540. position: relative;
  541. float: right;
  542. padding: 2px 0px 5px 0px;
  543. }
  544. #contentleft {
  545. width: 48%;
  546. position: relative;
  547. float: left;
  548. }
  549. #contentright {
  550. width: 48%;
  551. float: right;
  552. position: relative;
  553. }
  554. #index-contentleft {
  555. position: relative;
  556. width: 23%;
  557. float: left;
  558. }
  559. #index-contentmiddle {
  560. position: relative;
  561. width: 48%;
  562. float: left;
  563. margin: 0 2%;
  564. }
  565. #index-contentright {
  566. position: relative;
  567. width: 24%;
  568. float: left;
  569. }
  570. p.pager span {
  571. display:block;
  572. float:right;
  573. position:relative;
  574. }
  575. p.key {
  576. clear: both;
  577. text-align: right;
  578. }
  579. p.key img {
  580. position: relative;
  581. float:right;
  582. margin-left:5px;
  583. }
  584. #footer {
  585. clear: both;
  586. text-align: center;
  587. padding: 30px 2px 2px 2px;
  588. background-image: url(../images/footerbg.png);
  589. background-repeat: repeat-x;
  590. }
  591. .status-critical {
  592. background-color: red;
  593. text-align: center
  594. }
  595. .status-warning {
  596. background-color: yellow;
  597. text-align: center
  598. }
  599. .status-normal {
  600. background-color: green;
  601. text-align: center
  602. }
  603. #copyright
  604. {
  605. text-align: center;
  606. padding: 3px;
  607. }
  608. /* Status Colouring */
  609. tr.divider td {
  610. border-top-width: 2px;
  611. }
  612. td.divider {
  613. border-top-width: 2px;
  614. }
  615. td.bright {
  616. padding-left: 20px;
  617. background-position: top left;
  618. background-repeat: repeat-y;
  619. }
  620. tr.Critical td { background-color: #F5CDCD; }
  621. tr.Critical td.divider { border-top: 2px solid #CC0000 !important; }
  622. tr.Critical td.bright { background-image: url(../images/bgCritical.png); }
  623. tr.Major td { background-color: #FFD7CD; }
  624. tr.Major td.divider { border-top: 2px solid #FF3300 !important; }
  625. tr.Major td.bright { background-image: url(../images/bgMajor.png); }
  626. tr.Minor td { background-color: #FFEBCD; }
  627. tr.Minor td.divider { border-top: 2px solid #FF9900 !important; }
  628. tr.Minor td.bright { background-image: url(../images/bgMinor.png); }
  629. tr.Warning td { background-color: #FFF5CD; }
  630. tr.Warning td.divider { border-top: 2px solid #FFCC00 !important; }
  631. tr.Warning td.bright { background-image: url(../images/bgWarning.png); }
  632. tr.Indeterminate td { background-color: #EBEBCD; }
  633. tr.Indeterminate td.divider { border-top: 2px solid #999900 !important; }
  634. tr.Indeterminate td.bright { background-image: url(../images/bgIndeterminate.png); }
  635. tr.Normal td { background-color: #D7E1CD; }
  636. tr.Normal td.divider { border-top: 2px solid #336600 !important; }
  637. tr.Normal td.bright { background-image: url(../images/bgNormal.png); }
  638. tr.Cleared td { background-color: #EEE; }
  639. tr.Cleared td.divider { border-top: 2px solid #999 !important; }
  640. tr.Cleared td.bright { background-image: url(../images/bgCleared.png); }
  641. tr.CellStatus td {
  642. padding-left: 20px;
  643. background-position: top left;
  644. background-repeat: repeat-y;
  645. }
  646. tr.CellStatus td.Critical
  647. {
  648. background-color: #F5CDCD;
  649. border-top: 2px solid #CC0000 !important;
  650. background-image: url(../images/bgCritical.png);
  651. }
  652. tr.CellStatus td.Major
  653. {
  654. background-color: #FFD7CD;
  655. border-top: 2px solid #FF3300 !important;
  656. background-image: url(../images/bgMajor.png);
  657. }
  658. tr.CellStatus td.Minor
  659. {
  660. background-color: #FFEBCD;
  661. border-top: 2px solid #FF9900 !important;
  662. background-image: url(../images/bgMinor.png);
  663. }
  664. tr.CellStatus td.Warning
  665. {
  666. background-color: #FFF5CD;
  667. border-top: 2px solid #FFCC00 !important;
  668. background-image: url(../images/bgWarning.png);
  669. }
  670. tr.CellStatus td.Indeterminate
  671. {
  672. background-color: #EBEBCD;
  673. border-top: 2px solid #999000 !important;
  674. background-image: url(../images/bgIndeterminate.png);
  675. }
  676. tr.CellStatus td.Normal
  677. {
  678. background-color: #D7E1CD;
  679. border-top: 2px solid #336600 !important;
  680. background-image: url(../images/bgNormal.png);
  681. }
  682. tr.CellStatus td.Cleared
  683. {
  684. background-color: #EEE;
  685. border-top: 2px solid #999 !important;
  686. background-image: url(../images/bgCleared.png);
  687. }
  688. tr.CellStatus td.nobright
  689. {
  690. background-image: none;
  691. }
  692. /* Pagination
  693. ---------------------------------------- */
  694. .pagination {
  695. height: 1%; /* IE tweak (holly hack) */
  696. width: auto;
  697. text-align: right;
  698. margin-top: 5px;
  699. margin-bottom: 5px;
  700. font-size: 70%; float: right;
  701. }
  702. .pagination span.page-sep {
  703. display: none;
  704. }
  705. li.pagination {
  706. margin-top: 0;
  707. }
  708. .pagination strong, .pagination b {
  709. font-weight: normal;
  710. }
  711. .pagination span strong {
  712. font-weight: normal;
  713. color: #FFF;
  714. background-color: #366903;
  715. }
  716. .pagination span a, .pagination span a:link, .pagination span a:visited, .pagination span a:active {
  717. font-weight: normal;
  718. text-decoration: none;
  719. color: #366903;
  720. line-height: 1.5em;
  721. }
  722. .pagination span a:hover {
  723. background-color: #366903;
  724. color: #FFF;
  725. text-decoration: none;
  726. }
  727. .pagination img {
  728. vertical-align: middle;
  729. }
  730. </STYLE>
  731. <body>
  732. <h3>OpenNMS/RWS Inventory Report on Request Date <xsl:value-of select="rws-nbinventoryreport/reportDate"/></h3>
  733. <table border="1" width="1000" bgcolor="#0000ff">
  734. <tr>
  735. <th align="left">
  736. Request By User:
  737. <xsl:value-of select="rws-nbinventoryreport/user"/>
  738. on
  739. <xsl:value-of select="rws-nbinventoryreport/reportRequestDate"/>
  740. </th>
  741. </tr>
  742. <tr>
  743. <th align="left">
  744. Inventory Match Regular Expression:
  745. <xsl:value-of select="rws-nbinventoryreport/theField"/></th>
  746. </tr>
  747. <tr>
  748. <th align="left">
  749. Groups in repository:
  750. <xsl:value-of select="rws-nbinventoryreport/totalGroups"/></th>
  751. </tr>
  752. <tr>
  753. <th align="left">
  754. Groups With Matching Inventory :
  755. <xsl:value-of select="rws-nbinventoryreport/groupsMatching"/></th>
  756. </tr>
  757. <tr>
  758. <th align="left">
  759. Groups without Nodes:
  760. <xsl:value-of select="rws-nbinventoryreport/groupWithoutNodes"/></th>
  761. </tr>
  762. <tr>
  763. <th align="left">
  764. Groups with Nodes without Inventory at all:
  765. <xsl:value-of select="rws-nbinventoryreport/groupsWithNodesWithoutinventoryAtAll"/></th>
  766. </tr>
  767. <tr>
  768. <th align="left">
  769. Groups with Nodes without Inventory at Report Date:
  770. <xsl:value-of select="rws-nbinventoryreport/groupsWithNodesWithoutinventoryAtReportDate"/></th>
  771. </tr>
  772. </table>
  773. <p></p>
  774. <xsl:for-each select="rws-nbinventoryreport/groupSet">
  775. <h3> Group: <xsl:value-of select="groupSetName"/></h3>
  776. <table border="1" width="1000" bgcolor="#dddddd">
  777. <tr>
  778. <th align="left">
  779. Total number of Nodes:
  780. <xsl:value-of select="totalNodes"/></th>
  781. </tr>
  782. <tr>
  783. <th align="left">
  784. Nodes With Matching Inventory :
  785. <xsl:value-of select="nodesMatching"/></th>
  786. </tr>
  787. <tr>
  788. <th align="left">
  789. Nodes without Inventory at all:
  790. <xsl:value-of select="nodesWithoutinventoryAtAll"/></th>
  791. </tr>
  792. <tr>
  793. <th align="left">
  794. Nodes without Inventory at request Date:
  795. <xsl:value-of select="nodesWithoutinventoryAtReportDate"/></th>
  796. </tr>
  797. </table>
  798. <xsl:for-each select="nbisinglenode">
  799. <h3>Device Name: <xsl:value-of select="devicename" /> </h3>
  800. <table border="1" width="1000">
  801. <tr>
  802. <th width="20%">Creation Date</th>
  803. <td>
  804. <xsl:value-of select="creationdate" />
  805. </td>
  806. </tr>
  807. <tr>
  808. <th width="20%">Current Status</th>
  809. <td>
  810. <xsl:value-of select="status" />
  811. </td>
  812. </tr>
  813. <th width="20%">Version</th>
  814. <td>
  815. <xsl:value-of select="version" />
  816. </td>
  817. <tr>
  818. </tr>
  819. </table>
  820. <xsl:for-each select="inventoryElement2RP">
  821. <h3> Inventory Element: <xsl:value-of select="name" /></h3>
  822. <table border="1" width="1000">
  823. <xsl:for-each select="tupleRP">
  824. <tr>
  825. <th width="20%">
  826. <xsl:value-of select="name" />
  827. </th>
  828. <td>
  829. <xsl:value-of select="description" />
  830. </td>
  831. </tr>
  832. </xsl:for-each>
  833. <xsl:choose>
  834. <xsl:when test="inventoryMemoryRP/type">
  835. <tr>
  836. <th width="20%">Memory Type</th>
  837. <th>Size</th>
  838. </tr>
  839. <xsl:for-each select="inventoryMemoryRP">
  840. <tr>
  841. <th width="20%">
  842. <xsl:value-of select="type" />
  843. </th>
  844. <td>
  845. <xsl:value-of select="size" />
  846. </td>
  847. </tr>
  848. </xsl:for-each>
  849. </xsl:when>
  850. </xsl:choose>
  851. <xsl:choose>
  852. <xsl:when test="inventorySoftwareRP/type">
  853. <tr>
  854. <th width="20%">Software </th>
  855. <th>Type</th>
  856. </tr>
  857. <xsl:for-each select="inventorySoftwareRP">
  858. <tr>
  859. <th width="20%">
  860. <xsl:value-of select="type" />
  861. </th>
  862. <td>
  863. <xsl:value-of select="version" />
  864. </td>
  865. </tr>
  866. </xsl:for-each>
  867. </xsl:when>
  868. </xsl:choose>
  869. </table>
  870. </xsl:for-each>
  871. </xsl:for-each>
  872. </xsl:for-each>
  873. <p><center>
  874. OpenNMS <a href="help/about.jsp">Copyright</a> 2002-2009
  875. <a href="http://www.opennms.com/">The OpenNMS Group, Inc.</a>
  876. OpenNMS is a registered trademark of
  877. <a href="http://www.opennms.com">The OpenNMS Group, Inc.</a>
  878. </center></p>
  879. </body>
  880. </html>
  881. </xsl:template>
  882. </xsl:stylesheet>