I’ve been working on the CMIS explorer on and off for the past few weeks. I think it is about time I made it available for download. I’d be interesting in hearing feedback on it.
Update: The project is now available on Google Code here.
Or, you can go straight for the download. The current download is for the CMIS 1.0 specification.
Update: I have fixed the code so that there are no more hard coded URLs. It has been tested in both Windows and Ubuntu against both local and remote repositories. Have fun.
Update: I just realized that there is still a hard coded URL in the source. That means it will only work against Alfresco running locally on port 8080. I’ll get that fixed up right away. I’ll be curious to see if it will work against another repository afterwards.
Eventually I’d like to get to the remaining services such as those around relationships, allowable actions, and multi-filing.
Before you can browse the repository you have to specify the URL and your credentials.
For Alfresco, running locally, it would look like this.
http://localhost:8080/alfresco/service/api/repository
This fully supports multiple drag and drop to/from the desktop and application. Simple select files from the desktop and drag them to the list in the middle where the filenames are displayed for existed files. The new files will then be uploaded the repository and the list will be updated. For the other direction, use control click to select multiple files from the browsed (again from the middle list) and then drag them to the desktop. The files will then be downloaded directly to the desktop.
At the moment you have to specify the full query. I’ll likely change that so that you simply specify the keyword(s).
Here are a couple of example queries.
select * from document
select * from document where contains(’a')
select * from document where contains(’a b’)
select * from document where contains(’a') or contains (’b')
So until next time, good fight, good night.
| M | T | W | T | F | S | S |
|---|---|---|---|---|---|---|
| « Oct | ||||||
| 1 | 2 | 3 | 4 | 5 | ||
| 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 13 | 14 | 15 | 16 | 17 | 18 | 19 |
| 20 | 21 | 22 | 23 | 24 | 25 | 26 |
| 27 | 28 | 29 | 30 | |||
[...] Update: The CMIS Explorer is now available for download. See this post. [...]
Good job Shane. I tested CMIS Explorer against an Alfresco Labs 3 final repository and it worked straight away.
Then I felt a little bold and tried CMIS Explorer against a Documentum 6 SP1 with CMIS Early Access (EA2) installed on top. However I cannot get CMIS Explorer explore this Documentum repository.
According to the EMC CMIS EA2 install guide. CMIS services and resources should be available throught the URL’s at the bottom of this post. I used the Atom-pub url: http://host:port/resources/cmis
as the url in CMIS explorer and my admin account for authentication. CMIS explorer starts with empty tabs.
Alex
Service and resource addresses
On successful deployment, you should be able to access the WSDLs for the CMIS services at the
following root address:
http://host:port/services/cmis
For example, you can get the RepositoryService WSDL in a browser using this URL:
http://host:port/services/cmis/RepositoryService?wsdl
For REST resources, you can access the AtomPub service document at:
http://host:port/resources/cmis
A WADL document describing the CMIS resources is available at:
http://host:port/resources/application.wadl
I had a typo in my dfc.properties inside the emc-cmis-ea.ear file. Fixed it. Redeployed it in BEA.
Now CMIS Explorer also accesses the Documentum repository.
However I get no results on the Types and Browser tabs.
I will further investigate this.
You just reminded me of why I need to get the source up on Google Code!
However, maybe this will help.
The types are retrieved by getting the URL from the ‘types-children’ collection in the repository workspace.
The root folders are retrieved by getting the URL from the ‘root-children’ collection in the repository workspace.
It should look something like this (/cmis).
service
–workspace
—cmis:repositoryInfo
—collection href=”…” cmis:collectionType=”root-children”
—collection href=”…” cmis:collectionType=”types-children”
–workspace
service
It looks like Alfresco has concentrated more on implementing the CMIS ATOM server then EMC (Documentum CMIS Early Access 2) at this moment.
EMC has concentrated more on the SOAP server, which is logical since the Documentum Foundation Services are also SOAP based and not ATOM based.
Hopefully more repository providers that participate/contribute to the CMIS initiative will fully implement both interfaces.
It looks like Alfresco has concentrated more on implementing the CMIS ATOM server then EMC (Documentum CMIS Early Access 2) at this moment.
EMC has concentrated more on the SOAP server, which is logical since the Documentum Foundation Services are also SOAP based and not ATOM based.
Hopefully more repository providers that participate/contribute to the CMIS initiative will fully implement both interfaces.
It looks like the current EMC (Documentum) CMIS implementation (early access 2) does not fully support ATOMpub/REST. At least not as implemented by Alfresco at this time.
The EMC implementation has both SOAP and AtomPub bindings. It has been this way since January.
This explorer does not work with Documentum because it attempts to use a non-standard property BaseType, which is not defined or referenced in the 0.5 CMIS draft specification.
I think I know what you mean. I’m using ‘BaseType’ to determine if it is a folder or not. It looks like the specification defines ‘RootTypeQueryName’. Perhaps I should check that instead.
Been looking into this. It appears ‘baseType’ is defined on the type definition, but may not be required on the object. Does EMC have ‘baseType’ on objects, or only on the definitions?
First, thanks for sharing your work, Shane, in an open source manner. Nice job.
As I just pointed out here, http://craigrandall.net/archives/2009/03/cmis-interoperability/, it’s important for applications to leverage the currently proposed CMIS bindings from OASIS rather than a particular vendor’s implementation of these bindings in order to promote interoperability.
P.S. Can you nudge your colleague Sten into a similar open source stance (i.e. his JavaFX-based CMIS visualizer)?
Got it to work with Documentum. Nice job. A little slow at times, but I am looking forward to the enhancements, including that progress bar.
-Pie
Nice tool man, thanks
This does look very useful, one of those proof-of-concept utilities that gives people a nice nudge to get on with things.
When entering the password, the current build displays the password – not good!
Hi,
is there an online repository, where I am able to test your tool? Or could you please post (send via e-mail) a XML document parsed for types and for browsing the repository? That would be really helpful. I am trying to implement CMIS for a CMS and trying to use your tool as a reference tool.
Thanks in advance,
boris
[...] took the same approach (read: blatantly copied) that my co-worker Shane Johnson took with his CMIS Explorer project. To date, I have only implemented the getRepository(), getTypes(), and the 1st level [...]
Boris,
I’m not aware of any *public* repositories. However, it is pretty easy to install Alfresco. You’ll then have a local repository available to you.
Were you looking for some sample ATOM (XML) responses to get started?
Hi Shane,
One more question, if I may, you are accessing all the other data (for the Types, Browser, Search tab) through the tags which come with the XML response, right?
Yes, my problem was insufficient examples. It’s a bit of pain to implement the CMIS just with the specification.
Thanks for the answer, I have alredy alfresco installed and I am trying to create the same ATOM/REST responses.
The final date for my bachelor thesis is pretty close, so I hope I am able to get the CMIS working with your tool, to show my oponent at least something
Thanks in advance.
PS. I am also glad I found some platform independent tool
Hi again,
I overlooked your post:
—collection href=”…” cmis:collectionType=”root-children”
—collection href=”…” cmis:collectionType=”types-
Sorry for the dumb question
Hi,
I am having some trouble populating the types tab. Could you please take a look, what might be wrong? The submitted URI isn’t called after I try to access the types tab. This is the collection tag I am generating:
type collection
?
type collection
Thanks for any advice.
Hi,
here is the link to the generated XML tag: http://pastebin.ca/1389539
Hi again,
I’ve got it working (getTypes, getChildren). The problem was, I think the domain name with unsupported chacters (maybe “_” or “.”). One last question, how do you differ the folders and documents? My documents show as folders, although I am using the BaseType “document”. Could you please give me a hint? Sorry for spamming your comments, you can delete the previous ones.
Thanks in advance.
Boris
Hi Boris,
That is good news. The process is a little awkward at the moment. It appears it can be streamlined per the latest CMIS spec though. Regardless, I’ll review it this afternoon and post a comment with the description of it.
Hi,
Thanks for looking into this. That is the last thing I want to accomplish (the query tab is also populated now).
Boris
Boris,
First I am retrieving a list of the object types (getTypes). Specifically I am looking for the ‘typeId’ and ‘baseType’ of each object type.
Then I retrieve the children for a folder (getChildren). For each object, I check its ‘ObjectTypeId’ and use it to find the object type. I then check to see whether the object type’s ‘baseType’ is ‘folder’ or ‘document’.
Hi,
Thanks for the additional information, it was realy helpful. Now I am just waiting for the result, I hope, they’ll like, what I’ve done and I am a bachelor in July
Once more thanks for all the help.
Boris
nice work shane.
how did u work out the format for the requests?
i have been thru the CMIS ATOM specification and i cant find any detail on the format.
besides reading your code for each request type, i cant determine request format.
any pointers?
-lp
The original 0.5 documentation actually had a few examples in part II (REST). I think I took a look at those first. I also spent some time looking at the responses.
Are you wondering about specific requests, or posts? A lot of posts such as checkout basically accept the atom entry. For others such as query, I took a look at the Alfresco test cases.
i have been reading 0.5 ATOM spec but the example section documents only demonstrate some of the CMIS request format and definitely no response.
The areas of interest are create document/folder, delete folder/tree, getContentStream, updateDocument.
The alfresco test case are a good source of information. But i recently found the source to Apache chemistry to be of great value in understanding the CMIS protocol.
So far i only found the spec useful for the ‘CMIS LINK TYPES FOR ATOM’
I am struggling to see how the 0.5 spec is of any use to developers as there is no detail on actual cmis request/response.
enuff of my rant.
i open the cmis explorer and i have asked for user/pass and repository .
what should i put ?
Personally, I’ve been using Alfresco’s public repository. The information can be found here.
http://cmis.alfresco.com/
I am on the latest version of Alfresco. Alfresco 3.2r
I tried CMIS Explorer 4 and 6. Neither works.
Any idea what is wrong?
Hi Keith,
I’m not sure off the top of my head, but I am updating it per the 1.0 specification this weekend. While I’m at, I can try running the .62 version against a 3.2 instance.
Shane
Let me know if you want to interop test against the EMC Documentum CMIS 1.0 draft 4 implementation that is currently under development.