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

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

  organization "Open ROADM MSA";
  contact
    "OpenROADM.org";
  description
    "This module contains definitions for System Management.
     
     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";
  }

  rpc db-backup {
    description
      "copy  running DB to user provided file to a given path";
    input {
      leaf filename {
        type string {
          length "10..255";
        }
        description
          "Path and file name is used with back-up.(xxx.DBS)";
      }
    }
    output {
      uses org-openroadm-common-types:rpc-response-status;         
    }
  }
  rpc db-restore {
    description
      "Restore database ";
    input {
      leaf filename {
        type string {
          length "10..255";
        }
        description
          "PATH/file name use file name.(xxx.DBS)";
      }
      leaf nodeIDCheck {
        type boolean;
        default "true";
        description
          "Flag to indicate if sysNameCheck is required";
      }
    }
    output {
      uses org-openroadm-common-types:rpc-response-status;         
    }
  }
  rpc db-activate {
    description
      "activate the database";
    input {
      leaf rollBackTimer {
        type string;
        description
          "rollbackTimer ";
      }
    }
    output {
      uses org-openroadm-common-types:rpc-response-status;         
    }
  }
  rpc cancel-rollback-timer {
    description
      "Cancel roll back timer which user provisioned as part of activate command";
    input {
      leaf accept {
        type boolean;
        description
          " TRUE means rollback timer is cancelled and new load is accepted";
      }
    }
    output {
      uses org-openroadm-common-types:rpc-response-status;         
    }
  }
  rpc database-init {
    description
      "Initialize the database to default DB";
    output {
      uses org-openroadm-common-types:rpc-response-status;         
    } //output       
  } 
}
