Recherche
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.
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.
| Remarque |
|---|
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 |
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.
Pour construire le projet Chemistry à partir des sources et mettre les jar dans votre dépôt maven local il faut faire :
| Bloc de code | ||||
|---|---|---|---|---|
| ||||
<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> |
| Bloc de 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();
}
}
|
Fonctionne bien, chemistry masque bien la complexité de CMIS, le code est clair. Vivement que nuxeo 5.3.1 sorte !