<?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 C:\Projects\sleis\poc\src\Config\Xsd\spring-validation-1.3.xsd" >


  <!-- Example object validation -->
  <v:group id="facilityValidator">

    <!-- Simple required string property example -->
    <v:required test="Name">
      <v:message id="fac.name.required" providers="Name"/>
    </v:required>

    <!-- Comlex data example (Date) -->
    <v:group id="facilityReportedOnValidator">

      <!-- First, check for required -->
      <v:required test="ReportedOn">
        <v:message id="fac.reportedOn.required" providers="ReportedOn"/>
      </v:required>

      <!-- Than, check that the date is default -->
      <v:condition test="ReportedOn &lt;= DateTime.Now" when="ReportedOn != DateTime.MinValue">
        <v:message id="fac.reportedOn.past" providers="ReportedOn"/>
      </v:condition>

    </v:group>

    <!-- Array of complex object validation example -->
    <v:collection context="Phone" validate-all="true" include-element-errors="true">
      <v:ref name="phoneValidator" />
    </v:collection>

    <!-- Array of complex object validation example -->
    <v:collection context="Email" validate-all="true" include-element-errors="true">
      <v:ref name="emailValidator" />
    </v:collection>

  </v:group>


  <v:group id="emailValidator">

    <v:required test="Label">
      <v:message id="email.type.required" providers="EmailLabel"/>
    </v:required>

    <v:required test="Value">
      <v:message id="email.value.required" providers="EmailValue"/>
    </v:required>

    <!-- RegEx expression validtion -->
    <v:regex test="Value" expression="^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$" when="Value != null">
      <v:message id="email.value.format" providers="EmailValueFormat"/>
      <v:property name="AllowPartialMatching" value="true"/>
    </v:regex>

  </v:group>


  <v:group id="phoneValidator">

    <v:required test="Label">
      <v:message id="phone.type.required" providers="PhoneLabel"/>
    </v:required>

    <v:required test="Value">
      <v:message id="phone.value.required" providers="PhoneValue"/>
    </v:required>

    <!-- RegEx expression validtion -->
    <v:regex test="Value" expression="^([0-9]{10})$" when="Value != null">
      <v:message id="phone.value.format" providers="EmailValueFormat"/>
      <v:property name="AllowPartialMatching" value="true"/>
    </v:regex>

  </v:group>

</objects>