Äcdocutils.nodes
document
q)Åq}q(U	nametypesq}q(X!���handling document read operationsqNX#���handling document update operationsqNX#���handling document delete operationsqNX#���handling document create operationsq	NX���identifier resolutionq
NX���identifier table structureqNX���identifier managementqNuUsubstitution_defsq
}qUparse_messagesq]qUcurrent_sourceqNU
decorationqNUautofootnote_startqKUnameidsq}q(hU!handling-document-read-operationsqhU#handling-document-update-operationsqhU#handling-document-delete-operationsqh	U#handling-document-create-operationsqh
Uidentifier-resolutionqhUidentifier-table-structureqhUidentifier-managementquUchildrenq]q(cdocutils.nodes
raw
q)Åq }q!(U	rawsourceq"U�Uparentq#hUsourceq$Xe���/var/lib/jenkins/jobs/Metacat_stable/workspace/METACAT_2_5_1/docs/user/metacat/source/identifiers.rstq%Utagnameq&Urawq'U
attributesq(}q)(UformatX���latexU	xml:spaceq*Upreserveq+Uidsq,]Ubackrefsq-]Udupnamesq.]Uclassesq/]Unamesq0]uUlineq1KUdocumentq2hh]q3cdocutils.nodes
Text
q4X���\newpageq5ÖÅq6}q7(h"U�h#h ubaubcdocutils.nodes
section
q8)Åq9}q:(h"U�h#hh$h%h&Usectionq;h(}q<(h.]h/]h-]h,]q=hah0]q>hauh1Kh2hh]q?(cdocutils.nodes
title
q@)ÅqA}qB(h"X���Identifier ManagementqCh#h9h$h%h&UtitleqDh(}qE(h.]h/]h-]h,]h0]uh1Kh2hh]qFh4X���Identifier ManagementqGÖÅqH}qI(h"hCh#hAubaubcsphinx.addnodes
index
qJ)ÅqK}qL(h"U�h#h9h$h%h&UindexqMh(}qN(h,]h-]h.]h/]h0]UentriesqO]qP(UsingleqQX���IdentifiersUindex-0qRU�tqSaUinlineqTâuh1K	h2hh]ubcdocutils.nodes
target
qU)ÅqV}qW(h"U�h#h9h$h%h&UtargetqXh(}qY(h,]h-]h.]h/]h0]UrefidqZhRuh1K
h2hh]ubcdocutils.nodes
definition_list
q[)Åq\}q](h"U�h#h9h$h%Uexpect_referenced_by_nameq^}h&Udefinition_listq_h(}q`(h.]h/]h-]h,]qahRah0]uh1Nh2hUexpect_referenced_by_idqb}qchRhVsh]qd(cdocutils.nodes
definition_list_item
qe)Åqf}qg(h"X���Author
Matthew B. Jones
h#h\h$h%h&Udefinition_list_itemqhh(}qi(h.]h/]h-]h,]h0]uh1Kh]qj(cdocutils.nodes
term
qk)Åql}qm(h"X���Authorqnh#hfh$h%h&Utermqoh(}qp(h.]h/]h-]h,]h0]uh1Kh]qqh4X���AuthorqrÖÅqs}qt(h"hnh#hlubaubcdocutils.nodes
definition
qu)Åqv}qw(h"U�h(}qx(h.]h/]h-]h,]h0]uh#hfh]qycdocutils.nodes
paragraph
qz)Åq{}q|(h"X���Matthew B. Jonesq}h#hvh$h%h&U	paragraphq~h(}q(h.]h/]h-]h,]h0]uh1Kh]qÄh4X���Matthew B. JonesqÅÖÅqÇ}qÉ(h"h}h#h{ubaubah&U
definitionqÑubeubhe)ÅqÖ}qÜ(h"X@���Date
- 20100301 [MBJ] Initial draft of Identifier documentation
h#h\h$h%h&hhh(}qá(h.]h/]h-]h,]h0]uh1Kh2hh]qà(hk)Åqâ}qä(h"X���Dateqãh#hÖh$h%h&hoh(}qå(h.]h/]h-]h,]h0]uh1Kh]qçh4X���DateqéÖÅqè}qê(h"hãh#hâubaubhu)Åqë}qí(h"U�h(}qì(h.]h/]h-]h,]h0]uh#hÖh]qîcdocutils.nodes
bullet_list
qï)Åqñ}qó(h"U�h(}qò(UbulletqôX���-h,]h-]h.]h/]h0]uh#hëh]qöcdocutils.nodes
list_item
qõ)Åqú}qù(h"X9���20100301 [MBJ] Initial draft of Identifier documentation
h(}qû(h.]h/]h-]h,]h0]uh#hñh]qühz)Åq†}q°(h"X8���20100301 [MBJ] Initial draft of Identifier documentationq¢h#húh$h%h&h~h(}q£(h.]h/]h-]h,]h0]uh1Kh]q§h4X8���20100301 [MBJ] Initial draft of Identifier documentationq•ÖÅq¶}qß(h"h¢h#h†ubaubah&U	list_itemq®ubah&Ubullet_listq©ubah&hÑubeubhe)Åq™}q´(h"XA���Goal
Extend Metacat to support identifiers with arbitrary syntax
h#h\h$h%h&hhh(}q¨(h.]h/]h-]h,]h0]uh1Kh2hh]q≠(hk)ÅqÆ}qØ(h"X���Goalq∞h#h™h$h%h&hoh(}q±(h.]h/]h-]h,]h0]uh1Kh]q≤h4X���Goalq≥ÖÅq¥}qµ(h"h∞h#hÆubaubhu)Åq∂}q∑(h"U�h(}q∏(h.]h/]h-]h,]h0]uh#h™h]qπhz)Åq∫}qª(h"X;���Extend Metacat to support identifiers with arbitrary syntaxqºh#h∂h$h%h&h~h(}qΩ(h.]h/]h-]h,]h0]uh1Kh]qæh4X;���Extend Metacat to support identifiers with arbitrary syntaxqøÖÅq¿}q¡(h"hºh#h∫ubaubah&hÑubeubhe)Åq¬}q√(h"X«��Summary
Metacat currently supports identifier strings called 'docids' that have
the syntax 'scope.object.revision', such as 'foo.34.1' (we will refer to
these as 'LocalIDs'). We now want Metacat to support identifiers that are
arbitrary strings, but still enforce uniqueness and proper revision
handling (refer to these as GUIDs).  Metacat must be able to accept
these strings as identifiers for all CRUD operations, and reference them
in search results.
h#h\h$h%h&hhh(}qƒ(h.]h/]h-]h,]h0]uh1Kh2hh]q≈(hk)Åq∆}q«(h"X���Summaryq»h#h¬h$h%h&hoh(}q…(h.]h/]h-]h,]h0]uh1Kh]q h4X���SummaryqÀÖÅqÃ}qÕ(h"h»h#h∆ubaubhu)ÅqŒ}qœ(h"U�h(}q–(h.]h/]h-]h,]h0]uh#h¬h]q—hz)Åq“}q”(h"Xæ��Metacat currently supports identifier strings called 'docids' that have
the syntax 'scope.object.revision', such as 'foo.34.1' (we will refer to
these as 'LocalIDs'). We now want Metacat to support identifiers that are
arbitrary strings, but still enforce uniqueness and proper revision
handling (refer to these as GUIDs).  Metacat must be able to accept
these strings as identifiers for all CRUD operations, and reference them
in search results.q‘h#hŒh$h%h&h~h(}q’(h.]h/]h-]h,]h0]uh1Kh]q÷h4Xæ��Metacat currently supports identifier strings called 'docids' that have
the syntax 'scope.object.revision', such as 'foo.34.1' (we will refer to
these as 'LocalIDs'). We now want Metacat to support identifiers that are
arbitrary strings, but still enforce uniqueness and proper revision
handling (refer to these as GUIDs).  Metacat must be able to accept
these strings as identifiers for all CRUD operations, and reference them
in search results.q◊ÖÅqÿ}qŸ(h"h‘h#h“ubaubah&hÑubeubeubh8)Åq⁄}q€(h"U�h#h9h$h%h&h;h(}q‹(h.]h/]h-]h,]q›hah0]qfih
auh1Kh2hh]qfl(h@)Åq‡}q·(h"X���Identifier Resolutionq‚h#h⁄h$h%h&hDh(}q„(h.]h/]h-]h,]h0]uh1Kh2hh]q‰h4X���Identifier ResolutionqÂÖÅqÊ}qÁ(h"h‚h#h‡ubaubhz)ÅqË}qÈ(h"X˛��Because Metacat uses LocalIDs throughout the code for references to objects,
and that LocalID has a constrained structure that includes semantics about
revisions in the identifier, it is difficult to wholesale replace it with
less-constrained string identifiers without re-writing much of Metacat.
Thus, our alternate strategy is to wrap the Metacat APIs with a
identifier resolution layer that keeps track of the unconstrained GUIDs and
maps them to constrained local identifiers which are used internally within
Metacat. The basic identifer table model is shown in Figure 1, while the
basic strategy for retrieving an object is shown in Figure 2, creating an
object is shown in Figure 3, updating an object in Figure 4, and deleting
an object is shown in Figure 5.qÍh#h⁄h$h%h&h~h(}qÎ(h.]h/]h-]h,]h0]uh1Kh2hh]qÏh4X˛��Because Metacat uses LocalIDs throughout the code for references to objects,
and that LocalID has a constrained structure that includes semantics about
revisions in the identifier, it is difficult to wholesale replace it with
less-constrained string identifiers without re-writing much of Metacat.
Thus, our alternate strategy is to wrap the Metacat APIs with a
identifier resolution layer that keeps track of the unconstrained GUIDs and
maps them to constrained local identifiers which are used internally within
Metacat. The basic identifer table model is shown in Figure 1, while the
basic strategy for retrieving an object is shown in Figure 2, creating an
object is shown in Figure 3, updating an object in Figure 4, and deleting
an object is shown in Figure 5.qÌÖÅqÓ}qÔ(h"hÍh#hËubaubh8)Åq}qÒ(h"U�h#h⁄h$h%h&h;h(}qÚ(h.]h/]h-]h,]qÛhah0]qÙhauh1K-h2hh]qı(h@)Åqˆ}q˜(h"X���Identifier Table Structureq¯h#hh$h%h&hDh(}q˘(h.]h/]h-]h,]h0]uh1K-h2hh]q˙h4X���Identifier Table Structureq˚ÖÅq¸}q˝(h"h¯h#hˆubaubcdocutils.nodes
figure
q˛)Åqˇ}r���(h"U�h#hh$h%h&Ufigurer��h(}r��(h.]h/]h-]h,]r��Uid1r��ah0]uh1Nh2hh]r��(cdocutils.nodes
image
r��)År��}r��(h"XR���.. figure:: images/identifiers.png

   Figure 1. Table structure for identifiers.
h(}r	��(UuriX���images/identifiers.pngr
��h,]h-]h.]h/]U
candidatesr��}r��U*j
��sh0]uh#hˇh]h&Uimager
��ubcdocutils.nodes
caption
r��)År��}r��(h"X*���Figure 1. Table structure for identifiers.r��h#hˇh$h%h&Ucaptionr��h(}r��(h.]h/]h-]h,]h0]uh1K1h]r��h4X*���Figure 1. Table structure for identifiers.r��ÖÅr��}r��(h"j��h#j��ubaubeubcdocutils.nodes
comment
r��)År��}r��(h"XÇ��This block defines the table structure diagram referenced above.
@startuml images/identifiers.png

identifiers "*" -- "1" xml_documents

identifiers : String identifier
identifiers : String docid
identifiers : Integer rev

xml_documents : String docid
xml_documents : String rev

note right of identifiers
  "identifiers.(docid,rev) is a foreign key into xml_documents"
end note
@endumlh#hh$h%h&Ucommentr��h(}r��(h*h+h,]h-]h.]h/]h0]uh1KDh2hh]r��h4XÇ��This block defines the table structure diagram referenced above.
@startuml images/identifiers.png

identifiers "*" -- "1" xml_documents

identifiers : String identifier
identifiers : String docid
identifiers : Integer rev

xml_documents : String docid
xml_documents : String rev

note right of identifiers
  "identifiers.(docid,rev) is a foreign key into xml_documents"
end note
@endumlr��ÖÅr��}r ��(h"U�h#j��ubaubh)År!��}r"��(h"U�h#hh$h%h&h'h(}r#��(UformatX���latexh*h+h,]h-]h.]h/]h0]uh1KEh2hh]r$��h4X���\newpager%��ÖÅr&��}r'��(h"U�h#j!��ubaubh)År(��}r)��(h"U�h#hh$h%h&h'h(}r*��(UformatX���pdfh*h+h,]h-]h.]h/]h0]uh1KIh2hh]r+��h4X	���PageBreakr,��ÖÅr-��}r.��(h"U�h#j(��ubaubeubh8)År/��}r0��(h"U�h#h⁄h$h%h&h;h(}r1��(h.]h/]h-]h,]r2��hah0]r3��hauh1KOh2hh]r4��(h@)År5��}r6��(h"X!���Handling document read operationsr7��h#j/��h$h%h&hDh(}r8��(h.]h/]h-]h,]h0]uh1KOh2hh]r9��h4X!���Handling document read operationsr:��ÖÅr;��}r<��(h"j7��h#j5��ubaubhz)År=��}r>��(h"XA���An overview of the process needed to read an object using a GUID.r?��h#j/��h$h%h&h~h(}r@��(h.]h/]h-]h,]h0]uh1KQh2hh]rA��h4XA���An overview of the process needed to read an object using a GUID.rB��ÖÅrC��}rD��(h"j?��h#j=��ubaubh˛)ÅrE��}rF��(h"U�h#j/��h$h%h&j��h(}rG��(h.]h/]h-]h,]rH��Uid2rI��ah0]uh1Nh2hh]rJ��(j��)ÅrK��}rL��(h"Xñ���.. figure:: images/guid_read.png

   Figure 2. Basic handling for string identifiers (GUIDs) as mapped to
   docids (LocalIDs) to retrieve an object.
h(}rM��(UuriX���images/guid_read.pngrN��h,]h-]h.]h/]j��}rO��U*jN��sh0]uh#jE��h]h&j
��ubj��)ÅrP��}rQ��(h"Xm���Figure 2. Basic handling for string identifiers (GUIDs) as mapped to
docids (LocalIDs) to retrieve an object.rR��h#jE��h$h%h&j��h(}rS��(h.]h/]h-]h,]h0]uh1KVh]rT��h4Xm���Figure 2. Basic handling for string identifiers (GUIDs) as mapped to
docids (LocalIDs) to retrieve an object.rU��ÖÅrV��}rW��(h"jR��h#jP��ubaubeubj��)ÅrX��}rY��(h"X��@startuml images/guid_read.png
!include plantuml.conf
actor User
participant "Client" as app_client << Application >>
participant "CRUD API" as c_crud << MetacatRestServlet >>
participant "Identifier Manager" as ident_man << IdentifierManager >>
participant "Handler" as handler << MetacatHandler >>
User -> app_client
app_client -> c_crud: get(token, GUID)
c_crud -> ident_man: getLocalID(GUID)
c_crud <-- ident_man: localID
c_crud -> handler: handleReadAction(localID)
c_crud <-- handler: object
c_crud --> app_client: object

@endumlh#j/��h$h%h&j��h(}rZ��(h*h+h,]h-]h.]h/]h0]uh1Kjh2hh]r[��h4X��@startuml images/guid_read.png
!include plantuml.conf
actor User
participant "Client" as app_client << Application >>
participant "CRUD API" as c_crud << MetacatRestServlet >>
participant "Identifier Manager" as ident_man << IdentifierManager >>
participant "Handler" as handler << MetacatHandler >>
User -> app_client
app_client -> c_crud: get(token, GUID)
c_crud -> ident_man: getLocalID(GUID)
c_crud <-- ident_man: localID
c_crud -> handler: handleReadAction(localID)
c_crud <-- handler: object
c_crud --> app_client: object

@endumlr\��ÖÅr]��}r^��(h"U�h#jX��ubaubeubh8)År_��}r`��(h"U�h#h⁄h$h%h&h;h(}ra��(h.]h/]h-]h,]rb��hah0]rc��h	auh1Klh2hh]rd��(h@)Åre��}rf��(h"X#���Handling document create operationsrg��h#j_��h$h%h&hDh(}rh��(h.]h/]h-]h,]h0]uh1Klh2hh]ri��h4X#���Handling document create operationsrj��ÖÅrk��}rl��(h"jg��h#je��ubaubhz)Årm��}rn��(h"XC���An overview of the process needed to create an object using a GUID.ro��h#j_��h$h%h&h~h(}rp��(h.]h/]h-]h,]h0]uh1Knh2hh]rq��h4XC���An overview of the process needed to create an object using a GUID.rr��ÖÅrs��}rt��(h"jo��h#jm��ubaubh˛)Åru��}rv��(h"U�h#j_��h$h%h&j��h(}rw��(h.]h/]h-]h,]rx��Uid3ry��ah0]uh1Nh2hh]rz��(j��)År{��}r|��(h"Xñ���.. figure:: images/guid_insert.png

   Figure 3. Basic handling for string identifiers (GUIDs) as mapped to
   docids (LocalIDs) to create an object.
h(}r}��(UuriX���images/guid_insert.pngr~��h,]h-]h.]h/]j��}r��U*j~��sh0]uh#ju��h]h&j
��ubj��)ÅrÄ��}rÅ��(h"Xk���Figure 3. Basic handling for string identifiers (GUIDs) as mapped to
docids (LocalIDs) to create an object.r��h#ju��h$h%h&j��h(}r��(h.]h/]h-]h,]h0]uh1Krh]r��h4Xk���Figure 3. Basic handling for string identifiers (GUIDs) as mapped to
docids (LocalIDs) to create an object.rÖ��ÖÅrÜ��}rá��(h"jÇ��h#jÄ��ubaubeubj��)Årà��}râ��(h"X{��@startuml images/guid_insert.png
!include plantuml.conf
actor User
participant "Client" as app_client << Application >>
participant "CRUD API" as c_crud << MetacatRestServlet >>
participant "Identifier Manager" as ident_man << IdentifierManager >>
participant "Handler" as handler << MetacatHandler >>
User -> app_client
app_client -> c_crud: create(token, GUID, object, sysmeta)
c_crud -> ident_man: identifierExists(GUID)
c_crud <-- ident_man: T or F
alt identifierExists == "F"
    c_crud -> ident_man: mapToLocalId(GUID)
    c_crud <-- ident_man: localID
    c_crud -> handler: handleInsertAction(localID)
    c_crud <-- handler: success
    note right of c_crud
      "Also need to address how to handle the sysmeta information wrt insertion methods"
    end note
    app_client <-- c_crud: success
else identifierExists == "T"
    app_client <-- c_crud: IdentifierNotUnique
end
@endumlh#j_��h$h%h&j��h(}rä��(h*h+h,]h-]h.]h/]h0]uh1Kéh2hh]rã��h4X{��@startuml images/guid_insert.png
!include plantuml.conf
actor User
participant "Client" as app_client << Application >>
participant "CRUD API" as c_crud << MetacatRestServlet >>
participant "Identifier Manager" as ident_man << IdentifierManager >>
participant "Handler" as handler << MetacatHandler >>
User -> app_client
app_client -> c_crud: create(token, GUID, object, sysmeta)
c_crud -> ident_man: identifierExists(GUID)
c_crud <-- ident_man: T or F
alt identifierExists == "F"
    c_crud -> ident_man: mapToLocalId(GUID)
    c_crud <-- ident_man: localID
    c_crud -> handler: handleInsertAction(localID)
    c_crud <-- handler: success
    note right of c_crud
      "Also need to address how to handle the sysmeta information wrt insertion methods"
    end note
    app_client <-- c_crud: success
else identifierExists == "T"
    app_client <-- c_crud: IdentifierNotUnique
end
@endumlrå��ÖÅrç��}ré��(h"U�h#jà��ubaubeubh8)Årè��}rê��(h"U�h#h⁄h$h%h&h;h(}rë��(h.]h/]h-]h,]rí��hah0]rì��hauh1Kêh2hh]rî��(h@)Årï��}rñ��(h"X#���Handling document update operationsró��h#jè��h$h%h&hDh(}rò��(h.]h/]h-]h,]h0]uh1Kêh2hh]rô��h4X#���Handling document update operationsrö��ÖÅrõ��}rú��(h"jó��h#jï��ubaubhz)Årù��}rû��(h"XC���An overview of the process needed to update an object using a GUID.rü��h#jè��h$h%h&h~h(}r†��(h.]h/]h-]h,]h0]uh1Kíh2hh]r°��h4XC���An overview of the process needed to update an object using a GUID.r¢��ÖÅr£��}r§��(h"jü��h#jù��ubaubh˛)År•��}r¶��(h"U�h#jè��h$h%h&j��h(}rß��(h.]h/]h-]h,]r®��Uid4r©��ah0]uh1Nh2hh]r™��(j��)År´��}r¨��(h"Xñ���.. figure:: images/guid_update.png

   Figure 4. Basic handling for string identifiers (GUIDs) as mapped to
   docids (LocalIDs) to update an object.
h(}r≠��(UuriX���images/guid_update.pngrÆ��h,]h-]h.]h/]j��}rØ��U*jÆ��sh0]uh#j•��h]h&j
��ubj��)År∞��}r±��(h"Xk���Figure 4. Basic handling for string identifiers (GUIDs) as mapped to
docids (LocalIDs) to update an object.r≤��h#j•��h$h%h&j��h(}r≥��(h.]h/]h-]h,]h0]uh1Kñh]r¥��h4Xk���Figure 4. Basic handling for string identifiers (GUIDs) as mapped to
docids (LocalIDs) to update an object.rµ��ÖÅr∂��}r∑��(h"j≤��h#j∞��ubaubeubj��)År∏��}rπ��(h"XÉ��@startuml images/guid_update.png
!include plantuml.conf
actor User
participant "Client" as app_client << Application >>
participant "CRUD API" as c_crud << MetacatRestServlet >>
participant "Identifier Manager" as ident_man << IdentifierManager >>
participant "Handler" as handler << MetacatHandler >>
User -> app_client
app_client -> c_crud: update(token, GUID, object, obsoletedGUID, sysmeta)

c_crud -> ident_man: identifierExists(obsoletedGUID)
c_crud <-- ident_man: T or F
alt identifierExists == "T"

    c_crud -> ident_man: identifierExists(GUID)
    c_crud <-- ident_man: T or F
    alt identifierExists == "F"
        c_crud -> ident_man: mapToLocalId(GUID, obsoletedGUID)
        c_crud <-- ident_man: localID
        c_crud -> handler: handleUpdateAction(localID)
        c_crud <-- handler: success
        note right of c_crud
          "Also need to address how to handle the sysmeta information wrt update methods"
        end note
        app_client <-- c_crud: success
    else identifierExists == "T"
        app_client <-- c_crud: IdentifierNotUnique
    end
else identifierExists == "F"
    app_client <-- c_crud: NotFound
end
@endumlh#jè��h$h%h&j��h(}r∫��(h*h+h,]h-]h.]h/]h0]uh1K∫h2hh]rª��h4XÉ��@startuml images/guid_update.png
!include plantuml.conf
actor User
participant "Client" as app_client << Application >>
participant "CRUD API" as c_crud << MetacatRestServlet >>
participant "Identifier Manager" as ident_man << IdentifierManager >>
participant "Handler" as handler << MetacatHandler >>
User -> app_client
app_client -> c_crud: update(token, GUID, object, obsoletedGUID, sysmeta)

c_crud -> ident_man: identifierExists(obsoletedGUID)
c_crud <-- ident_man: T or F
alt identifierExists == "T"

    c_crud -> ident_man: identifierExists(GUID)
    c_crud <-- ident_man: T or F
    alt identifierExists == "F"
        c_crud -> ident_man: mapToLocalId(GUID, obsoletedGUID)
        c_crud <-- ident_man: localID
        c_crud -> handler: handleUpdateAction(localID)
        c_crud <-- handler: success
        note right of c_crud
          "Also need to address how to handle the sysmeta information wrt update methods"
        end note
        app_client <-- c_crud: success
    else identifierExists == "T"
        app_client <-- c_crud: IdentifierNotUnique
    end
else identifierExists == "F"
    app_client <-- c_crud: NotFound
end
@endumlrº��ÖÅrΩ��}ræ��(h"U�h#j∏��ubaubeubh8)Årø��}r¿��(h"U�h#h⁄h$h%h&h;h(}r¡��(h.]h/]h-]h,]r¬��hah0]r√��hauh1Kºh2hh]rƒ��(h@)År≈��}r∆��(h"X#���Handling document delete operationsr«��h#jø��h$h%h&hDh(}r»��(h.]h/]h-]h,]h0]uh1Kºh2hh]r…��h4X#���Handling document delete operationsr ��ÖÅrÀ��}rÃ��(h"j«��h#j≈��ubaubhz)ÅrÕ��}rŒ��(h"XC���An overview of the process needed to delete an object using a GUID.rœ��h#jø��h$h%h&h~h(}r–��(h.]h/]h-]h,]h0]uh1Kæh2hh]r—��h4XC���An overview of the process needed to delete an object using a GUID.r“��ÖÅr”��}r‘��(h"jœ��h#jÕ��ubaubh˛)År’��}r÷��(h"U�h#jø��h$h%h&j��h(}r◊��(h.]h/]h-]h,]rÿ��Uid5rŸ��ah0]uh1Nh2hh]r⁄��(j��)År€��}r‹��(h"Xñ���.. figure:: images/guid_delete.png

   Figure 5. Basic handling for string identifiers (GUIDs) as mapped to
   docids (LocalIDs) to delete an object.
h(}r›��(UuriX���images/guid_delete.pngrfi��h,]h-]h.]h/]j��}rfl��U*jfi��sh0]uh#j’��h]h&j
��ubj��)År‡��}r·��(h"Xk���Figure 5. Basic handling for string identifiers (GUIDs) as mapped to
docids (LocalIDs) to delete an object.r‚��h#j’��h$h%h&j��h(}r„��(h.]h/]h-]h,]h0]uh1K¬h]r‰��h4Xk���Figure 5. Basic handling for string identifiers (GUIDs) as mapped to
docids (LocalIDs) to delete an object.rÂ��ÖÅrÊ��}rÁ��(h"j‚��h#j‡��ubaubeubj��)ÅrË��}rÈ��(h"X‡��@startuml images/guid_delete.png
!include plantuml.conf
actor User
participant "Client" as app_client << Application >>
participant "CRUD API" as c_crud << MetacatRestServlet >>
participant "Identifier Manager" as ident_man << IdentifierManager >>
participant "Handler" as handler << MetacatHandler >>
User -> app_client
app_client -> c_crud: delete(token, GUID)
c_crud -> ident_man: identifierExists(GUID)
c_crud <-- ident_man: T or F
alt identifierExists == "T"
    c_crud -> ident_man: mapToLocalId(GUID)
    c_crud <-- ident_man: localID
    c_crud -> handler: handleDeleteAction(localID)
    c_crud <-- handler: success
    app_client <-- c_crud: success
else identifierExists == "F"
    app_client <-- c_crud: NotFound
end
@endumlh#jø��h$h%h&j��h(}rÍ��(h*h+h,]h-]h.]h/]h0]uh1K€h2hh]rÎ��h4X‡��@startuml images/guid_delete.png
!include plantuml.conf
actor User
participant "Client" as app_client << Application >>
participant "CRUD API" as c_crud << MetacatRestServlet >>
participant "Identifier Manager" as ident_man << IdentifierManager >>
participant "Handler" as handler << MetacatHandler >>
User -> app_client
app_client -> c_crud: delete(token, GUID)
c_crud -> ident_man: identifierExists(GUID)
c_crud <-- ident_man: T or F
alt identifierExists == "T"
    c_crud -> ident_man: mapToLocalId(GUID)
    c_crud <-- ident_man: localID
    c_crud -> handler: handleDeleteAction(localID)
    c_crud <-- handler: success
    app_client <-- c_crud: success
else identifierExists == "F"
    app_client <-- c_crud: NotFound
end
@endumlrÏ��ÖÅrÌ��}rÓ��(h"U�h#jË��ubaubj��)ÅrÔ��}r��(h"XN��This block defines the interaction diagram referenced above.
startuml images/01_interaction.png
  !include plantuml.conf
  actor User
  participant "Client" as app_client << Application >>
  User -> app_client

  participant "CRUD API" as c_crud << Coordinating Node >>
  activate c_crud
  app_client -> c_crud: resolve(GUID, auth_token)
  participant "Authorization API" as c_authorize << Coordinating Node >>
  c_crud -> c_authorize: isAuth(auth_token, GUID)
  participant "Verify API" as c_ver << Coordinating Node >>
  c_authorize -> c_ver: isValidToken (token)
  c_authorize <-- c_ver: T or F
  c_crud <-- c_authorize: T or F
  app_client <-- c_crud: handle_list
  deactivate c_crud

  participant "CRUD API" as m_crud << Member Node >>
  activate m_crud
  app_client -> m_crud: get(auth_token, handle)
  participant "Server Authentication API" as m_authenticate << Member Node >>
  m_crud -> m_authenticate: isAuth(auth_token, GUID)
  m_crud <-- m_authenticate: T or F
  m_crud -> m_crud: log(get, UserID, GUID)
  app_client <-- m_crud: object or unauth or doesNotExist
  deactivate m_crud
endumlh#jø��h$h%h&j��h(}rÒ��(h*h+h,]h-]h.]h/]h0]uh1K˘h2hh]rÚ��h4XN��This block defines the interaction diagram referenced above.
startuml images/01_interaction.png
  !include plantuml.conf
  actor User
  participant "Client" as app_client << Application >>
  User -> app_client

  participant "CRUD API" as c_crud << Coordinating Node >>
  activate c_crud
  app_client -> c_crud: resolve(GUID, auth_token)
  participant "Authorization API" as c_authorize << Coordinating Node >>
  c_crud -> c_authorize: isAuth(auth_token, GUID)
  participant "Verify API" as c_ver << Coordinating Node >>
  c_authorize -> c_ver: isValidToken (token)
  c_authorize <-- c_ver: T or F
  c_crud <-- c_authorize: T or F
  app_client <-- c_crud: handle_list
  deactivate c_crud

  participant "CRUD API" as m_crud << Member Node >>
  activate m_crud
  app_client -> m_crud: get(auth_token, handle)
  participant "Server Authentication API" as m_authenticate << Member Node >>
  m_crud -> m_authenticate: isAuth(auth_token, GUID)
  m_crud <-- m_authenticate: T or F
  m_crud -> m_crud: log(get, UserID, GUID)
  app_client <-- m_crud: object or unauth or doesNotExist
  deactivate m_crud
endumlrÛ��ÖÅrÙ��}rı��(h"U�h#jÔ��ubaubeubeubeubeh"U�Utransformerrˆ��NU
footnote_refsr˜��}r¯��Urefnamesr˘��}r˙��Usymbol_footnotesr˚��]r¸��Uautofootnote_refsr˝��]r˛��Usymbol_footnote_refsrˇ��]r���U	citationsr��]r��h2hUcurrent_liner��NUtransform_messagesr��]r��cdocutils.nodes
system_message
r��)År��}r��(h"U�h(}r	��(h.]UlevelKh,]h-]Usourceh%h/]h0]UlineK
UtypeUINFOr
��uh]r��hz)År��}r
��(h"U�h(}r��(h.]h/]h-]h,]h0]uh#j��h]r��h4X-���Hyperlink target "index-0" is not referenced.r��ÖÅr��}r��(h"U�h#j��ubah&h~ubah&Usystem_messager��ubaUreporterr��NUid_startr��KU
autofootnotesr��]r��U
citation_refsr��}r��Uindirect_targetsr��]r��Usettingsr��(cdocutils.frontend
Values
r��or��}r��(Ufootnote_backlinksr ��KUrecord_dependenciesr!��NUrfc_base_urlr"��Uhttps://tools.ietf.org/html/r#��U	tracebackr$��àUpep_referencesr%��NUstrip_commentsr&��NU
toc_backlinksr'��Uentryr(��U
language_coder)��Uenr*��U	datestampr+��NUreport_levelr,��KU_destinationr-��NU
halt_levelr.��KU
strip_classesr/��NhDNUerror_encoding_error_handlerr0��Ubackslashreplacer1��Udebugr2��NUembed_stylesheetr3��âUoutput_encoding_error_handlerr4��Ustrictr5��U
sectnum_xformr6��KUdump_transformsr7��NU
docinfo_xformr8��KUwarning_streamr9��NUpep_file_url_templater:��Upep-%04dr;��Uexit_status_levelr<��KUconfigr=��NUstrict_visitorr>��NUcloak_email_addressesr?��àUtrim_footnote_reference_spacer@��âUenvrA��NUdump_pseudo_xmlrB��NUexpose_internalsrC��NUsectsubtitle_xformrD��âUsource_linkrE��NUrfc_referencesrF��NUoutput_encodingrG��Uutf-8rH��U
source_urlrI��NUinput_encodingrJ��U	utf-8-sigrK��U_disable_configrL��NU	id_prefixrM��U�U	tab_widthrN��KUerror_encodingrO��UUTF-8rP��U_sourcerQ��h%Ugettext_compactrR��àU	generatorrS��NUdump_internalsrT��NUsmart_quotesrU��âUpep_base_urlrV��U https://www.python.org/dev/peps/rW��Usyntax_highlightrX��UlongrY��Uinput_encoding_error_handlerrZ��j5��Uauto_id_prefixr[��Uidr\��Udoctitle_xformr]��âUstrip_elements_with_classesr^��NU
_config_filesr_��]Ufile_insertion_enabledr`��àUraw_enabledra��KU
dump_settingsrb��NubUsymbol_footnote_startrc��K�Uidsrd��}re��(hj_��hj/��hjè��j©��j•��jŸ��j’��jI��jE��jy��ju��hh9hjø��hhhh⁄hRh\j��hˇuUsubstitution_namesrf��}rg��h&h2h(}rh��(h.]h,]h-]Usourceh%h/]h0]uU	footnotesri��]rj��Urefidsrk��}rl��hR]rm��hVasub.