<?xml version="1.0" encoding="UTF-8" ?>

<!--
   Name:  DataQualitySource.xsl 
   Author:  Matthew J. McCready
   Date:  20110701
   Description:  Stylesheet that transforms the DataQuality's Lineage Information into the ISO gmd:source element.
   This template is called by the 14_gmd:dataQualityInfo.xsl stylesheet
   Modification History:
      Initial   Date      Change Request ID   Description
         MMC   11012011                       Changed the gmd:date element so the complete element appears for each option. The gmd:extent element was
                                               also modified to incorporate the gml:TimePeriod element. 
         MMC   02242012                       Changed the <xsl:when test="$BegDate ='Unknown' and $EndDate='Unknown'"> so that it contains the gml:beginPosition
                                               and the gml:endPosition with the indeterminatePosition attribute set to 'unknown'  
         MMC   03052012                       Inserted the gml:description element under gmd:EX_TemporalExtent/gmd:extent/gml:TimePeriod element. This was done so that
                                               Source Currentness Reference (FGDC element srccurr) could be recorded in the ISO file.
         MMC   04102014                       Inserted a choose structure for the gmd:EX_TemporalExtent element. It is now able to handle both a range of dates and a
                                               single calendar date.
  
-->

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 xmlns:gmd="http://www.isotc211.org/2005/gmd" xmlns:gco="http://www.isotc211.org/2005/gco"
 xmlns:gml="http://www.opengis.net/gml/3.2">
 
 <xsl:import href="../FGDC2ISO/DataQualityID.xsl"/>
 <xsl:output method="xml" version="1.0" encoding="ISO-8859-1" indent="yes"/>
 <xsl:variable name="MetDate" select="//metadata/metainfo/metd"/>
 <!-- <xsl:variable name="SDTSPntVot" select="//metadata/spdoinfo/ptvctinf/sdtsterm/sdtstype"/> -->


 <xsl:template name="DataQualitySource" match="/metadata/dataqual/lineage/srcinfo">
  <!-- /metadata/dataqual[1]/lineage[1]/srcinfo[1] 
/metadata/dataqual[1]/lineage[1]/srcinfo[2]/srccontr[1]
-->

  <xsl:for-each select="/metadata/dataqual/lineage/srcinfo">

   <xsl:element name="gmd:source">
    <xsl:element name="gmd:LI_Source">

     <xsl:element name="gmd:description">
      <xsl:element name="gco:CharacterString">
       <xsl:value-of select="srccontr"/>

       <xsl:if test="typesrc">
        <xsl:variable name="typesrc" select="typesrc"/>
        <xsl:if test="$typesrc != 'Unknown'">

         <xsl:choose>
          <xsl:when test="$typesrc = 'Internet Download'"> This was deliveried via <xsl:value-of
            select="typesrc"/>. </xsl:when>
          <xsl:when test="$typesrc = 'online'"> This was deliveried <xsl:value-of select="typesrc"
           />. </xsl:when>

          <xsl:otherwise> This was deliveried on <xsl:value-of select="typesrc"/>. </xsl:otherwise>
         </xsl:choose>

        </xsl:if>
       </xsl:if>

      </xsl:element>
      <!-- gco:CharacterString -->
     </xsl:element>
     <!-- gmd:description -->

     <xsl:if test="srcscale">
      <xsl:element name="gmd:scaleDenominator">
       <xsl:element name="gmd:MD_RepresentativeFraction">

        <xsl:element name="gmd:denominator">
         <xsl:element name="gco:Integer">
          <xsl:value-of select="srcscale"/>
         </xsl:element>
         <!-- gco:Integer -->
        </xsl:element>
        <!-- gmd:denominator -->

       </xsl:element>
       <!-- gmd:MD_RepresentativeFraction -->
      </xsl:element>
      <!-- gmd:scaleDenominator -->
     </xsl:if>

     <xsl:element name="gmd:sourceCitation">
      <xsl:element name="gmd:CI_Citation">

       <xsl:element name="gmd:title">
        <!-- /metadata/dataqual[1]/lineage[1]/srcinfo[1]/srccite[1]/citeinfo[1]/title[1] -->
        <xsl:element name="gco:CharacterString">
         <xsl:value-of select="srccite/citeinfo/title "/>
        </xsl:element>
        <!-- gco:CharacterString -->
       </xsl:element>
       <!-- gmd:title -->

       <xsl:if test="srccitea">
        <xsl:element name="gmd:alternateTitle">
         <xsl:element name="gco:CharacterString">
          <xsl:value-of select="srccitea"/>
         </xsl:element>
         <!-- gco:CharacterString -->
        </xsl:element>
        <!-- gmd:alternateTitle -->
       </xsl:if>

       <xsl:element name="gmd:date">
        <xsl:element name="gmd:CI_Date">

         <!-- <xsl:element name="gmd:date"> -->
         <xsl:variable name="pubDate" select="srccite/citeinfo/pubdate"/>

         <xsl:choose>

          <xsl:when test="$pubDate ='unpublished material'">
           <xsl:element name="gmd:date">

            <xsl:attribute name="gco:nilReason">withheld</xsl:attribute>
            <!-- <xsl:attribute name="gco:nilReason">unpublished material</xsl:attribute> -->
           </xsl:element>
          </xsl:when>

          <!-- Unpublished material -->

          <xsl:when test="$pubDate ='Unpublished material'">
           <xsl:element name="gmd:date">
            <xsl:attribute name="gco:nilReason">withheld</xsl:attribute>
            <!-- <xsl:attribute name="gco:nilReason">unpublished material</xsl:attribute> -->
           </xsl:element>
          </xsl:when>


          <xsl:when test="$pubDate ='Unpublished material'">
           <xsl:element name="gmd:date">
            <xsl:attribute name="gco:nilReason">withheld</xsl:attribute>
            <!-- <xsl:attribute name="gco:nilReason">unpublished material</xsl:attribute> -->
           </xsl:element>
          </xsl:when>
          
          <xsl:when test="$pubDate='Unpublished Material'">
           <xsl:element name="gmd:date">
            <xsl:attribute name="gco:nilReason">withheld</xsl:attribute>
            <!-- <xsl:attribute name="gco:nilReason">unpublished material</xsl:attribute> -->
           </xsl:element>
          </xsl:when>

          <xsl:when test="$pubDate ='Unknown'">
           <xsl:element name="gmd:date">
            <!-- <xsl:attribute name="gco:nilReason">unknown date</xsl:attribute> -->
            <xsl:attribute name="gco:nilReason">unknown</xsl:attribute>
           </xsl:element>
          </xsl:when>


          <xsl:otherwise>

