Initial check-in Open ROADM app v1.2.1 (ONOS-5354).

Change-Id: I077b40c308efe257af0e23f0d87de1215c3789ad
diff --git a/apps/openroadm/yangmodel/src/main/yang/org-openroadm-common-service-types.yang b/apps/openroadm/yangmodel/src/main/yang/org-openroadm-common-service-types.yang
new file mode 100644
index 0000000..e7568b1
--- /dev/null
+++ b/apps/openroadm/yangmodel/src/main/yang/org-openroadm-common-service-types.yang
@@ -0,0 +1,508 @@
+module org-openroadm-common-service-types {
+  namespace "http://org/openroadm/common/service/types";
+  prefix org-openroadm-common-service-types;
+
+  import ietf-yang-types {
+    prefix yang;
+  }
+  import ietf-inet-types {
+    prefix inet;
+  }
+  import org-openroadm-routing-constraints {
+    prefix org-openroadm-routing-constraints;
+  }
+  import org-openroadm-topology {
+    prefix org-openroadm-topology;
+  }
+  import org-openroadm-common-types {
+    prefix org-openroadm-common-types;
+  }
+  import org-openroadm-resource-types {
+    prefix org-openroadm-resource-types;
+  }
+
+  organization
+    "Open ROADM MSA";
+  contact
+    "OpenROADM.org";
+  description
+    "YANG definitions of common service types.
+       
+      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 configuration-response-common {
+    container configuration-response-common {
+      leaf request-id {
+        type string;
+        mandatory true;
+      }
+      leaf response-code {
+        type string;
+        mandatory true;
+      }
+      leaf response-message {
+        type string;
+      }
+      leaf ack-final-indicator {
+        type string;
+        mandatory true;
+      }
+    }
+  }
+
+  grouping response-parameters {
+    container response-parameters {
+      uses org-openroadm-routing-constraints:routing-constraints;
+    }
+  }
+
+  grouping service-endpoint {
+    leaf service-format {
+      type service-format;
+      mandatory true;
+      description
+        "Format of the requested service: Ethernet, OTU, etc.";
+    }
+    leaf service-rate {
+      when "../service-format!='OMS'"{
+        description "service rate not applicable when service 
+        format is roadmline";
+      }
+      type uint32;
+      mandatory true;
+      description
+        "Rate of the requested service in GBps";
+    }
+    leaf clli {
+      type string;
+      mandatory true;
+      description
+        "CLLI";
+    }
+    uses org-openroadm-resource-types:device-id;
+    container site;
+    container tx-direction {
+      uses service-port;
+      uses service-lgx;
+      uses service-tail;
+    }
+    container rx-direction {
+      uses service-port;
+      uses service-lgx;
+      uses service-tail;
+    }
+    leaf optic-type {
+      type org-openroadm-common-types:optic-types;
+    }
+    container router {
+      description
+        "Needed for communication with DWDM pluggable";
+      leaf node-id {
+        type string;
+        description
+          "Node id. This is reported against the service, but may not get reflected in the service in the network.";
+      }
+      leaf ip-address {
+        type inet:ip-address;
+        description
+          "Router IP Address. This is reported against the service, but may not get reflected in the service in the network.";
+      }
+      leaf url {
+        type string;
+        description
+          "URL needed for communication with DWDM pluggable. This is reported against the service, but may not get reflected in the service in the network.";
+      }
+    }
+    leaf user-label {
+      type string;
+      mandatory false;
+      description
+        "Label for service endpoint, defined by the user";
+    }
+  }
+
+  typedef rpc-actions {
+    description "rpc-actions include all the rpc methods";
+    type enumeration {
+      enum service-create {
+        value "1";
+      }
+      enum service-feasibility-check {
+        value "2";
+      }
+      enum service-delete {
+        value "3";
+      }
+      enum equipment-notification {
+        value "4";
+      }
+      enum temp-service-create {
+        value "5";
+      }
+      enum temp-service-delete {
+        value "6";
+      }
+      enum service-roll {
+        value "7";
+      }
+      enum service-reconfigure {
+        value "8";
+      }
+      enum service-restoration {
+        value "9";
+      }
+      enum service-reversion {
+        value "10";
+      }
+      enum service-reroute {
+        value "11";
+      }
+      enum service-reroute-confirm {
+        value "12";
+      }
+      enum network-re-optimization {
+        value "13";
+      }
+    }
+  }
+
+  grouping sdnc-request-header {
+    container sdnc-request-header {
+      leaf request-id {
+        type string;
+      }
+      leaf rpc-action {
+        type rpc-actions;
+      }
+      leaf notification-url {
+        type string;
+      }
+      leaf request-system-id{
+        type string;
+      }
+    }
+  }
+
+  grouping service-port {
+    container port {
+      leaf port-device-name {
+        type string;
+      }
+      leaf port-type {
+        type string;
+      }
+      leaf port-name {
+        type string;
+      }
+      leaf port-rack {
+        type string;
+      }
+      leaf port-shelf {
+        type string;
+      }
+      leaf port-slot {
+        type string;
+      }
+      leaf port-sub-slot {
+        type string;
+      }
+    }
+  }
+
+  grouping service-lgx {
+    container lgx {
+      leaf lgx-device-name {
+        type string;
+      }
+      leaf lgx-port-name {
+        type string;
+      }
+      leaf lgx-port-rack {
+        type string;
+      }
+      leaf lgx-port-shelf {
+        type string;
+      }
+    }
+  }
+
+  grouping service-tail {
+    container tail {
+      container tail-roadm {
+        description
+          "ROADM on which the transponder is connected to (TID, IP Address,
+           or FQDN)";
+        uses org-openroadm-resource-types:device-id;
+      }
+      container xponder-port {
+        description
+          "Muxponder port used in tail, that will get used as a service endpoint.";
+        leaf circuit-pack-name {
+          type string;
+        }
+        leaf port-name {
+          type string;
+        }
+      }
+      leaf tail-roadm-port-aid {
+        type string;
+        description
+          "This will provide the transponder port needed to inter-city ROADM
+           connection";
+      }
+      leaf tail-roadm-port-rack-location {
+        type string;
+        description
+          "Transponder's location";
+      }
+    }
+  }
+
+  grouping service-information {
+    leaf due-date {
+      type yang:date-and-time;
+      description
+        "Date and time service to be turn up. If time is not specified for a given date, default to  midnight. Service turned up immediately if no due date is specified";
+    }
+    leaf end-date {
+      type yang:date-and-time;
+      description
+        "Date and time service to be removed";
+      mandatory false;
+    }
+    leaf nc-code {
+      type string;
+      description
+        "NC code applied to wavelength service only.This is reported against the service, but may not get reflected in the service in the network.";
+    }
+    leaf nci-code {
+      type string;
+      description
+        "NCI code applied to wavelength service only.This is reported against the service, but may not get reflected in the service in the network.";
+    }
+    leaf secondary-nci-code {
+      type string;
+      description
+        "NC code applied to wavelength service only.This is reported against the service, but may not get reflected in the service in the network.";
+    }
+    leaf customer {
+      type string;
+      description
+        "To be included in ticket information.This is reported against the service, but may not get reflected in the service in the network.";
+    }
+    leaf customer-contact {
+      type string;
+      description
+        "Customer contact information To be included in ticket information. This is reported against the service, but may not get reflected in the service in the network.";
+    }
+    leaf operator-contact {
+      type string;
+      description
+        "Operator contact information to be included in ticket information. This is reported against the service, but may not get reflected in the service in the network.";
+    }
+  }
+
+  grouping service {
+    leaf service-name {
+      type string;
+      description
+        "Identifier for the service to be created in
+         the ROADM network, e.g., CLFI, CLCI, etc.";
+      mandatory true;
+    }
+    leaf common-id {
+      type string;
+      description
+        "To be used by the ROADM controller to identify the routing 
+         constraints received from planning application (PED).";
+    }
+    uses sdnc-request-header;
+    leaf connection-type {
+      type connection-type;
+      mandatory true;
+      description
+        "Connection type";
+    }
+    leaf lifecycle-state {
+      type org-openroadm-common-types:lifecycle-state;
+      description
+        "Lifecycle State of service. Whether it is planned, deployed, in maintenance, etc.";
+    }
+    leaf administrative-state {
+      type org-openroadm-common-types:state;
+      description
+        "Administrative State: Intended state of service";
+    }
+    leaf operational-state {
+      type org-openroadm-common-types:state;
+      config false;
+      description
+        "Operational State: Actual state of service";
+    }
+    leaf condition {
+      type service-condition;
+      description
+        "Service Condition: Additional information about the state of the service. Only sent when applicable.";
+    }
+    container service-a-end {
+      uses service-endpoint;
+    }
+    container service-z-end {
+      uses service-endpoint;
+    }
+    uses org-openroadm-routing-constraints:routing-constraints;
+    uses service-information;
+    leaf latency {
+      type uint32;
+      description
+        "Latency on service";
+    }
+    leaf-list fiber-span-srlgs {
+      type string;
+      description
+        "Shared risk link group identifiers";
+    }
+    list equipment-srgs {
+      key "srg-number";
+      uses org-openroadm-resource-types:srg-number;
+    }
+    leaf-list supporting-service-name {
+      description
+        "The service name that this runs over top. If connection-type is service, then this is the related 
+         connection-type = infrastructure service, for example.";
+      type string;
+    }
+    container topology {
+      uses org-openroadm-topology:topology;
+    }
+  }
+
+  grouping service-notification-result {
+    leaf service-name {
+      type string;
+      description
+        "Identifier for the service e.g., CLFI, CLCI, etc.";
+      mandatory true;
+    }
+    leaf actual-date {
+      type yang:date-and-time;
+      description
+        "Actual date and time (if successful)";
+    }
+  }
+
+  typedef service-format {
+    type enumeration {
+      enum "Ethernet" {
+        value 1;
+      }
+      enum "OTU" {
+        value 2;
+      }
+      enum "OC" {
+        value 3;
+      }
+      enum "STM" {
+        value 4;
+      }
+      enum "OMS" {
+        value 5;
+      }
+      enum "ODU" {
+        value 6;
+      }
+      enum "OTM" {
+        value 7;
+      }
+    }
+  }
+
+  typedef service-notification-types {
+    type enumeration {
+      enum "service-create-result" {
+        value 1;
+      }
+      enum "service-reconfigure-result" {
+        value 2;
+      }
+      enum "service-delete-result" {
+        value 3;
+      }
+      enum "service-roll-result" {
+        value 4;
+      }
+      enum "service-revert-result" {
+        value 5;
+      }
+      enum "service-reroute-result" {
+        value 6;
+      }
+      enum "service-restoration-result" {
+        value 7;
+      }
+    }
+  }
+
+  typedef connection-type {
+    type enumeration {
+      enum "service" {
+        value 1;
+      }
+      enum "infrastructure" {
+        value 2;
+      }
+      enum "roadm-line" {
+        value 3;
+      }
+    }
+  }
+
+  typedef service-condition {
+    type enumeration {
+      enum "restored-temporarily" {
+        value 1;
+      }
+      enum "re-routed-temporarily" {
+        value 2;
+      }
+      enum "activated-for-service" {
+        value 3;
+      }
+      enum "activated-for-further-check" {
+        value 4;
+      }
+      enum "activated-for-troubleshooting-failure" {
+        value 5;
+      }
+    }
+  }
+}