Recherche

Sommaire

Child pages
  • Accès nuxeo via CMIS

Introduction

Nuxeo propose(ra) une interface CMIS a partir de la version 5.3.1

Une version de démo est disponible via http://cmis.demo.nuxeo.org/nuxeo/

Le gros avantage de CMIS est que c'est un standard et devrait permettre le développement de nombreuses solution interopérables.

Utilisation de Chemistry

Introduction

A ce jour il existe peu d'implémentation JAVA de CMIS. Nuxeo est fortement impliqué dans le projet apache Chemistry qui proposent des implémentations client et serveur.

Chemistry est maintenant un projet Apache qui contient différentes implémentations (java, pythin, etc). L'implémentation java est Open CMIS. Elle diffère de l'implémentation originelle de nuxeo. Mais nuxeo a rejoint l'initiative Open CMIS (Cf. http://blogs.nuxeo.com/fguillaume/2010/04/apache-chemistry-meeting-wrap-up.html).

Le code donné ici correspond à l'implémentation originelle de Chemistry par nuxeo. Elle n'a donc pas vocation à évoluer.

Cf. TODO pour un exmple avec Open CMIS

Obtenir Chemistry

Repository maven ESUP

Une version snapshot de Chemistry est disponible sur le repository maven de ESUP. Si vous utilisez le pom.xml ci-dessous vous n'avez rien d'autre à faire.

SVN apache

Pour construire le projet Chemistry à partir des sources et mettre les jar dans votre dépôt maven local il faut faire :

Mise en place du projet

  1. mvn archetype:create -DgroupId=fr.univrennes1.testCMIS -DartifactId=testCMIS -DpackageName=fr.univrennes1.testCMIS
  2. modification su pom.xml pour ajouter les dépendances requises :
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    	<modelVersion>4.0.0</modelVersion>
    	<groupId>fr.univrennes1.testCMIS</groupId>
    	<artifactId>testCMIS</artifactId>
    	<packaging>jar</packaging>
    	<version>1.0-SNAPSHOT</version>
    	<name>testCMIS</name>
    	<url>http://maven.apache.org</url>
    	<repositories>
    		<repository>
    			<id>esup-snapshots</id>
    			<url>https://mvn.esup-portail.org/content/repositories/snapshots</url>
    			<snapshots>
    				<enabled>true</enabled>
    			</snapshots>
    			<releases>
    				<enabled>false</enabled>
    			</releases>
    		</repository>
    		<repository>
    			<id>esup</id>
    			<url>https://mvn.esup-portail.org/content/repositories/releases</url>
    			<snapshots>
    				<enabled>false</enabled>
    			</snapshots>
    			<releases>
    				<enabled>true</enabled>
    			</releases>
    		</repository>
    	</repositories>
    	<dependencies>
    		<dependency>
    			<groupId>junit</groupId>
    			<artifactId>junit</artifactId>
    			<version>3.8.1</version>
    			<scope>test</scope>
    		</dependency>
    		<dependency>
    			<groupId>org.apache.chemistry</groupId>
    			<artifactId>chemistry-atompub-client</artifactId>
    			<version>0.5-SNAPSHOT</version>
    		</dependency>
    	</dependencies>
    </project>
    
  3. Création du projet eclipse : mvn eclipse:eclipse

Code

package fr.univrennes1.testCMIS;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;

import org.apache.chemistry.CMISObject;
import org.apache.chemistry.Connection;
import org.apache.chemistry.ContentStream;
import org.apache.chemistry.Document;
import org.apache.chemistry.Folder;
import org.apache.chemistry.NameConstraintViolationException;
import org.apache.chemistry.Repository;
import org.apache.chemistry.RepositoryInfo;
import org.apache.chemistry.UpdateConflictException;
import org.apache.chemistry.atompub.client.APPRepositoryService;
import org.apache.chemistry.impl.simple.SimpleContentStream;

public class Cmis
{
    public static void main( String[] args ) throws NameConstraintViolationException, UpdateConflictException, IOException
    {
    	//************* diverses initialisations *************
    	String url = "http://cmis.demo.nuxeo.org/nuxeo/site/cmis/repository";
        String username = "Administrator";
        String password = "Administrator";
        String path = "/default-domain/workspaces/demo-workspace/testrb";
        String DOSSIER1 = "dossier1";
        String FICHIER1 = "fichier1";
        //repository service
        Map<String, Serializable> params = new HashMap<String, Serializable>();
        params.put(Repository.PARAM_USERNAME, username);
        params.put(Repository.PARAM_PASSWORD, password);
        APPRepositoryService appRepositoryService = new APPRepositoryService(url, params);
		//repository
        Repository repository = appRepositoryService.getDefaultRepository();
        RepositoryInfo info = repository.getInfo();
        System.out.println("Description : " + info.getDescription());
        System.out.println(info.getVendorName() + ", " + info.getProductName() + ", " + info.getProductVersion());
        //connexion
        Connection connection = repository.getConnection(params);
        //racine de travail
		Folder root = connection.getFolder(path);
        System.out.println("folder = " + root.getName() + ", date création =" + root.getCreationDate());

    	//************* Suppression de Dossier1 *************
        Folder dossier1 = connection.getFolder(path + "/" + DOSSIER1);
        if (dossier1 != null) {
        	for (CMISObject object : dossier1.getChildren()) {
        		object.delete();
			}
            dossier1.delete();
            System.out.println("Dossier supprimé");
		}

        //************* création du dossier "Dossier1" *************
        Folder newFolder = root.newFolder("cmis:folder");
        newFolder.setName(DOSSIER1);
        newFolder.save();
        System.out.println("Dossier créé");

		//************* création du fichier "Fichier1" *************
        Document newDocument = newFolder.newDocument("cmis:document");
        newDocument.setName(FICHIER1);
        newDocument.save();
        System.out.println("Fichier créé");

		//************* upload du contenu *************
        String fic = "metro.pdf";
        FileInputStream in = new FileInputStream("/A_GARDER_UN_PEU/nuxeo-dev/workspace/testCMIS/src/main/resources/" + fic);
        ContentStream stream = new SimpleContentStream(in, "application/pdf", fic);
        newDocument.setContentStream(stream);
        newDocument.save();
        System.out.println("Fichier chargé");

        connection.close();
    }
}

Remarques

Fonctionne bien, chemistry masque bien la complexité de CMIS, le code est clair. Vivement que nuxeo 5.3.1 sorte !

  • No labels