<?xml version="1.0" encoding="utf-8" ?>
<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements.  See the NOTICE file
distributed with this work for additional information
regarding copyright ownership.  The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License.  You may obtain a copy of the License at

  http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied.  See the License for the
specific language governing permissions and limitations
under the License.
-->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <!-- Define the Query Manager's schema. -->
  <xs:element name="queryManagerConfig">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="queryChangeLogSource">
          <xs:complexType>
            <xs:choice>
              <xs:element name="kafka" type="kafka"/>
            </xs:choice>
          </xs:complexType>
        </xs:element>
        <xs:element name="queryExecutor">
            <xs:complexType>
              <xs:choice>
                <xs:element name="localKafkaStreams" type="localKafkaStreams"/>
              </xs:choice>
            </xs:complexType>
        </xs:element>
        <xs:element name="performanceTunning">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="queryChanngeLogDiscoveryPeriod">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="value" type="xs:positiveInteger"/>
                    <xs:element name="units" type="timeUnits"/>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  
  <!-- Defines the time units that may be specified. -->
  <xs:simpleType name="timeUnits" final="restriction">
    <xs:restriction base="xs:string">
      <xs:enumeration value="MILLISECONDS"/>
      <xs:enumeration value="SECONDS"/>
      <xs:enumeration value="MINUTES"/>
    </xs:restriction>
  </xs:simpleType>

  <!-- Define what kafka connection information looks like. -->  
  <xs:complexType name="kafka">
    <xs:sequence>
      <xs:element name="hostname" type="xs:string"/>
      <xs:element name="port" type="tcpPort" />
    </xs:sequence>
  </xs:complexType>
  
  <!-- Define what a local Kafka Streams query executor looks like. -->
  <xs:complexType name="localKafkaStreams">
    <xs:sequence>
      <xs:element name="zookeepers" type="xs:string"/>
    </xs:sequence>
  </xs:complexType>
  
  <!-- Define the legal range for a TCP port. -->
  <xs:simpleType name="tcpPort">
    <xs:restriction base="xs:int">
      <xs:minInclusive value="0"/>
      <xs:maxInclusive value="65535"/>
    </xs:restriction>
  </xs:simpleType>
</xs:schema>