<?xml version="1.0" encoding="UTF-8"?>
<!-- @(#)$Id: MetaXSLgui.xsl,v 1.1 2003/05/23 10:29:13 ali Exp $ -->
<xsl:stylesheet version="1.0"
		xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
		xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsl:output method="xml" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:param name="targetTag">
  <xsl:value-of select="/xsd:schema/xsd:element[1]/@name"/>
</xsl:param > 

<xsl:template match="xsd:schema">
  <xsl:text disable-output-escaping="yes">
    &lt;xsl:stylesheet version="1.0"
	xmlns:xsl="http://www.w3.org/1999/XSL/Transform"&gt;
    &lt;xsl:output method="html" encoding="UTF-8" indent="yes"/&gt;
    &lt;xsl:strip-space elements="*"/&gt;
  </xsl:text>
  <xsl:element name="xsl:template">
    <xsl:attribute name="match">
      <xsl:value-of select="/xsd:schema/xsd:element/@name"/>
    </xsl:attribute>
    <xsl:element name="xsl:param">
      <xsl:attribute name="name">
        <xsl:text>root</xsl:text>
      </xsl:attribute>
      <xsl:value-of select="concat('/', /xsd:schema/xsd:element/@name)"/>
    </xsl:element> 
    <xsl:element name="xsl:variable">
      <xsl:attribute name="name">
        <xsl:text>index</xsl:text>
      </xsl:attribute>
      <xsl:text>1</xsl:text>
    </xsl:element>  
    <html xmlns="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      <head>
        <title>XMS</title>
        <script type="text/javascript" language="javascript">
          function submitForm(pathStr, actionStr)
          {
            this.document.xmsForm.xpath.value = pathStr;
            this.document.xmsForm.action.value = actionStr;
            this.document.xmsForm.submit();
            return true;
          }
        </script> 
      </head>
      <body>
        <h2><xsl:value-of select="/xsd:schema/xsd:element/@name"/></h2>
        <form method="post" action="xms.Inputpage" name="xmsForm">
          <input value="" name="xpath" type="hidden"/>
          <input value="" name="action" type="hidden"/>
          <table cellSpacing="0" cellpadding="0" width="520" border="0">
            <tbody>
              <tr>
                <td style="bACKGROUND-COLOR: #f9f9ff">
                  <table cellSpacing="0" cellpadding="0" width="100%" border="0">
                    <tbody>
                      <tr>
                        <td colspan="3" height="10">
                          <xsl:apply-templates select="/xsd:schema/xsd:element[1]/*" mode="insertfirstposition">
                            <xsl:with-param name="location" select="concat('/', /xsd:schema/xsd:element[1]/@name)"/>
                          </xsl:apply-templates>
                        </td>
                      </tr>
                      <xsl:text disable-output-escaping="yes">&lt;xsl:apply-templates&gt;
                        &lt;xsl:with-param name="path" select="$root"/&gt;
                        &lt;/xsl:apply-templates&gt;
                      </xsl:text>
		    </tbody>
                  </table>
                </td>
              </tr>
              <tr>
                <td align="center">
                  <a onClick="submitForm('','save'); return false;" 
                   href="javascript:submitForm('','save');">Save</a></td>
              </tr>
            </tbody>
          </table>
        </form>
      </body>  
    </html>
  </xsl:element>     
  <xsl:apply-templates select="*">
    <xsl:with-param name="location" select="concat('/', /xsd:schema/xsd:element[1]/@name)"/>
  </xsl:apply-templates>
  <xsl:text disable-output-escaping="yes">
    &lt;/xsl:stylesheet&gt;
  </xsl:text>
</xsl:template>


<xsl:template match="xsd:element">
<xsl:param name="location"/>
<xsl:variable name="mytype">false</xsl:variable>
<xsl:variable name="elmname" select="@name"/>
  <xsl:choose>
    <xsl:when test="@name=$targetTag">
      <!-- root element (person) -->
      <xsl:apply-templates select="*">
        <xsl:with-param name="callingElement" select="@name"/>
         <xsl:with-param name="location" select="concat(@location, '/', @name)"/>
      </xsl:apply-templates>
    </xsl:when>
    <xsl:otherwise>
       <xsl:element name="xsl:template">
          <xsl:attribute name="match">
            <xsl:value-of select="@name"/>
          </xsl:attribute>
          <xsl:element name="xsl:param">
            <xsl:attribute name="name">
              <xsl:text>path</xsl:text>
            </xsl:attribute>
          </xsl:element>
          <xsl:element name="xsl:variable">
              <xsl:attribute name="name">
                <xsl:text>index</xsl:text>
              </xsl:attribute>
              <xsl:element name="xsl:number">
                <xsl:attribute name="count">
                  <xsl:value-of select="@name"/>
                </xsl:attribute>
              </xsl:element>   
            </xsl:element>  
            <xsl:element name="xsl:variable">
              <xsl:attribute name="name">
                <xsl:text>maxOccurs</xsl:text>
              </xsl:attribute>
              <xsl:attribute name="select">
                <xsl:choose>
                  <xsl:when test="@maxOccurs">
                    <xsl:choose>
                      <xsl:when test="@maxOccurs='unbounded'">
                        <xsl:text>10000</xsl:text>
                      </xsl:when>
                      <xsl:otherwise>
                        <xsl:value-of select="@maxOccurs"/>
                      </xsl:otherwise>  
                    </xsl:choose>
                  </xsl:when>  
                  <xsl:otherwise>
                    <xsl:text>1</xsl:text>
                  </xsl:otherwise> 
                </xsl:choose>
              </xsl:attribute>
            </xsl:element>
            <xsl:element name="xsl:variable">
              <xsl:attribute name="name">
                <xsl:text>nodeCount</xsl:text>
              </xsl:attribute>
              <xsl:attribute name="select">
                <xsl:value-of select="concat('count(../', $elmname, ')')"/>
              </xsl:attribute>
        </xsl:element>

       <tr>
          <td width="11%">
          <xsl:element name="xsl:text">
            <xsl:attribute name="disable-output-escaping">
              <xsl:text>yes</xsl:text>
            </xsl:attribute>
            <xsl:text>&amp;nbsp;</xsl:text>
          </xsl:element>  
          <font face="Arial" size="2"><b><xsl:value-of select="@name"/>:<xsl:element name="xsl:text">
            <xsl:attribute name="disable-output-escaping">
              <xsl:text>yes</xsl:text>
            </xsl:attribute>
            <xsl:text>&amp;nbsp;</xsl:text>
          </xsl:element></b></font></td>
          <td width="71%">
      <xsl:choose>  
        <xsl:when test="substring-before(@type,':')='xsd'">
          <!-- if type is datatype -->
              <xsl:variable name="mytype">true</xsl:variable>
              <input>
                  <xsl:element name="xsl:attribute">
                    <xsl:attribute name="name">
                      <xsl:text>size</xsl:text>
                    </xsl:attribute>
                    <xsl:text>61</xsl:text>
                  </xsl:element> 
                  <xsl:element name="xsl:attribute">
                    <xsl:attribute name="name">
                      <xsl:text>tabIndex</xsl:text>
                    </xsl:attribute>
                    <xsl:text>1</xsl:text>
                  </xsl:element>   
                  <xsl:element name="xsl:attribute">
                    <xsl:attribute name="name">
                      <xsl:text>name</xsl:text>
                    </xsl:attribute>
                    <xsl:element name="xsl:value-of">
                      <xsl:attribute name="select">
                        <xsl:choose> 
                          <xsl:when test="(@maxOccurs&gt;'1')or(@maxOccurs='unbounded')">
                            <xsl:value-of select="concat('concat($path,', &quot;'&quot;, '/', $elmname, '[', &quot;'&quot;, ', $index,', &quot;'&quot;, ']', &quot;'&quot;, ')')"/>  
                          </xsl:when>
                          <xsl:otherwise>
                            <xsl:value-of select="concat('concat($path,', &quot;'&quot;, '/', $elmname, &quot;'&quot;, ')')"/>
                          </xsl:otherwise>
                        </xsl:choose>
                      </xsl:attribute>
                    </xsl:element>  
                  </xsl:element>
                  <xsl:element name="xsl:attribute">
                    <xsl:attribute name="name">
                      <xsl:text>value</xsl:text>
                    </xsl:attribute>
                    <xsl:element name="xsl:value-of">
                      <xsl:attribute name="select">
                        <xsl:value-of select="concat('text()', '')"/>
                      </xsl:attribute>
                    </xsl:element>  
                  </xsl:element>
                </input>
          </xsl:when>  
       </xsl:choose>  
                  
          </td>
          <td width="13%">
           <p valig="center">
            <xsl:if test="(@maxOccurs&gt;'1')or(@maxOccurs='unbounded')">
                  <xsl:element name="xsl:if">
                    <xsl:attribute name="test">
                      <xsl:text>$nodeCount &lt; $maxOccurs</xsl:text>
                    </xsl:attribute>
                    <a>
                    <xsl:element name="xsl:attribute">
                      <xsl:attribute name="name">
                        <xsl:text>href</xsl:text>
                      </xsl:attribute>
                      <xsl:element name="xsl:value-of">
                        <xsl:attribute name="select">
                          <xsl:value-of select="concat('concat(', &quot;'&quot;, 'javascript:submitForm(', &quot;'&quot;, ',&quot;', &quot;'&quot;, '&quot;', ',', '$path,', &quot;'&quot;, '/', $elmname, '[', &quot;'&quot;, ', $index,', &quot;'&quot;, ']', &quot;'&quot;, ',&quot;', &quot;'&quot;, '&quot;', ',', &quot;'&quot;, ',', &quot;'&quot;, ',', '&quot;', &quot;'&quot;, '&quot;', ',', &quot;'&quot;, 'insert', &quot;'&quot;, ',', '&quot;', &quot;'&quot;, '&quot;', ',', &quot;'&quot;, ');', &quot;'&quot;, ')')"/>
                        </xsl:attribute>
                      </xsl:element> 
                    </xsl:element>
                    <xsl:element name="xsl:attribute">
                      <xsl:attribute name="name">
                        <xsl:text>onClick</xsl:text>
                      </xsl:attribute>
                      <xsl:element name="xsl:value-of">
                        <xsl:attribute name="select">
                          <xsl:value-of select="concat('concat(', &quot;'&quot;, 'submitForm(', &quot;'&quot;, ',&quot;', &quot;'&quot;, '&quot;', ',', '$path,', &quot;'&quot;, '/', $elmname, '[', &quot;'&quot;, ', $index,', &quot;'&quot;, ']', &quot;'&quot;, ',&quot;', &quot;'&quot;, '&quot;', ',', &quot;'&quot;, ',', &quot;'&quot;, ',', '&quot;', &quot;'&quot;, '&quot;', ',', &quot;'&quot;, 'insert', &quot;'&quot;, ',', '&quot;', &quot;'&quot;, '&quot;', ',', &quot;'&quot;, '); return false;', &quot;'&quot;, ')')"/>
                        </xsl:attribute>
                      </xsl:element> 
                    </xsl:element>
                    +  
                    </a> 
                  </xsl:element>
                 </xsl:if> 
              </p>
              </td>
             </tr>
         <xsl:if test="$mytype='false'">
           <!-- element has no TYPE thus followed by either ComplexType or SimpleType -->
           <tr><td width="100%"> 
           <xsl:apply-templates select="*" mode="insertfirstposition">
             <xsl:with-param name="location" select="concat($location, '/', @name)"/>
           </xsl:apply-templates>
           </td></tr>
           <xsl:apply-templates select="*" mode="target">
             <xsl:with-param name="callingElement" select="@name"/>
           </xsl:apply-templates>
         </xsl:if>
       </xsl:element> 
      <xsl:apply-templates select="*">
         <xsl:with-param name="callingElement" select="@name"/>
         <xsl:with-param name="location" select="concat($location, '/', @name)"/>
      </xsl:apply-templates>  
    </xsl:otherwise>
  </xsl:choose>
</xsl:template>

<xsl:template match="xsd:element" mode="insertfirstposition">
<xsl:param name="location"/>
<xsl:variable name="elmname" select="@name"/>
  <xsl:if test="@minOccurs='0'">
    <xsl:element name="xsl:variable">
      <xsl:attribute name="name">
        <xsl:value-of select="concat($elmname, 'Count')"/>
      </xsl:attribute>
      <xsl:attribute name="select">
        <xsl:value-of select="concat('count(', $elmname, ')')"/>
      </xsl:attribute>
    </xsl:element>
    <xsl:element name="xsl:if">
      <xsl:attribute name="test">
        <xsl:value-of select="concat('$', $elmname, 'Count', '=', &quot;'&quot;, '0', &quot;'&quot;)"/>
      </xsl:attribute>
      <a>
        <xsl:element name="xsl:attribute">
          <xsl:attribute name="name">
            <xsl:text>href</xsl:text>
          </xsl:attribute>
          <xsl:element name="xsl:value-of">
            <xsl:attribute name="select">
              <xsl:value-of select="concat('concat(', &quot;'&quot;, 'javascript:submitForm(', &quot;'&quot;, ',&quot;', &quot;'&quot;, '&quot;', ',', &quot;'&quot;, $location, '[', &quot;'&quot;, ',', '$index', ',', &quot;'&quot;, ']', &quot;'&quot;, ',', &quot;'&quot;, '/', $elmname, &quot;'&quot;, ',&quot;', &quot;'&quot;, '&quot;', ',', &quot;'&quot;, ',', &quot;'&quot;, ',', '&quot;', &quot;'&quot;, '&quot;', ',', &quot;'&quot;, 'insertfirstposition', &quot;'&quot;, ',', '&quot;', &quot;'&quot;, '&quot;', ',', &quot;'&quot;, ');', &quot;'&quot;, ')')"/>
            </xsl:attribute>
          </xsl:element> 
        </xsl:element>
        <xsl:element name="xsl:attribute">
          <xsl:attribute name="name">
            <xsl:text>onClick</xsl:text>
          </xsl:attribute>
          <xsl:element name="xsl:value-of">
            <xsl:attribute name="select">
              <xsl:value-of select="concat('concat(', &quot;'&quot;, 'submitForm(', &quot;'&quot;, ',&quot;', &quot;'&quot;, '&quot;', ',', &quot;'&quot;, $location, '[', &quot;'&quot;, ',', '$index', ',', &quot;'&quot;, ']', &quot;'&quot;, ',', &quot;'&quot;, '/', $elmname, &quot;'&quot;, ',&quot;', &quot;'&quot;, '&quot;', ',', &quot;'&quot;, ',', &quot;'&quot;, ',', '&quot;', &quot;'&quot;, '&quot;', ',', &quot;'&quot;, 'insertfirstposition', &quot;'&quot;, ',', '&quot;', &quot;'&quot;, '&quot;', ',', &quot;'&quot;, '); return false;', &quot;'&quot;, ')')"/>
            </xsl:attribute>
          </xsl:element> 
        </xsl:element>
        <xsl:value-of select="$elmname"/>
        +
        </a>
      </xsl:element>  
  </xsl:if>
</xsl:template>

<xsl:template match="xsd:complexType" mode="target">
<xsl:param name="callingElement"/>
<xsl:choose> 
    <xsl:when test="$callingElement=$targetTag">
      <xsl:apply-templates select="*"/>
    </xsl:when>
    <xsl:otherwise>
      <xsl:element name="xsl:apply-templates">
        <xsl:attribute name="select">
          <xsl:text>*</xsl:text>
        </xsl:attribute>  
        <xsl:element name="xsl:with-param">
          <xsl:attribute name="name">
            <xsl:text>path</xsl:text>
          </xsl:attribute>
          <xsl:attribute name="select">
            <xsl:value-of select="concat('concat($path,', &quot;'&quot;, '/', $callingElement, '[', &quot;'&quot;, ', $index,', &quot;'&quot;, ']', &quot;'&quot;, ')')"/> 
          </xsl:attribute>
        </xsl:element>
      </xsl:element>
    </xsl:otherwise>  
  </xsl:choose>    
</xsl:template>


<xsl:template match="xsd:complexType" mode="insertfirstposition">
<xsl:param name="location"/>
  <xsl:apply-templates select="*" mode="insertfirstposition">
    <xsl:with-param name="location" select="$location"/>
  </xsl:apply-templates>
</xsl:template>


<xsl:template match="xsd:complexType">
<xsl:param name="location"/>
  <xsl:apply-templates select="*">
    <xsl:with-param name="location" select="$location"/>
  </xsl:apply-templates>  
</xsl:template>

<xsl:template match="xsd:complexType" mode="target">
<xsl:param name="callingElement"/>
<xsl:choose> 
    <xsl:when test="$callingElement=$targetTag">
      <xsl:apply-templates select="*"/>
    </xsl:when>
    <xsl:otherwise>
      
      <xsl:element name="xsl:apply-templates">
        <xsl:attribute name="select">
          <xsl:text>*</xsl:text>
        </xsl:attribute>  
        <xsl:element name="xsl:with-param">
          <xsl:attribute name="name">
            <xsl:text>path</xsl:text>
          </xsl:attribute>
          <xsl:attribute name="select">
            <xsl:value-of select="concat('concat($path,', &quot;'&quot;, '/', $callingElement, '[', &quot;'&quot;, ', $index,', &quot;'&quot;, ']', &quot;'&quot;, ')')"/> 
          </xsl:attribute>
        </xsl:element>
      </xsl:element>
           
    </xsl:otherwise>  
  </xsl:choose>    
</xsl:template>


<xsl:template match="xsd:simpleType" mode="target">
<xsl:param name="callingElement"/>
  <xsl:apply-templates select="*" mode="target">
    <xsl:with-param name="callingElement" select="$callingElement"/>
  </xsl:apply-templates>
</xsl:template>

    
<xsl:template match="xsd:sequence">
<xsl:param name="location"/>
  <xsl:apply-templates select="*">
    <xsl:with-param name="location" select="$location"/>
  </xsl:apply-templates>
</xsl:template>

<xsl:template match="xsd:sequence" mode="insertfirstposition">
<xsl:param name="location"/>
  <xsl:apply-templates select="*" mode="insertfirstposition">
    <xsl:with-param name="location" select="$location"/>
  </xsl:apply-templates>
</xsl:template>

</xsl:stylesheet>
