Ä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 managementqNuUsubstitution_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-structureqhUidentifier-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>hauh1Kh2hh]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]uh1Kh]qj(cdocutils.nodes term qk)Åql}qm(h"X���Authorqnh#hfh$h%h&Utermqoh(}qp(h.]h/]h-]h,]h0]uh1Kh]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]uh1Kh]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#hh$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#hh$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#hh$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#hh$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#hh$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��h2hUcurrent_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!��NUrfc_base_urlr"��Uhttps://tools.ietf.org/html/r#��U tracebackr$��àUpep_referencesr%��NUstrip_commentsr&��NU toc_backlinksr'��Uentryr(��U language_coder)��Uenr*��U datestampr+��NUreport_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��NUsmart_quotesrU��âUpep_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ø��hhhh⁄hRh\j��hˇuUsubstitution_namesrf��}rg��h&h2h(}rh��(h.]h,]h-]Usourceh%h/]h0]uU footnotesri��]rj��Urefidsrk��}rl��hR]rm��hVasub.