<?xml version="1.0" encoding="utf-8" ?>
<!-- Spring Manged Objects -->
<objects xmlns="http://www.springframework.net"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns:v="http://www.springframework.net/validation"
         xsi:schemaLocation="http://www.springframework.net http://www.springframework.net/xsd/spring-objects.xsd
                             http://www.springframework.net Xsd/spring-validation-1.3.xsd" >


  <description>
    Spring Validation
    See this for more info:
    http://www.springframework.net/doc-latest/reference/html/validation.html
  </description>

  <v:group id="submissionValidationRules">

    <!-- Facility Identity [FacilityView FacilityIdentity] -->
    <v:ref name="facilityValidationRules" context="FacilityIdentity" />

    <!-- Verify at least one Release Points has been specified -->
    <v:condition test ="ReleasePoints != null and ReleasePoints.Count > 0">
      <v:message id="valid.rp.required" providers="ReleasePoints">
        <v:param value="ValidationContxt"/>
      </v:message>
    </v:condition>

    <!-- Facility Identity [List<ReleasePointDetailView> ReleasePoints] -->
    <v:validator test="ReleasePoints" type="Sleis.Validation.Spring.ListValidator" when="ReleasePoints != null">
      <v:property name="ProviderFormat" value="ReleasePoints[{0}]." />
      <v:property name="Validator" ref="releasePointValidationRules" />
    </v:validator>

    <!-- Facility Identity [List<ControlDeviceDetailView> ControlDevices] -->
    <v:validator test="ControlDevices" type="Sleis.Validation.Spring.ListValidator" when="ControlDevices != null">
      <v:property name="ProviderFormat" value="ControlDevices[{0}]." />
      <v:property name="Validator" ref="controlDeviceValidationRules" />
    </v:validator>

    <!-- Verify at least one Emission Unit has been specified -->
    <v:condition test ="EmissionUnits != null and EmissionUnits.Count > 0">
      <v:message id="valid.emission.unit.required" providers="EmissionUnits">
        <v:param value="ValidationContxt"/>
      </v:message>
    </v:condition>

    <!-- Facility Identity [List<EmissionUnitsDetailView> EmissionUnits] -->
    <v:validator test="EmissionUnits" type="Sleis.Validation.Spring.ListValidator" when="EmissionUnits != null">
      <v:property name="ProviderFormat" value="EmissionUnits[{0}]." />
      <v:property name="Validator" ref="emissionUnitValidationRules" />
    </v:validator>

    <!-- Facility Identity [List<UnitProcessDetailView> UnitProcesses] -->
    <v:condition test ="UnitProcesses != null and UnitProcesses.Count > 0">
      <v:message id="valid.unit.process.required" providers="UnitProcesses">
        <v:param value="ValidationContxt"/>
      </v:message>
    </v:condition>

    <v:validator test="UnitProcesses" type="Sleis.Validation.Spring.ListValidator" when="UnitProcesses != null">
      <v:property name="ProviderFormat" value="UnitProcesses[{0}]." />
      <v:property name="Validator" ref="unitProcessValidationRules" />
    </v:validator>

    <v:validator test="UnitProcesses" type="Sleis.Validation.Spring.ListValidator" when="UnitProcesses != null">
      <v:property name="ProviderFormat" value="UnitProcesses[{0}]." />
      <v:property name="Validator" ref="unitProcessProcessEmissionValidationRulesGroup" />
    </v:validator>
  </v:group>


  <v:group id="unitProcessProcessEmissionValidationRulesGroup">
    <v:ref name="processEmissionValidationRulesGroup" context="Item.ProcessEmission" />
    <v:ref name="processEmissionReportSubmissionGroup" context="Item.ProcessEmission" />

    <!-- Ensure submission has process emission record for each unit process -->
    <v:condition test ="Item.ProcessEmission != null or Item.ProcessEmission.Id > 0">
      <v:message id="valid.up.processemission.required" providers="ProcessEmission">
        <v:param value="ValidationContxt"/>
      </v:message>
    </v:condition>    
  </v:group>


  <!--
    Do not validate process emissions with parent emissions units that have been shutdown in current reporting year or earlier
    Do not validate process emissions with unit process last/final inventory year less than current reporting year
  -->
  <v:group id="processEmissionReportSubmissionGroup" when="(IsReported == true or IsReported == null)
      and ((UnitProcess.EmissionUnit.StatusCode == 'OP') or (UnitProcess.EmissionUnit.StatusCode == 'PS' and UnitProcess.EmissionUnit.StatusEffectiveDate.Year &gt; #Report.Number) or (UnitProcess.EmissionUnit.StatusCode == 'TS' and UnitProcess.EmissionUnit.StatusEffectiveDate.Year &gt; #Report.Number))
      and ((UnitProcess.LastEmissionsYear == null) or (UnitProcess.LastEmissionsYear &gt;= #Report.Number))">
    
    <v:condition test="Emissions != null and Emissions.Count > 0">
      <v:message id="valid.pe.pollutant.required" providers="Emissions">
        <v:param value="ValidationContxt"/>
      </v:message>
    </v:condition>
  </v:group>
</objects>