APIs Internal to Coordinating Nodes
===================================

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)