[ 
https://issues.apache.org/jira/browse/CMIS-440?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Tobias Mattsson updated CMIS-440:
---------------------------------

    Attachment: JcrTypeHandler.patch

Here we go, this is a patch that introduces JcrTypeHandler and 
JcrTypeHandlerManager. There's quite a few changes in this patch since it 
touches so much of the existing functionality.
                
> Introduce type handlers to allow different content structures
> -------------------------------------------------------------
>
>                 Key: CMIS-440
>                 URL: https://issues.apache.org/jira/browse/CMIS-440
>             Project: Chemistry
>          Issue Type: Improvement
>          Components: opencmis-server-jcr
>    Affects Versions: OpenCMIS 0.6.0
>            Reporter: Tobias Mattsson
>         Attachments: JcrTypeHandler.patch
>
>
> We have a content structure that differs from the structure that is assumed 
> in opencmis jcr. I.e. our documents are not of type nt:file, our folders are 
> a sub-type of nt:folder but we have meta-data around in nodes of type 
> nt:folder which we don't want to show and we want to hide the system folders 
> directly under the root.
> To get things working with our structure we've had to make customizations in 
> quite a few places. To make it manageable we've introduced a handler that is 
> responsible for tasks related to a certain type. This is similar to what the 
> TODO in JcrNodeFactory describes.
> A type handler is responsible for:
> * providing a TypeDefinition (see CMIS-439)
> * testing if it handles a specific javax.jcr.Node
> * creating a JcrNode instance for the type (which is now done by 
> JcrNodeFactory)
> * providing IdentifierMap for queries (now done by JcrNodeFactory)
> * creating a new object of the type, this is now done in JcrFolder addNode 
> and addFolder so if you have many documents you have to add the code for 
> creating all of them there, spreading the handling of your new type around
> The type handlers are managed by TypeHandlerManager which keep the list of 
> handlers and have utility methods that loop through the handlers to calls the 
> right handler. 
> A really nifty thing here is that the TypeHandlerManager can expose a 
> Predicate that loops type handlers to see if a Node is handled or not, this 
> means that things in the jcr repository for which there is no CMIS type are 
> hidden. This predicate needs to take effect in alot of places, both in 
> JcrFolder and in JcrRepository, I've solved this by giving JcrFolder a 
> wrapped Node that applies the predicate to all NodeIterators it returns.
> What do you think?

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to