CMIS: One ECM API to Rule Them All

Slides:



Advertisements
Similar presentations
J0 1 Marco Ronchetti - Web architectures – Laurea Specialistica in Informatica – Università di Trento Java XML parsing.
Advertisements

OASIS OData Technical Committee. AGENDA Introduction OASIS OData Technical Committee OData Overview Work of the Technical Committee Q&A.
How did we get here? (CMIS v0.5) F2F, January 2009.
Java Script Session1 INTRODUCTION.
© 2009 Oracle Corporation – Proprietary and Confidential 1.
The Alfresco API Steven Glover Gethin James Peter Monks.
OCLC Online Computer Library Center CONTENTdm Developers Meeting ALA Midwinter Meeting Seattle, WA January 19 th, 2007 Claire Cocco, Product Manager Joe.
Windows SharePoint Services: Advancements In Document, Content, And Data Storage Dustin Friesenhahn OFF409 Program Manager Microsoft Corporation.
Multiple Tiers in Action
Why SharePoint is the biggest threat to Open Source in the Enterprise John Newton CTO
Web Client/Server Communication A290/A590, Fall /09/2014.
What are the key improvements in web content management?
Application Packaging Standard Fundamentals
An Open Localisation Interface to CMS using OASIS Content Management Interoperability Services Aonghus Ó hAirt, Dominic Jones, Leroy Finn and David Lewis.
ArcGIS Workflow Manager An Introduction
Content Management Interoperability Services (CMIS)
Interoperability with CMIS and Apache Chemistry
Apache Chemistry face-to-face meeting April 2010.
Session 5: Working with MySQL iNET Academy Open Source Web Development.
Simple Web Services. Internet Basics The Internet is based on a communication protocol named TCP (Transmission Control Protocol) TCP allows programs running.
Using the SAS® Information Delivery Portal
JavaScript, Fourth Edition
Introducing CMIS David Caruana & Michael Farman 25th September 2008.
NERC DataGrid Vocabulary Server Access Vocabulary Workshop, RAL, February 25, 2009.
LiveCycle Data Services Introduction Part 2. Part 2? This is the second in our series on LiveCycle Data Services. If you missed our first presentation,
Python and REST Kevin Hibma. What is REST? Why REST? REST stands for Representational State Transfer. (It is sometimes spelled "ReST".) It relies on a.
Introduction to Apache OODT Yang Li Mar 9, What is OODT Object Oriented Data Technology Science data management Archiving Systems that span scientific.
An Introduction. ‣ What we are announcing ‣ Why is this important to customers? (I.e. the business case) ‣ The current standards landscape ‣ What is CMIS?
WCM Platform Improvements ECM and Enterprise Metadata Advanced Routing and Document Sets In Place Records Management.
Chapter 8 Cookies And Security JavaScript, Third Edition.
FIMS Repository Interface Project Update 01/23/2013.
Document Management Services Jim Metzger, Harland FS John Liston, ASC.
Powerpoint Templates Page 1 Spars IT Solutions. Powerpoint Templates Page 2 WHO ARE WE Spars IT Solutions is a corporate training firm present in Chennai,
Application Specific Module Tutorial Akos Balasko 02/07/
Phonegap Bridge – File System CIS 136 Building Mobile Apps 1.
Content Repositories with CMIS and Apache Chemistry Stephan Klevenz, SAP AG November 2011.
© 2010 IBM Corporation WebSphere Adapter for Enterprise Content Management Systems.
GOAL User Interactive Web Interface Update Pages by Club Officers Two Level of Authentication.
Lunch Bytes! Quick and simple nuggets to feed your appetite for knowledge. Always 15 minutes or less. Essential information FAST. A fun-filled way to cap.
1 Brian Remmington Alfresco Product Architect. 2 A demonstration The Web Quick Start model Overview of the features in the repository tier Overview of.
Microsoft ® Official Course Implementing Enterprise Content Management Microsoft SharePoint 2013 SharePoint Practice.
1 Java Server Pages A Java Server Page is a file consisting of HTML or XML markup into which special tags and code blocks are inserted When the page is.
OpenMRS Create New Module.
web Metadata Properties Thumbnails Properties by Kind MRU Change Notifications Bulk Access File broker functions Search Deep/Shallow Enumeration.
COSC 2328 – Web Programming.  PHP is a server scripting language  It’s widely-used and free  It’s an alternative to Microsoft’s ASP and Ruby  PHP.
12 Copyright © 2004, Oracle. All rights reserved. Using ADF Struts Components.
10-1 JXTA Messages Learning Objectives ● This module will help you... – Develop applications and services which exchange messages either through.
Integrating Alfresco with Salesforce. Agenda About Technology Services Group Why a Salesforce / Alfresco Integration Use Cases / Examples Technical Architecture.
Audit API : Hints and Tricks Mehdi BELMEKKI, Consultancy Team Alfresco.
Document Management Alliance (DMA)
#SummitNow Integrating Alfresco with portals 6 th November 2013 Piergiorgio Lucidi.
#SummitNow First Steps with CMIS & Alfresco Jeff
#SummitNow What's Coming Arrived in CMIS November, 2013 Gregory Melahn/Alfresco Software
Implementing SharePoint 2013 ECM Solutions Robert Bogue, MVP The SharePoint Shepherd
Explore Various Options for Bulk File Transfer out of Alfresco Craig Tan Technical Account Manager.
The Alfresco iOS SDK Gi Lee (Zia Consulting) Peter Schmidt (Alfresco)
Introduction to Enterprise Search Corey Roth Blog: Twitter: twitter.com/coreyrothtwitter.com/coreyroth.
#SummitNow Querying for Metadata 7 th November 2013 Andy Hind, Alfresco.
Don't Know Jack About Object-Relational Mapping?
Getting Started with Alfresco Development
Querying for Metadata 13th November 2013 Andy Hind, Alfresco.
Document & Web Content Management
Creating Novell Portal Services Gadgets: An Architectural Overview
Getting started with Alfresco Development
The Re3gistry software and the INSPIRE Registry
A technical look at the new capabilities
Android Developer Fundamentals V2 Lesson 1
Units with – James tedder
SharePoint Foundation 2010
Presentation transcript:

