<schema package="org.apache.qpid.agent.example">

<!--
  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.
-->

  <!--
  ===============================================================
  Parent
  ===============================================================
  -->
  <class name="Parent">

    This class represents a parent object

    <property name="name"      type="sstr" access="RC" index="y"/>

    <statistic name="state" type="sstr"                desc="Operational state of the link"/>
    <statistic name="count" type="count64" unit="tick" desc="Counter that increases monotonically"/>

    <method name="create_child" desc="Create child object">
      <arg name="name"     dir="I" type="sstr"/>
      <arg name="childRef" dir="O" type="objId"/>
    </method>
  </class>


  <!--
  ===============================================================
  Child
  ===============================================================
  -->
  <class name="Child">
    <property name="ParentRef" type="objId"  references="Parent" access="RC" index="y" parentRef="y"/>
    <property name="name"      type="sstr"                       access="RC" index="y"/>

    <statistic name="count" type="count64" unit="tick" desc="Counter that increases monotonically"/>

    <method name="delete"/>
  </class>

  <eventArguments>
    <arg name="childName" type="sstr"/>
  </eventArguments>

  <event name="ChildCreated"   args="childName"/>
  <event name="ChildDestroyed" args="childName"/>
</schema>

