Warning: These documents are under active 
      development and subject to change (version 2.1.0-beta).
      The latest release documents are at:
      https://purl.dataone.org/architecture
      
The DataONE Coordinating Nodes are composed of several components that by their nature will be operating in different JVMs. This document outlines the methods that are exposed by the different components in a Coordinating Node.
boolean identity.isPublic(Subject)
boolean identity.isGroup(Subject)
Subject[] identity.getSubjectGroups(Subject)
XML objectStore.getSystemMetadata(Identifier)
OctetStream objectStore.get(Identifier)
boolean objectStore.registerSystemMetadata(Identifier, SystemMetadata)
CN_crud.updateReplicaMetadata(token, pid, Types.ReplicaMetadata) -> Types.Identifier
 full replacement of ReplicaMetadata, changes date sysmeta modified
CN_crud.setAccessPolicy(token, pid, AccessPolicy) -> boolean
  RE /access/pid (body containing token, AccessPolicy) -> boolean
  changes date sysmeta modified too
CN_crud.setReplicationPolicy(token, pid, ReplicationPolicy) -> boolean
REST API: PUT /replication/pid (body containing token, ReplicationPolicy) -> boolean
   - changes date sysmeta modified too
CN.setDescribes()
   describes can be set in its own method, but only with write access to
   described object and describing object
   may want to relax the requirement later to allow third party
   annotations/perspectives/derivations on other people's data, but need to be
   able to differentiate the primary provider's description from these other
   descriptions
CN.setDescribedBy()
   describedBy can be set in its own method, but only with write access to described object
ObjectList getDescribes(Identifier)
ObjectList getDescribedBy(Identifier)
ObjectList getRelatedObjects(Identifier, RelationshipEnum)