Use Cases
=========

The following technical use cases describe the component and system
interactions in the DataONE infrastructure. The use cases describe
functionality to address the broader scope user scenarios and overall project
requirements. 


Object Discovery, Access, Creation, Modification
------------------------------------------------

.. toctree::
   :maxdepth: 1

   UseCases/01_uc
   UseCases/02_uc
   UseCases/04_uc
   UseCases/05_uc
   UseCases/11_uc
   UseCases/24_uc
   UseCases/29_uc
   UseCases/33_uc
   UseCases/34_uc
   UseCases/35_uc
   UseCases/36_uc
   UseCases/37_uc
   UseCases/38_uc
   UseCases/41_uc

Synchronization and Replication
-------------------------------

.. toctree::
   :maxdepth: 1

   UseCases/06_uc
   UseCases/08_uc
   UseCases/09_uc
   UseCases/35_uc
   UseCases/37_uc
   UseCases/40_uc

User and System Authentication and Access Control
-------------------------------------------------

.. toctree::
   :maxdepth: 1

   UseCases/12_uc
   UseCases/13_uc
   UseCases/14_uc
   UseCases/15_uc
   UseCases/31_uc
   UseCases/32_uc


System and Content Integrity
----------------------------

.. toctree::
   :maxdepth: 1

   UseCases/03_uc
   UseCases/10_uc
   UseCases/23_uc
   UseCases/24_uc
   UseCases/25_uc
   UseCases/26_uc
   UseCases/27_uc
   UseCases/29_uc
   UseCases/30_uc
   UseCases/35_uc
   UseCases/37_uc
   UseCases/39_uc
   UseCases/42_uc
   UseCases/43_uc
   UseCases/44_uc
   

Logging, Reporting, and Notification
------------------------------------

.. toctree::
   :maxdepth: 1

   UseCases/16_uc
   UseCases/17_uc
   UseCases/18_uc
   UseCases/19_uc
   UseCases/20_uc
   UseCases/21_uc
   UseCases/28_uc
   UseCases/30_uc

----

Sequential List of Functional Use Cases
---------------------------------------

.. toctree::
   :maxdepth: 1
   :glob:

   UseCases/??_uc

----

About Use Cases
---------------

An important early part in the process of system architecture is identifying the
functional requirements that the resulting system should be able to address. Use
cases are helpful for this as they describe how actors (typically entities
external to the system) interact with system components. Interaction diagrams
help define the interfaces and messages transmitted between components.


**Use Case Layout**

Each use case document is structured following a common template which
includes the following elements.

  Revisions
   A link to the revision history of the document as recorded by subversion.

  Goal
   Brief description of what is intended with the use case.

  Summary
   An overview of the use case which includes the goal and major actors.

  Use case diagram
   A diagram representation of the use case, somewhat following the UML.

  Sequence diagram
   A sequence diagram that shows the operations involved in addressing the use
   case. 

  Actors
   The participants in the use case - includes people and systems.

  Preconditions
   The conditions that must exist for the use case. For example, a particular
   use case may only be valid if the use has been authenticated.

  Triggers
   Describes the even that causes the use case to be initiated.
 
  Postconditions
   The state of the system after the use case - what conditions are true after
   the use case is completed.

  Notes 
    Miscellaneous notes and discussion items that can't be placed in the
    various categories. Comments should be annotated with time and author.




