<?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="controlDeviceValidationRules">
    <v:ref name="cdControlDeviceValidationRules" context="Item" />
    <v:ref name="cdControlDevicePollutantsValidationRules" context="Item" />

    <!-- Custom Fields -->
    <v:group id="AgencyCustomFields" when="#this.Item is T(Sleis.Models.AgencyControlDevice)">
      <v:ref name ="agencyCustomFieldValidator" context="CustomFields" />
    </v:group>

    <v:group id="PublicCustomFields" when="#this.Item is T(Sleis.Models.PublicControlDevice)">
      <v:ref name ="publicCustomFieldValidator" context="CustomFields" />
    </v:group>
  </v:group>


  <v:group id="cdControlDeviceValidationRules">
    <v:required test="Identifier">
      <v:message id="valid.control.device.identifier.required" providers="Item.Identifier">
        <v:param value="ValidationContxt"/>
      </v:message>
    </v:required>
    <v:regex test="Identifier" expression=".{1,20}" when="Identifier != null" >
      <v:message id="valid.control.device.identifier.length" providers="Item.Identifier">
        <v:param value="ValidationContxt"/>
      </v:message>
    </v:regex>

    <v:required test="Description" when="#this is T(Sleis.Models.PublicControlDevice)">
      <v:message id="valid.control.device.description.required" providers="Item.Description">
        <v:param value="ValidationContxt"/>
      </v:message>
    </v:required>
    <v:regex test="Description" expression=".{1,255}" when="Description != null" >
      <v:message id="valid.control.desc.length" providers="Item.Description">
        <v:param value="ValidationContxt"/>
      </v:message>
    </v:regex>

    <v:required test="StatusCode">
      <v:message id="valid.control.device.status.code.required" providers="Item.StatusCode" >
        <v:param value="ValidationContxt"/>
      </v:message>
    </v:required>

    <v:required test="StatusEffectiveDate" when="StatusCode != 'OP'">
      <v:message id="valid.control.device.status.date.required" providers="Item.StatusEffectiveDate">
        <v:param value="ValidationContxt"/>
      </v:message>
    </v:required>

    <v:required test="MeasureCode">
      <v:message id="valid.control.device.measurecode.required" providers="Item.MeasureCode" >
        <v:param value="ValidationContxt"/>
      </v:message>
    </v:required>

    <!--
	 <v:required test="Comment">
		<v:message id="valid.control.device.comment.required" providers="Item.Comment" >
		  <v:param value="ValidationContxt"/>
		</v:message>
	 </v:required>
	 -->
    <v:regex test="Comment" expression="^[\s\S]{0,4000}$" when="Comment != null">
      <v:message id="valid.control.device.comment.length" providers="Item.Comment">
        <v:param value="ValidationContxt"/>
      </v:message>
    </v:regex>
  </v:group>


  <!-- CONTROLLED POLLUTANTS LIST -->
  <v:group id="cdControlDevicePollutantsValidationRules">
    <v:validator test="Pollutants" type="Sleis.Validation.Spring.ListValidator" when="Pollutants != null">
      <v:property name="ProviderFormat" value="Item.Pollutants[{0}]." />
      <v:property name="Validator" ref="cdControlDevicePollutantValidationRules" />
    </v:validator>

    <!-- Ensure pollutants are unique for the control device -->
    <v:validator test="Pollutants" type="Sleis.Validation.Spring.UniqueListValidator" when="Pollutants != null">
      <v:property name="ProviderFormat" value="Item.Pollutants[{0}]." />
      <v:property name="MessageId" value="valid.control.device.pollutant.code.unique" />
      <v:property name="Keys">
        <dictionary key-type="string" value-type="string">
          <!--
			 Key: What has to be uique
			 Value: What is the field name to be appended to the ProviderFormat
			 -->
          <entry key="Code" value="Code" />
        </dictionary>
      </v:property>
    </v:validator>
  </v:group>


  <!-- CONTROLLED POLLUTANT -->
  <v:group id="cdControlDevicePollutantValidationRules">
    <!--
	 <v:required test="Code">
		<v:message id="valid.control.device.pollutant.code.required" providers="Code" >
		  <v:param value="ValidationContxt"/>
		</v:message>
	 </v:required>
	 -->
    <v:required test="Code" when="Efficency != null">
      <v:message id="valid.control.device.pollutant.code.required.when" providers="Code" >
        <v:param value="ValidationContxt"/>
      </v:message>
    </v:required>

    <!--
	 <v:required test="Efficency">
		<v:message id="valid.control.device.pollutant.efficency.required" providers="Efficency" >
		  <v:param value="ValidationContxt"/>
		</v:message>
	 </v:required>
	 -->
    <v:required test="Efficency" when="Code != null">
      <v:message id="valid.control.device.pollutant.efficency.required.when" providers="Efficency" >
        <v:param value="ValidationContxt"/>
      </v:message>
    </v:required>
    <v:validator id="control-device-pollutant-efficiency" test="Efficency.ToString('G29')" type="Sleis.Validation.Spring.DecimalValidator" when="Efficency!= null">
      <v:property name="PrecisionFormat" value="4,2" />
      <v:message id="valid.control.device.pollutant.efficency.decimal.format" providers="Efficency">
        <v:param value="ValidationContxt"/>
      </v:message>
      <v:property name="AllowPartialMatching" value="true"/>
    </v:validator>
    <v:condition test ="Efficency &gt;= 0 and Efficency &lt;= 99.99" when="Efficency != null">
      <v:message id="valid.control.device.pollutant.efficency.range" providers="Efficency">
        <v:param value="ValidationContxt"/>
      </v:message>
    </v:condition>

  </v:group>

</objects>