module org-openroadm-resource {
  namespace "http://org/openroadm/resource";
  prefix org-openroadm-resource;

  import org-openroadm-resource-types {
    prefix org-openroadm-resource-types;
  }

  organization "Open ROADM MSA";
  contact
    "OpenROADM.org";
  description
    "YANG definitions of resources.
       
      Copyright of the Members of the Open ROADM MSA Agreement dated (c) 2016, 
      AT&T Intellectual Property.  All other rights reserved.
      
      Redistribution and use in source and binary forms, with or without modification, 
      are permitted provided that the following conditions are met:
      
      * Redistributions of source code must retain the above copyright notice, this 
        list of conditions and the following disclaimer.
      * Redistributions in binary form must reproduce the above copyright notice, 
        this list of conditions and the following disclaimer in the documentation and/or 
        other materials provided with the distribution.
      * Neither the Members of the Open ROADM MSA Agreement nor the names of its 
        contributors may be used to endorse or promote products derived from this software 
        without specific prior written permission.
      
      THIS SOFTWARE IS PROVIDED BY THE MEMBERS OF THE OPEN ROADM MSA  AGREEMENT ''AS IS'' 
      AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
      WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
      IN NO EVENT THE MEMBERS OF THE OPEN ROADM MSA  AGREEMENT BE LIABLE FOR ANY DIRECT, 
      INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
      NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;  LOSS OF USE, DATA, 
      OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
      WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
      ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
      POSSIBILITY OF SUCH DAMAGE";

  revision 2016-10-14 {
    description
      "Version 1.2";
  }

  grouping resource {
    description
      "This resource identifier is intended to provide a generic identifer
       for any resource that can be used without specific knowledge of
       the resource.";
    container device {
      description
        "Device of the resource, used only when the system using this
         model report on more than one device. ";
      uses org-openroadm-resource-types:device-id;
    }
    container resource {
      choice resource {
        case circuit-pack {
          uses org-openroadm-resource-types:circuit-pack-name;
        }
        case port {
          container port {
            uses org-openroadm-resource-types:port-name;
          }
        }
        case connection {
          uses org-openroadm-resource-types:connection-number {
            refine connection-number {
              mandatory true;
            }
          }
        }
        case physical-link {
          uses org-openroadm-resource-types:physical-link-name;
        }
        case internal-link {
          uses org-openroadm-resource-types:internal-link-name;
        }
        case shelf {
          uses org-openroadm-resource-types:shelf-name;
        }
        case srg {
          uses org-openroadm-resource-types:srg-number {
            refine srg-number {
              mandatory true;
            }
          }
        }
        case degree {
          uses org-openroadm-resource-types:degree-number {
            refine degree-number {
              mandatory true;
            }
          }
        }
        case service {
          uses org-openroadm-resource-types:service-name;
        }
        case interface {
          uses org-openroadm-resource-types:interface-name;
        }
      }
    }
    container resourceType {
      uses org-openroadm-resource-types:resource-type;
    }
  }
}
