/** * Copyright (C) 2010 eXo Platform SAS. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.xcmis.wssoap; import org.apache.cxf.endpoint.Server; import org.xcmis.core.CmisAllowableActionsType; import org.xcmis.core.CmisObjectType; import org.xcmis.core.CmisPropertiesType; import org.xcmis.core.CmisPropertyId; import org.xcmis.core.CmisPropertyString; import org.xcmis.core.EnumBaseObjectTypeIds; import org.xcmis.core.EnumIncludeRelationships; import org.xcmis.core.EnumPropertiesRelationship; import org.xcmis.core.EnumVersioningState; import org.xcmis.messaging.CmisContentStreamType; import org.xcmis.messaging.CmisExtensionType; import org.xcmis.soap.ObjectServicePort; import org.xcmis.spi.BaseContentStream; import org.xcmis.spi.ChangeTokenHolder; import org.xcmis.spi.CmisConstants; import org.xcmis.spi.ConstraintException; import org.xcmis.spi.ContentStream; import org.xcmis.spi.ObjectNotFoundException; import org.xcmis.spi.model.IncludeRelationships; import org.xcmis.spi.utils.MimeType; import org.xcmis.wssoap.impl.ObjectServicePortImpl; import javax.activation.DataHandler; import javax.xml.ws.Holder; public class ObjectServiceTest extends BaseTest { private ObjectServicePort port; /** Service name. */ private final static String SERVICE_NAME = "ObjectService"; /** Address. */ private final static String SERVICE_ADDRESS = "http://localhost:8081/" + SERVICE_NAME; /** Server. */ private Server server; public void setUp() throws Exception { super.setUp(); server = complexDeployService(SERVICE_ADDRESS, new ObjectServicePortImpl(), interceptors, null, true); port = getObjectService(SERVICE_ADDRESS); assertNotNull(server); assertNotNull(port); } public void testCreateDocument() throws Exception { CmisPropertiesType props = new CmisPropertiesType(); // typeId CmisPropertyId propTypeId = new CmisPropertyId(); propTypeId.setPropertyDefinitionId(CmisConstants.OBJECT_TYPE_ID); propTypeId.getValue().add(EnumBaseObjectTypeIds.CMIS_DOCUMENT.value()); // name CmisPropertyString propName = new CmisPropertyString(); propName.setPropertyDefinitionId(CmisConstants.NAME); propName.getValue().add("document1"); props.getProperty().add(propTypeId); props.getProperty().add(propName); javax.xml.ws.Holder<String> created = new javax.xml.ws.Holder<String>(); port.createDocument(// repositoryId, // props, // testFolderId, // Parent null, // Content stream EnumVersioningState.MAJOR, // null, // Policies null, // add ACL null, // remove ACL new Holder<CmisExtensionType>(), // Extensions created // holder for id of created object ); try { conn.getObject(created.value, false, IncludeRelationships.NONE, false, false, false, null, null); } catch (ObjectNotFoundException onfe) { fail("Document not found."); } } public void testCreateFolder() throws Exception { CmisPropertiesType props = new CmisPropertiesType(); // typeId CmisPropertyId propTypeId = new CmisPropertyId(); propTypeId.setPropertyDefinitionId(CmisConstants.OBJECT_TYPE_ID); propTypeId.getValue().add(EnumBaseObjectTypeIds.CMIS_FOLDER.value()); // name CmisPropertyString propName = new CmisPropertyString(); propName.setPropertyDefinitionId(CmisConstants.NAME); propName.getValue().add("folder1"); props.getProperty().add(propTypeId); props.getProperty().add(propName); javax.xml.ws.Holder<String> created = new javax.xml.ws.Holder<String>(); port.createFolder(// repositoryId, // props, // testFolderId, // Parent null, // Policies null, // Add ACL null, // Remove ACL new Holder<CmisExtensionType>(), // Extensions created // holder for id of created object ); try { conn.getObject(created.value, false, IncludeRelationships.NONE, false, false, false, null, null); } catch (ObjectNotFoundException onfe) { fail("Folder not found."); } } public void testCreateRelationship() throws Exception { String source = createDocument(testFolderId, "source1"); String target = createDocument(testFolderId, "target1"); // typeId CmisPropertyId propTypeId = new CmisPropertyId(); propTypeId.setPropertyDefinitionId(CmisConstants.OBJECT_TYPE_ID); propTypeId.getValue().add(EnumBaseObjectTypeIds.CMIS_RELATIONSHIP.value()); // name CmisPropertyString propName = new CmisPropertyString(); propName.setPropertyDefinitionId(CmisConstants.NAME); propName.getValue().add("relation1"); // sourceId CmisPropertyId sourceId = new CmisPropertyId(); sourceId.setPropertyDefinitionId(EnumPropertiesRelationship.CMIS_SOURCE_ID.value()); sourceId.getValue().add(source); // targetId CmisPropertyId targetId = new CmisPropertyId(); targetId.setPropertyDefinitionId(EnumPropertiesRelationship.CMIS_TARGET_ID.value()); targetId.getValue().add(target); CmisPropertiesType props = new CmisPropertiesType(); props.getProperty().add(propTypeId); props.getProperty().add(propName); props.getProperty().add(sourceId); props.getProperty().add(targetId); javax.xml.ws.Holder<String> created = new javax.xml.ws.Holder<String>(); port.createRelationship(// repositoryId, // props, // null, // policies null, // add ACL null, // remove ACL new Holder<CmisExtensionType>(), // Extensions created // holder for id of created object ); try { conn.getObject(created.value, false, IncludeRelationships.NONE, false, false, false, null, null); } catch (ObjectNotFoundException onfe) { fail("Relationship not found."); } conn.deleteObject(created.value, true); } public void testCreatePolicy() throws Exception { // typeId CmisPropertyId propTypeId = new CmisPropertyId(); propTypeId.setPropertyDefinitionId(CmisConstants.OBJECT_TYPE_ID); propTypeId.setLocalName(CmisConstants.OBJECT_TYPE_ID); propTypeId.getValue().add(EnumBaseObjectTypeIds.CMIS_POLICY.value()); // name CmisPropertyString propName = new CmisPropertyString(); propName.setPropertyDefinitionId(CmisConstants.NAME); propName.setLocalName(CmisConstants.NAME); propName.getValue().add("policy1"); CmisPropertyString propText = new CmisPropertyString(); propText.setPropertyDefinitionId(CmisConstants.POLICY_TEXT); propText.setLocalName(CmisConstants.POLICY_TEXT); propText.getValue().add("policy23"); CmisPropertiesType props = new CmisPropertiesType(); props.getProperty().add(propTypeId); props.getProperty().add(propName); props.getProperty().add(propText); javax.xml.ws.Holder<String> created = new javax.xml.ws.Holder<String>(); port.createPolicy(// repositoryId, // props, // testFolderId, // null, // policies null, // add ACL null, // remove ACL new Holder<CmisExtensionType>(), // Extensions created // holder for id of created object ); try { conn.getObject(created.value, false, IncludeRelationships.NONE, false, false, false, null, null); } catch (ObjectNotFoundException onfe) { fail("Policy not found."); } } public void testDeleteContentStream() throws Exception { String docId = createDocument(testFolderId, "doc1"); String content = "<?xml version='1.0' encoding='UTF-8'?>"; ContentStream stream = new BaseContentStream(content.getBytes(), "test", MimeType.fromString("text/xml;charset=UTF-8")); String updated = conn.setContentStream(// docId, // stream, // new ChangeTokenHolder(), // change token true // overwrite ); Holder<String> hId = new Holder<String>(updated); ContentStream cs = conn.getContentStream(updated, null); byte b[] = new byte[1024]; int rd = cs.getStream().read(b); assertEquals(content, new String(b, 0, rd)); // delete content port.deleteContentStream(repositoryId, hId, new Holder<String>(null), new Holder<CmisExtensionType>( new CmisExtensionType())); try { cs = conn.getContentStream(hId.value, null); fail(); } catch (ConstraintException ex) { } } public void testDeleteObject() throws Exception { String id = createDocument(testFolderId, "doc1"); port.deleteObject(repositoryId, id, true, null); try { conn.getObject(id, false, IncludeRelationships.NONE, false, false, false, null, null); fail("Object " + id + " must be removed."); } catch (ObjectNotFoundException ex) { } } public void testGetAllowableActions() throws Exception { String id = createDocument(testFolderId, "doc1"); CmisAllowableActionsType actions = port.getAllowableActions(repositoryId, id, new CmisExtensionType()); assertNotNull(actions); } public void testGetObjectById() throws Exception { String id = createDocument(testFolderId, "doc1"); CmisObjectType obj = port.getObject(// repositoryId, // id, // null, // Property filter false, // Allowable actions EnumIncludeRelationships.NONE, // null, // Rendition Filter false, // Include policies IDs false, // Include ACL new CmisExtensionType() // Extensions ); assertNotNull(obj); assertEquals(id, getObjectId(obj)); } public void testGetObjectByPath() throws Exception { String folderId = createFolder(testFolderId, "folder1"); String docId = createDocument(folderId, "doc1"); CmisObjectType res = port.getObjectByPath(// repositoryId, // "/testFolder/folder1/doc1", // 'testFolder' is root folder for test null, // Property Filter false, // Allowable actions EnumIncludeRelationships.NONE, // null, // Rendition filter false, // Include policies false, // Include ACL new CmisExtensionType() // Extensions ); assertNotNull(res); assertEquals(docId, getObjectId(res)); } public void testMoveObject() throws Exception { String id = createDocument(testFolderId, "doc1234"); String targetId = createFolder(testFolderId, "folder1"); Holder<String> hId = new Holder<String>(id); port.moveObject(// repositoryId, // hId, // targetId, // Target folder testFolderId, // Source folder new Holder<CmisExtensionType>() // Extension ); assertEquals(id, hId.value); // Check it is moved. CmisObjectType moved = port.getObjectByPath(// repositoryId, // "/testFolder/folder1/doc1234", // 'testFolder' is root folder for test null, // false, // EnumIncludeRelationships.NONE, // null, // false, // false, // new CmisExtensionType() // ); assertEquals(id, getObjectId(moved)); } public void testSetContentStream() throws Exception { String docId = createDocument(testFolderId, "doc1"); String content = "hello"; Holder<String> hId = new Holder<String>(docId); CmisContentStreamType contentStreamType = new CmisContentStreamType(); contentStreamType.setFilename("test"); contentStreamType.setMimeType("text/plain"); contentStreamType.setStream(new DataHandler(new String(content), "text/plain")); port.setContentStream(// repositoryId, // hId, // Document id holder true, // Overwrite new Holder<String>(null), // Change token contentStreamType, // Stream new Holder<CmisExtensionType>() // Extension ); ContentStream cs = conn.getContentStream(hId.value, null); byte[] b = new byte[128]; int rd = cs.getStream().read(b); assertEquals(content, new String(b, 0, rd)); } /** * Get object service. * * @return TicketOrderService */ private ObjectServicePort getObjectService(String address) { org.apache.cxf.jaxws.JaxWsProxyFactoryBean client = new org.apache.cxf.jaxws.JaxWsProxyFactoryBean(); client.setServiceClass(ObjectServicePort.class); client.setAddress(address); Object obj = client.create(); return (ObjectServicePort)obj; } protected void tearDown() throws Exception { super.tearDown(); server.stop(); } }