<!-- <xsl:comment> In the otherwise!!!!!!!!</xsl:comment> -->

           <xsl:variable name="year" select="substring($pubDate,1,4)"/>
           <xsl:variable name="month" select="substring($pubDate,5,2)"/>
           <xsl:variable name="day" select="substring($pubDate,7,2)"/>
           <xsl:variable name="dayLength" select="string-length($day)"/>
           <xsl:variable name="monthLength" select="string-length($month)"/>



           <xsl:variable name="dateFormat" select="concat($year, '-',$month,'-',$day)"/>

           <xsl:choose>
            <xsl:when test="$dayLength>0">

             <xsl:variable name="dateFormata" select="concat($year, '-',$month,'-',$day)"/>
             <xsl:element name="gmd:date">
              <xsl:element name="gco:Date">
               <xsl:value-of select="$dateFormata"/>
              </xsl:element>
             </xsl:element>
            </xsl:when>

            <xsl:when test="$monthLength >0">
             <xsl:variable name="dateFormatb" select="concat($year, '-',$month)"/>
             <xsl:element name="gmd:date">
              <xsl:element name="gco:Date">
               <xsl:value-of select="$dateFormatb"/>
              </xsl:element>
             </xsl:element>
            </xsl:when>
            <xsl:otherwise>
             <xsl:variable name="dateFormatc" select="$year"/>
             <xsl:element name="gmd:date">
              <xsl:element name="gco:Date">
               <xsl:value-of select="$dateFormatc"/>
              </xsl:element>
             </xsl:element>

            </xsl:otherwise>

           </xsl:choose>



          </xsl:otherwise>

         </xsl:choose>

         <!--  </xsl:element> -->
         <!-- gmd:date -->

         <xsl:element name="gmd:dateType">
          <xsl:element name="gmd:CI_DateTypeCode">
           <xsl:attribute name="codeList">http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#CI_DateTypeCode</xsl:attribute>
           <xsl:attribute name="codeListValue">publication</xsl:attribute>
           <xsl:attribute name="codeSpace">002</xsl:attribute> publication </xsl:element>
          <!-- gmd:CI_DateTypeCode -->
         </xsl:element>
         <!-- gmd:dateType -->

        </xsl:element>
        <!-- gmd:CI_Date -->
       </xsl:element>
       <!-- gmd:date -->

       <xsl:if test="srccite/citeinfo/edition">
        <xsl:element name="gmd:edition">
         <xsl:value-of select="srccite/citeinfo/edition"/>
        </xsl:element>
        <!-- gmd:edition -->
       </xsl:if>

       <xsl:element name="gmd:citedResponsibleParty">
        <xsl:element name="gmd:CI_ResponsibleParty">

         <xsl:element name="gmd:organisationName">
          <xsl:element name="gco:CharacterString">
           <xsl:value-of select="srccite/citeinfo/origin"/>
          </xsl:element>
          <!-- gco:CharacterString -->
         </xsl:element>
         <!-- gmd:organisationName -->

         <xsl:element name="gmd:role">

          <xsl:element name="gmd:CI_RoleCode">
           <xsl:attribute name="codeList"
            >http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#CI_RoleCode</xsl:attribute>
           <!-- resourceProvider -->
           <xsl:attribute name="codeListValue">resourceProvider</xsl:attribute>
           <xsl:attribute name="codeSpace">001</xsl:attribute> resourceProvider </xsl:element>
          <!-- gmd:CI_RoleCode -->
         </xsl:element>
         <!-- gmd:role -->

        </xsl:element>
        <!-- gmd:CI_ResponsibleParty -->
       </xsl:element>
       <!-- gmd:citedResponsibleParty -->

       <xsl:element name="gmd:presentationForm">
        <xsl:element name="gmd:CI_PresentationFormCode">
         <xsl:attribute name="codeList"
          >http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#CI_PresentationFormCode</xsl:attribute>
         <xsl:attribute name="codeListValue">mapDigital</xsl:attribute>
         <xsl:attribute name="codeSpace">005</xsl:attribute> mapDigital </xsl:element>
        <!-- gmd:CI_PresentationFormCode -->
       </xsl:element>
       <!-- gmd:presentationForm -->

       <!-- /metadata/dataqual/lineage/srcinfo -->
       <xsl:if test="srccite/citeinfo/serinfo">
        <xsl:element name="gmd:series">
         <xsl:element name="gmd:CI_Series">

          <xsl:element name="gmd:name">
           <xsl:element name="gco:CharacterString">
            <xsl:value-of select="srccite/citeinfo/serinfo/sername"/>
           </xsl:element>
           <!-- gco:CharacterString -->
          </xsl:element>
          <!-- gmd:name -->

          <xsl:element name="gmd:issueIdentification">
           <xsl:element name="gco:CharacterString">
            <xsl:value-of select="srccite/citeinfo/serinfo/issue"/>
           </xsl:element>
           <!-- gco:CharacterString -->
          </xsl:element>
          <!-- gmd:issueIdentification -->


         </xsl:element>
         <!-- gmd:CI_Series -->
        </xsl:element>
        <!-- gmd:series -->
       </xsl:if>

       <xsl:if test="srccite/citeinfo/othercit">
        <xsl:element name="gmd:otherCitationDetails">
         <xsl:element name="gco:CharacterString">
          <xsl:value-of select="srccite/citeinfo/othercit"/>
         </xsl:element>
         <!-- gco:CharacterString -->
        </xsl:element>
        <!-- gmd:otherCitationDetails -->
       </xsl:if>

      </xsl:element>
      <!-- gmd:CI_Citation -->
     </xsl:element>
     <!-- gmd:sourceCitation -->

     <xsl:element name="gmd:sourceExtent">
      <xsl:element name="gmd:EX_Extent">
       <xsl:element name="gmd:temporalElement">
        <xsl:element name="gmd:EX_TemporalExtent">
         
         <xsl:choose>
          <xsl:when test="/metadata/idinfo/timeperd/timeinfo/rngdates">
           <xsl:variable name="BegDate" select="srctime/timeinfo/rngdates/begdate"/>
           <xsl:variable name="EndDate" select="srctime/timeinfo/rngdates/enddate"/>
           <xsl:variable name="BegDateLength" select="string-length($BegDate)"/>



           <xsl:choose>
            
            <xsl:when test="$BegDateLength &lt; 2">
             <xsl:element name="gmd:extent">
              <xsl:comment> first choice-when !!!!!!!!!!!!!!!!</xsl:comment>
              <xsl:attribute name="gco:nilReason">unknown</xsl:attribute>
             </xsl:element>
            </xsl:when>

            <xsl:otherwise>
             <!-- <xsl:comment> first choice-default !!!!!!!!!!!!!!!!</xsl:comment> -->
             <xsl:element name="gmd:extent">
              <xsl:element name="gml:TimePeriod">
               <!-- <xsl:comment> in the time period!!!1</xsl:comment> -->
               <xsl:variable name="IdName"
                select="/metadata/dataqual/lineage/srcinfo/srccite/citeinfo/title"/>
               <xsl:variable name="IdName2" select="translate($IdName,' ', 'and')"/>
               <xsl:variable name="IdName3" select="translate($IdName2,'/', 'and')"/>

               <xsl:attribute name="gml:id">
                <xsl:value-of select="$IdName3"/>
               </xsl:attribute>
               <!-- was sourceTemporalExtent -->

               <!-- <xsl:comment> new item here </xsl:comment>
 <xsl:element name="gml:description"><xsl:value-of select="srctime/srccurr"/></xsl:element> -->

               <xsl:choose>
                <!-- unknown begging date and ending date -->
                <xsl:when test="$BegDate ='Unknown' and $EndDate='Unknown'">
                 <!-- <xsl:comment> second choice-when </xsl:comment> -->

                 <xsl:if test="srctime/srccurr">
                  <xsl:element name="gml:description">
                   <xsl:value-of select="srctime/srccurr"/>
                  </xsl:element>
                 </xsl:if>

                 <xsl:element name="gml:beginPosition">
                  <xsl:attribute name="indeterminatePosition">
                   <xsl:text>unknown</xsl:text>
                  </xsl:attribute>
                 </xsl:element>
                 <!-- beginPosition -->

                 <xsl:element name="gml:endPosition">
                  <xsl:attribute name="indeterminatePosition">
                   <xsl:text>unknown</xsl:text>
                  </xsl:attribute>
                 </xsl:element>
                 <!-- endPosition -->
                </xsl:when>

                <!-- both begining and ending date known -->
                <xsl:otherwise>
                 <!-- <xsl:comment> second choice default !!!!!!!!!!!!!!!!</xsl:comment> -->

                 <xsl:if test="srctime/srccurr">
                  <xsl:element name="gml:description">
                   <xsl:value-of select="srctime/srccurr"/>
                  </xsl:element>
                 </xsl:if>

                 <xsl:call-template name="begDateFormat"/>
                 <xsl:call-template name="endDateFormat"/>
                </xsl:otherwise>
               </xsl:choose>

              </xsl:element>
              <!-- gml:TimePeriod -->
             </xsl:element>
            </xsl:otherwise>


           </xsl:choose>

          </xsl:when>
          <xsl:otherwise>
           <xsl:attribute name="id">
            <xsl:variable name="SourceTitle"
             select="./srccite/citeinfo/title"/>
            <xsl:call-template name="DataQualityID"/>
          <!-- 
              <xsl:variable name="part1" select="substring-before($SourceTitle,' ')"/>
              <xsl:variable name="part2" select="substring-after($SourceTitle, ' ')"/>
              
              <xsl:variable name="part3" select="substring-before($part2,' ')"/>
              <xsl:variable name="part4" select="substring-after($part2,' ')"/>
              
              
              
             
              
              <xsl:choose>
               <xsl:when test="contains($part4,' ')">
                <xsl:variable name="part5" select="substring-before($part4,' ')"/>
                <xsl:variable name="newId" select="concat($part1,$part3,$part5)"/>
                <xsl:value-of select="$newId"/>
               </xsl:when>
               <xsl:otherwise>
                 <xsl:variable name="newId" select="concat($part1,$part3,$part4)"/>
                  <xsl:value-of select="$newId"/>
               </xsl:otherwise>
              </xsl:choose>
            
              
              
            
              
          

             </xsl:when>
            <xsl:when test="contains($SourceTitle,'_')">
             <xsl:choose>
              <xsl:when test="contains($SourceTitle,'19')">
               <xsl:variable name="PostfirstUnder" select="substring-after($SourceTitle,'_')"/>
                <xsl:value-of select="$PostfirstUnder"/>
               
              </xsl:when>
              <xsl:otherwise>
                <xsl:value-of select="$SourceTitle"/>
              </xsl:otherwise>
             </xsl:choose>
            
            </xsl:when>
            </xsl:choose> -->
           </xsl:attribute>
           

           <xsl:element name="gmd:extent">

            <xsl:element name="gml:TimeInstant">
             <xsl:attribute name="gml:id">
              <xsl:variable name="SourceTitle"
              select="./srccite/citeinfo/title"/>
              <xsl:call-template name="DataQualityGMLID"/>
         
              
             </xsl:attribute>
             <xsl:element name="gml:timePosition">

              <xsl:value-of
               select="/metadata/dataqual/lineage/srcinfo/srctime/timeinfo/sngdate/caldate"/>
             </xsl:element>
            </xsl:element>
           </xsl:element>
          </xsl:otherwise>
         </xsl:choose>
        </xsl:element>
        <!-- gmd:extent -->

       </xsl:element>
       <!-- gmd:EX_TemporalExtent -->
      </xsl:element>
      <!-- gmd:temporalElement -->
     </xsl:element>
     <!-- gmd:EX_Extent -->
    </xsl:element>
    <!-- gmd:sourceExtent -->


    <!-- Stop here !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->


   </xsl:element>
   <!-- gmd:LI_Source -->

   <!-- gmd:source -->

  </xsl:for-each>
 </xsl:template>

 <xsl:template name="begDateFormat">
  <xsl:variable name="BegDate" select="srctime/timeinfo/rngdates/begdate"/>
  <xsl:variable name="BegYear" select="substring($BegDate,1,4)"/>
  <xsl:variable name="BegMonth" select="substring($BegDate,5,2)"/>
  <xsl:variable name="BegMonthLength" select="string-length($BegMonth)"/>
  <xsl:variable name="BegDay" select="substring($BegDate,7,2)"/>
  <xsl:variable name="BegDayLength" select="string-length($BegDay)"/>

  <xsl:choose>

   <xsl:when test="$BegDayLength>0">
    <xsl:variable name="dateFormat" select="concat($BegYear, '-',$BegMonth,'-',$BegDay)"/>
    <xsl:element name="gml:beginPosition">
     <xsl:value-of select="$dateFormat"/>
    </xsl:element>
    <!-- gml:beginPosition -->
   </xsl:when>

   <xsl:when test="$BegMonthLength >0">
    <xsl:variable name="dateFormat" select="concat($BegYear, '-',$BegMonth)"/>
    <xsl:element name="gml:beginPosition">
     <xsl:value-of select="$dateFormat"/>
    </xsl:element>
    <!-- gml:beginPosition -->
   </xsl:when>

   <xsl:otherwise>
    <xsl:variable name="dateFormat" select="$BegYear"/>
    <xsl:element name="gml:beginPosition">
     <xsl:value-of select="$dateFormat"/>
    </xsl:element>
    <!-- gml:beginPosition -->
   </xsl:otherwise>
  </xsl:choose>

 </xsl:template>


 <xsl:template name="endDateFormat">
  <xsl:variable name="EndDate" select="srctime/timeinfo/rngdates/enddate"/>
  <xsl:variable name="EndYear" select="substring($EndDate,1,4)"/>
  <xsl:variable name="EndMonth" select="substring($EndDate,5,2)"/>
  <xsl:variable name="EndMonthLength" select="string-length($EndMonth)"/>
  <xsl:variable name="EndDay" select="substring($EndDate,7,2)"/>
  <xsl:variable name="EndDayLength" select="string-length($EndDay)"/>

  <xsl:choose>

   <xsl:when test="$EndDayLength>0">
    <xsl:variable name="dateFormat" select="concat($EndYear, '-',$EndMonth,'-',$EndDay)"/>
    <xsl:element name="gml:endPosition">
     <xsl:value-of select="$dateFormat"/>
    </xsl:element>
    <!-- gml:beginPosition -->
   </xsl:when>

   <xsl:when test="$EndMonthLength >0">
    <xsl:variable name="dateFormat" select="concat($EndYear, '-',$EndMonth)"/>
    <xsl:element name="gml:endPosition">
     <xsl:value-of select="$dateFormat"/>
    </xsl:element>
    <!-- gml:beginPosition -->
   </xsl:when>

   <xsl:otherwise>
    <xsl:variable name="dateFormat" select="$EndYear"/>
    <xsl:element name="gml:endPosition">
     <xsl:value-of select="$dateFormat"/>
    </xsl:element>
    <!-- gml:beginPosition -->
   </xsl:otherwise>
  </xsl:choose>

 </xsl:template>

</xsl:stylesheet>
