summaryrefslogtreecommitdiff
path: root/java/management
diff options
context:
space:
mode:
authorAndrea Gazzarini <agazzarini@apache.org>2009-02-05 07:21:17 +0000
committerAndrea Gazzarini <agazzarini@apache.org>2009-02-05 07:21:17 +0000
commit3352d3d461e4962e746983ab2143538e1fa4a250 (patch)
tree2d550227e5ab176166b88d1f5d99fc292c50ba4b /java/management
parent10dc50e5b4e8c8a01175fc4e37ecf35bca1494c9 (diff)
downloadqpid-python-3352d3d461e4962e746983ab2143538e1fa4a250.tar.gz
QPID-1581 : QMan (Web) admin console
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@741031 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'java/management')
-rw-r--r--java/management/client/console/brokers_management.jsp188
-rw-r--r--java/management/client/console/console.jsp101
-rw-r--r--java/management/client/console/error_page.jsp38
-rw-r--r--java/management/client/console/fragments/header.jsp15
-rw-r--r--java/management/client/console/fragments/menu.jsp10
-rw-r--r--java/management/client/console/images/asf-logo.pngbin0 -> 4735 bytes
-rw-r--r--java/management/client/console/images/menu.gifbin0 -> 1953 bytes
-rw-r--r--java/management/client/console/images/menuleft.gifbin0 -> 640 bytes
-rw-r--r--java/management/client/console/images/menuright.gifbin0 -> 1398 bytes
-rw-r--r--java/management/client/console/images/qpid-logo.pngbin0 -> 39056 bytes
-rw-r--r--java/management/client/console/images/style.css181
-rw-r--r--java/management/client/console/jmx_perspective.jsp136
-rw-r--r--java/management/client/console/logging_configuration.jsp220
-rw-r--r--java/management/client/console/resources_management.jsp84
-rw-r--r--java/management/client/console/tbd.jsp27
-rw-r--r--java/management/client/console/wsdl-viewer.xsl2523
-rw-r--r--java/management/client/console/wsdm_operations_perspective.jsp153
-rw-r--r--java/management/client/console/wsdm_properties_perspective.jsp197
-rw-r--r--java/management/client/console/wsdm_rmd_perspective.jsp82
-rw-r--r--java/management/client/console/wsdm_wsdl_perspective.jsp82
-rw-r--r--java/management/client/web.xml86
21 files changed, 4121 insertions, 2 deletions
diff --git a/java/management/client/console/brokers_management.jsp b/java/management/client/console/brokers_management.jsp
new file mode 100644
index 0000000000..ab9da15d29
--- /dev/null
+++ b/java/management/client/console/brokers_management.jsp
@@ -0,0 +1,188 @@
+<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
+<%@ taglib uri='http://java.sun.com/jsp/jstl/core' prefix='c'%>
+<%@page import="org.apache.qpid.management.web.action.BrokerModel"%>
+<%@page import="java.util.Set"%>
+<%@page import="javax.management.ObjectName"%>
+<%@page import="org.apache.qpid.management.Names"%>
+<%@page import="java.util.List"%>
+<%@page import="java.util.*"%>
+<%@page import="java.net.URI"%>
+<%@page import="javax.xml.namespace.QName"%>
+<%@page import="org.w3c.dom.Element"%>
+<html>
+ <head>
+ <link rel="stylesheet" href="<%=request.getContextPath()%>/images/style.css" type="text/css" />
+ <title>QMan Administration Console</title>
+ </head>
+ <body>
+ <div id="page" align="center">
+ <jsp:include page="/fragments/header.jsp">
+ <jsp:param name="title" value="Brokers Management"/>
+ </jsp:include>
+
+ <div id="content" align="center">
+ <jsp:include page="/fragments/menu.jsp"/>
+
+ <div id="contenttext">
+ <div class="panel" align="justify">
+ <span class="bodytext">
+ <table width="100%">
+ <tr>
+ <td valign="top">
+ <fieldset>
+ <legend>Connected Brokers</legend>
+ <table width="100%" cellspacing="1">
+ <tr>
+ <th nowrap="nowrap" align="center">Host</th>
+ <th nowrap="nowrap" align="center" >Port</th>
+ <th nowrap="nowrap" align="center">Virtual Host</th>
+ <th nowrap="nowrap" align="center">Username</th>
+ <th nowrap="nowrap" align="center">Initial Pool Capacity</th>
+ <th nowrap="nowrap" align="center">Max Pool Capacity</th>
+ <th nowrap="nowrap" align="center">Max Wait Timeout</th>
+ </tr>
+ <c:forEach var="broker" items="${model}" varStatus="rowCounter">
+ <c:choose>
+ <c:when test="${rowCounter.count % 2 == 0}">
+ <c:set var="bgcolor" scope="page" value="EAEAEA"/>
+ </c:when>
+ <c:otherwise>
+ <c:set var="bgcolor" scope="page" value="FFFFFF"/>
+ </c:otherwise>
+ </c:choose>
+ <tr>
+ <td nowrap style="font-size: xx-small; font-weight: bold;" bgcolor="${bgcolor}"><c:out value="${broker.host}"/></td>
+ <td nowrap style="font-size: xx-small; font-weight: bold;" bgcolor="${bgcolor}"><c:out value="${broker.port}"/></td>
+ <td style="font-size: xx-small; font-weight: bold;" bgcolor="${bgcolor}"><c:out value="${broker.virtualHost}"/></td>
+ <td style="font-size: xx-small; font-weight: bold;" bgcolor="${bgcolor}"><c:out value="${broker.username}"/></td>
+ <td style="font-size: xx-small; font-weight: bold;" bgcolor="${bgcolor}"><c:out value="${broker.initialPoolCapacity}"/></td>
+ <td style="font-size: xx-small; font-weight: bold;" bgcolor="${bgcolor}"><c:out value="${broker.maxPoolCapacity}"/></td>
+ <td style="font-size: xx-small; font-weight: bold;" bgcolor="${bgcolor}"><c:out value="${broker.maxWaitTimeout}"/></td>
+ </tr>
+ </c:forEach>
+ </table>
+ </fieldset>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <form name="form" action="<%=request.getContextPath()%>/brokers_management" method="post">
+ <fieldset>
+ <legend>New Broker Connection Data</legend>
+ <table>
+ <tr>
+ <td>
+ Host :
+ </td>
+ <td>
+ <input type="text" name="host"/>
+ </td>
+ <td style="font-size: x-small;">
+ The hostname where the broker is running.
+ </td>
+ </tr>
+ <tr>
+ <td>
+ Port :
+ </td>
+ <td>
+ <input type="text" name="port"/>
+ </td>
+ <td style="font-size: x-small;">
+ The port number where the broker is running.
+ </td>
+ </tr>
+ <tr>
+ <td>
+ Virtual Host :
+ </td>
+ <td>
+ <input type="text" name="port"/>
+ </td>
+ <td style="font-size: x-small;">
+ The virtual host name.
+ </td>
+ </tr>
+ <tr>
+ <td>
+ Username :
+ </td>
+ <td>
+ <input type="text" name="username"/>
+ </td>
+ <td style="font-size: x-small;">
+ The username used for estabilish connection with broker.
+ </td>
+ </tr>
+ <tr>
+ <td>
+ Password :
+ </td>
+ <td>
+ <input type="text" name="password"/>
+ </td>
+ <td style="font-size: x-small;">
+ The password used for estabilish connection with broker.
+ </td>
+ </tr>
+ <tr>
+ <td>
+ Initial Pool Capacity :
+ </td>
+ <td>
+ <input type="text" name="initialCapacity"/>
+ </td>
+ <td style="font-size: x-small;">
+ The number of connections that must be immediately opened.
+ </td>
+ </tr>
+ <tr>
+ <td>
+ Max Pool Capacity :
+ </td>
+ <td>
+ <input type="text" name="maxCapacity"/>
+ </td>
+ <td style="font-size: x-small;">
+ The maximum number of open connections.
+ </td>
+ </tr>
+ <tr>
+ <td>
+ Max Wait Timeout :
+ </td>
+ <td>
+ <input type="text" name="maxWaitTimeout"/>
+ </td>
+ <td style="font-size: x-small;">
+ The maximum amount of time that a client will wait for obtaining a connection.
+ </td>
+ </tr>
+ <tr>
+ <td colspan="3" align="center">
+ <input type="submit" value="Connect"/>
+ </td>
+ </tr>
+ </table>
+ </fieldset>
+ </td>
+ </form>
+ </tr>
+ <tr>
+ <td nowrap style="font-size: x-small; font-weight: bold; color=red;">
+ <ul>
+ <c:forEach var="errorMessage" items="${errors}">
+ <li><span style="font-size: medium; font-weight: bold; color:red;">${errorMessage}</span></li>
+ </c:forEach>
+ </ul>
+ </td>
+ </tr>
+
+ </table>
+ </span>
+ </div>
+ </div>
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/java/management/client/console/console.jsp b/java/management/client/console/console.jsp
new file mode 100644
index 0000000000..cdb53fede9
--- /dev/null
+++ b/java/management/client/console/console.jsp
@@ -0,0 +1,101 @@
+<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
+<%@ taglib uri='http://java.sun.com/jsp/jstl/core' prefix='c'%>
+<html>
+ <head>
+ <link rel="stylesheet" href="<%=request.getContextPath()%>/images/style.css" type="text/css" />
+ <title>QMan Administration Console</title>
+ </head>
+ <body>
+ <div id="page" align="center">
+ <jsp:include page="/fragments/header.jsp">
+ <jsp:param name="title" value="System Overview"/>
+ </jsp:include>
+
+ <div id="content" align="center">
+ <jsp:include page="/fragments/menu.jsp"/>
+
+ <div id="contenttext">
+ <div class="panel" align="justify" style="height:500px; overflow-y:auto;">
+ <span class="bodytext">
+ <table width="100%" border="0">
+ <tr>
+ <td valign="top" nowrap align="center">
+ <fieldset>
+ <legend>QMan</legend>
+ <table cellspacing="2">
+ <tr><td style="color: #006633; font-size: xx-small; font-weight:bold;" align="center">Version</td></tr>
+ <tr><td style="font-size: xx-small;" align="center">${requestScope.model.version}</td></tr>
+ <tr><td><br /></td></tr>
+ <tr><td style="color: #006633; font-size: xx-small; font-weight:bold" align="center">Version Name</td></tr>
+ <tr><td style="font-size: xx-small;" align="center">${requestScope.model.versionName}</td></tr>
+ <tr><td><br /></td></tr>
+ <tr><td style="color: #006633; font-size: xx-small; font-weight:bold" align="center">Start Date</td></tr>
+ <tr>
+ <td style="font-size: xx-small;" align="center">
+ <fmt:formatDate
+ value="${requestScope.model.startDate}"
+ pattern="MM/dd/yyyy hh:mm:ss"/>
+ </td>
+ </tr>
+ <tr><td><br /></td></tr>
+ <tr><td style="color: #006633; font-size: xx-small; font-weight:bold" align="center">Host</td></tr>
+ <tr><td style="font-size: xx-small;" align="center">${requestScope.model.host}</td></tr>
+ <tr><td><br /></td></tr>
+ <tr><td style="color: #006633; font-size: xx-small; font-weight:bold" align="center">Port</td></tr>
+ <tr><td style="font-size: xx-small;" align="center">${requestScope.model.port}</td></tr>
+ </table>
+ </fieldset>
+ <fieldset>
+ <legend>Operating System</legend>
+ <table cellspacing="2">
+ <tr><td style="color: #006633; font-size: xx-small; font-weight:bold;" align="center">Name</td></tr>
+ <tr><td style="font-size: xx-small;" align="center">${requestScope.model.osName}</td></tr>
+ <tr><td><br /></td></tr>
+ <tr><td style="color: #006633; font-size: xx-small; font-weight:bold" align="center">Version</td></tr>
+ <tr><td style="font-size: xx-small;" align="center">${requestScope.model.osVersion}</td></tr>
+ <tr><td><br /></td></tr>
+ <tr><td style="color: #006633; font-size: xx-small; font-weight:bold" align="center">Arch</td></tr>
+ <tr><td style="font-size: xx-small;" align="center">${requestScope.model.archName}</td></tr>
+ <tr><td><br /></td></tr>
+ <tr><td style="color: #006633; font-size: xx-small; font-weight:bold" align="center">Processors</td></tr>
+ <tr><td style="font-size: xx-small;" align="center">${requestScope.model.processors}</td></tr>
+ </table>
+ </fieldset>
+ </td>
+ <td valign="top">
+ <fieldset>
+ <legend>JVM Environment</legend>
+ <table cellspacing="5">
+ <tr>
+ <td valign="top">
+ <h4 style="color: #006633; font-size: xx-small">Boot Classpath :
+ <p/>
+ <c:forEach var="entry" items="${model.bootClasspath}">
+ <c:out value="${entry}"/>;
+ <br/>
+ </c:forEach>
+ </h4>
+ </td>
+ <td valign="top">
+ <h4 style="color: #006633; font-size: xx-small">
+ Input Arguments :
+ <p/>
+ <c:forEach var="argument" items="${model.inputArguments}">
+ <c:out value="${argument}"/>;
+ <br/>
+ </c:forEach>
+ </h4>
+ </td>
+ </tr>
+ </table>
+ </fieldset>
+ </td>
+ </tr>
+ </table>
+ </span>
+ </div>
+ </div>
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/java/management/client/console/error_page.jsp b/java/management/client/console/error_page.jsp
new file mode 100644
index 0000000000..a0fd1e3629
--- /dev/null
+++ b/java/management/client/console/error_page.jsp
@@ -0,0 +1,38 @@
+<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
+<%@ taglib uri='http://java.sun.com/jsp/jstl/core' prefix='c'%>
+<html>
+ <head>
+ <link rel="stylesheet" href="<%=request.getContextPath()%>/images/style.css" type="text/css" />
+ <title>QMan Administration Console</title>
+ </head>
+ <body>
+ <div id="page" align="center">
+ <jsp:include page="/fragments/header.jsp">
+ <jsp:param name="title" value="Error Page"/>
+ </jsp:include>
+
+ <div id="content" align="center">
+ <jsp:include page="/fragments/menu.jsp"/>
+
+ <div id="contenttext">
+ <div class="panel" align="justify" style="height:500px; overflow-y:auto;">
+ <span class="bodytext">
+ <table width="100%">
+ <tr><td nowrap style="font-weight: bold;">
+ We are not able to satify your request because an error has happened.
+ <br>Message : ${errorMessage}
+ </td></tr>
+ <tr><td nowrap style="font-size: xx-small; font-weight: bold;">
+ <c:forEach var="stackTrace" items="${exception.stackTrace}">
+ ${stackTrace}
+ <br>
+ </c:forEach>
+ </td></tr>
+ </table>
+ </span>
+ </div>
+ </div>
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/java/management/client/console/fragments/header.jsp b/java/management/client/console/fragments/header.jsp
new file mode 100644
index 0000000000..c835dc1bef
--- /dev/null
+++ b/java/management/client/console/fragments/header.jsp
@@ -0,0 +1,15 @@
+<div id="header" align="center">
+ <div id="pagetitle">
+ <div id="asf-header" align="left">
+ <table width="100%">
+ <tr>
+ <td align="left"><img src="images/qpid-logo.png" height="100" width="200" /></td>
+ <td align="right"><img src="images/asf-logo.png" height="69" width="225" /></td>
+ </tr>
+ </table>
+ </div>
+ <div id="title" class="titletext" align="right">
+ <span class="bluetitle"><%=request.getParameter("title")%></span>
+ </div>
+ </div>
+</div> \ No newline at end of file
diff --git a/java/management/client/console/fragments/menu.jsp b/java/management/client/console/fragments/menu.jsp
new file mode 100644
index 0000000000..5833f209ad
--- /dev/null
+++ b/java/management/client/console/fragments/menu.jsp
@@ -0,0 +1,10 @@
+<div id="menu" align="center">
+ <div id="linksmenu" align="left">
+ <a href="<%=request.getContextPath()%>/console"> &nbsp; &gt; System Overview</a>
+ <a href="<%=request.getContextPath()%>/brokers_management">&nbsp; &gt; Brokers Management</a>
+ <a href="<%=request.getContextPath()%>/resources_management">&nbsp; &gt; Resources Management</a>
+ <a href="<%=request.getContextPath()%>/tbd.jsp">&nbsp; &gt; Subscriptions Management</a>
+ <a href="<%=request.getContextPath()%>/tbd.jsp">&nbsp; &gt; System Health</a>
+ <a href="<%=request.getContextPath()%>/logging_configuration">&nbsp; &gt; Logging Configuration</a>
+ </div>
+</div>
diff --git a/java/management/client/console/images/asf-logo.png b/java/management/client/console/images/asf-logo.png
new file mode 100644
index 0000000000..d824fab768
--- /dev/null
+++ b/java/management/client/console/images/asf-logo.png
Binary files differ
diff --git a/java/management/client/console/images/menu.gif b/java/management/client/console/images/menu.gif
new file mode 100644
index 0000000000..9946e8e231
--- /dev/null
+++ b/java/management/client/console/images/menu.gif
Binary files differ
diff --git a/java/management/client/console/images/menuleft.gif b/java/management/client/console/images/menuleft.gif
new file mode 100644
index 0000000000..f986ecfc27
--- /dev/null
+++ b/java/management/client/console/images/menuleft.gif
Binary files differ
diff --git a/java/management/client/console/images/menuright.gif b/java/management/client/console/images/menuright.gif
new file mode 100644
index 0000000000..afdd8bd04b
--- /dev/null
+++ b/java/management/client/console/images/menuright.gif
Binary files differ
diff --git a/java/management/client/console/images/qpid-logo.png b/java/management/client/console/images/qpid-logo.png
new file mode 100644
index 0000000000..5f4ccc3081
--- /dev/null
+++ b/java/management/client/console/images/qpid-logo.png
Binary files differ
diff --git a/java/management/client/console/images/style.css b/java/management/client/console/images/style.css
new file mode 100644
index 0000000000..f8dece6f32
--- /dev/null
+++ b/java/management/client/console/images/style.css
@@ -0,0 +1,181 @@
+body
+{
+ margin-left: 0px;
+ margin-top: 0px;
+ margin-right: 0px;
+ margin-bottom: 0px;
+}
+
+tr th {
+ padding: 4px 8px 4px 8px;
+ background: #5E7796;
+ border: 1px solid #CCC;
+ color:#b8ce83;
+ font-size: smaller;
+}
+
+fieldset
+{
+ font-size: xx-small;
+}
+
+#header
+{
+ width:1024px;
+}
+
+#content
+{
+ width:1024px;
+}
+
+#contenttext
+{
+ float:left; width:824px;
+ background-color:#FFFFFF;
+ border-left:solid 1px #999999; border-right:solid 1px #999999;
+ border-bottom:solid 1px #999999; border-top:dotted 1px #CCCCCC;
+ min-height:360px;
+}
+
+#asf-header
+{
+ float:left;
+ width:1007px;
+ height:110px;
+ background-color:#FFFFFF;
+ border-right:solid 1px #999999;
+ border-left:solid 1px #999999;
+}
+
+#pagetitle
+{
+ position:relative;
+ float:left;
+ width:1024px;
+ height:110px;
+ background-color:#FFFFFF;
+}
+
+#title
+{
+ position:absolute;
+ right:20px;
+ bottom:0px;
+ width:1008px;
+}
+
+#menu
+{
+ float:left; width: 190px; margin: 0 0 0 -7px;
+}
+
+.panel{
+ padding:12px;
+ margin: 5px;
+ padding:10px;
+}
+
+.bodytext {
+ font: 0.7em Tahoma, sans-serif;
+ color: #666666;
+}
+
+.titletext {
+ font: 0.7em Tahoma, sans-serif;
+ font-size:36px;
+ font-weight:bold;
+ color: #CCCCCC;
+}
+
+.orangelogotext {
+ font: 0.7em Tahoma, sans-serif;
+ font-size:36px;
+ font-weight:bold;
+ color:#FF9900;
+}
+.orangetitle {
+ font: 0.7em Tahoma, sans-serif;
+ font-size:24px;
+ font-weight:bold;
+ color:#FF9900;
+}
+
+.bluetitle {
+ font: 0.7em Tahoma, sans-serif;
+ font-size:24px;
+ font-weight:bold;
+ color:#369;
+}
+
+#linksmenu a{
+ float:right;
+ width:183px;
+ height:20px;
+ background-color:#5E7796;
+ border-left:solid 1px #FFFFFF;
+ border-bottom:solid 1px #FFFFFF;
+ font: 0.7em Tahoma, sans-serif;
+ font-size: 11px;
+ font-weight:bold;
+ color: #FFFFFF;
+ text-decoration:none;
+ padding-top:5px;
+}
+#linksmenu a:hover
+{
+ background-color:#336;
+}
+
+
+#wsdmmenu
+{
+ float:left;
+ position: relative;
+ width: 600px;
+ font-size:75%;
+ margin: 0 0 0px 5px;
+ line-height:normal;
+}
+
+#wsdmmenu ul
+{
+ margin:0;
+ padding:0px 0px 0 0px;
+ list-style: none;
+}
+
+#wsdmmenu li
+{
+ display:inline;
+ margin:0;
+ padding:0;
+}
+
+#wsdmmenu a {
+ float:left;
+ background: url(menuleft.gif) no-repeat left top;
+ margin:0;
+ padding:0 0 0 4px;
+ text-decoration:none;
+}
+
+#wsdmmenu a span {
+ float:left;
+ display:block;
+ background: url(menuright.gif) no-repeat right top;
+ padding:5px 15px 4px 6px;
+ color:#888;
+}
+
+#wsdmmenu a span {float:none;}
+
+#wsdmmenu a:hover
+{
+ background-position:0% -42px;
+}
+
+#wsdmmenu a:hover span
+{
+ background-position:100% -42px;
+} \ No newline at end of file
diff --git a/java/management/client/console/jmx_perspective.jsp b/java/management/client/console/jmx_perspective.jsp
new file mode 100644
index 0000000000..e1d421e701
--- /dev/null
+++ b/java/management/client/console/jmx_perspective.jsp
@@ -0,0 +1,136 @@
+<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
+<%@ taglib uri='http://java.sun.com/jsp/jstl/core' prefix='c'%>
+<%@page import="org.apache.qpid.management.web.action.BrokerModel"%>
+<%@page import="java.util.Set"%>
+<%@page import="javax.management.ObjectName"%>
+<%@page import="org.apache.qpid.management.Names"%>
+<%@page import="java.util.List"%>
+<html>
+ <head>
+ <link rel="stylesheet" href="<%=request.getContextPath()%>/images/style.css" type="text/css" />
+ <title>QMan Administration Console</title>
+ </head>
+ <body>
+ <div id="page" align="center">
+ <jsp:include page="/fragments/header.jsp">
+ <jsp:param name="title" value="Resource Management - JMX Perspective"/>
+ </jsp:include>
+
+ <div id="content" align="center">
+ <jsp:include page="/fragments/menu.jsp"/>
+
+ <div id="contenttext">
+ <div id="wsdmmenu" align="left">
+ <ul>
+ <li><a href="<%=request.getContextPath()%>/jmx_perspective?resourceId=${resourceId}"><span>JMX</span></a></li>
+ <li><a href="<%=request.getContextPath()%>/wsdm_properties_perspective?resourceId=${resourceId}"><span>WS-DM</span></a></li>
+ </ul>
+ </div>
+ <br />
+ <div class="panel" align="justify">
+ <span class="bodytext">
+ <table width="100%">
+ <tr>
+ <td valign="top" colspan="2">
+ <fieldset>
+ <legend>ObjectName</legend>
+ <ul>
+ <c:forEach var="property" items="${nameAttributes}">
+ <li>
+ <c:out value="${property}"/>
+ </li>
+ </c:forEach>
+ </ul>
+ </fieldset>
+ </td>
+ </tr>
+ <tr>
+ <td valign="top">
+ <fieldset>
+ <legend>Attributes</legend>
+ <table width="100%" cellspacing="1">
+ <tr>
+ <th>Name</th>
+ <th>Type</th>
+ <th>Value</th>
+ <th>Access</th>
+ </tr>
+ <c:forEach var="attribute" items="${metadata.attributes}" varStatus="rowCounter">
+ <c:choose>
+ <c:when test="${rowCounter.count % 2 == 0}">
+ <c:set var="bgcolor" scope="page" value="EAEAEA"/>
+ </c:when>
+ <c:otherwise>
+ <c:set var="bgcolor" scope="page" value="FFFFFF"/>
+ </c:otherwise>
+ </c:choose>
+ <c:choose>
+ <c:when test="${attribute.writable}">
+ <c:set var="access" scope="page" value="RW"/>
+ </c:when>
+ <c:otherwise>
+ <c:set var="access" scope="page" value="RO"/>
+ </c:otherwise>
+ </c:choose>
+ <tr>
+ <td nowrap style="font-size: xx-small; font-weight: bold;" bgcolor="${bgcolor}"><c:out value="${attribute.name}"/></td>
+ <td nowrap style="font-size: xx-small; font-weight: bold;" bgcolor="${bgcolor}"><c:out value="${attribute.type}"/></td>
+ <td style="font-size: xx-small; font-weight: bold;" bgcolor="${bgcolor}"><c:out value="${attributes[attribute.name]}"/></td>
+ <td nowrap style="font-size: xx-small; font-weight: bold;" bgcolor="${bgcolor}"><c:out value="${access}"/></td>
+ </tr>
+ </c:forEach>
+ </table>
+ </fieldset>
+ </td>
+ <td valign="top">
+ <fieldset>
+ <legend>Operations</legend>
+ <table width="100%" cellspacing="0">
+ <tr>
+ <th>Name</th>
+ <th>Arguments</th>
+ </tr>
+
+ <c:forEach var="operation" items="${metadata.operations}" varStatus="rowCounter">
+ <c:choose>
+ <c:when test="${rowCounter.count % 2 == 0}">
+ <c:set var="bgcolor" scope="page" value="EAEAEA"/>
+ </c:when>
+ <c:otherwise>
+ <c:set var="bgcolor" scope="page" value="FFFFFF"/>
+ </c:otherwise>
+ </c:choose>
+ <tr>
+ <td nowrap style="font-size: xx-small; font-weight: bold;" bgcolor="${bgcolor}"><c:out value="${operation.name}"/></td>
+ <td nowrap style="font-size: xx-small; font-weight: bold;" bgcolor="${bgcolor}">
+ <ul>
+ <c:forEach var="argument" items="${operation.signature}">
+ <li>
+ <c:out value="${argument.name}"/> (<c:out value="${argument.type}"/>)
+ </li>
+ </c:forEach>
+ </ul>
+ </td>
+ </tr>
+ </c:forEach>
+ </fieldset>
+ </td>
+ </tr>
+ </table>
+ </span>
+ </div>
+ </div>
+
+
+
+
+
+
+
+
+
+
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/java/management/client/console/logging_configuration.jsp b/java/management/client/console/logging_configuration.jsp
new file mode 100644
index 0000000000..764bc5a85c
--- /dev/null
+++ b/java/management/client/console/logging_configuration.jsp
@@ -0,0 +1,220 @@
+<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
+<%@ taglib uri='http://java.sun.com/jsp/jstl/core' prefix='c'%>
+<html>
+ <head>
+ <link rel="stylesheet" href="<%=request.getContextPath()%>/images/style.css" type="text/css" />
+ <title>QMan Administration Console</title>
+ </head>
+ <body>
+ <div id="page" align="center">
+ <jsp:include page="/fragments/header.jsp">
+ <jsp:param name="title" value="Logging Configuration"/>
+ </jsp:include>
+
+ <div id="content" align="center">
+ <jsp:include page="/fragments/menu.jsp"/>
+
+ <div id="contenttext">
+ <div class="panel" align="justify" style="height:500px; overflow-y:auto;">
+ <span class="bodytext">
+ <form method="post" name="form" action="<%=request.getContextPath() %>/logging_configuration">
+ <table>
+ <tr>
+ <td>
+ <fieldset>
+ <legend>WSDL & RDM Debugger</legend>
+ <table>
+ <tr>
+ <td>
+ <c:choose>
+ <c:when test="${wsdlDebugEnabled}">
+ <c:set var="checked" scope="page" value="checked"/>
+ </c:when>
+ <c:otherwise>
+ <c:set var="checked" scope="page" value=""/>
+ </c:otherwise>
+ </c:choose>
+ <input type="checkbox" ${checked} name="wsdlDebugEnabled" />
+ </td>
+ <td nowrap style="font-size: x-small;">
+ When this flag is checked all WSDL and RMD messages are written on log file (or console depending on your configuration.)
+ </td>
+ </tr>
+ </table>
+ </fieldset>
+ </td>
+ </tr>
+
+ <tr>
+ <td>
+ <fieldset>
+ <legend>SOAP Messages Debugger</legend>
+ <table>
+
+ <tr>
+ <td>
+ <c:choose>
+ <c:when test="${soapDebugEnabled}">
+ <c:set var="checked" scope="page" value="checked"/>
+ </c:when>
+ <c:otherwise>
+ <c:set var="checked" scope="page" value=""/>
+ </c:otherwise>
+ </c:choose>
+ <input ${checked} type="checkbox" name="soapDebugEnabled"/>
+ </td>
+ <td nowrap style="font-size: x-small;">
+ When this flag is checked all SOAP messages (requests & responses) are written on log file (or console depending on your configuration.)
+ </td>
+ </tr>
+ </table>
+ </fieldset>
+ </td>
+ </tr>
+
+ <tr>
+ <td>
+ <fieldset>
+ <legend>QMan Logger Level</legend>
+ <table>
+ <tr>
+ <td>
+ <c:choose>
+ <c:when test="${qmanLogLevel == 'DEBUG'}">
+ <c:set var="qmanDebug" scope="page" value="selected='true'"/>
+ </c:when>
+ <c:otherwise>
+ <c:set var="qmanDebug" scope="page" value=""/>
+ </c:otherwise>
+ </c:choose>
+ <c:choose>
+ <c:when test="${qmanLogLevel == 'INFO'}">
+ <c:set var="qmanInfo" scope="page" value="selected='true'"/>
+ </c:when>
+ <c:otherwise>
+ <c:set var="qmanInfo" scope="page" value=""/>
+ </c:otherwise>
+ </c:choose>
+ <c:choose>
+ <c:when test="${qmanLogLevel == 'WARN'}">
+ <c:set var="qmanWarn" scope="page" value="selected='true'"/>
+ </c:when>
+ <c:otherwise>
+ <c:set var="qmanWarn" scope="page" value=""/>
+ </c:otherwise>
+ </c:choose>
+ <c:choose>
+ <c:when test="${qmanLogLevel == 'ERROR'}">
+ <c:set var="qmanError" scope="page" value="selected='true'"/>
+ </c:when>
+ <c:otherwise>
+ <c:set var="qmanError" scope="page" value=""/>
+ </c:otherwise>
+ </c:choose>
+ <c:choose>
+ <c:when test="${qmanLogLevel == 'FATAL'}">
+ <c:set var="qmanFatal" scope="page" value="selected='true'"/>
+ </c:when>
+ <c:otherwise>
+ <c:set var="qmanFatal" scope="page" value=""/>
+ </c:otherwise>
+ </c:choose>
+
+ <select name="qmanLogLevel">
+ <option ${qmanDebug} value="DEBUG">DEBUG</option>
+ <option ${qmanWarn} value="WARN">WARNING</option>
+ <option ${qmanInfo} value="INFO">INFO</option>
+ <option ${qmanError} value="ERROR">ERROR</option>
+ <option ${qmanFatal} value="FATAL">FATAL</option>
+ </select>
+ </td>
+ <td nowrap style="font-size: x-small;">
+ This is the current priority level set for QMan module (and sub-modules). Note that a WARNING level is recomended in production.
+ </td>
+ </tr>
+ </table>
+ </fieldset>
+ </td>
+ </tr>
+
+ <tr>
+ <td>
+ <fieldset>
+ <legend>Web Server Logger Level</legend>
+ <table>
+
+ <tr>
+ <td>
+ <c:choose>
+ <c:when test="${webServerLogLevel == 'DEBUG'}">
+ <c:set var="webServerDebug" scope="page" value="selected='true'"/>
+ </c:when>
+ <c:otherwise>
+ <c:set var="webServerDebug" scope="page" value=""/>
+ </c:otherwise>
+ </c:choose>
+ <c:choose>
+ <c:when test="${webServerLogLevel == 'INFO'}">
+ <c:set var="webServerInfo" scope="page" value="selected='true'"/>
+ </c:when>
+ <c:otherwise>
+ <c:set var="webServerInfo" scope="page" value=""/>
+ </c:otherwise>
+ </c:choose>
+ <c:choose>
+ <c:when test="${webServerLogLevel == 'WARN'}">
+ <c:set var="webServerWarn" scope="page" value="selected='true'"/>
+ </c:when>
+ <c:otherwise>
+ <c:set var="webServerWarn" scope="page" value=""/>
+ </c:otherwise>
+ </c:choose>
+ <c:choose>
+ <c:when test="${webServerLogLevel == 'ERROR'}">
+ <c:set var="webServerError" scope="page" value="selected='true'"/>
+ </c:when>
+ <c:otherwise>
+ <c:set var="webServerError" scope="page" value=""/>
+ </c:otherwise>
+ </c:choose>
+ <c:choose>
+ <c:when test="${webServerLogLevel == 'FATAL'}">
+ <c:set var="webServerFatal" scope="page" value="selected='true'"/>
+ </c:when>
+ <c:otherwise>
+ <c:set var="webServerFatal" scope="page" value=""/>
+ </c:otherwise>
+ </c:choose>
+
+ <select name="webServerLogLevel">
+ <option ${webServerDebug} value="DEBUG" >DEBUG</option>
+ <option ${webServerWarn} value="WARN">WARNING</option>
+ <option ${webServerInfo} value="INFO">INFO</option>
+ <option ${webServerError} value="ERROR">ERROR</option>
+ <option ${webServerFatak} value="FATAL">FATAL</option>
+ </select>
+ </td>
+ <td nowrap style="font-size: x-small; ">
+ This is the current priority level set for QMan module (and sub-modules). Note that a WARNING level is recomended in production.
+ </td>
+ </tr>
+ </table>
+ </fieldset>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <input type="submit" value="Submit" title="Submit"/>
+ </td>
+ </tr>
+ </table>
+ <br/></br>
+ <span style="fony-size: medium; color: red; font-weight: bold">Note that in general a DEBUG level is not reccommended in production (especially for WSDL and SOAP debugger).</span>
+ </form>
+ </span>
+ </div>
+ </div>
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/java/management/client/console/resources_management.jsp b/java/management/client/console/resources_management.jsp
new file mode 100644
index 0000000000..1541f3a5bc
--- /dev/null
+++ b/java/management/client/console/resources_management.jsp
@@ -0,0 +1,84 @@
+<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
+<%@ taglib uri='http://java.sun.com/jsp/jstl/core' prefix='c'%>
+<%@page import="org.apache.qpid.management.web.action.BrokerModel"%>
+<%@page import="java.util.Set"%>
+<%@page import="javax.management.ObjectName"%>
+<%@page import="org.apache.qpid.management.Names"%>
+<%@page import="java.util.List"%>
+
+<%
+ BrokerModel model = (BrokerModel) request.getAttribute("model");
+%>
+<html>
+ <head>
+ <link rel="stylesheet" href="<%=request.getContextPath()%>/images/style.css" type="text/css" />
+ <title>QMan Administration Console</title>
+ </head>
+ <body>
+ <div id="page" align="center">
+ <jsp:include page="/fragments/header.jsp">
+ <jsp:param name="title" value="Resources Management"/>
+ </jsp:include>
+
+ <div id="content" align="center">
+ <jsp:include page="/fragments/menu.jsp"/>
+
+
+ <div id="contenttext">
+ <div id="wsdmmenu" align="left">
+ <ul>
+ <% if (model != null) {%>
+ <li><a href="#"><span>${model.id}</span></a></li>
+ <%} %>
+ </ul>
+ </div>
+ <br />
+ <div class="panel" align="justify" style="height:500px; overflow-y:auto;">
+ <span class="bodytext">
+ <table width="100%" border="0" cellpadding="1" cellspacing="2">
+<%
+ if (model != null ){
+ Set<String> categoryNames = model.getCategoryNames();
+ for(String categoryName : categoryNames)
+ {
+ List<ObjectName> categoryObjects = model.getCategory(categoryName);
+%>
+ <tr>
+ <td valign="top" nowrap align="left">
+ <fieldset>
+ <legend><%=categoryName%></legend>
+ <h4 style="color: #006633; font-size: xx-small">
+ <ul>
+ <%
+ for (ObjectName objectName : categoryObjects)
+ {%>
+
+ <li>
+ <a href="<%=request.getContextPath()%>/jmx_perspective?resourceId=<%=objectName%>">
+ <%=objectName.getKeyProperty(Names.OBJECT_ID)%>
+ </a>
+ </li>
+ <%
+ }
+ %>
+ </ul>
+ </fieldset>
+ </td>
+ </tr>
+<%
+ }
+ } else {
+%>
+<table><tr>
+<td nowrap style="font-weight: bold;" >Sorry, but it seems that QMan is not connected with any broker...</td>
+</tr>
+</table>
+<%
+ }
+%>
+ </table>
+ </span>
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/java/management/client/console/tbd.jsp b/java/management/client/console/tbd.jsp
new file mode 100644
index 0000000000..486a4cff86
--- /dev/null
+++ b/java/management/client/console/tbd.jsp
@@ -0,0 +1,27 @@
+<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
+<%@ taglib uri='http://java.sun.com/jsp/jstl/core' prefix='c'%>
+<html>
+ <head>
+ <link rel="stylesheet" href="<%=request.getContextPath()%>/images/style.css" type="text/css" />
+ <title>QMan Administration Console</title>
+ </head>
+ <body>
+ <div id="page" align="center">
+ <jsp:include page="/fragments/header.jsp">
+ <jsp:param name="title" value="TBD"/>
+ </jsp:include>
+
+ <div id="content" align="center">
+ <jsp:include page="/fragments/menu.jsp"/>
+
+ <div id="contenttext">
+ <div class="panel" align="justify" style="height:500px; overflow-y:auto;">
+ <span class="bodytext">
+ Sorry, this feature is not yet available!
+ </span>
+ </div>
+ </div>
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/java/management/client/console/wsdl-viewer.xsl b/java/management/client/console/wsdl-viewer.xsl
new file mode 100644
index 0000000000..c3c9767e10
--- /dev/null
+++ b/java/management/client/console/wsdl-viewer.xsl
@@ -0,0 +1,2523 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!--
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+-->
+
+
+<!--
+* ====================================================================
+* wsdl-viewer.xsl
+* Version: 3.1.02
+*
+* URL: http://tomi.vanek.sk/xml/wsdl-viewer.xsl
+*
+* Author: tomi vanek
+* Inspiration: Uche Ogbui - WSDL processing with XSLT
+* http://www-106.ibm.com/developerworks/library/ws-trans/index.html
+* ====================================================================
+-->
+
+
+<!--
+* ====================================================================
+* Description:
+* wsdl-viewer.xsl is a lightweight XSLT 1.0 transformation with minimal
+* usage of any hacks that extend the possibilities of the transformation
+* over the XSLT 1.0 constraints but eventually would harm the engine independance.
+*
+* The transformation has to run even in the browser offered XSLT engines
+* (tested in IE 6 and Firefox) and in ANT "batch" processing.
+* ====================================================================
+* How to add the HTML look to a WSDL:
+* <?xml version="1.0" encoding="utf-8"?>
+* <?xml-stylesheet type="text/xsl" href="wsdl-viewer.xsl"?>
+* <wsdl:definitions ...>
+* ... Here is the service declaration
+* </wsdl:definitions>
+*
+* The web-browsers (in Windows) are not able by default automatically recognize
+* the ".wsdl" file type (suffix). For the type recognition the WSDL file has
+* to be renamed by adding the suffix ".xml" - i.e. "myservice.wsdl.xml".
+* ====================================================================
+* Constraints:
+* 1. Processing of imported files
+* 1.1 Only 1 imported WSDL and 1 imported XSD is processed
+* (well, maybe with a smarter recursive strategy this restriction could be overcome)
+* 1.2 No recursive including is supported (i.e. includes in included XSD are ignored)
+* 2. Namespace support
+* 2.1 Namespaces are not taken in account by processing (references with NS)
+* 3. Source code
+* 3.1 Only the source code allready processed by the XML parser is rendered - implications:
+* == no access to the XML head line (<?xml version="1.0" encoding="utf-8"?>)
+* == "expanded" CDATA blocks (parser processes the CDATA,
+* XSLT does not have access to the original code)
+* == no control over the code page
+* == processing of special characters
+* == namespace nodes are not rendered (just the namespace aliases)
+* ====================================================================
+* Possible improvements:
+* * Functional requirements
+* + SOAP 1.2 binding (http://schemas.xmlsoap.org/wsdl/soap12/WSDL11SOAP12.pdf)
+* + WSDL 2.0 (http://www.w3.org/TR/2006/CR-wsdl20-primer-20060327/)
+* + Recognition of WSDL patterns (interface, binding, service instance, ...)
+* - Creating an xsd-viewer.xsl for XML-Schema file viewing
+* (extracting the functionality from wsdl-viewer into separate XSLT)
+* - Check the full support of the WSDL and XSD going through the standards
+* - Real-world WSDL testing
+* - XSLT 2.0 (http://www-128.ibm.com/developerworks/library/x-xslt20pt5.html) ???
+* ? Adding more derived information
+* * to be defined, what non-trivial information can we read out from the WSDL
+* * XSLT
+* + Modularization
+* - Is it meaningful?
+* - Maybe more distribution alternatives (modular, fat monolithic, thin performance monolithic)?
+* - Distribution build automatization
+* + Dynamic page: JavaSript
+* + Performance
+* - Better code comments / documentation
+* - SOAP client form - for testing the web service (AJAX based)
+* - New XSD parser - clean-up the algorithm
+* - Complete (recursive, multiple) include support
+* ? Namespace-aware version (no string processing hacks ;-)
+* * I think, because of the goal to support as many engines as possible,
+* this requirement is unrealistic. Maybe when XSLT 2.0 will be supported
+* in a huge majority of platforms, we can rethink this point....
+* (problems with different functionality of namespace-uri XPath function by different engines)
+* * Development architecture
+* - Setup of the development infrastructure
+* - Unit testing
+* ? Collaboration platform
+* * Documentation, web
+* - Better user guide
+* ? Forum, Wiki
+* ====================================================================
+-->
+
+
+<!--
+* ====================================================================
+* History:
+* 2005-04-15 - Initial implementation
+* 2005-09-12 - Removed xsl:key to be able to use the James Clark's XT engine on W3C web-site
+* 2006-10-06 - Removed the Oliver Becker's method of conditional selection
+* of a value in a single expression (in Xalan/XSLTC this hack does not work!)
+* 2005-10-07 - Duplicated operations
+* 2006-12-08 - Import element support
+* 2006-12-14 - Displays all fault elements (not just the first one)
+* 2006-12-28 - W3C replaced silently the James Clark's XT engine with Michael Kay's closed-source Saxon!
+* wsdl-viewer.xsl will no longer support XT engine
+* 2007-02-28 - Stack-overflow bug (if the XSD element @name and @type are identic)
+* 2007-03-08 - 3.0.00 - New parsing, new layout
+* 2007-03-28 - 3.0.01 - Fix: New anti-recursion defense (no error message by recursion
+* because of dirty solution of namespace processing)
+* - Added: variables at the top to turn on/off certain details
+* 2007-03-29 - 3.0.02 - Layout clean-up for IE
+* 2007-03-29 - 3.0.03 - Fix: Anti-recursion algorithm
+* 2007-03-30 - 3.0.04 - Added: source code rendering of imported WSDL and XSD
+* 2007-04-15 - 3.0.05 - Fix: Recursive calls in element type rendering
+* - Fix: Rendering of messages (did not render the message types of complex types)
+* - Fix: Links in src. by arrays
+* - Fix: $binding-info
+* 2007-04-15 - 3.0.06 - Added: Extended rendering control ENABLE-xxx parameters
+* - Changed: Anti-recursion algorithm has recursion-depth parameter
+* 2007-07-19 - 3.0.07 - Fix: Rendering of array type in detail
+* 2007-08-01 - 3.0.08 - Fix: xsl:template name="render-type"
+* Fix: typo - "Impotred WSDL" should be "Impotred WSDL"
+* 2007-08-16 - 3.0.09 - Fix: xsl:template name="render-type" - anti recursion
+* 2007-12-05 - 3.1.00 - Modularized
+* 2007-12-23 - 3.1.01 - Terminating message by WS without interface or service definition was removed
+* (seems to be a correct state)
+* 2008-08-20 - 3.1.02 - Woden-214: Anti-recursion bypassed in xsd:choice element
+* ====================================================================
+-->
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns="http://www.w3.org/1999/xhtml"
+ xmlns:ws="http://schemas.xmlsoap.org/wsdl/"
+ xmlns:ws2="http://www.w3.org/ns/wsdl"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
+ xmlns:local="http://tomi.vanek.sk/xml/wsdl-viewer"
+ version="1.0"
+ exclude-result-prefixes="ws ws2 xsd soap local">
+
+ <xsl:output method="xml" version="1.0" encoding="utf-8" indent="no"
+ omit-xml-declaration="no"
+ media-type="text/html"
+ doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
+ doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"/>
+
+ <xsl:strip-space elements="*"/>
+
+ <xsl:param name="wsdl-viewer.version">3.1.01</xsl:param>
+
+
+
+ <!--
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+ Begin of included transformation: wsdl-viewer-global.xsl
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+-->
+<xsl:param name="ENABLE-SERVICE-PARAGRAPH" select="true()"/>
+ <xsl:param name="ENABLE-OPERATIONS-PARAGRAPH" select="true()"/>
+ <xsl:param name="ENABLE-SRC-CODE-PARAGRAPH" select="true()"/>
+ <xsl:param name="ENABLE-ABOUT-PARAGRAPH" select="false()"/>
+ <xsl:param name="ENABLE-OPERATIONS-TYPE" select="true()"/>
+ <xsl:param name="ENABLE-LINK" select="true()"/>
+ <xsl:param name="ENABLE-INOUTFAULT" select="true()"/>
+ <xsl:param name="ENABLE-STYLEOPTYPEPATH" select="true()"/>
+ <xsl:param name="ENABLE-DESCRIPTION" select="true()"/>
+ <xsl:param name="ENABLE-PORTTYPE-NAME" select="true()"/>
+ <xsl:param name="ENABLE-ANTIRECURSION-PROTECTION" select="true()"/>
+ <xsl:param name="ANTIRECURSION-DEPTH">3</xsl:param>
+ <xsl:variable name="GENERATED-BY">Generated by wsdl-viewer.xsl</xsl:variable>
+ <xsl:variable name="PORT-TYPE-TEXT">Port type</xsl:variable>
+ <xsl:variable name="IFACE-TEXT">Interface</xsl:variable>
+ <xsl:variable name="SOURCE-CODE-TEXT">Source code</xsl:variable>
+ <xsl:variable name="RECURSIVE"> ... is recursive</xsl:variable>
+ <xsl:variable name="SRC-PREFIX">src.</xsl:variable>
+ <xsl:variable name="SRC-FILE-PREFIX">src.file.</xsl:variable>
+ <xsl:variable name="OPERATIONS-PREFIX">op.</xsl:variable>
+ <xsl:variable name="PORT-PREFIX">port.</xsl:variable>
+ <xsl:variable name="IFACE-PREFIX">iface.</xsl:variable>
+ <xsl:variable name="global.wsdl-name"
+ select="/*/*[(local-name() = 'import' or local-name() = 'include') and @location][1]/@location"/>
+ <xsl:variable name="consolidated-wsdl" select="/* | document($global.wsdl-name)/*"/>
+ <xsl:variable name="global.xsd-name"
+ select="($consolidated-wsdl/*[local-name() = 'types']//xsd:import[@schemaLocation] | $consolidated-wsdl/*[local-name() = 'types']//xsd:include[@schemaLocation])[1]/@schemaLocation"/>
+ <xsl:variable name="consolidated-xsd"
+ select="(document($global.xsd-name)/xsd:schema/xsd:*|/*/*[local-name() = 'types']/xsd:schema/xsd:*)[local-name() = 'complexType' or local-name() = 'element' or local-name() = 'simpleType']"/>
+ <xsl:variable name="global.service-name"
+ select="concat($consolidated-wsdl/ws:service/@name, $consolidated-wsdl/ws2:service/@name)"/>
+ <xsl:variable name="global.binding-name"
+ select="concat($consolidated-wsdl/ws:binding/@name, $consolidated-wsdl/ws2:binding/@name)"/>
+ <xsl:variable name="html-title">
+ <xsl:apply-templates select="/*" mode="html-title.render"/>
+ </xsl:variable>
+
+ <!--
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+ End of included transformation: wsdl-viewer-global.xsl
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+-->
+
+
+
+<!--
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+ Begin of included transformation: wsdl-viewer-css.xsl
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+-->
+<xsl:variable name="css">
+
+/**
+ wsdl-viewer.css
+*/
+
+/**
+=========================================
+ Body
+=========================================
+
+html {
+ background-color: #FFFFFF;
+}
+
+body {
+ margin: 0;
+ padding: 0;
+ height: auto;
+ color: white;
+ background-color: #FFFFFF;
+ font: normal Tahoma;
+}
+*/
+#outer_box {
+ padding: 3px 3px 3px 194px;
+ width: 400px;
+}
+
+#inner_box {
+
+ background-color: white;
+ color: black;
+ font: normal Tahoma;
+ font-size : x-small;
+}
+
+/**
+=========================================
+ Fixed box with links
+=========================================
+*/
+#outer_links {
+ position: fixed;
+ left: 0px;
+ top: 0px;
+ margin: 3px;
+ padding: 1px;
+ z-index: 200;
+ width: 180px;
+ height: auto;
+ background-color: gainsboro;
+ padding-top: 2px;
+ border: 1px solid navy;
+}
+
+* html #outer_links /* Override above rule for IE */
+{
+ position: absolute;
+ width: 188px;
+ top: expression(offsetParent.scrollTop + 0);
+}
+
+#links {
+ margin: 1px;
+ padding: 3px;
+ background-color: white;
+ height: 350px;
+ overflow: auto;
+ border: 1px solid navy;
+}
+
+#links ul {
+ left: -999em;
+ list-style: none;
+ margin: 0;
+ padding: 0;
+ z-index: 100;
+}
+
+#links li {
+ margin: 0;
+ padding: 2px 4px;
+ width: auto;
+ z-index: 100;
+}
+
+#links ul li {
+ margin: 0;
+ padding: 2px 4px;
+ width: auto;
+ z-index: 100;
+}
+
+#links a {
+ display: block;
+ padding: 0 2px;
+ color: blue;
+ width: auto;
+ border: 1px solid white;
+ text-decoration: none;
+ white-space: nowrap;
+}
+
+#links a:hover {
+ color: white;
+ background-color: gray;
+ border: 1px solid gray;
+}
+
+
+/**
+=========================================
+ Navigation tabs
+=========================================
+*/
+
+#outer_nav {
+ background-color: yellow;
+ padding: 0;
+ margin: 0;
+}
+
+#nav {
+ height: 100%;
+ width: auto;
+ margin: 0;
+ padding: 0;
+ background-color: gainsboro;
+ border-top: 1px solid gray;
+ border-bottom: 3px solid gray;
+ z-index: 100;
+ font: bold Tahoma;
+ letter-spacing: 2px;
+}
+
+#nav ul {
+ background-color: gainsboro;
+ height: auto;
+ width: auto;
+ list-style: none;
+ margin: 0;
+ padding: 0;
+ z-index: 100;
+
+ border: 1px solid silver;
+ border-top-color: black;
+ border-width: 1px 0 9px;
+}
+
+#nav li {
+ display: inline;
+ padding: 0;
+ margin: 0;
+}
+
+#nav a {
+ position: relative;
+ top: 3px;
+ float:left;
+ width:auto;
+ padding: 8px 10px 6px 10px;
+ margin: 3px 3px 0;
+ border: 1px solid gray;
+ border-width: 2px 2px 3px 2px;
+
+ color: black;
+ background-color: silver;
+ text-decoration:none;
+ text-transform: uppercase;
+}
+
+#nav a:hover {
+ margin-top: 1px;
+ padding-top: 9px;
+ padding-bottom: 7px;
+ color: blue;
+ background-color: gainsboro;
+}
+
+#nav a.current:link,
+#nav a.current:visited,
+#nav a.current:hover {
+ background: white;
+ color: black;
+ text-shadow:none;
+ margin-top: 0;
+ padding-top: 11px;
+ padding-bottom: 9px;
+ border-bottom-width: 0;
+ border-color: #A5CE77;
+}
+
+#nav a:active {
+ background-color: silver;
+ color: white;
+}
+
+
+
+/**
+=========================================
+ Content
+=========================================
+*/
+#header {
+ margin: 0;
+ padding: .5em 4em;
+ color: white;
+ background-color: #369;
+}
+
+#content {
+ margin: 0;
+ padding: 0 2em .5em;
+}
+
+#footer {
+ clear: both;
+ margin: 0;
+ padding: .5em 2em;
+ color: gray;
+ background-color: gainsboro;
+ font-size: 80%;
+ border-top: 1px dotted gray;
+ text-align: right
+}
+
+.single_column {
+ padding: 10px 10px 10px 10px;
+ /*margin: 0px 33% 0px 0px; */
+ margin: 3px 0;
+}
+
+#flexi_column {
+ padding: 10px 10px 10px 10px;
+ /*margin: 0px 33% 0px 0px; */
+ margin: 0px 212px 0px 0px;
+}
+
+#fix_column {
+ float: right;
+ padding: 10px 10px 10px 10px;
+ margin: 0px;
+ width: 205px;
+ /*width: 30%; */
+ voice-family: "\"}\"";
+ voice-family:inherit;
+ /* width: 30%; */
+ width: 205px;
+}
+html&gt;body #rightColumn {
+ width: 205px; /* ie5win fudge ends */
+} /* Opera5.02 shows a 2px gap between. N6.01Win sometimes does.
+ Depends on amount of fill and window size and wind direction. */
+
+/**
+=========================================
+ Label / value
+=========================================
+*/
+
+.page {
+ border-bottom: 3px dotted navy;
+ margin: 0;
+ padding: 10px 0 20px 0;
+}
+
+.value, .label {
+ margin: 0;
+ padding: 0;
+}
+
+.label {
+ float: left;
+ width: 140px;
+ text-align: right;
+ font-weight: bold;
+ padding-bottom: .5em;
+ margin-right: 0;
+ color: darkblue;
+}
+
+.value {
+ margin-left: 147px;
+ color: darkblue;
+ padding-bottom: .5em;
+}
+
+strong, strong a {
+ color: darkblue;
+ font-weight: bold;
+ letter-spacing: 1px;
+ margin-left: 2px;
+}
+
+
+/**
+=========================================
+ Links
+=========================================
+*/
+
+a.local:link,
+a.local:visited {
+ color: blue;
+ margin-left: 10px;
+ border-bottom: 1px dotted blue;
+ text-decoration: none;
+ font-style: italic;
+}
+
+a.local:hover {
+ background-color: gainsboro;
+ color: darkblue;
+ padding-bottom: 1px;
+ border-bottom: 1px solid darkblue;
+}
+
+a.target:link,
+a.target:visited,
+a.target:hover
+{
+ text-decoration: none;
+ background-color: transparent;
+ border-bottom-type: none;
+}
+
+/**
+=========================================
+ Box, Shadow
+=========================================
+*/
+
+.box {
+ padding: 6px;
+ color: black;
+ background-color: gainsboro;
+ border: 1px solid gray;
+}
+
+.shadow {
+ background: silver;
+ position: relative;
+ top: 5px;
+ left: 4px;
+}
+
+.shadow div {
+ position: relative;
+ top: -5px;
+ left: -4px;
+}
+
+/**
+=========================================
+ Floatcontainer
+=========================================
+*/
+
+.spacer
+{
+ display: block;
+ height: 0;
+ font-size: 0;
+ line-height: 0;
+ margin: 0;
+ padding: 0;
+ border-style: none;
+ clear: both;
+ visibility:hidden;
+}
+
+.floatcontainer:after {
+ content: ".";
+ display: block;
+ height: 0;
+ font-size:0;
+ clear: both;
+ visibility:hidden;
+}
+.floatcontainer{
+ display: inline-table;
+} /* Mark Hadley's fix for IE Mac */ /* Hides from IE Mac \*/ *
+html .floatcontainer {
+ height: 1%;
+}
+.floatcontainer{
+ display:block;
+} /* End Hack
+*/
+
+/**
+=========================================
+ Source code
+=========================================
+*/
+
+.indent {
+ margin: 2px 0 2px 20px;
+}
+
+.xml-element, .xml-proc, .xml-comment {
+ margin: 2px 0;
+ padding: 2px 0 2px 0;
+}
+
+.xml-element {
+ word-spacing: 3px;
+ color: red;
+ font-weight: bold;
+ font-style:normal;
+ border-left: 1px dotted silver;
+}
+
+.xml-element div {
+ margin: 2px 0 2px 40px;
+}
+
+.xml-att {
+ color: blue;
+ font-weight: bold;
+}
+
+.xml-att-val {
+ color: blue;
+ font-weight: normal;
+}
+
+.xml-proc {
+ color: darkred;
+ font-weight: normal;
+ font-style: italic;
+}
+
+.xml-comment {
+ color: green;
+ font-weight: normal;
+ font-style: italic;
+}
+
+.xml-text {
+ color: green;
+ font-weight: normal;
+ font-style: normal;
+}
+
+
+/**
+=========================================
+ Heading
+=========================================
+*/
+h1, h2, h3 {
+ margin: 10px 10px 2px;
+ font-family: Tahoma;
+ font-weight: normal;
+ }
+
+h1 {
+ font-weight: bold;
+ letter-spacing: 3px;
+ font-size: 220%;
+ line-height: 100%;
+}
+
+h2 {
+ font-weight: bold;
+ font-size: 175%;
+ line-height: 200%;
+}
+
+h3 {
+ font-size: 150%;
+ line-height: 150%;
+ font-style: italic;
+}
+
+/**
+=========================================
+ Content formatting
+=========================================
+*/
+.port {
+ margin-bottom: 10px;
+ padding-bottom: 10px;
+ border-bottom: 1px dashed gray;
+}
+
+.operation {
+ margin-bottom: 20px;
+ padding-bottom: 10px;
+ border-bottom: 1px dashed gray;
+}
+
+
+/* --------------------------------------------------------
+ Printing
+*/
+
+/*
+@media print
+{
+ #outer_links, #outer_nav {
+ display: none;
+ }
+*/
+
+ #outer_box {
+ padding: 3px;
+ }
+/* END print media definition
+}
+*/
+
+</xsl:variable>
+
+ <!--
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+ End of included transformation: wsdl-viewer-css.xsl
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+-->
+
+
+
+
+<!--
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+ Begin of included transformation: wsdl-viewer-util.xsl
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+-->
+<xsl:template match="@*" mode="qname.normalized">
+ <xsl:variable name="local" select="substring-after(., ':')"/>
+ <xsl:choose>
+ <xsl:when test="$local">
+ <xsl:value-of select="$local"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="."/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+ <xsl:template match="ws:definitions | ws2:description" mode="html-title.render">
+ <xsl:choose>
+ <xsl:when test="$global.service-name">
+ <xsl:value-of select="concat('Service : ', $global.service-name)"/>
+ </xsl:when>
+ <xsl:when test="$global.binding-name">
+ <xsl:value-of select="concat('WS Binding: ', $global.binding-name)"/>
+ </xsl:when>
+ <xsl:when test="ws2:interface/@name">
+ <xsl:value-of select="concat('WS Interface: ', ws2:interface/@name)"/>
+ </xsl:when>
+ <xsl:otherwise>Web Service Fragment</xsl:otherwise>
+ <!-- <xsl:otherwise><xsl:message terminate="yes">Syntax error in element <xsl:call-template name="src.syntax-error.path"/></xsl:message>
+ </xsl:otherwise>
+-->
+ </xsl:choose>
+ </xsl:template>
+ <xsl:template name="src.syntax-error">
+ <xsl:message terminate="yes">Syntax error by WSDL source rendering in element <xsl:call-template name="src.syntax-error.path"/>
+ </xsl:message>
+ </xsl:template>
+ <xsl:template name="src.syntax-error.path">
+ <xsl:for-each select="parent::*">
+ <xsl:call-template name="src.syntax-error.path"/>
+ </xsl:for-each>
+ <xsl:value-of select="concat('/', name(), '[', position(), ']')"/>
+ </xsl:template>
+ <xsl:template match="*[local-name(.) = 'documentation']" mode="documentation.render">
+ <xsl:if test="$ENABLE-DESCRIPTION and string-length(.) &gt; 0">
+ <div class="label">Description:</div>
+ <div class="value">
+ <xsl:value-of select="." disable-output-escaping="yes"/>
+ </div>
+ </xsl:if>
+ </xsl:template>
+ <xsl:template name="render.source-code-link">
+ <xsl:if test="$ENABLE-SRC-CODE-PARAGRAPH and $ENABLE-LINK">
+ <a class="local" href="{concat('#', $SRC-PREFIX, generate-id(.))}">
+ <xsl:value-of select="$SOURCE-CODE-TEXT"/>
+ </a>
+ </xsl:if>
+ </xsl:template>
+ <xsl:template name="about.detail">
+ <!-- <xsl:param name="version"/>
+ <div>
+ This page has been generated by <big>wsdl-viewer.xsl</big>, version <xsl:value-of select="$version"/>
+ <br/>
+ Author: <a href="http://tomi.vanek.sk/">tomi vanek</a>
+ <br/>
+ Download at <a href="http://tomi.vanek.sk/xml/wsdl-viewer.xsl">http://tomi.vanek.sk/xml/wsdl-viewer.xsl</a>.<br/>
+ <br/>
+ The transformation was inspired by the article<br/>
+ Uche Ogbuji: <a href="http://www-106.ibm.com/developerworks/library/ws-trans/index.html">WSDL processing with XSLT</a>
+ <br/>
+ </div>
+ </xsl:template>
+ <xsl:template name="processor-info.render">
+ <xsl:text>
+</xsl:text>
+ <xsl:text>This document was generated by </xsl:text>
+ <a href="{system-property('xsl:vendor-url')}">
+ <xsl:value-of select="system-property('xsl:vendor')"/>
+ </a>
+ <xsl:text> XSLT engine.
+
+</xsl:text>
+
+ <xsl:text>The engine processed the WSDL in XSLT </xsl:text>
+ <xsl:value-of select="format-number(system-property('xsl:version'), '#.0')"/>
+ <xsl:text> compliant mode.
+</xsl:text>
+ -->
+ </xsl:template>
+
+ <!--
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+ End of included transformation: wsdl-viewer-util.xsl
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+-->
+
+
+
+<!--
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+ Begin of included transformation: wsdl-viewer-service.xsl
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+-->
+<xsl:template match="ws:service|ws2:service" mode="service-start">
+ <div class="indent">
+ <div class="label">Target Namespace:</div>
+ <div class="value">
+ <xsl:value-of select="$consolidated-wsdl/@targetNamespace"/>
+ </div>
+ <xsl:apply-templates select="*[local-name(.) = 'documentation']" mode="documentation.render"/>
+ <xsl:apply-templates select="ws:port|ws2:endpoint" mode="service"/>
+ </div>
+ </xsl:template>
+ <xsl:template match="ws2:endpoint" mode="service">
+ <xsl:variable name="binding-name">
+ <xsl:apply-templates select="@binding" mode="qname.normalized"/>
+ </xsl:variable>
+ <xsl:variable name="binding" select="$consolidated-wsdl/ws2:binding[@name = $binding-name]"/>
+
+ <xsl:variable name="binding-type" select="$binding/@type"/>
+ <xsl:variable name="binding-protocol" select="$binding/@*[local-name() = 'protocol']"/>
+ <xsl:variable name="protocol">
+ <xsl:choose>
+ <xsl:when test="starts-with($binding-type, 'http://schemas.xmlsoap.org/wsdl/soap')">SOAP 1.1</xsl:when>
+ <xsl:when test="starts-with($binding-type, 'http://www.w3.org/2005/08/wsdl/soap')">SOAP 1.2</xsl:when>
+ <xsl:when test="starts-with($binding-type, 'http://schemas.xmlsoap.org/wsdl/mime')">MIME</xsl:when>
+ <xsl:when test="starts-with($binding-type, 'http://schemas.xmlsoap.org/wsdl/http')">HTTP</xsl:when>
+ <xsl:otherwise>Unknown</xsl:otherwise>
+ </xsl:choose>
+
+ <!-- TODO: Add all bindings to transport protocols -->
+ <xsl:choose>
+ <xsl:when test="starts-with($binding-protocol, 'http://www.w3.org/2003/05/soap/bindings/HTTP')"> over HTTP</xsl:when>
+ <xsl:otherwise/>
+ </xsl:choose>
+ </xsl:variable>
+
+ <div class="label">Location:</div>
+ <div class="value">
+ <xsl:value-of select="@address"/>
+ </div>
+
+ <div class="label">Protocol:</div>
+ <div class="value">
+ <xsl:value-of select="$protocol"/>
+ </div>
+
+ <xsl:apply-templates select="$binding" mode="service"/>
+
+ <xsl:variable name="iface-name">
+ <xsl:apply-templates select="../@interface" mode="qname.normalized"/>
+ </xsl:variable>
+ <xsl:apply-templates select="$consolidated-wsdl/ws2:interface[@name = $iface-name]" mode="service"/>
+
+ </xsl:template>
+ <xsl:template match="ws2:interface" mode="service">
+ <h3>Interface <b>
+ <xsl:value-of select="@name"/>
+ </b>
+ <xsl:if test="$ENABLE-LINK">
+ <xsl:text> </xsl:text>
+ <span>
+ <xsl:if test="$ENABLE-OPERATIONS-PARAGRAPH">
+ <a class="local" href="#{concat($PORT-PREFIX, generate-id(.))}">
+ <xsl:value-of select="$PORT-TYPE-TEXT"/>
+ </a>
+ </xsl:if>
+ <xsl:call-template name="render.source-code-link"/>
+ </span>
+ </xsl:if>
+ </h3>
+
+ <xsl:variable name="base-iface-name">
+ <xsl:apply-templates select="@extends" mode="qname.normalized"/>
+ </xsl:variable>
+
+ <xsl:if test="$base-iface-name">
+ <div class="label">Extends: </div>
+ <div class="value">
+ <xsl:value-of select="$base-iface-name"/>
+ </div>
+ </xsl:if>
+
+ <xsl:variable name="base-iface"
+ select="$consolidated-wsdl/ws2:interface[@name = $base-iface-name]"/>
+
+ <div class="label">Operations:</div>
+ <div class="value">
+ <xsl:text>
+</xsl:text>
+ <ol style="line-height: 180%;">
+ <xsl:apply-templates select="$base-iface/ws2:operation | ws2:operation" mode="service">
+ <xsl:sort select="@name"/>
+ </xsl:apply-templates>
+ </ol>
+ </div>
+ </xsl:template>
+ <xsl:template match="ws:port" mode="service">
+ <xsl:variable name="binding-name">
+ <xsl:apply-templates select="@binding" mode="qname.normalized"/>
+ </xsl:variable>
+ <xsl:variable name="binding" select="$consolidated-wsdl/ws:binding[@name = $binding-name]"/>
+
+ <xsl:variable name="binding-uri"
+ select="namespace-uri( $binding/*[local-name() = 'binding'] )"/>
+ <xsl:variable name="protocol">
+ <xsl:choose>
+ <xsl:when test="starts-with($binding-uri, 'http://schemas.xmlsoap.org/wsdl/soap')">SOAP</xsl:when>
+ <xsl:when test="starts-with($binding-uri, 'http://schemas.xmlsoap.org/wsdl/mime')">MIME</xsl:when>
+ <xsl:when test="starts-with($binding-uri, 'http://schemas.xmlsoap.org/wsdl/http')">HTTP</xsl:when>
+ <xsl:otherwise>unknown</xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+
+ <xsl:variable name="port-type-name">
+ <xsl:apply-templates select="$binding/@type" mode="qname.normalized"/>
+ </xsl:variable>
+
+ <xsl:variable name="port-type"
+ select="$consolidated-wsdl/ws:portType[@name = $port-type-name]"/>
+
+
+ <h3>Port <b>
+ <xsl:value-of select="@name"/>
+ </b>
+ <xsl:if test="$ENABLE-LINK">
+ <xsl:text> </xsl:text>
+ <!-- <small>-->
+ <xsl:if test="$ENABLE-OPERATIONS-PARAGRAPH">
+ <a class="local" href="#{concat($PORT-PREFIX, generate-id($port-type))}">
+ <xsl:value-of select="$PORT-TYPE-TEXT"/>
+ </a>
+ </xsl:if>
+ <xsl:call-template name="render.source-code-link"/>
+ <!-- </small>-->
+ </xsl:if>
+ </h3>
+
+ <div class="label">Location:</div>
+ <div class="value">
+ <xsl:value-of select="*[local-name() = 'address']/@location"/>
+ </div>
+
+ <div class="label">Protocol:</div>
+ <div class="value">
+ <xsl:value-of select="$protocol"/>
+ </div>
+
+ <xsl:apply-templates select="$binding" mode="service"/>
+
+ <div class="label">Operations:</div>
+ <div class="value">
+ <xsl:text>
+</xsl:text>
+ <ol style="line-height: 180%;">
+ <xsl:apply-templates select="$consolidated-wsdl/ws:portType[@name = $port-type-name]/ws:operation"
+ mode="service">
+ <xsl:sort select="@name"/>
+ </xsl:apply-templates>
+ </ol>
+ </div>
+ </xsl:template>
+ <xsl:template match="ws:operation|ws2:operation" mode="service">
+ <li>
+ <big>
+ <i>
+ <xsl:value-of select="@name"/>
+ </i>
+ </big>
+ <xsl:if test="$ENABLE-LINK">
+ <xsl:if test="$ENABLE-OPERATIONS-PARAGRAPH">
+ <a class="local" href="{concat('#', $OPERATIONS-PREFIX, generate-id(.))}">Detail</a>
+ </xsl:if>
+ <xsl:call-template name="render.source-code-link"/>
+ </xsl:if>
+ </li>
+ </xsl:template>
+ <xsl:template match="ws:binding|ws2:binding" mode="service">
+ <xsl:variable name="real-binding" select="*[local-name() = 'binding']|self::ws2:*"/>
+
+ <xsl:if test="$real-binding/@style">
+ <div class="label">Default style:</div>
+ <div class="value">
+ <xsl:value-of select="$real-binding/@style"/>
+ </div>
+ </xsl:if>
+
+
+ <xsl:if test="$real-binding/@transport|$real-binding/*[local-name() = 'protocol']">
+ <xsl:variable name="protocol"
+ select="concat($real-binding/@transport, $real-binding/*[local-name() = 'protocol'])"/>
+ <div class="label">Transport protocol:</div>
+ <div class="value">
+ <xsl:choose>
+ <xsl:when test="$protocol = 'http://schemas.xmlsoap.org/soap/http'">SOAP over HTTP</xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$protocol"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </div>
+ </xsl:if>
+
+ <xsl:if test="$real-binding/@verb">
+ <div class="label">Default method:</div>
+ <div class="value">
+ <xsl:value-of select="$real-binding/@verb"/>
+ </div>
+ </xsl:if>
+ </xsl:template>
+
+ <!--
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+ End of included transformation: wsdl-viewer-service.xsl
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+-->
+
+
+
+<!--
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+ Begin of included transformation: wsdl-viewer-operations.xsl
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+-->
+<xsl:template match="ws2:interface" mode="operations">
+ <xsl:if test="$ENABLE-PORTTYPE-NAME">
+ <h3>
+ <a name="{concat($IFACE-PREFIX, generate-id(.))}">
+ <xsl:value-of select="$IFACE-TEXT"/>
+ <xsl:text>
+</xsl:text>
+ <b>
+ <xsl:value-of select="@name"/>
+ </b>
+ </a>
+ <xsl:call-template name="render.source-code-link"/>
+ </h3>
+ </xsl:if>
+
+ <ol>
+ <xsl:apply-templates select="ws2:operation" mode="operations">
+ <xsl:sort select="@name"/>
+ </xsl:apply-templates>
+ </ol>
+ </xsl:template>
+ <xsl:template match="ws2:operation" mode="operations">
+ <xsl:variable name="binding-info"
+ select="$consolidated-wsdl/ws2:binding[@interface = current()/../@name or substring-after(@interface, ':') = current()/../@name]/ws2:operation[@ref = current()/@name or substring-after(@ref, ':') = current()/@name]"/>
+ <li>
+ <xsl:if test="position() != last()">
+ <xsl:attribute name="class">operation</xsl:attribute>
+ </xsl:if>
+ <big>
+ <b>
+ <a name="{concat($OPERATIONS-PREFIX, generate-id(.))}">
+ <xsl:value-of select="@name"/>
+ </a>
+ </b>
+ </big>
+ <div class="value">
+ <xsl:text>
+</xsl:text>
+ <xsl:call-template name="render.source-code-link"/>
+ </div>
+ <xsl:apply-templates select="ws2:documentation" mode="documentation.render"/>
+
+ <xsl:if test="$ENABLE-STYLEOPTYPEPATH">
+ <!-- TODO: add the operation attributes - according the WSDL 2.0 spec. -->
+ </xsl:if>
+ <xsl:apply-templates select="ws2:input|ws2:output|../ws2:fault[@name = ws2:infault/@ref or @name = ws2:outfault/@ref]"
+ mode="operations.message">
+ <xsl:with-param name="binding-data" select="$binding-info"/>
+ </xsl:apply-templates>
+ </li>
+ </xsl:template>
+ <xsl:template match="ws2:input|ws2:output|ws2:fault" mode="operations.message">
+ <xsl:param name="binding-data"/>
+ <xsl:if test="$ENABLE-INOUTFAULT">
+ <div class="label">
+ <xsl:value-of select="concat(translate(substring(local-name(.), 1, 1), 'abcdefghijklmnoprstuvwxyz', 'ABCDEFGHIJKLMNOPRSTUVWXYZ'), substring(local-name(.), 2), ':')"/>
+ </div>
+
+ <div class="value">
+ <xsl:variable name="type-name">
+ <xsl:apply-templates select="@element" mode="qname.normalized"/>
+ </xsl:variable>
+
+ <xsl:call-template name="render-type">
+ <xsl:with-param name="type-local-name" select="$type-name"/>
+ </xsl:call-template>
+
+ <xsl:call-template name="render.source-code-link"/>
+
+ <xsl:variable name="type-tree"
+ select="$consolidated-xsd[@name = $type-name and not(xsd:simpleType)][1]"/>
+ <xsl:apply-templates select="$type-tree" mode="operations.message.part"/>
+ </div>
+ </xsl:if>
+ </xsl:template>
+ <xsl:template match="ws:portType" mode="operations">
+ <div>
+ <xsl:if test="position() != last()">
+ <xsl:attribute name="class">port</xsl:attribute>
+ </xsl:if>
+ <xsl:if test="$ENABLE-PORTTYPE-NAME">
+ <h3>
+ <a name="{concat($PORT-PREFIX, generate-id(.))}">
+ <xsl:value-of select="$PORT-TYPE-TEXT"/>
+ <xsl:text>
+</xsl:text>
+ <b>
+ <xsl:value-of select="@name"/>
+ </b>
+ </a>
+ <xsl:call-template name="render.source-code-link"/>
+ </h3>
+ </xsl:if>
+ <ol>
+ <xsl:apply-templates select="ws:operation" mode="operations">
+ <xsl:sort select="@name"/>
+ </xsl:apply-templates>
+ </ol>
+ </div>
+ </xsl:template>
+ <xsl:template match="ws:operation" mode="operations">
+ <xsl:variable name="binding-info"
+ select="$consolidated-wsdl/ws:binding[@type = current()/../@name or substring-after(@type, ':') = current()/../@name]/ws:operation[@name = current()/@name]"/>
+ <li>
+ <xsl:if test="position() != last()">
+ <xsl:attribute name="class">operation</xsl:attribute>
+ </xsl:if>
+ <big>
+ <b>
+ <a name="{concat($OPERATIONS-PREFIX, generate-id(.))}">
+ <xsl:value-of select="@name"/>
+ </a>
+ </b>
+ </big>
+ <div class="value">
+ <xsl:text>
+</xsl:text>
+ <xsl:call-template name="render.source-code-link"/>
+ </div>
+
+ <xsl:if test="$ENABLE-DESCRIPTION and string-length(ws:documentation) &gt; 0">
+ <div class="label">Description:</div>
+ <div class="value">
+ <xsl:value-of select="ws:documentation" disable-output-escaping="yes"/>
+ </div>
+ </xsl:if>
+
+ <xsl:if test="$ENABLE-STYLEOPTYPEPATH">
+ <xsl:variable name="binding-operation" select="$binding-info/*[local-name() = 'operation']"/>
+ <xsl:if test="$binding-operation/@style">
+ <div class="label">Style:</div>
+ <div class="value">
+ <xsl:value-of select="$binding-operation/@style"/>
+ </div>
+ </xsl:if>
+
+ <div class="label">Operation type:</div>
+ <div class="value">
+ <xsl:choose>
+ <xsl:when test="$binding-info/ws:input[not(../ws:output)]">
+ <i>One-way.</i> The endpoint receives a message.</xsl:when>
+ <xsl:when test="$binding-info/ws:input[following-sibling::ws:output]">
+ <i>Request-response.</i> The endpoint receives a message, and sends a correlated message.</xsl:when>
+ <xsl:when test="$binding-info/ws:input[preceding-sibling::ws:output]">
+ <i>Solicit-response.</i> The endpoint sends a message, and receives a correlated message.</xsl:when>
+ <xsl:when test="$binding-info/ws:output[not(../ws:input)]">
+ <i>Notification.</i> The endpoint sends a message.</xsl:when>
+ <xsl:otherwise>unknown</xsl:otherwise>
+ </xsl:choose>
+ </div>
+
+ <xsl:if test="string-length($binding-operation/@soapAction) &gt; 0">
+ <div class="label">SOAP action:</div>
+ <div class="value">
+ <xsl:value-of select="$binding-operation/@soapAction"/>
+ </div>
+ </xsl:if>
+
+ <xsl:if test="$binding-operation/@location">
+ <div class="label">HTTP path:</div>
+ <div class="value">
+ <xsl:value-of select="$binding-operation/@location"/>
+ </div>
+ </xsl:if>
+ </xsl:if>
+ <xsl:apply-templates select="ws:input|ws:output|ws:fault" mode="operations.message">
+ <xsl:with-param name="binding-data" select="$binding-info"/>
+ </xsl:apply-templates>
+ </li>
+ </xsl:template>
+ <xsl:template match="ws:input|ws:output|ws:fault" mode="operations.message">
+ <xsl:param name="binding-data"/>
+ <xsl:if test="$ENABLE-INOUTFAULT">
+ <div class="label">
+ <xsl:value-of select="concat(translate(substring(local-name(.), 1, 1), 'abcdefghijklmnoprstuvwxyz', 'ABCDEFGHIJKLMNOPRSTUVWXYZ'), substring(local-name(.), 2), ':')"/>
+ </div>
+
+ <xsl:variable name="msg-local-name" select="substring-after(@message, ':')"/>
+ <xsl:variable name="msg-name">
+ <xsl:choose>
+ <xsl:when test="$msg-local-name">
+ <xsl:value-of select="$msg-local-name"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="@message"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+
+ <xsl:variable name="msg" select="$consolidated-wsdl/ws:message[@name = $msg-name]"/>
+ <xsl:choose>
+ <xsl:when test="$msg">
+ <xsl:apply-templates select="$msg" mode="operations.message">
+ <xsl:with-param name="binding-data"
+ select="$binding-data/ws:*[local-name(.) = local-name(current())]/*"/>
+ </xsl:apply-templates>
+ </xsl:when>
+ <xsl:otherwise>
+ <div class="value">
+ <i>none</i>
+ </div>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:if>
+ </xsl:template>
+ <xsl:template match="ws:message" mode="operations.message">
+ <xsl:param name="binding-data"/>
+ <div class="value">
+ <xsl:value-of select="@name"/>
+ <xsl:if test="$binding-data">
+ <xsl:text> (</xsl:text>
+ <xsl:value-of select="name($binding-data)"/>
+ <xsl:variable name="use" select="$binding-data/@use"/>
+ <xsl:if test="$use">
+ <xsl:text>, use = </xsl:text>
+ <xsl:value-of select="$use"/>
+ </xsl:if>
+ <xsl:variable name="part" select="$binding-data/@part"/>
+ <xsl:if test="$part">
+ <xsl:text>, part = </xsl:text>
+ <xsl:value-of select="$part"/>
+ </xsl:if>
+ <xsl:text>)</xsl:text>
+ </xsl:if>
+ <xsl:call-template name="render.source-code-link"/>
+ </div>
+
+ <xsl:apply-templates select="ws:part" mode="operations.message"/>
+ </xsl:template>
+ <xsl:template match="ws:part" mode="operations.message">
+ <div class="value box" style="margin-bottom: 3px">
+ <xsl:choose>
+ <xsl:when test="string-length(@name) &gt; 0">
+ <b>
+ <xsl:value-of select="@name"/>
+ </b>
+
+ <xsl:variable name="elem-or-type">
+ <xsl:choose>
+ <xsl:when test="@type">
+ <xsl:value-of select="@type"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="@element"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+
+ <xsl:variable name="type-local-name" select="substring-after($elem-or-type, ':')"/>
+ <xsl:variable name="type-name">
+ <xsl:choose>
+ <xsl:when test="$type-local-name">
+ <xsl:value-of select="$type-local-name"/>
+ </xsl:when>
+ <xsl:when test="$elem-or-type">
+ <xsl:value-of select="$elem-or-type"/>
+ </xsl:when>
+ <xsl:otherwise>unknown</xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+
+ <xsl:call-template name="render-type">
+ <xsl:with-param name="type-local-name" select="$type-name"/>
+ </xsl:call-template>
+
+ <xsl:variable name="part-type"
+ select="$consolidated-xsd[@name = $type-name and not(xsd:simpleType)][1]"/>
+ <xsl:apply-templates select="$part-type" mode="operations.message.part"/>
+
+ </xsl:when>
+ <xsl:otherwise>
+ <i>none</i>
+ </xsl:otherwise>
+ </xsl:choose>
+ </div>
+ </xsl:template>
+
+ <!--
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+ End of included transformation: wsdl-viewer-operations.xsl
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+-->
+
+
+
+<!--
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+ Begin of included transformation: wsdl-viewer-xsd-tree.xsl
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+-->
+<xsl:template match="xsd:simpleType" mode="operations.message.part"/>
+ <xsl:template name="recursion.should.continue">
+ <xsl:param name="anti.recursion"/>
+ <xsl:param name="recursion.label"/>
+ <xsl:param name="recursion.count">1</xsl:param>
+ <xsl:variable name="has.recursion" select="contains($anti.recursion, $recursion.label)"/>
+ <xsl:variable name="anti.recursion.fragment"
+ select="substring-after($anti.recursion, $recursion.label)"/>
+ <xsl:choose>
+ <xsl:when test="$recursion.count &gt; $ANTIRECURSION-DEPTH"/>
+
+ <xsl:when test="not($ENABLE-ANTIRECURSION-PROTECTION) or string-length($anti.recursion) = 0 or not($has.recursion)">
+ <xsl:text>1</xsl:text>
+ </xsl:when>
+
+ <xsl:otherwise>
+ <xsl:call-template name="recursion.should.continue">
+ <xsl:with-param name="anti.recursion" select="$anti.recursion.fragment"/>
+ <xsl:with-param name="recursion.label" select="$recursion.label"/>
+ <xsl:with-param name="recursion.count" select="$recursion.count + 1"/>
+ </xsl:call-template>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+ <xsl:template match="xsd:complexType" mode="operations.message.part">
+ <xsl:param name="anti.recursion"/>
+
+ <xsl:variable name="recursion.label" select="concat('[', @name, ']')"/>
+ <xsl:variable name="recursion.test">
+ <xsl:call-template name="recursion.should.continue">
+ <xsl:with-param name="anti.recursion" select="$anti.recursion"/>
+ <xsl:with-param name="recursion.label" select="$recursion.label"/>
+ </xsl:call-template>
+ </xsl:variable>
+
+ <xsl:choose>
+ <xsl:when test="string-length($recursion.test) != 0">
+ <xsl:apply-templates select="*" mode="operations.message.part">
+ <xsl:with-param name="anti.recursion" select="concat($anti.recursion, $recursion.label)"/>
+ </xsl:apply-templates>
+ </xsl:when>
+ <xsl:otherwise>
+ <span style="color:blue">
+ <xsl:value-of select="$RECURSIVE"/>
+ </span>
+ </xsl:otherwise>
+ </xsl:choose>
+
+ </xsl:template>
+ <xsl:template match="xsd:complexContent" mode="operations.message.part">
+ <xsl:param name="anti.recursion"/>
+
+ <xsl:apply-templates select="*" mode="operations.message.part">
+ <xsl:with-param name="anti.recursion" select="$anti.recursion"/>
+ </xsl:apply-templates>
+ </xsl:template>
+ <xsl:template match="xsd:complexType[descendant::xsd:attribute[ not(@*[local-name() = 'arrayType']) ]]"
+ mode="operations.message.part">
+ <xsl:param name="anti.recursion"/>
+ <xsl:variable name="recursion.label" select="concat('[', @name, ']')"/>
+ <xsl:variable name="recursion.test">
+ <xsl:call-template name="recursion.should.continue">
+ <xsl:with-param name="anti.recursion" select="$anti.recursion"/>
+ <xsl:with-param name="recursion.label" select="$recursion.label"/>
+ </xsl:call-template>
+ </xsl:variable>
+
+ <xsl:choose>
+ <xsl:when test="string-length($recursion.test) != 0">
+ <ul type="circle">
+ <xsl:apply-templates select="*" mode="operations.message.part">
+ <xsl:with-param name="anti.recursion" select="concat($anti.recursion, $recursion.label)"/>
+ </xsl:apply-templates>
+ </ul>
+ </xsl:when>
+ <xsl:otherwise>
+ <span style="color:blue">
+ <xsl:value-of select="$RECURSIVE"/>
+ </span>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+ <xsl:template match="xsd:restriction | xsd:extension" mode="operations.message.part">
+ <xsl:param name="anti.recursion"/>
+ <xsl:variable name="type-local-name" select="substring-after(@base, ':')"/>
+ <xsl:variable name="type-name">
+ <xsl:choose>
+ <xsl:when test="$type-local-name">
+ <xsl:value-of select="$type-local-name"/>
+ </xsl:when>
+ <xsl:when test="@base">
+ <xsl:value-of select="@base"/>
+ </xsl:when>
+ <xsl:otherwise>unknown type</xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:variable name="base-type" select="$consolidated-xsd[@name = $type-name][1]"/>
+ <!-- xsl:if test="not($type/@abstract)">
+ <xsl:apply-templates select="$type"/>
+ </xsl:if -->
+ <xsl:if test="$base-type != 'Array'">
+ <xsl:apply-templates select="$base-type" mode="operations.message.part">
+ <xsl:with-param name="anti.recursion" select="$anti.recursion"/>
+ </xsl:apply-templates>
+ </xsl:if>
+ <xsl:apply-templates select="*" mode="operations.message.part">
+ <xsl:with-param name="anti.recursion" select="$anti.recursion"/>
+ </xsl:apply-templates>
+ </xsl:template>
+ <xsl:template match="xsd:union" mode="operations.message.part">
+ <xsl:call-template name="process-union">
+ <xsl:with-param name="set" select="@memberTypes"/>
+ </xsl:call-template>
+ </xsl:template>
+ <xsl:template name="process-union">
+ <xsl:param name="set"/>
+ <xsl:if test="$set">
+ <xsl:variable name="item" select="substring-before($set, ' ')"/>
+ <xsl:variable name="the-rest" select="substring-after($set, ' ')"/>
+
+ <xsl:variable name="type-local-name" select="substring-after($item, ':')"/>
+ <xsl:variable name="type-name">
+ <xsl:choose>
+ <xsl:when test="$type-local-name">
+ <xsl:value-of select="$type-local-name"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$item"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+
+ <xsl:call-template name="render-type">
+ <xsl:with-param name="type-local-name" select="$type-name"/>
+ </xsl:call-template>
+
+ <xsl:call-template name="process-union">
+ <xsl:with-param name="set" select="$the-rest"/>
+ </xsl:call-template>
+ </xsl:if>
+ </xsl:template>
+ <xsl:template match="xsd:sequence" mode="operations.message.part">
+ <xsl:param name="anti.recursion"/>
+ <ul type="square">
+ <xsl:apply-templates select="*" mode="operations.message.part">
+ <xsl:with-param name="anti.recursion" select="$anti.recursion"/>
+ </xsl:apply-templates>
+ </ul>
+ </xsl:template>
+ <xsl:template match="xsd:all|xsd:any|xsd:choice" mode="operations.message.part">
+ <xsl:param name="anti.recursion"/>
+ <xsl:variable name="list-type">
+ <xsl:choose>
+ <xsl:when test="self::xsd:all">disc</xsl:when>
+ <xsl:when test="self::xsd:any">circle</xsl:when>
+ <xsl:otherwise>square</xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+
+ <xsl:element name="ul">
+ <xsl:attribute name="style">
+ <xsl:value-of select="concat('list-style-type:', $list-type)"/>
+ </xsl:attribute>
+ <xsl:apply-templates select="*" mode="operations.message.part">
+ <xsl:with-param name="anti.recursion" select="$anti.recursion"/>
+ </xsl:apply-templates>
+ </xsl:element>
+ </xsl:template>
+ <xsl:template match="xsd:element[parent::xsd:schema]" mode="operations.message.part">
+ <xsl:param name="anti.recursion"/>
+ <xsl:variable name="recursion.label" select="concat('[', @name, ']')"/>
+ <xsl:variable name="recursion.test">
+ <xsl:call-template name="recursion.should.continue">
+ <xsl:with-param name="anti.recursion" select="$anti.recursion"/>
+ <xsl:with-param name="recursion.label" select="$recursion.label"/>
+ </xsl:call-template>
+ </xsl:variable>
+
+ <xsl:choose>
+ <xsl:when test="string-length($recursion.test) != 0">
+ <xsl:variable name="type-name">
+ <xsl:call-template name="xsd.element-type"/>
+ </xsl:variable>
+ <xsl:variable name="elem-type"
+ select="$consolidated-xsd[generate-id() != generate-id(current()) and $type-name and @name=$type-name and contains(local-name(), 'Type')][1]"/>
+
+ <xsl:if test="$type-name != @name">
+ <xsl:apply-templates select="$elem-type" mode="operations.message.part">
+ <xsl:with-param name="anti.recursion" select="concat($anti.recursion, $recursion.label)"/>
+ </xsl:apply-templates>
+
+ <xsl:if test="not($elem-type)">
+ <xsl:call-template name="render-type">
+ <xsl:with-param name="type-local-name" select="$type-name"/>
+ </xsl:call-template>
+ </xsl:if>
+
+ <xsl:apply-templates select="*" mode="operations.message.part">
+ <xsl:with-param name="anti.recursion" select="concat($anti.recursion, $recursion.label)"/>
+ </xsl:apply-templates>
+ </xsl:if>
+ </xsl:when>
+ <xsl:otherwise>
+ <span style="color:blue">
+ <xsl:value-of select="$RECURSIVE"/>
+ </span>
+ </xsl:otherwise>
+ </xsl:choose>
+
+ </xsl:template>
+ <xsl:template match="xsd:element | xsd:attribute" mode="operations.message.part">
+ <xsl:param name="anti.recursion"/>
+ <!--
+ <xsl:variable name="recursion.label" select="concat('[', @name, ']')"/>
+-->
+ <li>
+ <xsl:variable name="local-ref" select="concat(@name, substring-after(@ref, ':'))"/>
+ <xsl:variable name="elem-name">
+ <xsl:choose>
+ <xsl:when test="@name">
+ <xsl:value-of select="@name"/>
+ </xsl:when>
+ <xsl:when test="$local-ref">
+ <xsl:value-of select="$local-ref"/>
+ </xsl:when>
+ <xsl:when test="@ref">
+ <xsl:value-of select="@ref"/>
+ </xsl:when>
+ <xsl:otherwise>anonymous</xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:value-of select="$elem-name"/>
+
+ <xsl:variable name="type-name">
+ <xsl:call-template name="xsd.element-type"/>
+ </xsl:variable>
+
+ <xsl:call-template name="render-type">
+ <xsl:with-param name="type-local-name" select="$type-name"/>
+ </xsl:call-template>
+
+ <xsl:variable name="elem-type"
+ select="$consolidated-xsd[@name = $type-name and contains(local-name(), 'Type')][1]"/>
+ <xsl:apply-templates select="$elem-type | *" mode="operations.message.part">
+ <xsl:with-param name="anti.recursion" select="$anti.recursion"/>
+ </xsl:apply-templates>
+ </li>
+ </xsl:template>
+ <xsl:template match="xsd:attribute[ @*[local-name() = 'arrayType'] ]"
+ mode="operations.message.part">
+ <xsl:param name="anti.recursion"/>
+ <xsl:variable name="array-local-name"
+ select="substring-after(@*[local-name() = 'arrayType'], ':')"/>
+ <xsl:variable name="type-local-name" select="substring-before($array-local-name, '[')"/>
+ <xsl:variable name="array-type" select="$consolidated-xsd[@name = $type-local-name][1]"/>
+
+ <xsl:variable name="recursion.label" select="concat('[', $type-local-name, ']')"/>
+ <xsl:variable name="recursion.test">
+ <xsl:call-template name="recursion.should.continue">
+ <xsl:with-param name="anti.recursion" select="$anti.recursion"/>
+ <xsl:with-param name="recursion.label" select="$recursion.label"/>
+ </xsl:call-template>
+ </xsl:variable>
+
+ <xsl:choose>
+ <xsl:when test="string-length($recursion.test) != 0">
+ <xsl:apply-templates select="$array-type" mode="operations.message.part">
+ <xsl:with-param name="anti.recursion" select="concat($anti.recursion, $recursion.label)"/>
+ </xsl:apply-templates>
+ </xsl:when>
+ <xsl:otherwise>
+ <span style="color:blue">
+ <xsl:value-of select="$RECURSIVE"/>
+ </span>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+ <xsl:template name="xsd.element-type">
+ <xsl:variable name="ref-or-type">
+ <xsl:choose>
+ <xsl:when test="@type">
+ <xsl:value-of select="@type"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="@ref"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+
+ <xsl:variable name="type-local-name" select="substring-after($ref-or-type, ':')"/>
+ <xsl:variable name="type-name">
+ <xsl:choose>
+ <xsl:when test="$type-local-name">
+ <xsl:value-of select="$type-local-name"/>
+ </xsl:when>
+ <xsl:when test="$ref-or-type">
+ <xsl:value-of select="$ref-or-type"/>
+ </xsl:when>
+ <xsl:otherwise>undefined</xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:value-of select="$type-name"/>
+ </xsl:template>
+ <xsl:template match="xsd:documentation" mode="operations.message.part">
+ <div style="color:green">
+ <xsl:value-of select="." disable-output-escaping="yes"/>
+ </div>
+ </xsl:template>
+ <xsl:template name="render-type">
+ <xsl:param name="anti.recursion"/>
+ <xsl:param name="type-local-name"/>
+
+ <xsl:if test="$ENABLE-OPERATIONS-TYPE">
+ <xsl:variable name="properties">
+ <xsl:if test="self::xsd:element | self::xsd:attribute[parent::xsd:complexType]">
+ <xsl:variable name="min">
+ <xsl:if test="@minOccurs = '0'">optional</xsl:if>
+ </xsl:variable>
+ <xsl:variable name="max">
+ <xsl:if test="@maxOccurs = 'unbounded'">unbounded</xsl:if>
+ </xsl:variable>
+ <xsl:variable name="nillable">
+ <xsl:if test="@nillable">nillable</xsl:if>
+ </xsl:variable>
+
+ <xsl:if test="(string-length($min) + string-length($max) + string-length($nillable) + string-length(@use)) &gt; 0">
+ <xsl:text> - </xsl:text>
+ <xsl:value-of select="$min"/>
+ <xsl:if test="string-length($min) and string-length($max)">
+ <xsl:text>, </xsl:text>
+ </xsl:if>
+ <xsl:value-of select="$max"/>
+ <xsl:if test="(string-length($min) + string-length($max)) &gt; 0 and string-length($nillable)">
+ <xsl:text>, </xsl:text>
+ </xsl:if>
+ <xsl:value-of select="$nillable"/>
+ <xsl:if test="(string-length($min) + string-length($max) + string-length($nillable)) &gt; 0 and string-length(@use)">
+ <xsl:text>, </xsl:text>
+ </xsl:if>
+ <xsl:value-of select="@use"/>
+ <xsl:text>; </xsl:text>
+ </xsl:if>
+ </xsl:if>
+ </xsl:variable>
+
+ <xsl:variable name="recursion.label" select="concat('[', $type-local-name, ']')"/>
+ <xsl:variable name="recursion.test">
+ <xsl:call-template name="recursion.should.continue">
+ <xsl:with-param name="anti.recursion" select="$anti.recursion"/>
+ <xsl:with-param name="recursion.label" select="$recursion.label"/>
+ <xsl:with-param name="recursion.count" select="$ANTIRECURSION-DEPTH"/>
+ </xsl:call-template>
+ </xsl:variable>
+
+ <xsl:if test="string-length($recursion.test) != 0">
+ <span style="color:blue">
+ <xsl:value-of select="$properties"/>
+ <xsl:variable name="elem-type"
+ select="$consolidated-xsd[@name = $type-local-name and (not(contains(local-name(current()), 'element')) or contains(local-name(), 'Type'))][1]"/>
+ <xsl:if test="string-length($type-local-name) &gt; 0">
+ <xsl:call-template name="render-type.write-name">
+ <xsl:with-param name="type-local-name" select="$type-local-name"/>
+ </xsl:call-template>
+ </xsl:if>
+
+ <xsl:choose>
+ <xsl:when test="$elem-type">
+
+ <xsl:apply-templates select="$elem-type" mode="render-type">
+ <xsl:with-param name="anti.recursion" select="concat($anti.recursion, $recursion.label)"/>
+ </xsl:apply-templates>
+ </xsl:when>
+ <xsl:otherwise>
+
+ <xsl:apply-templates select="*" mode="render-type">
+ <xsl:with-param name="anti.recursion" select="concat($anti.recursion, $recursion.label)"/>
+ </xsl:apply-templates>
+ </xsl:otherwise>
+ </xsl:choose>
+ </span>
+ </xsl:if>
+ </xsl:if>
+ </xsl:template>
+ <xsl:template name="render-type.write-name">
+ <xsl:param name="type-local-name"/>
+ <xsl:text> type </xsl:text>
+ <big>
+ <i>
+ <xsl:choose>
+ <xsl:when test="$type-local-name">
+ <xsl:value-of select="$type-local-name"/>
+ </xsl:when>
+ <xsl:otherwise>undefined</xsl:otherwise>
+ </xsl:choose>
+ </i>
+ </big>
+ </xsl:template>
+ <xsl:template match="*" mode="render-type"/>
+ <xsl:template match="xsd:element | xsd:complexType | xsd:simpleType | xsd:complexContent"
+ mode="render-type">
+ <xsl:param name="anti.recursion"/>
+ <xsl:apply-templates select="*" mode="render-type">
+ <xsl:with-param name="anti.recursion" select="$anti.recursion"/>
+ </xsl:apply-templates>
+ </xsl:template>
+ <xsl:template match="xsd:restriction[ parent::xsd:simpleType ]" mode="render-type">
+ <xsl:param name="anti.recursion"/>
+ <xsl:variable name="type-local-name" select="substring-after(@base, ':')"/>
+ <xsl:variable name="type-name">
+ <xsl:choose>
+ <xsl:when test="$type-local-name">
+ <xsl:value-of select="$type-local-name"/>
+ </xsl:when>
+ <xsl:when test="@base">
+ <xsl:value-of select="@base"/>
+ </xsl:when>
+ <xsl:otherwise>undefined</xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+
+ <xsl:text> - </xsl:text>
+ <xsl:call-template name="render-type.write-name">
+ <xsl:with-param name="type-local-name" select="$type-local-name"/>
+ </xsl:call-template>
+ <xsl:text> with </xsl:text>
+ <xsl:value-of select="local-name()"/>
+ <xsl:apply-templates select="*" mode="render-type">
+ <xsl:with-param name="anti.recursion" select="$anti.recursion"/>
+ </xsl:apply-templates>
+ </xsl:template>
+ <xsl:template match="xsd:simpleType/xsd:restriction/xsd:*[not(self::xsd:enumeration)]"
+ mode="render-type">
+ <xsl:text> </xsl:text>
+ <xsl:value-of select="local-name()"/>
+ <xsl:text>(</xsl:text>
+ <xsl:value-of select="@value"/>
+ <xsl:text>)</xsl:text>
+ </xsl:template>
+ <xsl:template match="xsd:restriction | xsd:extension" mode="render-type">
+ <xsl:param name="anti.recursion"/>
+ <xsl:variable name="type-local-name" select="substring-after(@base, ':')"/>
+ <xsl:variable name="type-name">
+ <xsl:choose>
+ <xsl:when test="$type-local-name">
+ <xsl:value-of select="$type-local-name"/>
+ </xsl:when>
+ <xsl:when test="@base">
+ <xsl:value-of select="@base"/>
+ </xsl:when>
+ <xsl:otherwise>undefined</xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:variable name="base-type" select="$consolidated-xsd[@name = $type-name][1]"/>
+ <xsl:variable name="abstract">
+ <xsl:if test="$base-type/@abstract">abstract </xsl:if>
+ </xsl:variable>
+
+ <xsl:if test="not($type-name = 'Array')">
+ <xsl:value-of select="concat(' - ', local-name(), ' of ', $abstract)"/>
+ <xsl:call-template name="render-type.write-name">
+ <xsl:with-param name="type-local-name" select="$type-name"/>
+ </xsl:call-template>
+ </xsl:if>
+
+ <xsl:apply-templates select="$base-type | *" mode="render-type">
+ <xsl:with-param name="anti.recursion" select="$anti.recursion"/>
+ </xsl:apply-templates>
+ </xsl:template>
+ <xsl:template match="xsd:attribute[ @*[local-name() = 'arrayType'] ]" mode="render-type">
+ <xsl:param name="anti.recursion"/>
+ <xsl:variable name="array-local-name"
+ select="substring-after(@*[local-name() = 'arrayType'], ':')"/>
+ <xsl:variable name="type-local-name" select="substring-before($array-local-name, '[')"/>
+ <xsl:variable name="array-type" select="$consolidated-xsd[@name = $type-local-name][1]"/>
+
+ <xsl:text> - array of </xsl:text>
+ <xsl:call-template name="render-type.write-name">
+ <xsl:with-param name="type-local-name" select="$type-local-name"/>
+ </xsl:call-template>
+
+ <xsl:apply-templates select="$array-type" mode="render-type">
+ <xsl:with-param name="anti.recursion" select="$anti.recursion"/>
+ </xsl:apply-templates>
+ </xsl:template>
+ <xsl:template match="xsd:enumeration" mode="render-type"/>
+ <xsl:template match="xsd:enumeration[not(preceding-sibling::xsd:enumeration)]"
+ mode="render-type">
+ <xsl:text> - enum { </xsl:text>
+ <xsl:apply-templates select="self::* | following-sibling::xsd:enumeration" mode="render-type.enum"/>
+ <xsl:text> }</xsl:text>
+ </xsl:template>
+ <xsl:template match="xsd:enumeration" mode="render-type.enum">
+ <xsl:if test="preceding-sibling::xsd:enumeration">
+ <xsl:text>, </xsl:text>
+ </xsl:if>
+ <xsl:text disable-output-escaping="yes">'</xsl:text>
+ <xsl:value-of select="@value"/>
+ <xsl:text disable-output-escaping="yes">'</xsl:text>
+ </xsl:template>
+
+ <!--
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+ End of included transformation: wsdl-viewer-xsd-tree.xsl
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+-->
+
+
+
+<!--
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+ Begin of included transformation: wsdl-viewer-src.xsl
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+-->
+<xsl:template match="@*" mode="src.import">
+ <xsl:param name="src.import.stack"/>
+ <xsl:variable name="recursion.label" select="concat('[', string(.), ']')"/>
+ <xsl:variable name="recursion.check" select="concat($src.import.stack, $recursion.label)"/>
+
+ <xsl:choose>
+ <xsl:when test="contains($src.import.stack, $recursion.label)">
+ <h2 style="red">
+ <xsl:value-of select="concat('Cyclic include / import: ', $recursion.check)"/>
+ </h2>
+ </xsl:when>
+ <xsl:otherwise>
+ <h2>
+ <a name="{concat($SRC-FILE-PREFIX, generate-id(..))}">
+ <xsl:choose>
+ <xsl:when test="parent::xsd:include">Included </xsl:when>
+ <xsl:otherwise>Imported </xsl:otherwise>
+ </xsl:choose>
+
+ <xsl:choose>
+ <xsl:when test="name() = 'location'">WSDL </xsl:when>
+ <xsl:otherwise>Schema </xsl:otherwise>
+ </xsl:choose>
+ <i>
+ <xsl:value-of select="."/>
+ </i>
+ </a>
+ </h2>
+
+ <div class="box">
+ <xsl:apply-templates select="document(string(.))" mode="src"/>
+ </div>
+
+ <xsl:apply-templates select="document(string(.))/*/*[local-name() = 'import'][@location]/@location"
+ mode="src.import">
+ <xsl:with-param name="src.import.stack" select="$recursion.check"/>
+ </xsl:apply-templates>
+ <xsl:apply-templates select="document(string(.))//xsd:import[@schemaLocation]/@schemaLocation"
+ mode="src.import">
+ <xsl:with-param name="src.import.stack" select="$recursion.check"/>
+ </xsl:apply-templates>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+ <xsl:template match="*" mode="src">
+ <div class="xml-element">
+ <a name="{concat($SRC-PREFIX, generate-id(.))}">
+ <xsl:apply-templates select="." mode="src.link"/>
+ <xsl:apply-templates select="." mode="src.start-tag"/>
+ </a>
+ <xsl:apply-templates select="*|comment()|processing-instruction()|text()[string-length(normalize-space(.)) &gt; 0]"
+ mode="src"/>
+ <xsl:apply-templates select="." mode="src.end-tag"/>
+ </div>
+ </xsl:template>
+ <xsl:template match="*" mode="src.start-tag">
+ <xsl:call-template name="src.elem">
+ <xsl:with-param name="src.elem.end-slash"> /</xsl:with-param>
+ </xsl:call-template>
+ </xsl:template>
+ <xsl:template match="*[*|comment()|processing-instruction()|text()[string-length(normalize-space(.)) &gt; 0]]"
+ mode="src.start-tag">
+ <xsl:call-template name="src.elem"/>
+ </xsl:template>
+ <xsl:template match="*" mode="src.end-tag"/>
+ <xsl:template match="*[*|comment()|processing-instruction()|text()[string-length(normalize-space(.)) &gt; 0]]"
+ mode="src.end-tag">
+ <xsl:call-template name="src.elem">
+ <xsl:with-param name="src.elem.start-slash">/</xsl:with-param>
+ </xsl:call-template>
+ </xsl:template>
+ <xsl:template match="*" mode="src.link-attribute">
+ <xsl:if test="$ENABLE-LINK">
+ <xsl:attribute name="href">
+ <xsl:value-of select="concat('#', $SRC-PREFIX, generate-id(.))"/>
+ </xsl:attribute>
+ </xsl:if>
+ </xsl:template>
+ <xsl:template match="*[local-name() = 'import' or local-name() = 'include'][@location or @schemaLocation]"
+ mode="src.link">
+ <xsl:if test="$ENABLE-LINK">
+ <xsl:attribute name="href">
+ <xsl:value-of select="concat('#', $SRC-FILE-PREFIX, generate-id(.))"/>
+ </xsl:attribute>
+ </xsl:if>
+ </xsl:template>
+ <xsl:template match="*" mode="src.link"/>
+ <xsl:template match="ws2:service|ws2:binding" mode="src.link">
+ <xsl:variable name="iface-name">
+ <xsl:apply-templates select="@interface" mode="qname.normalized"/>
+ </xsl:variable>
+ <xsl:apply-templates select="$consolidated-wsdl/ws2:interface[@name = $iface-name]"
+ mode="src.link-attribute"/>
+ </xsl:template>
+ <xsl:template match="ws2:endpoint" mode="src.link">
+ <xsl:variable name="binding-name">
+ <xsl:apply-templates select="@binding" mode="qname.normalized"/>
+ </xsl:variable>
+ <xsl:apply-templates select="$consolidated-wsdl/ws2:binding[@name = $binding-name]"
+ mode="src.link-attribute"/>
+ </xsl:template>
+ <xsl:template match="ws2:binding/ws2:operation" mode="src.link">
+ <xsl:variable name="operation-name">
+ <xsl:apply-templates select="@ref" mode="qname.normalized"/>
+ </xsl:variable>
+ <xsl:apply-templates select="$consolidated-wsdl/ws2:interface/ws2:operation[@name = $operation-name]"
+ mode="src.link-attribute"/>
+ </xsl:template>
+ <xsl:template match="ws2:binding/ws2:fault|ws2:interface/ws2:operation/ws2:infault|ws2:interface/ws2:operation/ws2:outfault"
+ mode="src.link">
+ <xsl:variable name="operation-name">
+ <xsl:apply-templates select="@ref" mode="qname.normalized"/>
+ </xsl:variable>
+ <xsl:apply-templates select="$consolidated-wsdl/ws2:interface/ws2:fault[@name = $operation-name]"
+ mode="src.link-attribute"/>
+ </xsl:template>
+ <xsl:template match="ws2:interface/ws2:operation/ws2:input|ws2:interface/ws2:operation/ws2:output|ws2:interface/ws2:fault"
+ mode="src.link">
+ <xsl:variable name="elem-name">
+ <xsl:apply-templates select="@element" mode="qname.normalized"/>
+ </xsl:variable>
+ <xsl:apply-templates select="$consolidated-xsd[@name = $elem-name]" mode="src.link-attribute"/>
+ </xsl:template>
+ <xsl:template match="ws:operation/ws:input[@message] | ws:operation/ws:output[@message] | ws:operation/ws:fault[@message] | soap:header[ancestor::ws:operation and @message]"
+ mode="src.link">
+ <xsl:apply-templates select="$consolidated-wsdl/ws:message[@name = substring-after( current()/@message, ':' )]"
+ mode="src.link-attribute"/>
+ </xsl:template>
+ <xsl:template match="ws:operation/ws:input[@message] | ws:operation/ws:output[@message] | ws:operation/ws:fault[@message] | soap:header[ancestor::ws:operation and @message]"
+ mode="src.link">
+ <xsl:apply-templates select="$consolidated-wsdl/ws:message[@name = substring-after( current()/@message, ':' )]"
+ mode="src.link-attribute"/>
+ </xsl:template>
+ <xsl:template match="ws:message/ws:part[@element or @type]" mode="src.link">
+ <xsl:variable name="elem-local-name" select="substring-after(@element, ':')"/>
+ <xsl:variable name="type-local-name" select="substring-after(@type, ':')"/>
+ <xsl:variable name="elem-name">
+ <xsl:choose>
+ <xsl:when test="$elem-local-name">
+ <xsl:value-of select="$elem-local-name"/>
+ </xsl:when>
+ <xsl:when test="$type-local-name">
+ <xsl:value-of select="$type-local-name"/>
+ </xsl:when>
+ <xsl:when test="@element">
+ <xsl:value-of select="@element"/>
+ </xsl:when>
+ <xsl:when test="@type">
+ <xsl:value-of select="@type"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:call-template name="src.syntax-error"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+
+ <xsl:apply-templates select="$consolidated-xsd[@name = $elem-name]" mode="src.link-attribute"/>
+ </xsl:template>
+ <xsl:template match="ws:service/ws:port[@binding]" mode="src.link">
+ <xsl:variable name="binding-name">
+ <xsl:apply-templates select="@binding" mode="qname.normalized"/>
+ </xsl:variable>
+ <xsl:apply-templates select="$consolidated-wsdl/ws:binding[@name = $binding-name]"
+ mode="src.link-attribute"/>
+ </xsl:template>
+ <xsl:template match="ws:operation[@name and parent::ws:binding/@type]" mode="src.link">
+ <xsl:variable name="type-name">
+ <xsl:apply-templates select="../@type" mode="qname.normalized"/>
+ </xsl:variable>
+ <xsl:apply-templates select="$consolidated-wsdl/ws:portType[@name = $type-name]/ws:operation[@name = current()/@name]"
+ mode="src.link-attribute"/>
+ </xsl:template>
+ <xsl:template match="xsd:element[@ref or @type]" mode="src.link">
+ <xsl:variable name="ref-or-type">
+ <xsl:choose>
+ <xsl:when test="@type">
+ <xsl:value-of select="@type"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="@ref"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+
+ <xsl:variable name="type-local-name" select="substring-after($ref-or-type, ':')"/>
+ <xsl:variable name="xsd-name">
+ <xsl:choose>
+ <xsl:when test="$type-local-name">
+ <xsl:value-of select="$type-local-name"/>
+ </xsl:when>
+ <xsl:when test="$ref-or-type">
+ <xsl:value-of select="$ref-or-type"/>
+ </xsl:when>
+ <xsl:otherwise/>
+ </xsl:choose>
+ </xsl:variable>
+
+ <xsl:if test="$xsd-name">
+ <xsl:variable name="msg"
+ select="$consolidated-xsd[@name = $xsd-name and contains(local-name(), 'Type')][1]"/>
+ <xsl:apply-templates select="$msg" mode="src.link-attribute"/>
+ </xsl:if>
+ </xsl:template>
+ <xsl:template match="xsd:attribute[contains(@ref, 'arrayType')]" mode="src.link">
+ <xsl:variable name="att-array-type"
+ select="substring-before(@*[local-name() = 'arrayType'], '[]')"/>
+ <xsl:variable name="xsd-local-name" select="substring-after($att-array-type, ':')"/>
+ <xsl:variable name="xsd-name">
+ <xsl:choose>
+ <xsl:when test="$xsd-local-name">
+ <xsl:value-of select="$xsd-local-name"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$att-array-type"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:if test="$xsd-name">
+ <xsl:variable name="msg" select="$consolidated-xsd[@name = $xsd-name][1]"/>
+ <xsl:apply-templates select="$msg" mode="src.link-attribute"/>
+ </xsl:if>
+ </xsl:template>
+ <xsl:template match="xsd:extension | xsd:restriction" mode="src.link">
+ <xsl:variable name="xsd-local-name" select="substring-after(@base, ':')"/>
+ <xsl:variable name="xsd-name">
+ <xsl:choose>
+ <xsl:when test="$xsd-local-name">
+ <xsl:value-of select="$xsd-local-name"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="@type"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:variable name="msg" select="$consolidated-xsd[@name = $xsd-name][1]"/>
+ <xsl:apply-templates select="$msg" mode="src.link-attribute"/>
+ </xsl:template>
+ <xsl:template name="src.elem">
+ <xsl:param name="src.elem.start-slash"/>
+ <xsl:param name="src.elem.end-slash"/>
+
+ <xsl:value-of select="concat('&lt;', $src.elem.start-slash, name(.))"
+ disable-output-escaping="no"/>
+ <xsl:if test="not($src.elem.start-slash)">
+ <xsl:apply-templates select="@*" mode="src"/>
+ <xsl:apply-templates select="." mode="src.namespace"/>
+ </xsl:if>
+ <xsl:value-of select="concat($src.elem.end-slash, '&gt;')" disable-output-escaping="no"/>
+ </xsl:template>
+ <xsl:template match="@*" mode="src">
+ <xsl:text> </xsl:text>
+ <span class="xml-att">
+ <xsl:value-of select="concat(name(), '=')"/>
+ <span class="xml-att-val">
+ <xsl:value-of select="concat('&#34;', ., '&#34;')" disable-output-escaping="yes"/>
+ </span>
+ </span>
+ </xsl:template>
+ <xsl:template match="*" mode="src.namespace">
+ <xsl:variable name="supports-namespace-axis" select="count(/*/namespace::*) &gt; 0"/>
+ <xsl:variable name="current" select="current()"/>
+
+ <xsl:choose>
+ <xsl:when test="count(/*/namespace::*) &gt; 0">
+ <!--
+ When the namespace axis is present (e.g. Internet Explorer), we can simulate
+ the namespace declarations by comparing the namespaces in scope on this element
+ with those in scope on the parent element. Any difference must have been the
+ result of a namespace declaration. Note that this doesn't reflect the actual
+ source - it will strip out redundant namespace declarations.
+ -->
+ <xsl:for-each select="namespace::*[. != 'http://www.w3.org/XML/1998/namespace']">
+ <xsl:if test="not($current/parent::*[namespace::*[. = current()]])">
+ <div class="xml-att">
+ <xsl:text> xmlns</xsl:text>
+ <xsl:if test="string-length(name())">:</xsl:if>
+ <xsl:value-of select="concat(name(), '=')"/>
+ <span class="xml-att-val">
+ <xsl:value-of select="concat('&#34;', ., '&#34;')" disable-output-escaping="yes"/>
+ </span>
+ </div>
+ </xsl:if>
+ </xsl:for-each>
+ </xsl:when>
+ <xsl:otherwise>
+ <!--
+ When the namespace axis isn't supported (e.g. Mozilla), we can simulate
+ appropriate declarations from namespace elements.
+ This currently doesn't check for namespaces on attributes.
+ In the general case we can't reliably detect the use of QNames in content, but
+ in the case of schema, we know which content could contain a QName and look
+ there too. This mechanism is rather unpleasant though, since it records
+ namespaces where they are used rather than showing where they are declared
+ (on some parent element) in the source. Yukk!
+ -->
+ <xsl:if test="namespace-uri(.) != namespace-uri(parent::*) or not(parent::*)">
+ <span class="xml-att">
+ <xsl:text> xmlns</xsl:text>
+ <xsl:if test="substring-before(name(),':') != ''">:</xsl:if>
+ <xsl:value-of select="substring-before(name(),':')"/>
+ <xsl:text>=</xsl:text>
+ <span class="xml-att-val">
+ <xsl:value-of select="concat('&#34;', namespace-uri(.), '&#34;')" disable-output-escaping="yes"/>
+ </span>
+ </span>
+ </xsl:if>
+ </xsl:otherwise>
+ </xsl:choose>
+
+ </xsl:template>
+ <xsl:template match="text()" mode="src">
+ <span class="xml-text">
+ <xsl:value-of select="." disable-output-escaping="no"/>
+ </span>
+ </xsl:template>
+ <xsl:template match="comment()" mode="src">
+ <div class="xml-comment">
+ <xsl:text disable-output-escaping="no">&lt;!-- </xsl:text>
+ <xsl:value-of select="." disable-output-escaping="no"/>
+ <xsl:text disable-output-escaping="no"> --&gt;
+</xsl:text>
+ </div>
+ </xsl:template>
+ <xsl:template match="processing-instruction()" mode="src">
+ <div class="xml-proc">
+ <xsl:text disable-output-escaping="no">&lt;?</xsl:text>
+ <xsl:copy-of select="name(.)"/>
+ <xsl:value-of select="concat(' ', .)" disable-output-escaping="yes"/>
+ <xsl:text disable-output-escaping="no"> ?&gt;
+</xsl:text>
+ </div>
+ </xsl:template>
+
+ <!--
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+ End of included transformation: wsdl-viewer-src.xsl
+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+-->
+
+
+
+
+
+<!--
+==================================================================
+ Starting point
+==================================================================
+-->
+
+<xsl:template match="/">
+ <html>
+ <xsl:call-template name="head.render"/>
+ <xsl:call-template name="body.render"/>
+ </html>
+ </xsl:template>
+
+
+
+ <!--
+==================================================================
+ Rendering: HTML head
+==================================================================
+-->
+
+<xsl:template name="head.render">
+ <head>
+ <title>
+ <xsl:value-of select="concat($html-title, ' - ', 'Generated by wsdl-viewer.xsl')"/>
+ </title>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8"/>
+ <meta http-equiv="content-script-type" content="text/javascript"/>
+ <meta http-equiv="content-style-type" content="text/css"/>
+ <meta name="Generator" content="http://tomi.vanek.sk/xml/wsdl-viewer.xsl"/>
+
+ <meta http-equiv="imagetoolbar" content="false"/>
+ <meta name="MSSmartTagsPreventParsing" content="true"/>
+
+ <style type="text/css">
+ <xsl:value-of select="$css" disable-output-escaping="yes"/>
+ </style>
+
+ <script src="wsdl-viewer.js" type="text/javascript" language="javascript">
+ <xsl:comment>
+ <xsl:text>
+ // </xsl:text>
+ </xsl:comment>
+ </script>
+ </head>
+ </xsl:template>
+
+
+
+ <!--
+==================================================================
+ Rendering: HTML body
+==================================================================
+-->
+
+<xsl:template name="body.render">
+ <body id="operations">
+ <div id="outer_box">
+ <div id="inner_box" onload="pagingInit()">
+ <xsl:call-template name="title.render"/>
+
+
+ <!-- TODO: pages with tabs for selecting some aspect of the WSDL
+ <xsl:call-template name="navig.render"/>
+-->
+
+ <xsl:call-template name="content.render"/>
+ <xsl:call-template name="footer.render"/>
+ </div>
+ </div>
+ </body>
+ </xsl:template>
+
+
+
+ <!--
+==================================================================
+ Rendering: heading
+==================================================================
+-->
+
+<xsl:template name="title.render">
+ <div id="header">
+ <h1>
+ <xsl:value-of select="$html-title"/>
+ </h1>
+ </div>
+ </xsl:template>
+
+
+
+ <!--
+==================================================================
+ Rendering: navigation
+==================================================================
+-->
+
+<xsl:template name="navig.render">
+ <div id="outer_nav">
+ <div id="nav" class="floatcontainer">
+ <ul>
+ <li id="nav-service">
+ <a href="#page.service">Service</a>
+ </li>
+ <li id="nav-operations">
+ <a href="#page.operations">Operations</a>
+ </li>
+ <li id="nav-wsdl">
+ <a href="#page.src">Source Code</a>
+ </li>
+
+
+ <!-- <li id="nav-client"><a href="#TODO-1">Client</a></li>
+
+
+
+ <li id="nav-about">
+ <a href="#page.about" class="current">About</a>
+ </li>-->
+ </ul>
+ </div>
+ </div>
+ </xsl:template>
+
+
+
+ <!--
+==================================================================
+ Rendering: content
+==================================================================
+-->
+
+<xsl:template name="content.render">
+ <div id="content">
+ <xsl:if test="$ENABLE-SERVICE-PARAGRAPH">
+ <xsl:call-template name="service.render"/>
+ </xsl:if>
+ <xsl:if test="$ENABLE-OPERATIONS-PARAGRAPH">
+ <xsl:call-template name="operations.render"/>
+ </xsl:if>
+ <xsl:if test="$ENABLE-SRC-CODE-PARAGRAPH">
+ <xsl:call-template name="src.render"/>
+ </xsl:if>
+ <xsl:if test="$ENABLE-ABOUT-PARAGRAPH">
+ <xsl:call-template name="about.render">
+ <xsl:with-param name="version" select="$wsdl-viewer.version"/>
+ </xsl:call-template>
+ </xsl:if>
+ </div>
+ </xsl:template>
+
+
+
+ <!--
+==================================================================
+ Rendering: footer
+==================================================================
+-->
+
+<xsl:template name="footer.render">
+ <div id="footer">
+ This page was generated by wsdl-viewer.xsl (<a href="http://tomi.vanek.sk">http://tomi.vanek.sk</a>)
+</div>
+ </xsl:template>
+
+
+
+ <!--
+==================================================================
+ Rendering: WSDL service information
+==================================================================
+-->
+
+<xsl:template name="service.render">
+ <div class="page">
+ <a class="target" name="page.service">
+ <h2>
+ <xsl:value-of select="$html-title"/>
+ </h2>
+ </a>
+ <xsl:apply-templates select="$consolidated-wsdl/*[local-name(.) = 'documentation']"
+ mode="documentation.render"/>
+ <xsl:apply-templates select="$consolidated-wsdl/ws:service|$consolidated-wsdl/ws2:service"
+ mode="service-start"/>
+ <xsl:if test="not($consolidated-wsdl/*[local-name() = 'service']/@name)">
+
+
+<!-- If the WS is without implementation, just with binding points = WS interface -->
+
+ <xsl:apply-templates select="$consolidated-wsdl/ws:binding" mode="service-start"/>
+ <xsl:apply-templates select="$consolidated-wsdl/ws2:interface" mode="service"/>
+ </xsl:if>
+ </div>
+ </xsl:template>
+
+
+
+ <!--
+==================================================================
+ Rendering: WSDL operations - detail
+==================================================================
+-->
+
+<xsl:template name="operations.render">
+ <div class="page">
+ <a class="target" name="page.operations">
+ <h2>Operations</h2>
+ </a>
+ <ul>
+ <xsl:apply-templates select="$consolidated-wsdl/ws:portType" mode="operations">
+ <xsl:sort select="@name"/>
+ </xsl:apply-templates>
+
+ <xsl:choose>
+ <xsl:when test="$consolidated-wsdl/*[local-name() = 'service']/@name">
+ <xsl:variable name="iface-name">
+ <xsl:apply-templates select="$consolidated-wsdl/*[local-name() = 'service']/@interface"
+ mode="qname.normalized"/>
+ </xsl:variable>
+ <xsl:apply-templates select="$consolidated-wsdl/ws2:interface[@name = $iface-name]"
+ mode="operations">
+ <xsl:sort select="@name"/>
+ </xsl:apply-templates>
+ </xsl:when>
+ <xsl:when test="$consolidated-wsdl/ws2:interface/@name">
+
+
+<!-- TODO: What to do if there are more interfaces? -->
+
+ <xsl:apply-templates select="$consolidated-wsdl/ws2:interface[1]" mode="operations"/>
+ </xsl:when>
+ <xsl:otherwise>
+
+
+<!-- TODO: Error message or handling somehow this unexpected situation -->
+
+ </xsl:otherwise>
+ </xsl:choose>
+ </ul>
+ </div>
+ </xsl:template>
+
+
+
+ <!--
+==================================================================
+ Rendering: WSDL and XSD source code files
+==================================================================
+-->
+
+<xsl:template name="src.render">
+ <div class="page">
+ <a class="target" name="page.src">
+ <h2>WSDL source code</h2>
+ </a>
+ <div class="box">
+ <div class="xml-proc">
+ <xsl:text>&lt;?xml version="1.0"?&gt;</xsl:text>
+ </div>
+ <xsl:apply-templates select="/" mode="src"/>
+ </div>
+
+ <xsl:apply-templates select="/*/*[local-name() = 'import'][@location]/@location" mode="src.import"/>
+ <xsl:apply-templates select="$consolidated-wsdl/*[local-name() = 'types']//xsd:import[@schemaLocation]/@schemaLocation | $consolidated-wsdl/*[local-name() = 'types']//xsd:include[@schemaLocation]/@schemaLocation"
+ mode="src.import"/>
+ </div>
+ </xsl:template>
+
+
+
+ <!--
+==================================================================
+ Rendering: About
+==================================================================
+-->
+
+<xsl:template name="about.render">
+ <xsl:param name="version"/>
+ <div class="page">
+ <a class="target" name="page.about">
+ <h2>About <em>wsdl-viewer.xsl</em>
+ </h2>
+ </a>
+ <div class="floatcontainer">
+ <div id="fix_column">
+ <div class="shadow">
+ <div class="box">
+ <xsl:call-template name="processor-info.render"/>
+ </div>
+ </div>
+ </div>
+
+ <div id="flexi_column">
+ <xsl:call-template name="about.detail">
+ <xsl:with-param name="version" select="$wsdl-viewer.version"/>
+ </xsl:call-template>
+ </div>
+ </div>
+ </div>
+ </xsl:template>
+
+
+</xsl:stylesheet> \ No newline at end of file
diff --git a/java/management/client/console/wsdm_operations_perspective.jsp b/java/management/client/console/wsdm_operations_perspective.jsp
new file mode 100644
index 0000000000..f4038b2e14
--- /dev/null
+++ b/java/management/client/console/wsdm_operations_perspective.jsp
@@ -0,0 +1,153 @@
+<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
+<%@ taglib uri='http://java.sun.com/jsp/jstl/core' prefix='c'%>
+<%@page import="org.apache.qpid.management.web.action.BrokerModel"%>
+<%@page import="java.util.Set"%>
+<%@page import="javax.management.ObjectName"%>
+<%@page import="org.apache.qpid.management.Names"%>
+<%@page import="java.util.*"%>
+<%
+ Map<String,String> java2Xml = new HashMap<String,String>();
+java2Xml.put(UUID.class.getName(),"qman:uuid");
+java2Xml.put(Long.class.getName(),"xsd:long");
+java2Xml.put(long.class.getName(),"xsd:long");
+java2Xml.put(Boolean.class.getName(),"xsd:boolean");
+java2Xml.put(boolean.class.getName(),"xsd:boolean");
+java2Xml.put(Double.class.getName(),"xsd:double");
+java2Xml.put(double.class.getName(),"xsd:double");
+java2Xml.put(Float.class.getName(),"xsd:float");
+java2Xml.put(float.class.getName(),"xsd:float");
+java2Xml.put(Integer.class.getName(),"xsd:integer");
+java2Xml.put(int.class.getName(),"xsd:integer");
+java2Xml.put(Short.class.getName(),"xsd:short");
+java2Xml.put(short.class.getName(),"xsd:short");
+java2Xml.put(String.class.getName(),"xsd:string");
+java2Xml.put(URI.class.getName(),"xsd:anyURI");
+java2Xml.put(Date.class.getName(),"xsd:dateTime");
+java2Xml.put(QName.class.getName(),"xsd:QName");
+java2Xml.put(Element.class.getName(),"xsd:element");
+java2Xml.put(byte[].class.getName(),"xsd:base64Binary");
+java2Xml.put(Long[].class.getName(),"qman:arrayOfLong");
+java2Xml.put(long[].class.getName(),"qman:arrayOfLong");
+java2Xml.put(Boolean[].class.getName(),"qman:arrayOfBoolean");
+java2Xml.put(boolean[].class.getName(),"qman:arrayOfBoolean");
+java2Xml.put(Double[].class.getName(),"qman:arrayOfDouble");
+java2Xml.put(double[].class.getName(),"qman:arrayOfDouble");
+java2Xml.put(Float[].class.getName(),"qman:arrayOfFloat");
+java2Xml.put(float[].class.getName(),"qman:arrayOfFloat");
+java2Xml.put(Integer[].class.getName(),"qman:arrayOfInteger");
+java2Xml.put(int[].class.getName(),"qman:arrayOfInteger");
+java2Xml.put(Short[].class.getName(),"qman:arrayOfShort");
+java2Xml.put(short[].class.getName(),"qman:arrayOfShort");
+java2Xml.put(String[].class.getName(),"qman:arrayOfString");
+java2Xml.put(URI[].class.getName(),"qman:arrayOfURI");
+java2Xml.put(Date[].class.getName(),"qman:arrayOfDate");
+java2Xml.put(Map.class.getName(),"qman:map");
+java2Xml.put(HashMap.class.getName(),"qman:map");
+
+pageContext.setAttribute("types",java2Xml);
+%>
+<%@page import="java.net.URI"%>
+<%@page import="javax.xml.namespace.QName"%>
+<%@page import="org.w3c.dom.Element"%>
+<html>
+ <head>
+ <link rel="stylesheet" href="<%=request.getContextPath()%>/images/style.css" type="text/css" />
+ <title>QMan Administration Console</title>
+ </head>
+ <body>
+ <div id="page" align="center">
+ <jsp:include page="/fragments/header.jsp">
+ <jsp:param name="title" value="Resource Management - WS-DM Operations Perspective"/>
+ </jsp:include>
+
+ <div id="content" align="center">
+ <jsp:include page="/fragments/menu.jsp"/>
+
+ <div id="contenttext">
+ <div id="wsdmmenu" align="left">
+ <ul>
+ <li><a href="<%=request.getContextPath()%>/jmx_perspective?resourceId=${resourceId}"><span>JMX</span></a></li>
+ <li><a href="<%=request.getContextPath()%>/wsdm_properties_perspective?wsresourceId=${resourceId}"><span>WS-DM</span></a></li>
+ </ul>
+ </div>
+ <br />
+ <div class="panel" align="justify">
+ <span class="bodytext">
+ <table width="100%">
+ <tr>
+ <td valign="top" colspan="2">
+ <fieldset>
+ <legend>Resource ID</legend>
+ <ul>
+ <c:forEach var="property" items="${nameAttributes}">
+ <li>
+ <c:out value="${property}"/>
+ </li>
+ </c:forEach>
+ </ul>
+ </fieldset>
+ </td>
+ </tr>
+ <tr>
+ <td valign="top">
+ <div id="wsdmmenu" align="left" style="font-size: small;">
+ <ul>
+ <li><a href="<%=request.getContextPath()%>/wsdm_properties_perspective?resourceId=${resourceId}"><span>Properties</span></a></li>
+ <li><a href="<%=request.getContextPath()%>/wsdm_operations_perspective?resourceId=${resourceId}""><span>Operations</span></a></li>
+ <li><a href="<%=request.getContextPath()%>/wsdm_wsdl_perspective?resourceId=${resourceId}""><span>WSDL</span></a></li>
+ <li><a href="<%=request.getContextPath()%>/wsdm_rmd_perspective?resourceId=${resourceId}""><span>RDM</span></a></li>
+ </ul>
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td valign="top">
+ <fieldset>
+ <legend>Attributes</legend>
+ <table width="100%" cellspacing="1">
+ <tr>
+ <th nowrap="nowrap" align="center">Name</th>
+ <th nowrap="nowrap" align="center">Arguments</th>
+ <th nowrap="nowrap" align="center">Faults</th>
+ </tr>
+ <c:forEach var="operation" items="${metadata.operations}" varStatus="rowCounter">
+ <c:choose>
+ <c:when test="${rowCounter.count % 2 == 0}">
+ <c:set var="bgcolor" scope="page" value="EAEAEA"/>
+ </c:when>
+ <c:otherwise>
+ <c:set var="bgcolor" scope="page" value="FFFFFF"/>
+ </c:otherwise>
+ </c:choose>
+ <tr>
+ <td nowrap style="font-size: xx-small; font-weight: bold;" bgcolor="${bgcolor}"><c:out value="${operation.name}"/></td>
+ <td nowrap style="font-size: xx-small; font-weight: bold;" bgcolor="${bgcolor}">
+ <ul>
+ <c:forEach var="argument" items="${operation.signature}">
+ <li>
+ <c:out value="${argument.name}"/> (<c:out value="${types[argument.type]}"/>)
+ </li>
+ </c:forEach>
+ </ul>
+ </td>
+ <td nowrap style="font-size: xx-small; font-weight: bold;" bgcolor="${bgcolor}">
+ <ul>
+ <li>qman:EntityInstanceNotFoundFault</li>
+ <li>qman:OperationInvocationFault</li>
+ <li>qman:QManFault</li>
+ </ul>
+ </td>
+ </tr>
+ </c:forEach>
+ </table>
+ </fieldset>
+ </td>
+ </tr>
+ </table>
+ </span>
+ </div>
+ </div>
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/java/management/client/console/wsdm_properties_perspective.jsp b/java/management/client/console/wsdm_properties_perspective.jsp
new file mode 100644
index 0000000000..2e8699e309
--- /dev/null
+++ b/java/management/client/console/wsdm_properties_perspective.jsp
@@ -0,0 +1,197 @@
+<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
+<%@ taglib uri='http://java.sun.com/jsp/jstl/core' prefix='c'%>
+<%@page import="org.apache.qpid.management.web.action.BrokerModel"%>
+<%@page import="java.util.Set"%>
+<%@page import="javax.management.ObjectName"%>
+<%@page import="org.apache.qpid.management.Names"%>
+<%@page import="java.util.List"%>
+<%@page import="java.util.*"%>
+
+<%
+ Map<String,String> java2Xml = new HashMap<String,String>();
+java2Xml.put(UUID.class.getName(),"qman:uuid");
+java2Xml.put(Long.class.getName(),"xsd:long");
+java2Xml.put(long.class.getName(),"xsd:long");
+java2Xml.put(Boolean.class.getName(),"xsd:boolean");
+java2Xml.put(boolean.class.getName(),"xsd:boolean");
+java2Xml.put(Double.class.getName(),"xsd:double");
+java2Xml.put(double.class.getName(),"xsd:double");
+java2Xml.put(Float.class.getName(),"xsd:float");
+java2Xml.put(float.class.getName(),"xsd:float");
+java2Xml.put(Integer.class.getName(),"xsd:integer");
+java2Xml.put(int.class.getName(),"xsd:integer");
+java2Xml.put(Short.class.getName(),"xsd:short");
+java2Xml.put(short.class.getName(),"xsd:short");
+java2Xml.put(String.class.getName(),"xsd:string");
+java2Xml.put(URI.class.getName(),"xsd:anyURI");
+java2Xml.put(Date.class.getName(),"xsd:dateTime");
+java2Xml.put(QName.class.getName(),"xsd:QName");
+java2Xml.put(Element.class.getName(),"xsd:element");
+java2Xml.put(byte[].class.getName(),"xsd:base64Binary");
+java2Xml.put(Long[].class.getName(),"qman:arrayOfLong");
+java2Xml.put(long[].class.getName(),"qman:arrayOfLong");
+java2Xml.put(Boolean[].class.getName(),"qman:arrayOfBoolean");
+java2Xml.put(boolean[].class.getName(),"qman:arrayOfBoolean");
+java2Xml.put(Double[].class.getName(),"qman:arrayOfDouble");
+java2Xml.put(double[].class.getName(),"qman:arrayOfDouble");
+java2Xml.put(Float[].class.getName(),"qman:arrayOfFloat");
+java2Xml.put(float[].class.getName(),"qman:arrayOfFloat");
+java2Xml.put(Integer[].class.getName(),"qman:arrayOfInteger");
+java2Xml.put(int[].class.getName(),"qman:arrayOfInteger");
+java2Xml.put(Short[].class.getName(),"qman:arrayOfShort");
+java2Xml.put(short[].class.getName(),"qman:arrayOfShort");
+java2Xml.put(String[].class.getName(),"qman:arrayOfString");
+java2Xml.put(URI[].class.getName(),"qman:arrayOfURI");
+java2Xml.put(Date[].class.getName(),"qman:arrayOfDate");
+java2Xml.put(Map.class.getName(),"qman:map");
+java2Xml.put(HashMap.class.getName(),"qman:map");
+
+pageContext.setAttribute("types",java2Xml);
+%>
+<%@page import="java.net.URI"%>
+<%@page import="javax.xml.namespace.QName"%>
+<%@page import="org.w3c.dom.Element"%>
+<html>
+ <head>
+ <link rel="stylesheet" href="<%=request.getContextPath()%>/images/style.css" type="text/css" />
+ <title>QMan Administration Console</title>
+ </head>
+ <body>
+ <div id="page" align="center">
+ <jsp:include page="/fragments/header.jsp">
+ <jsp:param name="title" value="Resource Management - WS-DM Properties Perspective"/>
+ </jsp:include>
+
+ <div id="content" align="center">
+ <jsp:include page="/fragments/menu.jsp"/>
+
+ <div id="contenttext">
+ <div id="wsdmmenu" align="left">
+ <ul>
+ <li><a href="<%=request.getContextPath()%>/jmx_perspective?resourceId=${resourceId}"><span>JMX</span></a></li>
+ <li><a href="<%=request.getContextPath()%>/wsdm_properties_perspective?resourceId=${resourceId}"><span>WS-DM</span></a></li>
+ </ul>
+ </div>
+ <br />
+ <div class="panel" align="justify">
+ <span class="bodytext">
+ <table width="100%">
+ <tr>
+ <td valign="top" colspan="2">
+ <fieldset>
+ <legend>Resource ID</legend>
+ <ul>
+ <c:forEach var="property" items="${nameAttributes}">
+ <li>
+ <c:out value="${property}"/>
+ </li>
+ </c:forEach>
+ </ul>
+ </fieldset>
+ </td>
+ </tr>
+ <tr>
+ <td valign="top">
+ <div id="wsdmmenu" align="left" style="font-size: small;">
+ <ul>
+ <li><a href="<%=request.getContextPath()%>/wsdm_properties_perspective?resourceId=${resourceId}"><span>Properties</span></a></li>
+ <li><a href="<%=request.getContextPath()%>/wsdm_operations_perspective?resourceId=${resourceId}""><span>Operations</span></a></li>
+ <li><a href="<%=request.getContextPath()%>/wsdm_wsdl_perspective?resourceId=${resourceId}""><span>WSDL</span></a></li>
+ <li><a href="<%=request.getContextPath()%>/wsdm_rmd_perspective?resourceId=${resourceId}""><span>RDM</span></a></li>
+ </ul>
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td valign="top">
+ <fieldset>
+ <legend>Attributes</legend>
+ <table width="100%" cellspacing="1">
+ <tr>
+ <th nowrap="nowrap" align="center">Name</th>
+ <th nowrap="nowrap" align="center" >Type</th>
+ <th nowrap="nowrap" align="center">Value</th>
+ <th nowrap="nowrap" align="center">Mutable</th>
+ <th nowrap="nowrap" align="center">Access</th>
+ <th nowrap="nowrap" align="center">Valid Values</th>
+ <th nowrap="nowrap" align="center">Static Values</th>
+ <th nowrap="nowrap" align="center">Initial Values</th>
+ </tr>
+ <c:forEach var="attribute" items="${metadata.attributes}" varStatus="rowCounter">
+ <c:choose>
+ <c:when test="${rowCounter.count % 2 == 0}">
+ <c:set var="bgcolor" scope="page" value="EAEAEA"/>
+ </c:when>
+ <c:otherwise>
+ <c:set var="bgcolor" scope="page" value="FFFFFF"/>
+ </c:otherwise>
+ </c:choose>
+ <c:choose>
+ <c:when test="${attribute.writable}">
+ <c:set var="access" scope="page" value="RW"/>
+ </c:when>
+ <c:otherwise>
+ <c:set var="access" scope="page" value="RO"/>
+ </c:otherwise>
+ </c:choose>
+ <tr>
+ <td nowrap style="font-size: xx-small; font-weight: bold;" bgcolor="${bgcolor}"><c:out value="${attribute.name}"/></td>
+ <td nowrap style="font-size: xx-small; font-weight: bold;" bgcolor="${bgcolor}"><c:out value="${types[attribute.type]}"/></td>
+ <td style="font-size: xx-small; font-weight: bold;" bgcolor="${bgcolor}"><c:out value="${attributes[attribute.name]}"/></td>
+ <td nowrap style="font-size: xx-small; font-weight: bold;" bgcolor="${bgcolor}">
+ &radic;
+ <%--
+ <c:out value="${attribute.mutable}"/>
+ --%>
+ </td>
+ <td nowrap style="font-size: xx-small; font-weight: bold;" bgcolor="${bgcolor}"><c:out value="${access}"/></td>
+ <td nowrap style="font-size: xx-small; font-weight: bold;" bgcolor="${bgcolor}">
+ N.A.
+<%--
+ <ul>
+ <c:forEach var="value" items="${attribute.validValues}">
+ <li>
+ <c:out value="${value}"/>
+ </li>
+ </c:forEach>
+ </ul>
+--%>
+ </td>
+ <td nowrap style="font-size: xx-small; font-weight: bold;" bgcolor="${bgcolor}">
+ N.A.
+<%--
+ <ul>
+ <c:forEach var="value" items="${attribute.staticValues}">
+ <li>
+ <c:out value="${value}"/>
+ </li>
+ </c:forEach>
+ </ul>
+--%>
+ </td>
+ <td nowrap style="font-size: xx-small; font-weight: bold;" bgcolor="${bgcolor}">
+ N.A.
+<%--
+ <ul>
+ <c:forEach var="value" items="${attribute.initialValues}">
+ <li>
+ <c:out value="${value}"/>
+ </li>
+ </c:forEach>
+ </ul>
+--%>
+ </td>
+ </tr>
+ </c:forEach>
+ </table>
+ </fieldset>
+ </td>
+ </tr>
+ </table>
+ </span>
+ </div>
+ </div>
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/java/management/client/console/wsdm_rmd_perspective.jsp b/java/management/client/console/wsdm_rmd_perspective.jsp
new file mode 100644
index 0000000000..fc114a962d
--- /dev/null
+++ b/java/management/client/console/wsdm_rmd_perspective.jsp
@@ -0,0 +1,82 @@
+<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
+<%@ taglib uri='http://java.sun.com/jsp/jstl/core' prefix="c"%>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/xml" prefix="x"%>
+
+<%@page import="org.apache.qpid.management.web.action.BrokerModel"%>
+<%@page import="java.util.Set"%>
+<%@page import="javax.management.ObjectName"%>
+<%@page import="org.apache.qpid.management.Names"%>
+<%@page import="java.util.*"%>
+<%@page import="java.net.URI"%>
+<%@page import="javax.xml.namespace.QName"%>
+<%@page import="org.w3c.dom.Element"%>
+<html>
+ <head>
+ <link rel="stylesheet" href="<%=request.getContextPath()%>/images/style.css" type="text/css" />
+ <title>QMan Administration Console</title>
+ </head>
+ <body>
+ <div id="page" align="center">
+ <jsp:include page="/fragments/header.jsp">
+ <jsp:param name="title" value="Resource Management - WS-DM WSDL Perspective"/>
+ </jsp:include>
+
+ <div id="content" align="center">
+ <jsp:include page="/fragments/menu.jsp"/>
+
+ <div id="contenttext">
+ <div id="wsdmmenu" align="left">
+ <ul>
+ <li><a href="<%=request.getContextPath()%>/jmx_perspective?resourceId=${resourceId}"><span>JMX</span></a></li>
+ <li><a href="<%=request.getContextPath()%>/wsdm_properties_perspective?wsresourceId=${resourceId}"><span>WS-DM</span></a></li>
+ </ul>
+ </div>
+ <br />
+ <div class="panel" align="justify">
+ <span class="bodytext">
+ <table width="100%">
+ <tr>
+ <td valign="top" colspan="2">
+ <fieldset>
+ <legend>Resource ID</legend>
+ <ul>
+ <c:forEach var="property" items="${nameAttributes}">
+ <li>
+ <c:out value="${property}"/>
+ </li>
+ </c:forEach>
+ </ul>
+ </fieldset>
+ </td>
+ </tr>
+ <tr>
+ <td valign="top">
+ <div id="wsdmmenu" align="left" style="font-size: small;">
+ <ul>
+ <li><a href="<%=request.getContextPath()%>/wsdm_properties_perspective?resourceId=${resourceId}"><span>Properties</span></a></li>
+ <li><a href="<%=request.getContextPath()%>/wsdm_operations_perspective?resourceId=${resourceId}""><span>Operations</span></a></li>
+ <li><a href="<%=request.getContextPath()%>/wsdm_wsdl_perspective?resourceId=${resourceId}""><span>WSDL</span></a></li>
+ <li><a href="<%=request.getContextPath()%>/wsdm_rmd_perspective?resourceId=${resourceId}""><span>RDM</span></a></li>
+ </ul>
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td valign="top">
+ <div class="panel" align="justify" style="height:500px; overflow-y:auto;">
+ <c:set var="xml">
+ ${wsdl}
+ </c:set>
+ <c:import var="xslt" url="wsdl-viewer.xsl" />
+ <x:transform xml="${xml}" xslt="${xslt}" />
+ </div>
+ </td>
+ </tr>
+ </table>
+ </span>
+ </div>
+ </div>
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/java/management/client/console/wsdm_wsdl_perspective.jsp b/java/management/client/console/wsdm_wsdl_perspective.jsp
new file mode 100644
index 0000000000..b725716fd8
--- /dev/null
+++ b/java/management/client/console/wsdm_wsdl_perspective.jsp
@@ -0,0 +1,82 @@
+<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
+<%@ taglib uri='http://java.sun.com/jsp/jstl/core' prefix="c"%>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/xml" prefix="x"%>
+
+<%@page import="org.apache.qpid.management.web.action.BrokerModel"%>
+<%@page import="java.util.Set"%>
+<%@page import="javax.management.ObjectName"%>
+<%@page import="org.apache.qpid.management.Names"%>
+<%@page import="java.util.*"%>
+<%@page import="java.net.URI"%>
+<%@page import="javax.xml.namespace.QName"%>
+<%@page import="org.w3c.dom.Element"%>
+<html>
+ <head>
+ <link rel="stylesheet" href="<%=request.getContextPath()%>/images/style.css" type="text/css" />
+ <title>QMan Administration Console</title>
+ </head>
+ <body>
+ <div id="page" align="center">
+ <jsp:include page="/fragments/header.jsp">
+ <jsp:param name="title" value="Resource Management - WS-DM WSDL Perspective"/>
+ </jsp:include>
+
+ <div id="content" align="center">
+ <jsp:include page="/fragments/menu.jsp"/>
+
+ <div id="contenttext">
+ <div id="wsdmmenu" align="left">
+ <ul>
+ <li><a href="<%=request.getContextPath()%>/jmx_perspective?resourceId=${resourceId}"><span>JMX</span></a></li>
+ <li><a href="<%=request.getContextPath()%>/wsdm_properties_perspective?resourceId=${resourceId}"><span>WS-DM</span></a></li>
+ </ul>
+ </div>
+ <br />
+ <div class="panel" align="justify">
+ <span class="bodytext">
+ <table width="100%">
+ <tr>
+ <td valign="top" colspan="2">
+ <fieldset>
+ <legend>Resource ID</legend>
+ <ul>
+ <c:forEach var="property" items="${nameAttributes}">
+ <li style="color : black;">
+ <c:out value="${property}"/>
+ </li>
+ </c:forEach>
+ </ul>
+ </fieldset>
+ </td>
+ </tr>
+ <tr>
+ <td valign="top">
+ <div id="wsdmmenu" align="left" style="font-size: small;">
+ <ul>
+ <li><a href="<%=request.getContextPath()%>/wsdm_properties_perspective?resourceId=${resourceId}"><span>Properties</span></a></li>
+ <li><a href="<%=request.getContextPath()%>/wsdm_operations_perspective?resourceId=${resourceId}""><span>Operations</span></a></li>
+ <li><a href="<%=request.getContextPath()%>/wsdm_wsdl_perspective?resourceId=${resourceId}""><span>WSDL</span></a></li>
+ <li><a href="<%=request.getContextPath()%>/wsdm_rmd_perspective?resourceId=${resourceId}""><span>RDM</span></a></li>
+ </ul>
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td valign="top">
+ <div class="panel" align="justify" style="height:500px; overflow-y:auto;">
+ <c:set var="xml">
+ ${wsdl}
+ </c:set>
+ <c:import var="xslt" url="wsdl-viewer.xsl" />
+ <x:transform xml="${xml}" xslt="${xslt}" />
+ </div>
+ </td>
+ </tr>
+ </table>
+ </span>
+ </div>
+ </div>
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/java/management/client/web.xml b/java/management/client/web.xml
index 54bb50ae4f..0f8992d1bf 100644
--- a/java/management/client/web.xml
+++ b/java/management/client/web.xml
@@ -25,17 +25,99 @@
<servlet-class>org.apache.qpid.management.servlet.WSDMAdapter</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>
+ <servlet>
+ <display-name>View Console (System Overview) Action</display-name>
+ <servlet-name>ViewConsole</servlet-name>
+ <servlet-class>org.apache.qpid.management.web.action.ConsoleAction</servlet-class>
+ <load-on-startup>5</load-on-startup>
+ </servlet>
+ <servlet>
+ <display-name>View Resources</display-name>
+ <servlet-name>ResourceManagement</servlet-name>
+ <servlet-class>org.apache.qpid.management.web.action.ResourcesManagementAction</servlet-class>
+ </servlet>
+ <servlet>
+ <display-name>JMX Perspective</display-name>
+ <servlet-name>JmxPerspective</servlet-name>
+ <servlet-class>org.apache.qpid.management.web.action.JmxPerspectiveAction</servlet-class>
+ </servlet>
+ <servlet>
+ <display-name>WSDM Properties Perspective</display-name>
+ <servlet-name>WsdmPropertiesPerspective</servlet-name>
+ <servlet-class>org.apache.qpid.management.web.action.WsdmPropertiesPerspectiveAction</servlet-class>
+ </servlet>
+ <servlet>
+ <display-name>WSDM Operations Perspective</display-name>
+ <servlet-name>WsdmOperationsPerspective</servlet-name>
+ <servlet-class>org.apache.qpid.management.web.action.WsdmOperationsPerspectiveAction</servlet-class>
+ </servlet>
+ <servlet>
+ <display-name>WSDM WSDL Perspective</display-name>
+ <servlet-name>WsdmWsdlPerspective</servlet-name>
+ <servlet-class>org.apache.qpid.management.web.action.WsdmWsdlPerspectiveAction</servlet-class>
+ </servlet>
+ <servlet>
+ <display-name>WSDM RMD Perspective</display-name>
+ <servlet-name>WsdmRmdPerspective</servlet-name>
+ <servlet-class>org.apache.qpid.management.web.action.WsdmRmdPerspectiveAction</servlet-class>
+ </servlet>
+ <servlet>
+ <display-name>Logging Configurator</display-name>
+ <servlet-name>LoggingConfiguration</servlet-name>
+ <servlet-class>org.apache.qpid.management.web.action.LoggingConfigurationAction</servlet-class>
+ </servlet>
+ <servlet>
+ <display-name>Brokers Management</display-name>
+ <servlet-name>BrokersManagement</servlet-name>
+ <servlet-class>org.apache.qpid.management.web.action.BrokersManagementAction</servlet-class>
+ </servlet>
<servlet>
<description>
Connects QMAn to one or more brokers depending from what is
specified on the given (via system property) configuration
- file.
+ file.
</description>
<display-name>Connect QMan to Broker</display-name>
<servlet-name>ConnectQManToBroker</servlet-name>
<servlet-class>org.apache.qpid.management.servlet.ConnectQManToBroker</servlet-class>
<load-on-startup>1</load-on-startup>
- </servlet>
+ </servlet>
+ <servlet-mapping>
+ <servlet-name>ResourceManagement</servlet-name>
+ <url-pattern>/resources_management</url-pattern>
+ </servlet-mapping>
+ <servlet-mapping>
+ <servlet-name>WsdmWsdlPerspective</servlet-name>
+ <url-pattern>/wsdm_wsdl_perspective</url-pattern>
+ </servlet-mapping>
+ <servlet-mapping>
+ <servlet-name>WsdmRmdPerspective</servlet-name>
+ <url-pattern>/wsdm_rmd_perspective</url-pattern>
+ </servlet-mapping>
+ <servlet-mapping>
+ <servlet-name>WsdmOperationsPerspective</servlet-name>
+ <url-pattern>/wsdm_operations_perspective</url-pattern>
+ </servlet-mapping>
+ <servlet-mapping>
+ <servlet-name>WsdmPropertiesPerspective</servlet-name>
+ <url-pattern>/wsdm_properties_perspective</url-pattern>
+ </servlet-mapping>
+ <servlet-mapping>
+ <servlet-name>BrokersManagement</servlet-name>
+ <url-pattern>/brokers_management</url-pattern>
+ </servlet-mapping>
+ <servlet-mapping>
+ <servlet-name>JmxPerspective</servlet-name>
+ <url-pattern>/jmx_perspective</url-pattern>
+ </servlet-mapping>
+ <servlet-mapping>
+ <servlet-name>LoggingConfiguration</servlet-name>
+ <url-pattern>/logging_configuration</url-pattern>
+ </servlet-mapping>
+ <servlet-mapping>
+ <servlet-name>ViewConsole</servlet-name>
+ <url-pattern>/console</url-pattern>
+ </servlet-mapping>
<servlet-mapping>
<servlet-name>ConnectQManToBroker</servlet-name>
<url-pattern>/test/*</url-pattern>