CMIS: One ECM API to Rule Them All

Vendor independent API for working with content repositories What is CMIS? Vendor independent API for working with content repositories Specification managed by OASIS Web Services Binding ATOM Pub Binding Browser Binding (new in 1.1) CMIS Query Language

? ? The Beauty of Presentation Tier Content Services Tier REST SOAP Content Services Tier ? ? Enterprise Apps Tier

Meet CMIS Client consumer read write Services Domain Model Content Management Interoperability Services Vendor Mapping provider Content Repository CMIS lets you read, search, write, update, delete, version, control, … content and metadata!

Use Cases Collaborative Content Creation Portals Client Content Repository Client Content Repository Content Repository Content Repository Content Repository Content Repository Collaborative Content Creation Portals Client Application Integration Mashup Workflow & BPM Archival Virtual Documents DAM / WCM

Types Document Content Renditions Version History Folder Container Hierarchy Filing Described by Type Definitions Relationship Source Object Target Object Policy Target Object

Type Definitions Object Type Id Parent Display Name Queryable Controllable Property Property Id Display Name Type Required Default Value … * Document Versionable Allow Content Folder Relationship Source Types Target Types Policy Custom Type

Developed by 30+ ECM Vendors Implementations Already Available… Providers Consumers

Open Source implementation of CMIS Apache Chemistry is the umbrella project for all CMIS related projects within the ASF OpenCMIS (Java, client and server) cmislib (Python, client) phpclient (PHP, client) DotCMIS (.NET, client) ObjectiveCMIS Android OpenCMIS

New stuff coming in CMIS 1.1 Browser Binding Support for Secondary Types (aka “Aspects”) Type Mutability cmis:item

CMIS & Apache Chemistry in Action Everything you need to know about CMIS 1.0 & 1.1 Lots of Groovy and Java examples Also covers Python, Android, & iOS Now on MEAP! 37%-off: 12cmisal

CMIS Code Examples

Example: Getting a Session // set up session parameters Map<String, String> parameter = new HashMap<String, String>(); parameter.put(SessionParameter.BINDING_TYPE, BindingType.ATOMPUB.value()); parameter.put(SessionParameter.ATOMPUB_URL, "http://cmis.alfresco.com/service/cmis"); parameter.put(SessionParameter.USER, "admin"); parameter.put(SessionParameter.PASSWORD, "admin"); // get a list of repositories and choose the first one SessionFactory factory = SessionFactoryImpl.newInstance(); List<Repository> repositories = factory.getRepositories(parameter); Session session = repositories.get(0).createSession();

