/**
* 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.restatom;
import org.everrest.core.impl.ContainerResponse;
import org.everrest.core.tools.ByteArrayContainerResponseWriter;
import org.w3c.dom.NodeList;
import org.xcmis.spi.CmisConstants;
import org.xcmis.spi.TypeNotFoundException;
import org.xcmis.spi.model.BaseType;
import org.xcmis.spi.model.ContentStreamAllowed;
import org.xcmis.spi.model.PropertyDefinition;
import org.xcmis.spi.model.PropertyType;
import org.xcmis.spi.model.TypeDefinition;
import org.xcmis.spi.model.Updatability;
import java.io.ByteArrayInputStream;
import java.util.HashMap;
import java.util.Map;
import javax.xml.parsers.DocumentBuilderFactory;
/**
* @author <a href="mailto:andrey.parfonov@exoplatform.com">Andrey Parfonov</a>
* @version $Id: TypesChildrenCollectionTest.java 44 2010-02-08 17:36:56Z
* andrew00x $
*/
public class TypesChildrenCollectionTest extends BaseTest
{
private TypeDefinition article;
@Override
public void setUp() throws Exception
{
super.setUp();
//cmis:article
article = new TypeDefinition();
article.setBaseId(BaseType.DOCUMENT);
article.setControllableACL(false);
article.setControllablePolicy(false);
article.setCreatable(true);
article.setDescription("addition type test");
article.setDisplayName("cmis:article");
article.setFileable(true);
article.setFulltextIndexed(false);
article.setId("cmis:article");
article.setIncludedInSupertypeQuery(false);
article.setLocalName("cmis:article");
article.setParentId("cmis:document");
article.setQueryable(false);
article.setQueryName("cmis:article");
article.setContentStreamAllowed(ContentStreamAllowed.ALLOWED);
article.setVersionable(false);
PropertyDefinition<String> pd1 = new PropertyDefinition<String>();
pd1.setMultivalued(false);
pd1.setUpdatability(Updatability.READWRITE);
pd1.setDisplayName("cmis:hello");
pd1.setId("cmis:hello");
pd1.setInherited(false);
pd1.setPropertyType(PropertyType.STRING);
Map<String, PropertyDefinition<?>> mapPD = new HashMap<String, PropertyDefinition<?>>();
mapPD.put(pd1.getId(), pd1);
article.setPropertyDefinitions(mapPD);
conn.addType(article);
}
@Override
public void tearDown() throws Exception
{
try
{
conn.removeType(article.getId());
}
catch (TypeNotFoundException ignored)
{
ignored.printStackTrace();
}
catch (Exception e)
{
e.printStackTrace();
}
super.tearDown();
}
public void testGetAllTypes() throws Exception
{
String requestURI = "http://localhost:8080/rest" //
+ "/cmisatom/" //
+ cmisRepositoryId //
+ "/types";
ByteArrayContainerResponseWriter writer = new ByteArrayContainerResponseWriter();
ContainerResponse resp = service("GET", requestURI, "http://localhost:8080/rest", null, null, writer);
assertEquals(200, resp.getStatus());
// printBody(writer.getBody());
DocumentBuilderFactory f = DocumentBuilderFactory.newInstance();
f.setNamespaceAware(true);
org.w3c.dom.Document xmlDoc = f.newDocumentBuilder().parse(new ByteArrayInputStream(writer.getBody()));
org.w3c.dom.Node xmlFeed = getNode("atom:feed", xmlDoc);
validateFeedCommons(xmlFeed);
NodeList entries = getNodeSet("atom:entry", xmlFeed);
int length = entries.getLength();
assertEquals(4, length);
for (int i = 0; i < length; i++)
{
org.w3c.dom.Node xmlEntry = entries.item(i);
validateTypeEntry(xmlEntry);
}
}
public void testGetTypes() throws Exception
{
String requestURI = "http://localhost:8080/rest" //
+ "/cmisatom/" //
+ cmisRepositoryId //
+ "/types/" //
+ "cmis:document" //
+ "?includePropertyDefinitions=true";
ByteArrayContainerResponseWriter writer = new ByteArrayContainerResponseWriter();
ContainerResponse resp = service("GET", requestURI, "http://localhost:8080/rest", null, null, writer);
// printBody(writer.getBody());
assertEquals(200, resp.getStatus());
DocumentBuilderFactory f = DocumentBuilderFactory.newInstance();
f.setNamespaceAware(true);
org.w3c.dom.Document xmlDoc = f.newDocumentBuilder().parse(new ByteArrayInputStream(writer.getBody()));
org.w3c.dom.Node xmlFeed = getNode("atom:feed", xmlDoc);
validateFeedCommons(xmlFeed);
org.w3c.dom.Node xmlEntry = getNode("atom:entry", xmlFeed);
assertEquals("cmis:article", getStringElement("atom:id", xmlEntry));
validateTypeEntry(xmlEntry);
assertTrue(hasLink(AtomCMIS.LINK_UP, xmlEntry));
}
public void testAddType() throws Exception
{
String req = "<?xml version='1.0' encoding='utf-8'?>" //
+ "<entry xmlns='http://www.w3.org/2005/Atom'" //
+ " xmlns:cmis='" + CmisConstants.CMIS_NS_URI + "'" //
+ " xmlns:cmisra='" + AtomCMIS.CMISRA_NS_URI + "'>"//
+ "<id>cmis:folder1</id>"//
+ "<cmisra:type xmlns:cmis=\"http://docs.oasis-open.org/ns/cmis/core/200908/\">"//
+ "<cmis:id>cmis:folder1</cmis:id>"//
+ "<cmis:baseId>cmis:folder</cmis:baseId>"//
+ "<cmis:parentId>cmis:folder</cmis:parentId>"//
//
+ "<cmis:propertyIdDefinition>" //
+ "<cmis:id>cmis:newProperty</cmis:id>" //
+ "<cmis:propertyType>id</cmis:propertyType>" //
+ "<cmis:cardinality>single</cmis:cardinality>" //
+ "<cmis:updatability>readonly</cmis:updatability>"//
+ "<cmis:queryName>cmis:newProperty</cmis:queryName>" //
+ "<cmis:localName>cmis:newProperty</cmis:localName>"//
+ "<cmis:displayName>cmis:newProperty</cmis:displayName>" //
+ "<cmis:inherited>false</cmis:inherited>"//
+ "<cmis:required>false</cmis:required>"//
+ "<cmis:queryable>false</cmis:queryable>"//
+ "<cmis:orderable>false</cmis:orderable>"//
+ "</cmis:propertyIdDefinition>"//
//
+ "<cmis:propertyIdDefinition>" //
+ "<cmis:id>cmis:newProperty2</cmis:id>" //
+ "<cmis:propertyType>id</cmis:propertyType>" //
+ "<cmis:cardinality>single</cmis:cardinality>" //
+ "<cmis:updatability>readonly</cmis:updatability>"//
+ "<cmis:queryName>cmis:newProperty2</cmis:queryName>" //
+ "<cmis:localName>cmis:newProperty2</cmis:localName>"//
+ "<cmis:displayName>cmis:newProperty2</cmis:displayName>" //
+ "<cmis:inherited>false</cmis:inherited>"//
+ "<cmis:required>false</cmis:required>"//
+ "<cmis:queryable>false</cmis:queryable>"//
+ "<cmis:orderable>false</cmis:orderable>"//
+ "</cmis:propertyIdDefinition>"//
//
+ "</cmisra:type>"//
+ "</entry>";
try
{
conn.getTypeDefinition("cmis:folder1");
fail();
}
catch (TypeNotFoundException e)
{
// OK
}
String requestURI = "http://localhost:8080/rest/cmisatom/" + cmisRepositoryId + "/types";
ByteArrayContainerResponseWriter writer = new ByteArrayContainerResponseWriter();
ContainerResponse resp = service("POST", requestURI, "http://localhost:8080/rest", null, req.getBytes(), writer);
// printBody(writer.getBody());
assertEquals(201, resp.getStatus());
TypeDefinition type = null;
try
{
type = conn.getTypeDefinition("cmis:folder1");
}
catch (TypeNotFoundException e)
{
fail("Type 'cmis:folder1' must be added.");
}
assertNotNull("Property definition 'cmis:newProperty' for newly created type not found.",
type.getPropertyDefinition("cmis:newProperty"));
assertNotNull("Property definition 'cmis:newProperty2' for newly created type not found.",
type.getPropertyDefinition("cmis:newProperty2"));
}
}