Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

  • In fcrepo-kernel-api and fcrepo-kernel-modeshape
    • Repurpose isVersioned(), enableVersioning() and disableVersioning() in FedoraResource interface, add getTimeMap() function this is our LDPRv.
    • Create TimeMap interace defining getVersions(), getVersion(final Date/Instant d), createVersion(), createVersion(final Date/Instant d), getOriginal() and Modeshape implementing class (LDPCv)
      • VersionService interface and VersionServiceImpl functions/code (if useful) can be moved to TimeMap class. createVersion() for instance.
    • Repurpose FedoraVersion interface and FedoraVersionImpl, perhaps need getOriginal() and getTimemap() for them (LDPRm)
  • In fcrepo-http-api
    • Repurpose FedoraVersioning paths for use with TimeMap
    • Repurpose FedoraVersions to allow direct access to a specific Memento via its URI. (/fcrepo/rest/foo/fcr:versions/1234-5678)
    • Add new handing of headers and setting of response headers in FedoraLdp (
      Jira
      serverDuraSpace JIRA
      serverIdc815ca92-fd23-34c2-8fe3-956808caf8c5
      keyFCREPO-2612
      )
    • Handle DateTime negotiation on LDPRvs in FedoraLdp (
      Jira
      serverDuraSpace JIRA
      serverIdc815ca92-fd23-34c2-8fe3-956808caf8c5
      keyFCREPO-2613
      )

...


REST Interaction questions

(POST w/o body) → LDPCv → (copy) LDPRv → LDPRm

  1. POST to LDPCv without body and with or without Memento-Datetime header
  2. (If WebAC enabled)
    1. Locate ACL on LDPCv, and up tree.
    2. Verify Read/Write permissions.
    3. Throw Exception if not permitted
  3. Get LDPRv and create new child of LDPCv with this body.
  4. Add rdf:type or identifier of Memento type (Identify as a Memento)
    1. If we use a rdf:type to mark a Memento then should we display that when the Memento is requested?
    2. Should we just call Mementos anything inside of a TimeMap?
  5. Add snapshot datetime as property
    1. Where do we store the snapshot datetime? Property on the node?

(POST w body) → LDPCv → (compare LDP subtype) LDPRv → LDPRm

  1. POST to LDPCv with a new body and with or without Memento-Datetime header
    1. Can you provide a body and NOT provide a date?
  2. (If WebAC enabled)
    1. Locate ACL on LDPCv, and up tree.
    2. Verify Read/Write permissions.
    3. Throw Exception if not permitted
  3. Compare the rdf:type of resource because we can't provide a LDP-NR as a Memento of a LDP-RS or vice versa
  4. Set the entity body as the new resource.
  5. Identify as a Memento?
  6. Add snapshot datetime as property.

(GET/HEAD w Accept: application/link-format) → LDPCv 

  1. GET/HEAD to LDPCv
  2. (If WebAC enabled)
    1. Locate ACL on LDPCv, and up tree.
    2. Verify Read permissions.
    3. Throw Exception if not permitted
    4. Locate ACL on ??? for LDPRm(s) 
      1. where do we put the ACL for all the Mementos?
    5. Verify Read permissions.
    6. Throw Exception if not permitted.
  3. Get all children Mementos, generate list of Mementos and return

(GET/HEAD w Accept-Datetime: header) → LDPRv

  1. GET/HEAD to LDPRv
  2. (If WebAC enabled)
    1. Locate ACL on LDPRv and up tree
    2. Verify Read permissions.
    3. Throw Exception if not permitted.
    4. Locate ACL on LDPCv and up tree
    5. Verify Read permissions.
    6. Throw Exception if not permitted.
    7. Locate ACL on LDPRm(s)
    8. Verify Read permissions.
    9. Throw Exception if not permitted.
  3. Get list of all LDPRm(s) and snapshot datetimes.
  4. Find closest LDPRm(s)
  5. Return 302 Found and Location: <path to chosen LDPRm>


General interaction questions.

  1. How do you set the ACL that covers all Mementos?
    1. Can't POST/PUT to LDPRm(s) as Mementos are immutable