..   digraph uc_dependencies {
     
     fontname = "Bitstream Vera Sans";
     fontsize = 8;

     edge [
       fontname = "Bitstream Vera Sans"
       fontsize = 8
       color = "#888888"
       arrowhead = "open"
       arrowsize = 0.5
       len = 0.2
       style="dashed"
       ];

     node [
       shape = "record"
       fontname = "Courier"
       fontsize = 8
       fontcolor = "black"];
       
      UC01 [label="UC01\nGet Object Identified by PID"
            URL="UseCases/01_uc.html"];
      UC02 [label="UC02\nList PIDs By Search"
            URL="UseCases/02_uc.html"];
      UC03 [label="UC03\nRegister MN"
            URL="UseCases/03_uc.html"];
      UC04 [label="UC04\nCreate New Object"
            URL="UseCases/04_uc.html"];
      UC05 [label="UC05\nUpdate Metadata"
            URL="UseCases/05_uc.html"];
      UC06 [label="UC06\nMN Synchronize"
            URL="UseCases/06_uc.html"];
      UC07 [label="UC07\nCN Batch Upload"
            URL="UseCases/07_uc.html"];
      UC08 [label="UC08\nReplication Policy Communication"
            URL="UseCases/08_uc.html"];
      UC09 [label="UC09\nReplicate MN to MN"
            URL="UseCases/09_uc.html"];
      UC10 [label="UC10\nMN Status Reports"
            URL="UseCases/10_uc.html"];
      UC11 [label="UC11\nCRUD Workflow Objects"
            URL="UseCases/11_uc.html"];
      UC12 [label="UC12\nUser Authentication"
            URL="UseCases/12_uc.html"];
      UC13 [label="UC13\nUser Authorization"
            URL="UseCases/13_uc.html"];
      UC14 [label="UC14\nSystem Authentication and Authorization"
            URL="UseCases/14_uc.html"];
      UC15 [label="UC15\nAccount Management"
            URL="UseCases/15_uc.html"];
      UC16 [label="UC16\nLog CRUD Operations"
            URL="UseCases/16_uc.html"];
      UC17 [label="UC17\nCRUD Logs Aggregated at CNs"
            URL="UseCases/17_uc.html"];
      UC18 [label="UC18\nMN Retrieve Aggregated Logs"
            URL="UseCases/18_uc.html"];
      UC19 [label="UC19\nRetrieve Object Download Summary"
            URL="UseCases/19_uc.html"];
      UC20 [label="UC20\nOwner Retrieve Aggregate Logs"
            URL="UseCases/20_uc.html"];
      UC21 [label="UC21\nOwner Subscribe to CRUD Operations"
            URL="UseCases/21_uc.html"];
      UC22 [label="UC22\nLink/Citation Report for Owner"
            URL="UseCases/22_uc.html"];
      UC23 [label="UC23\nOwner Expunge Content"
            URL="UseCases/23_uc.html"];
      UC24 [label="UC24\nMNs and CNs Support Transactions"
            URL="UseCases/24_uc.html"];
      UC25 [label="UC25\nDetect Damaged Content"
            URL="UseCases/25_uc.html"];
      UC26 [label="UC26\nData Quality Checks"
            URL="UseCases/26_uc.html"];
      UC27 [label="UC27\nMetadata Version Migration"
            URL="UseCases/27_uc.html"];
      UC28 [label="UC28\nDerived Product Original Change Notification"
            URL="UseCases/28_uc.html"];
      UC29 [label="UC29\nCN Load Balancing"
            URL="UseCases/29_uc.html"];
      UC30 [label="UC30\nMN Outage Notification"
            URL="UseCases/30_uc.html"];
      UC31 [label="UC31\nManage Access Policies"
            URL="UseCases/31_uc.html"];
      UC32 [label="UC32\nTransfer Object Ownership"
            URL="UseCases/32_uc.html"];
      UC33 [label="UC33\nSearch for Data"
            URL="UseCases/33_uc.html"];
      UC34 [label="UC34\nCNs Support Other Discovery Mechanisms (e.g. Google)"
            URL="UseCases/34_uc.html"];
      UC35 [label="UC35\nQuery Coordinating Node for Metadata Describing a Member Node"
            URL="UseCases/35_uc.html"];
      UC36 [label="UC36\nResolve an Object Location"
            URL="UseCases/36_uc.html"];
      UC37 [label="UC37\nGet System Metadata for Object"
            URL="UseCases/37_uc.html"];
      UC38 [label="UC38\nReserve an Identifier"
            URL="UseCases/38_uc.html"];
      UC39 [label="UC39\nTest Node APIs"
            URL="UseCases/39_uc.html"];

      UC01 -> UC12;
      UC01 -> UC13;
      UC01 -> UC16;
      UC01 -> UC21;
      
      UC02 -> UC12;
      UC02 -> UC13;
    
      UC03 -> UC12;
      UC03 -> UC13;
      
      UC04 -> UC06;
      UC04 -> UC12;
      UC04 -> UC13;
      
      UC05 -> UC06;
      UC05 -> UC12;
      UC05 -> UC13;

      UC06 -> UC12;
      UC07 -> UC13;
   }