/*
* ModeShape (http://www.modeshape.org)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.modeshape.cmis;
import static org.junit.Assert.assertEquals;
import java.io.ByteArrayInputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.chemistry.opencmis.client.api.Document;
import org.apache.chemistry.opencmis.client.api.Folder;
import org.apache.chemistry.opencmis.client.api.ObjectId;
import org.apache.chemistry.opencmis.client.api.Session;
import org.apache.chemistry.opencmis.client.bindings.spi.StandardAuthenticationProvider;
import org.apache.chemistry.opencmis.client.runtime.SessionFactoryImpl;
import org.apache.chemistry.opencmis.commons.PropertyIds;
import org.apache.chemistry.opencmis.commons.SessionParameter;
import org.apache.chemistry.opencmis.commons.data.ContentStream;
import org.apache.chemistry.opencmis.commons.enums.BindingType;
import org.apache.chemistry.opencmis.commons.enums.VersioningState;
import org.junit.Before;
import org.junit.Test;
import org.modeshape.common.util.IoUtil;
/**
* Unit test for CMIS bridge
*
* @author kulikov
*/
public class ModeShapeCmisClientTest {
private Session session;
@SuppressWarnings("deprecation")
@Before
public void setUp() {
// default factory implementation
SessionFactoryImpl factory = SessionFactoryImpl.newInstance();
Map<String, String> parameter = new HashMap<String, String>();
// user credentials
parameter.put(SessionParameter.USER, "dnauser");
parameter.put(SessionParameter.PASSWORD, "password");
// connection settings
parameter.put(SessionParameter.BINDING_TYPE, BindingType.WEBSERVICES.value());
parameter.put(SessionParameter.WEBSERVICES_ACL_SERVICE, serviceUrl("ACLService?wsdl"));
parameter.put(SessionParameter.WEBSERVICES_DISCOVERY_SERVICE, serviceUrl("/DiscoveryService?wsdl"));
parameter.put(SessionParameter.WEBSERVICES_MULTIFILING_SERVICE, serviceUrl("MultiFilingService?wsdl"));
parameter.put(SessionParameter.WEBSERVICES_NAVIGATION_SERVICE, serviceUrl("NavigationService?wsdl"));
parameter.put(SessionParameter.WEBSERVICES_OBJECT_SERVICE, serviceUrl("ObjectService?wsdl"));
parameter.put(SessionParameter.WEBSERVICES_POLICY_SERVICE, serviceUrl("/PolicyService?wsdl"));
parameter.put(SessionParameter.WEBSERVICES_RELATIONSHIP_SERVICE, serviceUrl("RelationshipService?wsdl"));
parameter.put(SessionParameter.WEBSERVICES_REPOSITORY_SERVICE, serviceUrl("RepositoryService?wsdl"));
parameter.put(SessionParameter.WEBSERVICES_VERSIONING_SERVICE, serviceUrl("VersioningService?wsdl"));
parameter.put(SessionParameter.REPOSITORY_ID, "cmis_repo:default");
// create session
session = factory.createSession(parameter, null, new StandardAuthenticationProvider(), null, null);
}
@Test
public void shouldAccessRootFolder() throws Exception {
Folder root = session.getRootFolder();
System.out.println("Root: " + root);
}
@Test
public void shouldObtainContentHashProperty() throws Exception {
//Create test folder
Map<String, Object> folderProperties = new HashMap<String, Object>();
folderProperties.put(PropertyIds.OBJECT_TYPE_ID, "cmis:folder");
folderProperties.put(PropertyIds.NAME, "test");
Folder folder = session.getRootFolder().createFolder(folderProperties);
//Create the document from the test file
Map<String, Object> fileProperties = new HashMap<String, Object>();
fileProperties.put(PropertyIds.OBJECT_TYPE_ID, "cmis:document");
fileProperties.put(PropertyIds.NAME, "file");
String contents = "Hello";
ContentStream cos = session.getObjectFactory().createContentStream("file",
contents.length(), "text/plain",
new ByteArrayInputStream(contents.getBytes()));
// create a major version
Document file = folder.createDocument(fileProperties, cos, VersioningState.MAJOR);
file.getProperties();
String s = file.getProperty(PropertyIds.CONTENT_STREAM_HASH).getValueAsString();
assertEquals("{sha-1}f7ff9e8b7bb2e09b70935a5d785e0cc5d9d0abf0", s);
}
@Test
public void testVersioning() throws Exception {
//Create test folder
Map<String, Object> folderProperties = new HashMap<String, Object>();
folderProperties.put(PropertyIds.OBJECT_TYPE_ID, "cmis:folder");
folderProperties.put(PropertyIds.NAME, "test");
Folder folder = session.getRootFolder().createFolder(folderProperties);
//Create the document from the test file
Map<String, Object> fileProperties = new HashMap<String, Object>();
fileProperties.put(PropertyIds.OBJECT_TYPE_ID, "cmis:document");
fileProperties.put(PropertyIds.NAME, "file");
fileProperties.put(PropertyIds.VERSION_LABEL, "initial");
String[] contents = new String[] {"Hello World!", "Hello World", "Hello"};
ContentStream cos = session.getObjectFactory().createContentStream("file",
contents[2].length(), "text/plain",
new ByteArrayInputStream(contents[2].getBytes()));
// create a major version
Document file = folder.createDocument(fileProperties, cos, VersioningState.MAJOR);
//---------------------------------
ObjectId nextVersion = file.checkOut();
Document file2 = (Document) session.getObject(nextVersion);
cos = session.getObjectFactory().createContentStream("file",
contents[1].length(), "text/plain",
new ByteArrayInputStream(contents[1].getBytes()));
file2.checkIn(true, null, cos, "version1");
//---------------------------------
nextVersion = file.checkOut();
Document file3 = (Document) session.getObject(nextVersion);
cos = session.getObjectFactory().createContentStream("file",
contents[0].length(), "text/plain",
new ByteArrayInputStream(contents[0].getBytes()));
file3.checkIn(true, null, cos, "version2");
//---------------------------------------
List<Document> versions = file.getAllVersions();
assertEquals(3, versions.size());
int i = 0;
for (Document doc : versions) {
String verId = doc.getId();
Document versDoc = (Document)session.getObject(verId);
String s = IoUtil.read(versDoc.getContentStream().getStream());
assertEquals(contents[i], s);
i++;
}
}
private String serviceUrl(String serviceMethod) {
return "http://localhost:8090/modeshape-cmis/services/" + serviceMethod;
}
}