<!-- <options version="1.0"> --><!-- 	<object name="Model"> -->
<!-- 		<properties> -->
<!-- 			<property name="Name" /> -->
<!-- 			<property name="Definition" /> -->
<!-- 			<property name="Author" /> -->
<!-- 			<property name="Company" /> -->
<!-- 		</properties> -->
<!-- 		<children> -->
<!-- 			<object name="Table"> -->
<!-- 				<properties> -->
<!-- 					<property name="Name" /> -->
<!-- 					<property name="Owner" /> -->
<!-- 				</properties> -->
<!-- 				<children> -->
<!-- 					<object name="Column"> -->
<!-- 						<properties> -->
<!-- 							<property name="Name" /> -->
<!-- 							<property name="Definition" /> -->
<!-- 							<property name="Not Null" /> -->
<!-- 							<property name="Datatype" /> -->
<!-- 							<property name="Relations" /> -->
<!-- 							<property name="Column is PK" /> -->
<!-- 							<property name="Column is FK" /> -->
<!-- 							<property name="Column is AK" /> -->
<!-- 						</properties> -->
<!-- 					</object> -->
<!-- 					<object name="Relation"> -->
<!-- 						<properties> -->
<!-- 							<property name="Parent Table" /> -->
<!-- 							<property name="Parent to Child Sentence" /> -->
<!-- 						</properties> -->
<!-- 						<children> -->
<!-- 							<object name="FK Member"> -->
<!-- 								<properties> -->
<!-- 									<property name="Parent Column" /> -->
<!-- 									<property name="Child Column" /> -->
<!-- 								</properties> -->
<!-- 							</object> -->
<!-- 						</children> -->
<!-- 					</object> -->
<!-- 				</children> -->
<!-- 			</object> -->
<!-- 		</children> -->
<!-- 	</object> -->
<!-- </options> -->
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:key name="IDs" match="*" use="@id"/>
<xsl:template match="/">
  <html  xmlns="http://www.w3.org/1999/xhtml">
		<head>
			<title>Table/Columns Report</title>
      <script type="text/javascript">
        // <![CDATA[
        function toggle(element, togimg) {
          if (element.style.display == 'none') {
            element.style.display = 'block';
            togimg.src="images/collapse.gif";
          }
          else {
            element.style.display = 'none';
            togimg.src="images/expand.gif";
          }
        }
        // ]]>
      </script>
		</head>
      <STYLE>
        BODY
        {
        font-family:Arial;
        background-image: url(images/background.gif);
        }
        TD
        {
        font-size: 80%;
        background-color: #EEEEEE;
        vertical-align: top;
        }
        H1   { border-bottom: #000099 thick solid; }
        img { border-width: 0px; }
        .sqlcode
        {
        font-family: system;
        font-size: 70%;
        }
        .CommonHeader
        {
        color: #666666;
        font-size: 130%;
        font-weight: bold;
        font-family: Tahoma, Arial, Helvetica;
        padding: 0px;
        margin: 0px;
        margin-top: 8px;
        }
        a:link, a:visited
        {
        color: #4444BF;
        text-decoration: none;
        }
        .header-table, .header-table TD, .header-table TH
        {
        background-color: #92B2F2;
        color: black;
        border-width: 0px;
        font-family:sans-serif;
        font-weight:600;
        vertical-align:middle;
        }
        .TablesHeader
        {
        color: white;
        background-color: #000099;
        }
        .TableHeading
        {
        border-bottom: #000099 solid;
        }
        pre
        {
        border: solid 1px #666666;
        background-color: #f2f2f2;
        }
        .pre
        {
        border: solid 1px #666666;
        background-color: #f2f2f2;
        }
        pre2
        {
        border: solid 1px #666666;
        background-color: #f2f2f2;
        }

      </STYLE>
      <body>
        <table cellpadding="10px" class="header-table" style="border-width: 5; border-color: #000099; border-style:solid;">
          <tr>
            <td width="100px">
            </td>
            <td style="font-size:110%">
              This reporting list all the columns in the model in alphabetical order and provides details about them.
            </td>
            <td width="200px">
              <img src="images/ModelRight.gif" align="right" height="100px"/>
            </td>
          </tr>
        </table>

      <xsl:text>&#xA;</xsl:text>
      <h1 class="TableHeading">
        <img src="images/model.gif" height="25"/>
        <xsl:text>  </xsl:text>
        <a name="{model/@id}">
          <xsl:value-of select="model/model-properties/model.name" />
        </a>
      </h1>
        <xsl:if test="model/model-properties/model.author">
          <span class="CommonHeader">Author: </span>
              <xsl:value-of select="model/model-properties/model.author" />
        </xsl:if>
        <xsl:if test="model/model-properties/model.company">
          <br/>
          <br/>
          <span class="CommonHeader">Company: </span>
              <xsl:value-of select="model/model-properties/model.company" />
        </xsl:if>
        <xsl:if test="model/@timestamp">
          <br/>
          <br/>
          <span class="CommonHeader">Generated: </span>
          <xsl:value-of select="model/@timestamp" />
        </xsl:if>
        <xsl:if test="model/model-properties/model.definition">
          <br/>
          <br/>
          <span class="CommonHeader">Definition</span>
          <div class="pre">
            <xsl:value-of select="model/model-properties/model.definition" />
          </div>
        </xsl:if>
        <br/>
        <br/>
        <div id="ColumnsList">
          <table>
            <xsl:call-template name="column-header"/>
            <xsl:for-each select="/model/model-children/table/table-children/column">
              <xsl:sort select="column-properties/column.name"/>
              <tr>
                <td>
                  <xsl:if test="column-properties/column.column-is-pk = 'True'">
                    <img src="images/key-constraint.gif"/>
                  </xsl:if>
                  <xsl:if test="column-properties/column.column-is-ak = 'True'">
                    <img src="images/unique-key-constraint.gif"/>
                  </xsl:if>
                  <xsl:if test="column-properties/column.column-is-fk = 'True'">
                    <img src="images/foreign_key.gif"/>
                  </xsl:if>
                </td>
                <td>
                  <a id="{@id}" name="{@id}">
                    <img src="images/column.gif" />&#160;<xsl:value-of select="../../table-properties/table.name"/>.<xsl:value-of select="column-properties/column.name"/>
                </a>
              </td>
                <td>
                  <xsl:value-of select="column-properties/column.definition"/>
                </td>
                <td>
                  <xsl:variable name="type-elem" select="key('IDs', column-properties/column.datatype/@reference-id)"/>
                  <xsl:choose>
                    <xsl:when test="column-properties/column.datatype/@property-as-string">
                      <xsl:value-of select="column-properties/column.datatype/@property-as-string" />
                    </xsl:when>
                    <xsl:when test="$type-elem and not($type-elem/type-properties/type.builtin)">
                      <a href="#{$type-elem/@id}">
                        <xsl:call-template name="add-icon">
                          <xsl:with-param name="obj-id" select="$type-elem/@id" />
                        </xsl:call-template>
                        <xsl:value-of select="column-properties/column.datatype" />
                      </a>
                    </xsl:when>
                    <xsl:otherwise>
                      <xsl:value-of select="column-properties/column.datatype" />
                    </xsl:otherwise>
                  </xsl:choose>
                </td>
                  <td align="center">
                    <xsl:text>&#x9;</xsl:text>
                    <xsl:if test="column-properties/column.not-null/text() = 'True'">
                      <img src="images/check.gif" height="15" />
                    </xsl:if>
                </td>
                <td>
                  <xsl:variable name="col-id" select="@id"/>
                  <xsl:variable name="child-cols" select ="/model/model-children/table/table-children/relation/relation-children/fk-member/fk-member-properties/fk-member.parent-column[@reference-id=$col-id]"/>
                  <xsl:call-template name="gather-fk-ids">
                    <xsl:with-param name="ids" select="$child-cols" />
                    <xsl:with-param name="processed-ids" select="@text()" />
                    <xsl:with-param name="indent" select="0" />
                  </xsl:call-template>
                </td>
              </tr>
            </xsl:for-each>
          </table>
          </div>
    </body>
  </html>
</xsl:template>

  <xsl:template name="column-header">
    <tr>
      <th class="TablesHeader" align="center">
        <xsl:text>&#xA;&#x9;&#x9;&#x9;</xsl:text>
        Key
      </th>
      <th class="TablesHeader" align="center">
        <xsl:text>&#xA;&#x9;&#x9;&#x9;</xsl:text>
        Name
      </th>
      <th class="TablesHeader" align="center">
        <xsl:text>&#xA;&#x9;&#x9;&#x9;</xsl:text>
        Definition
      </th>
      <th class="TablesHeader" style="width:150px">
        <xsl:text>&#xA;&#x9;&#x9;&#x9;</xsl:text>
        Datatype
      </th>
      <th class="TablesHeader" align="center">
        <xsl:text>&#xA;&#x9;&#x9;&#x9;</xsl:text>
        Not Null
      </th>
      <th class="TablesHeader" align="center">
        <xsl:text>&#xA;&#x9;&#x9;&#x9;</xsl:text>
        Where Used
      </th>
   </tr>
  </xsl:template>

  <xsl:template name="add-icon">
    <xsl:param name="obj-id" select="''" />
    <xsl:if test="$obj-id != ''">
      <xsl:for-each select="key('IDs', $obj-id)">
        <xsl:variable name="filename">
          <xsl:choose>
            <xsl:when test="name()='key-constraint'">
              <xsl:choose>
                <xsl:when test="key-constraint-properties/key-constraint.type/@property-as-string='Unique'">
                  <xsl:value-of select="'unique-key-constraint'"/>
                </xsl:when>
                <xsl:otherwise>
                  <xsl:value-of select="name()"/>
                </xsl:otherwise>
              </xsl:choose>
            </xsl:when>
            <xsl:otherwise>
              <xsl:value-of select="name()"/>
            </xsl:otherwise>
          </xsl:choose>
        </xsl:variable>
        <img src="images/{$filename}.gif"/>
        <xsl:text>  </xsl:text>
      </xsl:for-each>
    </xsl:if>
  </xsl:template>

  <xsl:template name="generate-indent">
    <xsl:param name="indent"></xsl:param>
    <xsl:if test="$indent > 0">
      &#160;&#160;&#160;&#160;
      <xsl:call-template name="generate-indent">
        <xsl:with-param name="indent" select="$indent - 1"></xsl:with-param>
      </xsl:call-template>
    </xsl:if>
  </xsl:template>

  <xsl:template name="gather-fk-ids">
    <xsl:param name="ids" select="''" />
    <xsl:param name="processed-ids" select="''" />
    <xsl:param name="indent" select="0" />

    <xsl:if test="$ids">
      <xsl:for-each select="$ids">
        <xsl:variable name="already_processed">
          <xsl:variable name="id-to-test" select="../fk-member.child-column/@reference-id" />
          <xsl:for-each select="$processed-ids">
            <xsl:if test="$id-to-test=../fk-member.child-column/@reference-id">True</xsl:if>
          </xsl:for-each>
        </xsl:variable>
        <xsl:if test="not($already_processed='True')">
          <xsl:variable name="ref-id" select="../fk-member.child-column/@reference-id"></xsl:variable>
          <xsl:variable name="child-cols" select ="/model/model-children/table/table-children/relation/relation-children/fk-member/fk-member-properties/fk-member.parent-column[@reference-id=$ref-id]"/>
          <xsl:variable name="child-column" select="key('IDs', ../fk-member.child-column/@reference-id)"/>
          <xsl:if test="$indent != 0 or position() > 1">
            <br />
          </xsl:if>
          <xsl:call-template name="generate-indent">
            <xsl:with-param name="indent" select="$indent"></xsl:with-param>
          </xsl:call-template>
          <a href="#{../fk-member.child-column/@reference-id}">
            <xsl:call-template name="add-icon">
              <xsl:with-param name="obj-id" select="../fk-member.child-column/@reference-id" />
            </xsl:call-template>
            <xsl:if test="$child-column">
              <xsl:value-of select="$child-column/../../table-properties/table.name"></xsl:value-of>
            </xsl:if>
            .
            <xsl:value-of select="../fk-member.child-column"></xsl:value-of>
          </a>
          <xsl:call-template name="gather-fk-ids">
            <xsl:with-param name="ids" select="$child-cols" />
            <xsl:with-param name="processed-ids" select="$processed-ids | $ids" />
            <xsl:with-param name="indent" select="$indent + 1" />
          </xsl:call-template>
        </xsl:if>
      </xsl:for-each>
    </xsl:if>
  </xsl:template>

</xsl:stylesheet>
