blob: 753f01c2f95b32d0fb0589f3c62ccd61f49b7515 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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.apache.chemistry.opencmis.commons.impl.xml;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import java.io.ByteArrayOutputStream;
import java.io.StringWriter;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.GregorianCalendar;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.xml.stream.XMLStreamReader;
import javax.xml.stream.XMLStreamWriter;
import org.apache.chemistry.opencmis.commons.definitions.Choice;
import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionContainer;
import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionList;
import org.apache.chemistry.opencmis.commons.enums.BaseTypeId;
import org.apache.chemistry.opencmis.commons.enums.Cardinality;
import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
import org.apache.chemistry.opencmis.commons.enums.ContentStreamAllowed;
import org.apache.chemistry.opencmis.commons.enums.DateTimeFormat;
import org.apache.chemistry.opencmis.commons.enums.DateTimeResolution;
import org.apache.chemistry.opencmis.commons.enums.DecimalPrecision;
import org.apache.chemistry.opencmis.commons.enums.PropertyType;
import org.apache.chemistry.opencmis.commons.enums.Updatability;
import org.apache.chemistry.opencmis.commons.impl.JSONConverter;
import org.apache.chemistry.opencmis.commons.impl.WSConverter;
import org.apache.chemistry.opencmis.commons.impl.XMLConverter;
import org.apache.chemistry.opencmis.commons.impl.dataobjects.AbstractPropertyDefinition;
import org.apache.chemistry.opencmis.commons.impl.dataobjects.AbstractTypeDefinition;
import org.apache.chemistry.opencmis.commons.impl.dataobjects.ChoiceImpl;
import org.apache.chemistry.opencmis.commons.impl.dataobjects.DocumentTypeDefinitionImpl;
import org.apache.chemistry.opencmis.commons.impl.dataobjects.FolderTypeDefinitionImpl;
import org.apache.chemistry.opencmis.commons.impl.dataobjects.ItemTypeDefinitionImpl;
import org.apache.chemistry.opencmis.commons.impl.dataobjects.PolicyTypeDefinitionImpl;
import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyBooleanDefinitionImpl;
import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyDateTimeDefinitionImpl;
import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyDecimalDefinitionImpl;
import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyHtmlDefinitionImpl;
import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyIdDefinitionImpl;
import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyIntegerDefinitionImpl;
import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyStringDefinitionImpl;
import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyUriDefinitionImpl;
import org.apache.chemistry.opencmis.commons.impl.dataobjects.RelationshipTypeDefinitionImpl;
import org.apache.chemistry.opencmis.commons.impl.dataobjects.SecondaryTypeDefinitionImpl;
import org.apache.chemistry.opencmis.commons.impl.dataobjects.TypeDefinitionContainerImpl;
import org.apache.chemistry.opencmis.commons.impl.dataobjects.TypeDefinitionListImpl;
import org.apache.chemistry.opencmis.commons.impl.dataobjects.TypeMutabilityImpl;
import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisTypeContainer;
import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisTypeDefinitionListType;
import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisTypeDefinitionType;
import org.apache.chemistry.opencmis.commons.impl.json.parser.JSONParser;
import org.junit.Test;
public class TypeDefinitionConverterTest extends AbstractXMLConverterTest {
private static Set<String> cmis10ignoreMethods = new HashSet<String>();
static {
cmis10ignoreMethods.add("getTypeMutability");
}
@Test
public void testDocumentTypeDefinition() throws Exception {
// run the test a few times with different values
for (int i = 0; i < 5; i++) {
DocumentTypeDefinitionImpl typeDef = new DocumentTypeDefinitionImpl();
fillTypeDefintion(typeDef, BaseTypeId.CMIS_DOCUMENT);
typeDef.setIsVersionable(randomBoolean());
typeDef.setContentStreamAllowed(randomEnum(ContentStreamAllowed.class));
typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.BOOLEAN));
typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.DATETIME));
typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.DECIMAL));
typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.HTML));
typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.ID));
typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.INTEGER));
typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.STRING));
typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.URI));
assertTypeDefinition10(typeDef, true);
assertTypeDefinition11(typeDef, true);
}
}
@Test
public void testFolderTypeDefinition() throws Exception {
// run the test a few times with different values
for (int i = 0; i < 5; i++) {
FolderTypeDefinitionImpl typeDef = new FolderTypeDefinitionImpl();
fillTypeDefintion(typeDef, BaseTypeId.CMIS_FOLDER);
typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.BOOLEAN));
typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.DATETIME));
typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.DECIMAL));
typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.HTML));
typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.ID));
typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.INTEGER));
typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.STRING));
typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.URI));
assertTypeDefinition10(typeDef, true);
assertTypeDefinition11(typeDef, true);
}
}
@Test
public void testRelationshipTypeDefinition() throws Exception {
// run the test a few times with different values
for (int i = 0; i < 5; i++) {
RelationshipTypeDefinitionImpl typeDef = new RelationshipTypeDefinitionImpl();
fillTypeDefintion(typeDef, BaseTypeId.CMIS_RELATIONSHIP);
typeDef.setAllowedSourceTypes(Arrays.asList(randomString(), randomString(), randomString()));
typeDef.setAllowedTargetTypes(Arrays.asList(randomString(), randomString(), randomString(), randomString()));
typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.BOOLEAN));
typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.DATETIME));
typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.DECIMAL));
typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.HTML));
typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.ID));
typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.INTEGER));
typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.STRING));
typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.URI));
assertTypeDefinition10(typeDef, true);
assertTypeDefinition11(typeDef, true);
}
}
@Test
public void testPolicyTypeDefinition() throws Exception {
// run the test a few times with different values
for (int i = 0; i < 5; i++) {
PolicyTypeDefinitionImpl typeDef = new PolicyTypeDefinitionImpl();
fillTypeDefintion(typeDef, BaseTypeId.CMIS_POLICY);
typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.BOOLEAN));
typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.DATETIME));
typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.DECIMAL));
typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.HTML));
typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.ID));
typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.INTEGER));
typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.STRING));
typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.URI));
assertTypeDefinition10(typeDef, true);
assertTypeDefinition11(typeDef, true);
}
}
@Test
public void testItemTypeDefinition() throws Exception {
// run the test a few times with different values
for (int i = 0; i < 5; i++) {
ItemTypeDefinitionImpl typeDef = new ItemTypeDefinitionImpl();
fillTypeDefintion(typeDef, BaseTypeId.CMIS_ITEM);
typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.BOOLEAN));
typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.DATETIME));
typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.DECIMAL));
typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.HTML));
typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.ID));
typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.INTEGER));
typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.STRING));
typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.URI));
assertTypeDefinition11(typeDef, true);
}
}
@Test
public void testSecondaryTypeDefinition() throws Exception {
// run the test a few times with different values
for (int i = 0; i < 5; i++) {
SecondaryTypeDefinitionImpl typeDef = new SecondaryTypeDefinitionImpl();
fillTypeDefintion(typeDef, BaseTypeId.CMIS_SECONDARY);
typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.BOOLEAN));
typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.DATETIME));
typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.DECIMAL));
typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.HTML));
typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.ID));
typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.INTEGER));
typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.STRING));
typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.URI));
assertTypeDefinition11(typeDef, true);
}
}
@Test
public void testTypeDefinitionList() throws Exception {
// run the test a few times with different values
for (int i = 0; i < 5; i++) {
List<TypeDefinition> list = new ArrayList<TypeDefinition>();
for (int j = 0; j < randomInt(5); j++) {
DocumentTypeDefinitionImpl typeDef = new DocumentTypeDefinitionImpl();
fillTypeDefintion(typeDef, BaseTypeId.CMIS_DOCUMENT);
typeDef.setIsVersionable(randomBoolean());
typeDef.setContentStreamAllowed(randomEnum(ContentStreamAllowed.class));
typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.BOOLEAN));
typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.DATETIME));
typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.DECIMAL));
typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.HTML));
typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.ID));
typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.INTEGER));
typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.STRING));
typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.URI));
list.add(typeDef);
}
// type definition list
TypeDefinitionListImpl typeDefList = new TypeDefinitionListImpl();
typeDefList.setList(list);
if (randomBoolean()) {
typeDefList.setNumItems(BigInteger.valueOf(list.size()));
typeDefList.setHasMoreItems(false);
} else {
typeDefList.setNumItems(BigInteger.valueOf(list.size() + 1 + randomInt(99)));
typeDefList.setHasMoreItems(true);
}
assertTypeDefinitionList(typeDefList);
}
}
@Test
public void testTypeDefinitionContainer() throws Exception {
// run the test a few times with different values
for (int i = 0; i < 5; i++) {
TypeDefinitionContainer typeDefContainter = createTypeDefinitionContainer(randomInt(7) + 2);
assertTypeDefinitionContainer(typeDefContainter);
}
}
private TypeDefinitionContainer createTypeDefinitionContainer(int level) {
DocumentTypeDefinitionImpl typeDef = new DocumentTypeDefinitionImpl();
fillTypeDefintion(typeDef, BaseTypeId.CMIS_DOCUMENT);
typeDef.setIsVersionable(randomBoolean());
typeDef.setContentStreamAllowed(randomEnum(ContentStreamAllowed.class));
typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.BOOLEAN));
typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.DATETIME));
typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.DECIMAL));
typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.HTML));
typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.ID));
typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.INTEGER));
typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.STRING));
typeDef.addPropertyDefinition(createPropertyDefintion(PropertyType.URI));
TypeDefinitionContainerImpl result = new TypeDefinitionContainerImpl();
result.setTypeDefinition(typeDef);
if (level > 0) {
List<TypeDefinitionContainer> children = new ArrayList<TypeDefinitionContainer>();
for (int i = 0; i < randomInt(3); i++) {
children.add(createTypeDefinitionContainer(level - 1));
}
result.setChildren(children);
}
return result;
}
protected void fillTypeDefintion(AbstractTypeDefinition typeDef, BaseTypeId baseTypeId) {
typeDef.setBaseTypeId(baseTypeId);
typeDef.setDescription(randomString());
typeDef.setDisplayName(randomString());
typeDef.setId(randomString());
typeDef.setIsControllableAcl(randomBoolean());
typeDef.setIsControllablePolicy(randomBoolean());
typeDef.setIsCreatable(randomBoolean());
typeDef.setIsFileable(randomBoolean());
typeDef.setIsIncludedInSupertypeQuery(randomBoolean());
typeDef.setIsFulltextIndexed(randomBoolean());
typeDef.setIsQueryable(randomBoolean());
typeDef.setLocalName(randomString());
typeDef.setLocalNamespace(randomUri());
typeDef.setParentTypeId(randomString());
typeDef.setQueryName(randomString());
TypeMutabilityImpl tm = new TypeMutabilityImpl();
tm.setCanCreate(randomBoolean());
tm.setCanDelete(randomBoolean());
tm.setCanUpdate(randomBoolean());
typeDef.setTypeMutability(tm);
}
protected AbstractPropertyDefinition<?> createPropertyDefintion(PropertyType propertyType) {
AbstractPropertyDefinition<?> result = null;
Cardinality cardinality = randomEnum(Cardinality.class);
switch (propertyType) {
case BOOLEAN:
result = new PropertyBooleanDefinitionImpl();
((PropertyBooleanDefinitionImpl) result).setDefaultValue(Arrays.asList(randomBoolean()));
((PropertyBooleanDefinitionImpl) result).setChoices(createChoiceList(Boolean.class, cardinality));
break;
case DATETIME:
result = new PropertyDateTimeDefinitionImpl();
((PropertyDateTimeDefinitionImpl) result).setDefaultValue(Arrays.asList(randomDateTime()));
((PropertyDateTimeDefinitionImpl) result)
.setChoices(createChoiceList(GregorianCalendar.class, cardinality));
((PropertyDateTimeDefinitionImpl) result).setDateTimeResolution(randomEnum(DateTimeResolution.class));
break;
case DECIMAL:
result = new PropertyDecimalDefinitionImpl();
((PropertyDecimalDefinitionImpl) result).setDefaultValue(Arrays.asList(randomDecimal()));
((PropertyDecimalDefinitionImpl) result).setChoices(createChoiceList(BigDecimal.class, cardinality));
((PropertyDecimalDefinitionImpl) result).setMaxValue(randomDecimal());
((PropertyDecimalDefinitionImpl) result).setMinValue(randomDecimal());
((PropertyDecimalDefinitionImpl) result).setPrecision(randomEnum(DecimalPrecision.class));
break;
case HTML:
result = new PropertyHtmlDefinitionImpl();
((PropertyHtmlDefinitionImpl) result).setDefaultValue(Arrays.asList(randomString()));
((PropertyHtmlDefinitionImpl) result).setChoices(createChoiceList(String.class, cardinality));
break;
case ID:
result = new PropertyIdDefinitionImpl();
((PropertyIdDefinitionImpl) result).setDefaultValue(Arrays.asList(randomString()));
((PropertyIdDefinitionImpl) result).setChoices(createChoiceList(String.class, cardinality));
break;
case INTEGER:
result = new PropertyIntegerDefinitionImpl();
((PropertyIntegerDefinitionImpl) result).setDefaultValue(Arrays.asList(randomInteger()));
((PropertyIntegerDefinitionImpl) result).setChoices(createChoiceList(BigInteger.class, cardinality));
((PropertyIntegerDefinitionImpl) result).setMaxValue(randomInteger());
((PropertyIntegerDefinitionImpl) result).setMinValue(randomInteger());
break;
case STRING:
result = new PropertyStringDefinitionImpl();
((PropertyStringDefinitionImpl) result).setDefaultValue(Arrays.asList(randomString()));
((PropertyStringDefinitionImpl) result).setChoices(createChoiceList(String.class, cardinality));
((PropertyStringDefinitionImpl) result).setMaxLength(randomInteger());
break;
case URI:
result = new PropertyUriDefinitionImpl();
((PropertyUriDefinitionImpl) result).setDefaultValue(Arrays.asList(randomUri()));
((PropertyUriDefinitionImpl) result).setChoices(createChoiceList(String.class, cardinality));
break;
default:
return null;
}
result.setId(randomString());
result.setDescription(randomString());
result.setDisplayName(randomString());
result.setPropertyType(propertyType);
result.setLocalName(randomString());
result.setLocalNamespace(randomUri());
result.setCardinality(cardinality);
result.setUpdatability(randomEnum(Updatability.class));
result.setIsQueryable(randomBoolean());
result.setQueryName(randomString());
result.setIsInherited(randomBoolean());
result.setIsRequired(randomBoolean());
result.setIsOrderable(randomBoolean());
return result;
}
@SuppressWarnings("unchecked")
protected <T> List<Choice<T>> createChoiceList(Class<T> clazz, Cardinality cardinality) {
List<Choice<T>> result = new ArrayList<Choice<T>>();
for (int i = 0; i < randomInt(10); i++) {
ChoiceImpl<T> choice = new ChoiceImpl<T>();
choice.setDisplayName(randomString());
List<T> values = new ArrayList<T>();
choice.setValue(values);
int valueCount = (cardinality == Cardinality.SINGLE ? 1 : randomInt(5));
for (int j = 0; j < valueCount; j++) {
if (clazz == Boolean.class) {
values.add((T) randomBoolean());
} else if (clazz == String.class) {
values.add((T) randomUri());
} else if (clazz == BigInteger.class) {
values.add((T) randomInteger());
} else if (clazz == BigDecimal.class) {
values.add((T) randomDecimal());
} else if (clazz == GregorianCalendar.class) {
values.add((T) randomDateTime());
} else {
assert false;
}
}
result.add(choice);
}
return result;
}
// --- asserts ---
protected void assertTypeDefinition10(TypeDefinition typeDef, boolean validate) throws Exception {
assertXmlTypeDefinition10(typeDef, validate);
assertWsTypeDefinition10(typeDef);
}
protected void assertXmlTypeDefinition10(TypeDefinition typeDef, boolean validate) throws Exception {
ByteArrayOutputStream out = new ByteArrayOutputStream();
XMLStreamWriter writer = createWriter(out);
XMLConverter.writeTypeDefinition(writer, CmisVersion.CMIS_1_0, TEST_NAMESPACE, typeDef);
closeWriter(writer);
byte[] xml = out.toByteArray();
if (validate) {
validate(xml, CmisVersion.CMIS_1_0);
}
XMLStreamReader parser = createParser(xml);
TypeDefinition result = XMLConverter.convertTypeDefinition(parser);
closeParser(parser);
assertNotNull(result);
assertDataObjectsEquals("TypeDefinition", typeDef, result, cmis10ignoreMethods);
assertNull(result.getExtensions());
}
protected void assertWsTypeDefinition10(TypeDefinition typeDef) throws Exception {
CmisTypeDefinitionType ws = WSConverter.convert(typeDef);
TypeDefinition result = WSConverter.convert(ws);
assertNotNull(result);
assertDataObjectsEquals("TypeDefinition", typeDef, result, null);
assertNull(result.getExtensions());
}
protected void assertTypeDefinition11(TypeDefinition typeDef, boolean validate) throws Exception {
assertXmlTypeDefinition11(typeDef, validate);
assertWsTypeDefinition11(typeDef);
assertJsonTypeDefinition11(typeDef);
}
protected void assertXmlTypeDefinition11(TypeDefinition typeDef, boolean validate) throws Exception {
ByteArrayOutputStream out = new ByteArrayOutputStream();
XMLStreamWriter writer = createWriter(out);
XMLConverter.writeTypeDefinition(writer, CmisVersion.CMIS_1_1, TEST_NAMESPACE, typeDef);
closeWriter(writer);
byte[] xml = out.toByteArray();
if (validate) {
validate(xml, CmisVersion.CMIS_1_1);
}
XMLStreamReader parser = createParser(xml);
TypeDefinition result = XMLConverter.convertTypeDefinition(parser);
closeParser(parser);
assertNotNull(result);
assertDataObjectsEquals("TypeDefinition", typeDef, result, null);
assertNull(result.getExtensions());
}
protected void assertWsTypeDefinition11(TypeDefinition typeDef) throws Exception {
CmisTypeDefinitionType ws = WSConverter.convert(typeDef);
TypeDefinition result = WSConverter.convert(ws);
assertNotNull(result);
assertDataObjectsEquals("TypeDefinition", typeDef, result, null);
assertNull(result.getExtensions());
}
protected void assertJsonTypeDefinition11(TypeDefinition typeDef) throws Exception {
StringWriter sw = new StringWriter();
JSONConverter.convert(typeDef, DateTimeFormat.SIMPLE).writeJSONString(sw);
Object json = (new JSONParser()).parse(sw.toString());
assertTrue(json instanceof Map<?, ?>);
@SuppressWarnings("unchecked")
TypeDefinition result = JSONConverter.convertTypeDefinition((Map<String, Object>) json);
assertNotNull(result);
assertDataObjectsEquals("TypeDefinition", typeDef, result, null);
assertNull(result.getExtensions());
}
protected void assertTypeDefinitionList(TypeDefinitionList typeDefList) throws Exception {
assertWsTypeDefinitionList(typeDefList);
assertJsonTypeDefinitionList(typeDefList);
}
protected void assertWsTypeDefinitionList(TypeDefinitionList typeDefList) throws Exception {
CmisTypeDefinitionListType ws = WSConverter.convert(typeDefList);
TypeDefinitionList result = WSConverter.convert(ws);
assertNotNull(result);
assertDataObjectsEquals("TypeDefinitionList", typeDefList, result, null);
assertNull(result.getExtensions());
}
protected void assertJsonTypeDefinitionList(TypeDefinitionList typeDefList) throws Exception {
StringWriter sw = new StringWriter();
JSONConverter.convert(typeDefList, DateTimeFormat.SIMPLE).writeJSONString(sw);
Object json = (new JSONParser()).parse(sw.toString());
assertTrue(json instanceof Map<?, ?>);
@SuppressWarnings("unchecked")
TypeDefinitionList result = JSONConverter.convertTypeChildren((Map<String, Object>) json);
assertNotNull(result);
assertDataObjectsEquals("TypeDefinitionList", typeDefList, result, null);
assertNull(result.getExtensions());
}
protected void assertTypeDefinitionContainer(TypeDefinitionContainer typeDefContainer) throws Exception {
assertWsTypeDefinitionContainer(typeDefContainer);
assertJsonTypeDefinitionContainer(typeDefContainer);
}
protected void assertWsTypeDefinitionContainer(TypeDefinitionContainer typeDefContainer) throws Exception {
List<CmisTypeContainer> target = new ArrayList<CmisTypeContainer>();
WSConverter.convertTypeContainerList(Collections.singletonList(typeDefContainer), target);
assertEquals(1, target.size());
List<TypeDefinitionContainer> result = WSConverter.convertTypeContainerList(target);
assertNotNull(result);
assertEquals(1, result.size());
assertDataObjectsEquals("TypeDefinitionContainer", typeDefContainer, result.get(0), null);
}
protected void assertJsonTypeDefinitionContainer(TypeDefinitionContainer typeDefContainer) throws Exception {
StringWriter sw = new StringWriter();
JSONConverter.convert(typeDefContainer, DateTimeFormat.SIMPLE).writeJSONString(sw);
Object json = (new JSONParser()).parse(sw.toString());
assertTrue(json instanceof Map<?, ?>);
List<TypeDefinitionContainer> result = JSONConverter.convertTypeDescendants(Collections.singletonList(json));
assertNotNull(result);
assertEquals(1, result.size());
assertDataObjectsEquals("TypeDefinitionContainer", typeDefContainer, result.get(0), null);
}
}