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 . 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
move publication API draft from University of Zurich Publication into Lenya and merge
- extend Slide source with transactable interface
Implement a LenyaSourceFactory as described in this document
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 is!CheckedOut()
Results
Implemented and tested LenyaSourceFactory
- Started integration of new Lenya/Publication API