| /* |
| * 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.assertNotNull; |
| import static org.junit.Assert.assertNull; |
| import static org.junit.Assert.assertTrue; |
| |
| import java.io.ByteArrayOutputStream; |
| import java.io.StringWriter; |
| import java.util.ArrayList; |
| import java.util.Arrays; |
| import java.util.Collections; |
| import java.util.HashMap; |
| import java.util.HashSet; |
| import java.util.LinkedHashMap; |
| 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.data.ExtensionFeature; |
| import org.apache.chemistry.opencmis.commons.data.PermissionMapping; |
| import org.apache.chemistry.opencmis.commons.data.RepositoryInfo; |
| import org.apache.chemistry.opencmis.commons.definitions.PermissionDefinition; |
| import org.apache.chemistry.opencmis.commons.enums.AclPropagation; |
| import org.apache.chemistry.opencmis.commons.enums.BaseTypeId; |
| import org.apache.chemistry.opencmis.commons.enums.CapabilityAcl; |
| import org.apache.chemistry.opencmis.commons.enums.CapabilityChanges; |
| import org.apache.chemistry.opencmis.commons.enums.CapabilityContentStreamUpdates; |
| import org.apache.chemistry.opencmis.commons.enums.CapabilityJoin; |
| import org.apache.chemistry.opencmis.commons.enums.CapabilityOrderBy; |
| import org.apache.chemistry.opencmis.commons.enums.CapabilityQuery; |
| import org.apache.chemistry.opencmis.commons.enums.CapabilityRenditions; |
| import org.apache.chemistry.opencmis.commons.enums.CmisVersion; |
| import org.apache.chemistry.opencmis.commons.enums.PropertyType; |
| import org.apache.chemistry.opencmis.commons.enums.SupportedPermissions; |
| 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.AclCapabilitiesDataImpl; |
| import org.apache.chemistry.opencmis.commons.impl.dataobjects.CreatablePropertyTypesImpl; |
| import org.apache.chemistry.opencmis.commons.impl.dataobjects.ExtensionFeatureImpl; |
| import org.apache.chemistry.opencmis.commons.impl.dataobjects.NewTypeSettableAttributesImpl; |
| import org.apache.chemistry.opencmis.commons.impl.dataobjects.PermissionDefinitionDataImpl; |
| import org.apache.chemistry.opencmis.commons.impl.dataobjects.PermissionMappingDataImpl; |
| import org.apache.chemistry.opencmis.commons.impl.dataobjects.RepositoryCapabilitiesImpl; |
| import org.apache.chemistry.opencmis.commons.impl.dataobjects.RepositoryInfoImpl; |
| import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisRepositoryInfoType; |
| import org.apache.chemistry.opencmis.commons.impl.json.parser.JSONParser; |
| import org.junit.Test; |
| |
| public class RepositoryInfoConverterTest extends AbstractXMLConverterTest { |
| |
| private static Set<String> cmis10ignoreMethods = new HashSet<String>(); |
| static { |
| cmis10ignoreMethods.add("getOrderByCapability"); |
| cmis10ignoreMethods.add("getCreatablePropertyTypes"); |
| cmis10ignoreMethods.add("getNewTypeSettableAttributes"); |
| cmis10ignoreMethods.add("getExtensionFeatures"); |
| } |
| |
| @Test |
| public void testRepositoryInfo() throws Exception { |
| |
| // run the test a few times with different values |
| for (int i = 0; i < 10; i++) { |
| RepositoryInfoImpl repInfo = new RepositoryInfoImpl(); |
| |
| assertRepositoryInfo10(repInfo, false); |
| |
| // values |
| repInfo = new RepositoryInfoImpl(); |
| repInfo.setChangesIncomplete(randomBoolean()); |
| repInfo.setChangesOnType(Collections.singletonList(BaseTypeId.CMIS_DOCUMENT)); |
| repInfo.setCmisVersionSupported("1.0"); |
| repInfo.setLatestChangeLogToken(randomString()); |
| repInfo.setPrincipalAnonymous(randomString()); |
| repInfo.setPrincipalAnyone(randomString()); |
| repInfo.setProductName(randomString()); |
| repInfo.setProductVersion(randomString()); |
| repInfo.setDescription(randomString()); |
| repInfo.setId(randomString()); |
| repInfo.setName(randomString()); |
| repInfo.setRootFolder(randomString()); |
| repInfo.setThinClientUri(randomUri()); |
| repInfo.setVendorName(randomString()); |
| |
| RepositoryCapabilitiesImpl cap1 = new RepositoryCapabilitiesImpl(); |
| cap1.setAllVersionsSearchable(randomBoolean()); |
| cap1.setCapabilityAcl(randomEnum(CapabilityAcl.class)); |
| cap1.setCapabilityChanges(CapabilityChanges.ALL); |
| cap1.setCapabilityContentStreamUpdates(randomEnum(CapabilityContentStreamUpdates.class)); |
| cap1.setCapabilityJoin(randomEnum(CapabilityJoin.class)); |
| cap1.setCapabilityQuery(randomEnum(CapabilityQuery.class)); |
| cap1.setCapabilityRendition(randomEnum(CapabilityRenditions.class)); |
| cap1.setIsPwcSearchable(randomBoolean()); |
| cap1.setIsPwcUpdatable(randomBoolean()); |
| cap1.setSupportsGetDescendants(randomBoolean()); |
| cap1.setSupportsGetFolderTree(randomBoolean()); |
| cap1.setSupportsMultifiling(randomBoolean()); |
| cap1.setCapabilityOrderBy(randomEnum(CapabilityOrderBy.class)); |
| cap1.setSupportsUnfiling(randomBoolean()); |
| cap1.setSupportsVersionSpecificFiling(randomBoolean()); |
| |
| CreatablePropertyTypesImpl cpt = new CreatablePropertyTypesImpl(); |
| Set<PropertyType> pt = new HashSet<PropertyType>(); |
| pt.add(PropertyType.BOOLEAN); |
| pt.add(PropertyType.ID); |
| pt.add(PropertyType.INTEGER); |
| pt.add(PropertyType.DATETIME); |
| pt.add(PropertyType.DECIMAL); |
| pt.add(PropertyType.HTML); |
| pt.add(PropertyType.STRING); |
| pt.add(PropertyType.URI); |
| cpt.setCanCreate(pt); |
| cap1.setCreatablePropertyTypes(cpt); |
| |
| NewTypeSettableAttributesImpl newTypeSettableAttributes = new NewTypeSettableAttributesImpl(); |
| newTypeSettableAttributes.setCanSetId(randomBoolean()); |
| newTypeSettableAttributes.setCanSetLocalName(randomBoolean()); |
| newTypeSettableAttributes.setCanSetLocalNamespace(randomBoolean()); |
| newTypeSettableAttributes.setCanSetDisplayName(randomBoolean()); |
| newTypeSettableAttributes.setCanSetQueryName(randomBoolean()); |
| newTypeSettableAttributes.setCanSetDescription(randomBoolean()); |
| newTypeSettableAttributes.setCanSetCreatable(randomBoolean()); |
| newTypeSettableAttributes.setCanSetFileable(randomBoolean()); |
| newTypeSettableAttributes.setCanSetQueryable(randomBoolean()); |
| newTypeSettableAttributes.setCanSetFulltextIndexed(randomBoolean()); |
| newTypeSettableAttributes.setCanSetIncludedInSupertypeQuery(randomBoolean()); |
| newTypeSettableAttributes.setCanSetControllablePolicy(randomBoolean()); |
| newTypeSettableAttributes.setCanSetControllableAcl(randomBoolean()); |
| cap1.setNewTypeSettableAttributes(newTypeSettableAttributes); |
| |
| repInfo.setCapabilities(cap1); |
| |
| AclCapabilitiesDataImpl acl1 = new AclCapabilitiesDataImpl(); |
| acl1.setSupportedPermissions(randomEnum(SupportedPermissions.class)); |
| acl1.setAclPropagation(randomEnum(AclPropagation.class)); |
| List<PermissionDefinition> pddList = new ArrayList<PermissionDefinition>(); |
| PermissionDefinitionDataImpl pdd1 = new PermissionDefinitionDataImpl(); |
| pdd1.setId(randomString()); |
| pdd1.setDescription(randomString()); |
| pddList.add(pdd1); |
| PermissionDefinitionDataImpl pdd2 = new PermissionDefinitionDataImpl(); |
| pdd2.setId(randomString()); |
| pdd2.setDescription(randomString()); |
| pddList.add(pdd2); |
| acl1.setPermissionDefinitionData(pddList); |
| Map<String, PermissionMapping> pmd = new LinkedHashMap<String, PermissionMapping>(); |
| PermissionMappingDataImpl pmd1 = new PermissionMappingDataImpl(); |
| pmd1.setKey(PermissionMapping.CAN_CREATE_DOCUMENT_FOLDER); |
| pmd1.setPermissions(Arrays.asList(new String[] { randomString(), randomString() })); |
| pmd.put(pmd1.getKey(), pmd1); |
| PermissionMappingDataImpl pmd2 = new PermissionMappingDataImpl(); |
| pmd2.setKey(PermissionMapping.CAN_DELETE_OBJECT); |
| pmd2.setPermissions(Arrays.asList(new String[] { randomString(), randomString() })); |
| pmd.put(pmd2.getKey(), pmd2); |
| acl1.setPermissionMappingData(pmd); |
| repInfo.setAclCapabilities(acl1); |
| |
| List<ExtensionFeature> extensionFeatures = new ArrayList<ExtensionFeature>(); |
| |
| ExtensionFeatureImpl ef1 = new ExtensionFeatureImpl(); |
| ef1.setId(randomUri()); |
| ef1.setCommonName(randomString()); |
| ef1.setDescription(randomString()); |
| ef1.setUrl(randomUri()); |
| ef1.setVersionLabel(randomString()); |
| Map<String, String> efd1 = new HashMap<String, String>(); |
| efd1.put(randomString(), randomString()); |
| efd1.put(randomString(), randomString()); |
| ef1.setFeatureData(efd1); |
| extensionFeatures.add(ef1); |
| |
| ExtensionFeatureImpl ef2 = new ExtensionFeatureImpl(); |
| ef2.setId(randomUri()); |
| ef2.setCommonName(randomString()); |
| ef2.setDescription(randomString()); |
| ef2.setUrl(randomUri()); |
| ef2.setVersionLabel(randomString()); |
| Map<String, String> efd2 = new HashMap<String, String>(); |
| efd2.put(randomString(), randomString()); |
| efd2.put(randomString(), randomString()); |
| ef2.setFeatureData(efd2); |
| extensionFeatures.add(ef2); |
| |
| repInfo.setExtensionFeature(extensionFeatures); |
| |
| assertRepositoryInfo10(repInfo, true); |
| assertRepositoryInfo11(repInfo, true); |
| } |
| } |
| |
| protected void assertRepositoryInfo10(RepositoryInfo repInfo, boolean validate) throws Exception { |
| assertXmlRepositoryInfo10(repInfo, validate); |
| assertWsRepositoryInfo10(repInfo); |
| } |
| |
| protected void assertXmlRepositoryInfo10(RepositoryInfo repInfo, boolean validate) throws Exception { |
| ByteArrayOutputStream out = new ByteArrayOutputStream(); |
| |
| XMLStreamWriter writer = createWriter(out); |
| XMLConverter.writeRepositoryInfo(writer, CmisVersion.CMIS_1_0, TEST_NAMESPACE, repInfo); |
| closeWriter(writer); |
| |
| byte[] xml = out.toByteArray(); |
| |
| if (validate) { |
| validate(xml, CmisVersion.CMIS_1_0); |
| } |
| |
| XMLStreamReader parser = createParser(xml); |
| RepositoryInfo result = XMLConverter.convertRepositoryInfo(parser); |
| closeParser(parser); |
| |
| assertNotNull(result); |
| assertDataObjectsEquals("RepositoryInfo", repInfo, result, cmis10ignoreMethods); |
| assertNull(result.getExtensions()); |
| } |
| |
| protected void assertWsRepositoryInfo10(RepositoryInfo repInfo) throws Exception { |
| CmisRepositoryInfoType ws = WSConverter.convert(repInfo, CmisVersion.CMIS_1_0); |
| |
| RepositoryInfo result = WSConverter.convert(ws); |
| |
| // remove CMIS 1.1 features |
| RepositoryInfoImpl repInfo2 = new RepositoryInfoImpl(repInfo); |
| repInfo2.setExtensionFeature(null); |
| if (repInfo.getCapabilities() != null) { |
| RepositoryCapabilitiesImpl capabilities = new RepositoryCapabilitiesImpl(repInfo.getCapabilities()); |
| capabilities.setCapabilityOrderBy(null); |
| capabilities.setCreatablePropertyTypes(null); |
| capabilities.setNewTypeSettableAttributes(null); |
| repInfo2.setCapabilities(capabilities); |
| } |
| |
| assertNotNull(result); |
| assertDataObjectsEquals("RepositoryInfo", repInfo2, result, null); |
| assertNull(result.getExtensions()); |
| } |
| |
| protected void assertRepositoryInfo11(RepositoryInfo repInfo, boolean validate) throws Exception { |
| assertXmlRepositoryInfo11(repInfo, validate); |
| assertWsRepositoryInfo11(repInfo); |
| assertJsonRepositoryInfo11(repInfo); |
| } |
| |
| protected void assertXmlRepositoryInfo11(RepositoryInfo repInfo, boolean validate) throws Exception { |
| ByteArrayOutputStream out = new ByteArrayOutputStream(); |
| |
| XMLStreamWriter writer = createWriter(out); |
| XMLConverter.writeRepositoryInfo(writer, CmisVersion.CMIS_1_1, TEST_NAMESPACE, repInfo); |
| closeWriter(writer); |
| |
| byte[] xml = out.toByteArray(); |
| |
| if (validate) { |
| validate(xml, CmisVersion.CMIS_1_1); |
| } |
| |
| XMLStreamReader parser = createParser(xml); |
| RepositoryInfo result = XMLConverter.convertRepositoryInfo(parser); |
| closeParser(parser); |
| |
| assertNotNull(result); |
| assertDataObjectsEquals("RepositoryInfo", repInfo, result, null); |
| assertNull(result.getExtensions()); |
| } |
| |
| protected void assertWsRepositoryInfo11(RepositoryInfo repInfo) throws Exception { |
| CmisRepositoryInfoType ws = WSConverter.convert(repInfo, CmisVersion.CMIS_1_1); |
| |
| RepositoryInfo result = WSConverter.convert(ws); |
| |
| assertNotNull(result); |
| assertDataObjectsEquals("RepositoryInfo", repInfo, result, null); |
| assertNull(result.getExtensions()); |
| } |
| |
| protected void assertJsonRepositoryInfo11(RepositoryInfo repInfo) throws Exception { |
| StringWriter sw = new StringWriter(); |
| |
| JSONConverter.convert(repInfo, null, null, false).writeJSONString(sw); |
| |
| Object json = (new JSONParser()).parse(sw.toString()); |
| assertTrue(json instanceof Map<?, ?>); |
| @SuppressWarnings("unchecked") |
| RepositoryInfo result = JSONConverter.convertRepositoryInfo((Map<String, Object>) json); |
| |
| assertNotNull(result); |
| assertDataObjectsEquals("RepositoryInfo", repInfo, result, null); |
| assertNull(result.getExtensions()); |
| } |
| } |