Details

    • Estimated Difficulty:
      Medium
    • Similar Issues:
      Show 10 results 

      Description

      Create a connector to a service that supports the Content Management Interoperability Services standard (CMIS), allowing a ModeShape JCR instance to access the content, metadata, and other information from a CMIS system. CMIS implementations are starting to appear, including Apache Chemistry's CMIS implementation, Nuxeo's CMIS demo at http://cmis.demo.nuxeo.org/nuxeo/site/cmis/repository and with Alfresco's CMIS Repository at http://cmis.alfresco.com/service/cmis.

      CMIS types should map pretty cleanly to JCR types. Also, the CMIS query language should also map pretty well, allowing the connector to implement search by delegating to CMIS.

      Implementing this sooner would help us gain some traction in the CMIS space.

        Gliffy Diagrams

        1. minor_changes.patch
          75 kB
          Ivan Vasyliev
        2. minor_changes3.patch
          52 kB
          Ivan Vasyliev
        3. minorchanges.patch
          53 kB
          Ivan Vasyliev
        1. cmis_connector_code.png
          315 kB
        2. cmis_workbench.png
          133 kB
        3. map_property_types_cmis_to_jcr.png
          332 kB

          Issue Links

            Activity

            Randall Hauch created issue -
            Hide
            Randall Hauch added a comment -

            This request is to implement a connector to a CMIS system. See MODE-295 for implementing CMIS on top of ModeShape.

            Show
            Randall Hauch added a comment - This request is to implement a connector to a CMIS system. See MODE-295 for implementing CMIS on top of ModeShape.
            Randall Hauch made changes -
            Field Original Value New Value
            Link This issue is related to MODE-295 [ MODE-295 ]
            Randall Hauch made changes -
            Fix Version/s 1.2 [ 12314644 ]
            Fix Version/s 1.1 [ 12314366 ]
            Randall Hauch made changes -
            Assignee Randall Hauch [ rhauch ]
            Hide
            Randall Hauch added a comment -

            Targeting to 1.3, as 1.2 has now become a release with mostly fixes and minor improvements.

            Show
            Randall Hauch added a comment - Targeting to 1.3, as 1.2 has now become a release with mostly fixes and minor improvements.
            Randall Hauch made changes -
            Fix Version/s 1.3 [ 12314792 ]
            Fix Version/s 1.2 [ 12314644 ]
            Randall Hauch made changes -
            Fix Version/s Future Releases [ 12314367 ]
            Fix Version/s 1.3 [ 12314792 ]
            Vlastimil Eliáš made changes -
            Workflow jira [ 12409607 ] GIT Pull Request workflow [ 12442281 ]
            Randall Hauch made changes -
            Link This issue depends MODE-1513 [ MODE-1513 ]
            Randall Hauch made changes -
            Component/s Federation [ 12312907 ]
            Randall Hauch made changes -
            Fix Version/s 3.1 [ 12318750 ]
            Fix Version/s Future Releases [ 12314367 ]
            SBS JIRA Integration made changes -
            Ivan Vasyliev made changes -
            Link This issue is related to MODE-1686 [ MODE-1686 ]
            Ivan Vasyliev made changes -
            Link This issue is related to MODE-1188 [ MODE-1188 ]
            Randall Hauch made changes -
            Fix Version/s 3.2 [ 12320360 ]
            Fix Version/s 3.1 [ 12318750 ]
            Oleg Kulikov made changes -
            Assignee Oleg Kulikov [ oleg.kulikov ]
            Randall Hauch made changes -
            Fix Version/s 3.3 [ 12320974 ]
            Fix Version/s 3.2 [ 12320360 ]
            Ivan Vasyliev made changes -
            Link This issue depends MODE-1803 [ MODE-1803 ]
            Randall Hauch made changes -
            Fix Version/s 3.2 [ 12320360 ]
            Fix Version/s 3.3 [ 12320974 ]
            Hide
            Randall Hauch added a comment -

            Targeting to be fixed in 3.2. We may not want to put it in 3.2, but we may want to put it into the product, and if so we'll need to decide whether it belongs in 3.2, 3.2.1, or 3.3.

            Show
            Randall Hauch added a comment - Targeting to be fixed in 3.2. We may not want to put it in 3.2, but we may want to put it into the product, and if so we'll need to decide whether it belongs in 3.2, 3.2.1, or 3.3.
            Hide
            Oleg Kulikov added a comment - - edited

            This initial preview implementation includes basic CRUD operations and test simulator.
            For the near future plan is as follows:

            • finalize CRUD operations detailed test
            • provide integration test with Open Chemistry
            • import types from repository
            • add access list and policies
            Show
            Oleg Kulikov added a comment - - edited This initial preview implementation includes basic CRUD operations and test simulator. For the near future plan is as follows: finalize CRUD operations detailed test provide integration test with Open Chemistry import types from repository add access list and policies
            Oleg Kulikov made changes -
            Status Open [ 1 ] Pull Request Sent [ 10011 ]
            Git Pull Request https://github.com/ModeShape/modeshape/pull/704
            Hide
            Oleg Kulikov added a comment - - edited

            CRUD - done
            Integration test with open chemistry - done
            (provided by Alexander Voloshyn)

            remainder:
            -import types from repository
            -add access list and policies

            Show
            Oleg Kulikov added a comment - - edited CRUD - done Integration test with open chemistry - done (provided by Alexander Voloshyn ) remainder: -import types from repository -add access list and policies
            Hide
            Ivan Vasyliev added a comment - - edited

            There is also mismatch in how types are handled:

            • CMIS-JCR bridge chemistry-opencmis-server-jcr maps cmis:document and cmis:folder into nt:file and nt:folder
            • Connector implemented in the way that it registers cmis:document and cmis:folder types in JCR, see cmis.cnd

            This must be synchornized: nt:file/nt:folder in bridge and in connector or vice-versa.

            Show
            Ivan Vasyliev added a comment - - edited There is also mismatch in how types are handled: CMIS-JCR bridge chemistry-opencmis-server-jcr maps cmis:document and cmis:folder into nt:file and nt:folder Connector implemented in the way that it registers cmis:document and cmis:folder types in JCR, see cmis.cnd This must be synchornized : nt:file/nt:folder in bridge and in connector or vice-versa.
            Hide
            Oleg Kulikov added a comment -

            Ivan, can you please check the feature of import types from CMIS repository as we discussed and synchronization with bridge implementation regarding nt:file/nt:folder?

            Thanks!

            Show
            Oleg Kulikov added a comment - Ivan, can you please check the feature of import types from CMIS repository as we discussed and synchronization with bridge implementation regarding nt:file/nt:folder? Thanks!
            Hide
            Ivan Vasyliev added a comment -

            Looking into, thank you!

            Show
            Ivan Vasyliev added a comment - Looking into, thank you!
            Hide
            Ivan Vasyliev added a comment -

            Oleg, reviewed changes and progress looks very good to me. Here are my findings:

            • cmis.cnd can be eliminated
            • CMIS (at least 1.0, I see in trunk they are added some "Item" for 1.1) has notion of "base type id" and "parent type id" for document/folder types definition. In case of mapping, cmis:document will be always base type id for all document types, but parent type id will vary from type to type (see my screenshots). So, when importing children you need to use parent type id to reflect hierarchy
            • Could you please elaborate about type definition cmis:repository (registerRepositoryInfoType)? What it is used for?
            Show
            Ivan Vasyliev added a comment - Oleg, reviewed changes and progress looks very good to me. Here are my findings: cmis.cnd can be eliminated CMIS (at least 1.0, I see in trunk they are added some "Item" for 1.1) has notion of "base type id" and "parent type id" for document/folder types definition. In case of mapping, cmis:document will be always base type id for all document types, but parent type id will vary from type to type (see my screenshots). So, when importing children you need to use parent type id to reflect hierarchy Could you please elaborate about type definition cmis:repository (registerRepositoryInfoType)? What it is used for?
            Ivan Vasyliev made changes -
            Attachment cmis_connector_code.png [ 12361523 ]
            Attachment cmis_workbench.png [ 12361524 ]
            Hide
            Oleg Kulikov added a comment -

            Hi Ivan, thanks for your testing and feedback. I've commited changes related to your comments plus a bit polished code. So you can check once again when you will have time.

            About "jcr:repository" type. I used it to define node stored under root which bears information about repository itself: vendor, version, etc.

            Also I found several issues with backward conversation - from JCR to CMIS (types and now we have binary content in JCR style as child node). Need to modify code respectively. Should be ready in a few days with tests.

            Show
            Oleg Kulikov added a comment - Hi Ivan, thanks for your testing and feedback. I've commited changes related to your comments plus a bit polished code. So you can check once again when you will have time. About "jcr:repository" type. I used it to define node stored under root which bears information about repository itself: vendor, version, etc. Also I found several issues with backward conversation - from JCR to CMIS (types and now we have binary content in JCR style as child node). Need to modify code respectively. Should be ready in a few days with tests.
            Hide
            Ivan Vasyliev added a comment -

            Oleg, I've looked on how property definitions are mapped and I feel that there is missing types mapping, please confirm (attaching my assumption)

            private int getJcrType(PropertyType propertyType) {
                    switch (propertyType){
                        case BOOLEAN:
                            return javax.jcr.PropertyType.BOOLEAN;
                        case DATETIME:
                            return javax.jcr.PropertyType.DATE;
                        case DECIMAL:
                            return javax.jcr.PropertyType.DECIMAL;
                        case HTML:
                            return javax.jcr.PropertyType.STRING;
                        case INTEGER:
                            return javax.jcr.PropertyType.LONG;
                        case URI:
                            return javax.jcr.PropertyType.URI;
                        case ID:
                            return javax.jcr.PropertyType.STRING;
                        default:
                            return javax.jcr.PropertyType.UNDEFINED;
                    }
            }
            

            Show
            Ivan Vasyliev added a comment - Oleg, I've looked on how property definitions are mapped and I feel that there is missing types mapping, please confirm (attaching my assumption) private int getJcrType(PropertyType propertyType) { switch (propertyType){ case BOOLEAN: return javax.jcr.PropertyType.BOOLEAN; case DATETIME: return javax.jcr.PropertyType.DATE; case DECIMAL: return javax.jcr.PropertyType.DECIMAL; case HTML: return javax.jcr.PropertyType.STRING; case INTEGER: return javax.jcr.PropertyType.LONG; case URI: return javax.jcr.PropertyType.URI; case ID: return javax.jcr.PropertyType.STRING; default: return javax.jcr.PropertyType.UNDEFINED; } }
            Ivan Vasyliev made changes -
            Attachment map_property_types_cmis_to_jcr.png [ 12361631 ]
            Ivan Vasyliev made changes -
            Attachment minorchanges.patch [ 12361632 ]
            Ivan Vasyliev made changes -
            Attachment minor_changes.patch [ 12361636 ]
            Hide
            Oleg Kulikov added a comment -

            Hi Ivan, thanks for the patch. I've merged it and commited.

            Show
            Oleg Kulikov added a comment - Hi Ivan, thanks for the patch. I've merged it and commited.
            Hide
            Ivan Vasyliev added a comment -

            Oleg, I made second patch from 31/Mar/13, could you please take a look?

            Show
            Ivan Vasyliev added a comment - Oleg, I made second patch from 31/Mar/13, could you please take a look?
            Hide
            Oleg Kulikov added a comment -

            Merged, please check it now

            Show
            Oleg Kulikov added a comment - Merged, please check it now
            Ivan Vasyliev made changes -
            Attachment minor_changes3.patch [ 12361637 ]
            Hide
            Ivan Vasyliev added a comment -

            Attached "minor_changes3.patch" with few items. Will work on getting to your fork somehow to send pull requests.

            Show
            Ivan Vasyliev added a comment - Attached "minor_changes3.patch" with few items. Will work on getting to your fork somehow to send pull requests.
            Hide
            Randall Hauch added a comment -

            Rebased, corrected compiler warnings, renamed the package to `org.modeshape.connector.cmis`, and added an alias for the `CmisConnector` in `RepositoryConfiguration`. Merged into the 'master' branch.

            Show
            Randall Hauch added a comment - Rebased, corrected compiler warnings, renamed the package to `org.modeshape.connector.cmis`, and added an alias for the `CmisConnector` in `RepositoryConfiguration`. Merged into the 'master' branch.
            Randall Hauch made changes -
            Status Pull Request Sent [ 10011 ] Resolved [ 5 ]
            Resolution Done [ 1 ]
            Randall Hauch made changes -
            Status Resolved [ 5 ] Closed [ 6 ]

              People

              • Assignee:
                Oleg Kulikov
                Reporter:
                Randall Hauch
              • Votes:
                10 Vote for this issue
                Watchers:
                7 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved:

                  Development