Example: Using the Session Information about the repository: RepositoryInfo ri = session.getRepositoryInfo(); String id = ri.getId(); String name = ri.getName(); Access objects by id or path: CmisObject object1 = session.getObject("1234567890"); CmisObject object2 = session.getObjectByPath("/my/path/doc"); Iterate through a folder: Folder rootFolder = session.getRootFolder(); String rootFolderId = rootFolder.getId(); for(CmisObject object: rootFolder.getChildren()) { String name = object.getName(); if(object instanceof Document) { Document doc = (Document) object; long size = doc.getContentStreamLength(); }

Navigation // get root folder Folder root = session.getRootFolder(); String rootFolderName = root.getName(); println "Root folder: ${rootFolderName}\n" // print root folder children for(CmisObject object: root.getChildren()) { String name = object.getName(); String typeId = object.getType().getId(); String path = object.getPaths().get(0); println "${name} \t${typeId} \t(${path})" // get parents /* for(CmisObject parent: object.getParents()) { String parentName = parent.getName(); println " Parent: ${parentName}" } */

Paging Folder root = session.getRootFolder(); printList( root.getChildren() ) //printList( root.getChildren().getPage(3) ) //printList( root.getChildren().skipTo(2) ) //printList( root.getChildren().skipTo(2).getPage(3) ) void printList(ItemIterable<CmisObject> list) { list.each { println "${it.name} \t${it.type.id}" } long numItems = list.getTotalNumItems(); boolean hasMore = list.getHasMoreItems(); println "--------------------------------------" println "Total number: ${numItems}" println "Has more: ${hasMore}" }

Properties CmisObject object = session.getObjectByPath("/User Homes/florian/Test Folder/MyText"); for(Property<?> property: object.getProperties()) { String propId = property.getId(); String displayName = property.getDefinition().getDisplayName(); String queryName = property.getDefinition().getQueryName(); PropertyType datatype = property.getType(); Object value = property.getFirstValue(); println "${displayName}: ${value}" println " Data type: ${datatype}" println " Id: ${propId}" println " Query name: ${queryName}" println "" }

Content CmisObject object = session.getObjectByPath("/User Homes/florian/Test Folder/MyText"); if(!(object instanceof Document)) { throw new Exception("Not a document!"); } Document doc = (Document) object; ContentStream content = doc.getContentStream(); if(content == null) { throw new Exception("Document has no content!"); String filename = content.getFileName(); String mimeType = content.getMimeType(); long length = content.getLength(); InputStream stream = content.getStream(); println "File: ${filename}" println "MIME Type: ${mimeType}" println "Size: ${length} bytes" println "Has stream: " + (stream != null)

Query String cql = "SELECT cmis:objectId, cmis:name, cmis:contentStreamLength FROM cmis:document"; ItemIterable<QueryResult> results = session.query(cql, false); //ItemIterable<QueryResult> results = session.query(cql, false).getPage(10); //ItemIterable<QueryResult> results = session.query(cql, false).skipTo(10).getPage(10); for(QueryResult hit: results) { for(PropertyData<?> property: hit.getProperties()) { String queryName = property.getQueryName(); Object value = property.getFirstValue(); println "${queryName}: ${value}" } println "--------------------------------------"

Folders Folder root = session.getRootFolder(); // create a new folder Map<String, Object> properties = new HashMap<String, Object>(); properties.put("cmis:objectTypeId", "cmis:folder"); properties.put("cmis:name", "a new folder"); Folder newFolder = root.createFolder(properties); printProperties(newFolder); // update properties Map<String, Object> updateproperties = new HashMap<String, Object>(); updateproperties.put("cmis:name", "renamed folder"); newFolder.updateProperties(updateproperties); newFolder.refresh(); // delete folder newFolder.deleteTree(true, UnfileObject.DELETE, true);

Documents Folder root = session.getRootFolder(); // create a new document String name = "myNewDocument.txt"; Map<String, Object> properties = new HashMap<String, Object>(); properties.put("cmis:objectTypeId", "cmis:document"); properties.put("cmis:name", name); byte[] content = "Hello World!".getBytes(); InputStream stream = new ByteArrayInputStream(content); ContentStream contentStream = new ContentStreamImpl(name, content.length, "text/plain", stream); Document newDoc = root.createDocument(properties, contentStream, VersioningState.MAJOR); printProperties(newDoc); // delete document newDoc.delete(true);