This Wiki contains concepts, results and brainstormings concerning the repository integration done at the SprintZurich20040514.

Goals

  • independence from repository implementation
  • reuse of Cocoon components
    • exclude repository markup from sitemap URLs i.e. user name and credentials
    • Lenya protocol as single entry point for PageEnvelope access if using lenya:/

Ideas

  • based on
    • repository block interfaces
    • default implementation: Slide block (SlideSource and the Slide protocol slide:)
  • extension of repository block
    • new methods in VersionableSource
    • new interfaces TransactionableSource, TransactionManager
  • lenya:* protocol + LenyaSourceFactory, which delegates to further protocols i.e. slide:
    • The lenya protocol should be configureable i.e. the delegation protocol (slide:) and a delegation prefix i.e. a namespace if the delegation protocol is slide:.
    • using src="lenya:/" is equivalent to using src="lenya://{page-envelope:publication-id}/{page-envelope:area}". This will heavily reduce sitemap redundancies and still provides enough flexibility

Definitions

;Delegation Protocol:The protocol to be delegated to by the LenyaSourceFactory used to access the repository ;Delegation Prefix: A prefix to be prepended to the url before it is delegated to the delegation protocol

Reasons

  • why slide?
    • JCR is not ready
  • why o.a.c.c.repository.*Source instead of o.a.c.c.repository.Repository?
    • existing Slide implementation
    • Repository focuses too much on Flow
  • we want to reuse the repository source interfaces
    *we need to add transaction support with a new interface *transactionable*
    *we want to use the underlying slide block and have to implement *transactionable* for the slide source

Diagrams

                       <map:generate>
- - - - - - - - - - -         |
Lenya API                     v
                       +-------------------+ +--------+ +----------+
                       |LenyaSourceFactory | |Version | |Resource  |
                       +-------------------+ +--------+ +----------+
- - - - - - - - - - - - - - -  A - - - - -
Repository Block               |
            +----------+-------+-------+
            v          v               v
        +------+ +-----------+ +---------------+
        |Source| |Versionable| |Transactionable|
        +------+ +-----------+ +---------------+

        +------------------+
        |TransactionManager|
        +------------------+

- - - - - - - - - - - - - - - - - - - - -
Repository Block Implementation
         Slide | JCR | ...
- - - - - - - - - - - - - - - - - - - - - 

Approach

  1. move publication API draft from University of Zurich Publication into Lenya and merge
  2. extend Slide source with transactable interface
  3. Implement a LenyaSourceFactory as described in this document
  4. Replace <map:generate src="path"/> by <map:generate src="lenya://path"/> or <map:generate src="lenya:/path"/>. The LenyaSourceFactory will delegate to the context: protocol until the Lenya API uses ModifiableTraversableSource to change/create files in the repository.

Transactions

  • LenyaSource implements Transactionable
  • Transactionable is marker interface for communication with TransactionManager
  • TransactionManager accesses repository transaction manager

Interface extensions

Versionable Source

  • void checkout()
  • void uncheckout()
  • void checkin()
  • setVersioned()
  • Source getSource(String Revision)
  • String[] getRevisions()

  • boolean isCheckedOut()

Results

  • Implemented and tested LenyaSourceFactory
  • Started integration of new Lenya/Publication API
  • No labels