<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="LogConfig" targetNamespace="http://www.wayne.com/2010-01-05/LogConfig.xsd" elementFormDefault="qualified" xmlns="http://www.wayne.com/2010-01-05/LogConfig.xsd" xmlns:mstns="http://www.wayne.com/2010-01-05/LogConfig.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <!--.................................................-->
  <!-- The schema element 'LogConfig' -->
  <!--.................................................-->
  <xs:element name="LogConfigFile">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="LogConfig" minOccurs="0" maxOccurs="unbounded">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="Description" type="xs:string" minOccurs="0"/>
              <xs:element name="Filters">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="Filter" type="Filter" maxOccurs="unbounded" minOccurs="0"/>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
              <xs:element name="Outputs">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="Output" type="OutputType" maxOccurs="unbounded">
                    </xs:element>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
            <xs:attribute name="Name" type="xs:string" use="required"/>
            <xs:attribute name="Enabled" type="xs:boolean"/>
          </xs:complexType>
        </xs:element>
        <xs:element name="Leftovers" type="OutputType" minOccurs="0"/>
        <xs:element name="LeftoverEntities" type="OutputType" minOccurs="0"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <!--.................................................-->
  <!-- The simple type 'FilterLevel' -->
  <!--.................................................-->
  <xs:simpleType name="FilterLevel">
    <xs:restriction base="xs:string">
      <xs:enumeration value="Excluded"/>
      <xs:enumeration value="Normal"/>
      <xs:enumeration value="Detailed"/>
      <xs:enumeration value="Maximized"/>
    </xs:restriction>
  </xs:simpleType>
  <!--.................................................-->
  <!-- The complex type 'Filter' -->
  <!--.................................................-->
  <xs:complexType name="Filter">
    <xs:sequence>
      <xs:element name="SubFilter" minOccurs="0" maxOccurs="unbounded">
        <xs:complexType>
          <xs:sequence/>
          <xs:attribute name="AncestorEntityType" type="xs:string"/>
          <xs:attribute name="AncestorEntitySubType" type="xs:string"/>
          <xs:attribute name="AncestorId" type="xs:string"/>
          <xs:attribute name="CategoryName" type="xs:string"/>
          <xs:attribute name="FilterLevel" type="FilterLevel"/>
          <xs:attribute name="Enabled" type="xs:boolean"/>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
    <xs:attribute name="EntityType" type="xs:string"/>
    <xs:attribute name="EntitySubType" type="xs:string"/>
    <xs:attribute name="Id" type="xs:string"/>
    <xs:attribute name="Enabled" type="xs:boolean"/>
    <xs:attribute name="FilterLevel" type="FilterLevel"/>
  </xs:complexType>
  <!--.................................................-->
  <!-- The complex type 'OutputType' -->
  <!--.................................................-->
  <xs:complexType name="OutputType">
    <xs:sequence>
      <xs:element name="Parameters">
        <xs:complexType>
          <xs:sequence>
            <xs:choice>
              <!--........... Text File logger ..............-->
              <xs:element name="TextFileParams">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="FilePath" type="LogFilePathType"/>
                    <xs:element name="MaxSize">
                      <xs:complexType>
                        <xs:attribute name="MaxSizePerFileMb" type="LogFileSizeType" use="required"/>
                        <xs:attribute name="MaxFileCircleCount" type="xs:unsignedInt"/>
                        <xs:attribute name="MaxDays" type="xs:unsignedInt"/>
                        <xs:attribute name="CleanOnStartup" type="xs:boolean"/>
                      </xs:complexType>
                    </xs:element>
                    <xs:element name="ForceFlush" type="xs:boolean" default="true" minOccurs="0"/>
                    <xs:element name="DateTimeLogFormat" type="xs:string" minOccurs="0"/>
                    <xs:element name="EntityLog" type="EntityLog" minOccurs="0"/>
                    <xs:element name="SuppressCategory" type="xs:boolean" minOccurs="0"/>
                    <xs:element name="KeepFileOpened" type="xs:boolean" minOccurs="0"/>
                    <xs:element name="ShortFileMessages" type="xs:boolean" minOccurs="0"/>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
              <!--........... EventLog Subscription Params ..............-->
              <xs:element name="EventLogSubscriptionParams">
                <xs:complexType>
                  <xs:attribute name="SubscriberId" type="xs:string" use="required"/>
                  <xs:attribute name="StorageType" type="StorageType" use="required"/>
                </xs:complexType>
              </xs:element>
              <!--........... ExternalLogWriter Params ..............-->
              <xs:element name="ExternalLogWriterParams">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="Param" minOccurs="0" maxOccurs="unbounded">
                      <xs:complexType>
                        <xs:simpleContent>
                          <xs:extension base="xs:string">
                            <xs:attribute name="Id" type="xs:string" use="required"/>
                          </xs:extension>
                        </xs:simpleContent>
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                  <xs:attribute name="ExternalLogType" type="xs:string" use="required"/>
                  <xs:attribute name="ExternalLogName" type="xs:string" use="required"/>
                  <xs:attribute name="DateTimeLogFormat" type="xs:string"/>
                  <xs:attribute name="EntityLog" type="EntityLog"/>
                  <xs:attribute name="SuppressCategory" type="xs:boolean"/>
                </xs:complexType>
              </xs:element>
              <!--.......................................................-->
            </xs:choice>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
    <xs:attribute name="Type" type="OutputTypeHandlers" use="required"/>    
    <xs:attribute name="Enabled" type="xs:boolean"/>
  </xs:complexType>
  <!--.................................................-->
  <!-- The simple type 'OutputTypeHandlers' -->
  <!--.................................................-->
  <xs:simpleType name="OutputTypeHandlers">
    <xs:restriction base="xs:string">
      <xs:enumeration value="TextFileLogWriter"/>
      <xs:enumeration value="EventLogSubscription"/>
      <xs:enumeration value="ExternalLogWriter"/>
    </xs:restriction>
  </xs:simpleType>
  <!--.................................................-->
  <!-- The simple type 'StorageType' -->
  <!--.................................................-->
  <xs:simpleType name="StorageType">
    <xs:restriction base="xs:string">
      <xs:enumeration value="NoStorage"/>
      <xs:enumeration value="Volatile"/>
    </xs:restriction>
  </xs:simpleType>
  <!--.................................................-->
  <!-- The Complex type 'EventSubscriberType' -->
  <!--.................................................-->
  <xs:complexType name="EventSubscriberType">
    <xs:attribute name="Name" type="xs:string" use="required"/>
    <xs:attribute name="KeepEventsPersistent" type="xs:boolean" use="required"/>
  </xs:complexType>
  <!--.................................................-->
  <!-- The complex type 'LogFilePathType' -->
  <!--.................................................-->
  <xs:complexType name="LogFilePathType" mixed="true">
    <xs:sequence>
      <xs:choice maxOccurs="unbounded" minOccurs="0">
        <xs:element name="EntityType"/>
        <xs:element name="EntitySubType"/>
        <xs:element name="Id">
          <xs:complexType>
            <xs:attribute name="FromEntityType" type="xs:string"/>
            <xs:attribute name="FromEntitySubType" type="xs:string"/>
          </xs:complexType>
        </xs:element>
        <xs:element name="PID" type="xs:string" minOccurs="0" maxOccurs="1"/>
        <xs:element name="Date">
          <xs:complexType>
            <xs:attribute name="Format" type="xs:string"/>
          </xs:complexType>
        </xs:element>
      </xs:choice>
    </xs:sequence>
  </xs:complexType>
  <!--.................................................-->
  <!-- Simple type LogFileSizeType that is a union       -->
  <!-- and the string 'unlimited'                        -->
  <!--.................................................-->
  <xs:simpleType name="LogFileSizeType">
    <xs:union memberTypes="xs:unsignedInt">
      <xs:simpleType>
        <xs:restriction base="xs:string">
          <xs:enumeration value="unlimited"/>
        </xs:restriction>
      </xs:simpleType>
    </xs:union>
  </xs:simpleType>
  <!--.................................................-->
  <!-- The simple type 'EntityLog' -->
  <!--.................................................-->
  <xs:simpleType name="EntityLog">
    <xs:restriction base="xs:string">
      <xs:enumeration value="None"/>
      <xs:enumeration value="Entity"/>
      <xs:enumeration value="Ancestors"/>
    </xs:restriction>
  </xs:simpleType>
</xs:schema>