From ebf8652ebb8a010671c7fb7daacbdb2e40555bed Mon Sep 17 00:00:00 2001 From: Mark Rogers Date: Tue, 22 Jul 2014 13:49:11 +0000 Subject: [PATCH] Merged HEAD-BUG-FIX (5.0/Cloud) to HEAD (5.0/Cloud) 75759: Reverse Merge HEAD-BUG-FIX (5.0) 74605 : Reverse Merge HEAD-BUG-FIX (5.0) << Caused 1 build error https://bamboo.alfresco.com/bamboo/browse/THOR-CLOUD0-384 >> 74567 : Merged DEV to HEAD-BUG-FIX (5.0) 69634 : MNT-11339 : Unable to create relationship between cmis:document and cmis:item - TYPE_BASE is valid CMIS type 73710 : MNT-11339 : Unable to create relationship between cmis:document and cmis:item - Create association between cmis:document and cmis:item test git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@77545 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../opencmis/AlfrescoCmisServiceImpl.java | 8 +- .../org/alfresco/opencmis/CMISTest.java | 104 ++++++++++++++++++ .../opencmis/testcmis_item_model.xml | 64 +++++++++++ .../test-cmisinteger_modell-context.xml | 1 + 4 files changed, 173 insertions(+), 4 deletions(-) create mode 100644 source/test-resources/opencmis/testcmis_item_model.xml diff --git a/source/java/org/alfresco/opencmis/AlfrescoCmisServiceImpl.java b/source/java/org/alfresco/opencmis/AlfrescoCmisServiceImpl.java index 448d90867d..402fad7aa9 100644 --- a/source/java/org/alfresco/opencmis/AlfrescoCmisServiceImpl.java +++ b/source/java/org/alfresco/opencmis/AlfrescoCmisServiceImpl.java @@ -1305,9 +1305,9 @@ public class AlfrescoCmisServiceImpl extends AbstractCmisService implements Alfr String sourceId = connector.getSourceIdProperty(properties); CMISNodeInfo sourceInfo = getOrCreateNodeInfo(sourceId, "Source"); - if (!sourceInfo.isVariant(CMISObjectVariant.CURRENT_VERSION) && !sourceInfo.isVariant(CMISObjectVariant.FOLDER)) + if (!sourceInfo.isVariant(CMISObjectVariant.CURRENT_VERSION) && !sourceInfo.isVariant(CMISObjectVariant.FOLDER) && !sourceInfo.isVariant(CMISObjectVariant.ITEM)) { - throw new CmisInvalidArgumentException("Source is not the latest version of a document or a folder object!"); + throw new CmisInvalidArgumentException("Source is not the latest version of a document, a folder or an item object!"); } final NodeRef sourceNodeRef = sourceInfo.getNodeRef(); @@ -1316,10 +1316,10 @@ public class AlfrescoCmisServiceImpl extends AbstractCmisService implements Alfr String targetId = connector.getTargetIdProperty(properties); CMISNodeInfo targetInfo = getOrCreateNodeInfo(targetId, "Target"); - if (!targetInfo.isVariant(CMISObjectVariant.CURRENT_VERSION) && !targetInfo.isVariant(CMISObjectVariant.FOLDER)) + if (!targetInfo.isVariant(CMISObjectVariant.CURRENT_VERSION) && !targetInfo.isVariant(CMISObjectVariant.FOLDER) && !targetInfo.isVariant(CMISObjectVariant.ITEM)) { throw new CmisInvalidArgumentException( - "Target is not the latest version of a document or a folder object!!"); + "Target is not the latest version of a document, a folder or an item object!!"); } final NodeRef targetNodeRef = targetInfo.getNodeRef(); diff --git a/source/test-java/org/alfresco/opencmis/CMISTest.java b/source/test-java/org/alfresco/opencmis/CMISTest.java index d86e0f576e..8b88bbcbd1 100644 --- a/source/test-java/org/alfresco/opencmis/CMISTest.java +++ b/source/test-java/org/alfresco/opencmis/CMISTest.java @@ -1705,6 +1705,110 @@ public class CMISTest }, CmisVersion.CMIS_1_1); } + + /** + * MNT-11339 related test : + * Unable to create relationship between cmis:document and cmis:item + */ + @Test + public void testItemRelations() + { + AuthenticationUtil.pushAuthentication(); + AuthenticationUtil.setFullyAuthenticatedUser(AuthenticationUtil.getAdminUserName()); + + final String TEST_NAME = "testItemRelations-"; + final String FOLDER_NAME = TEST_NAME + "FOLDER" + GUID.generate(); + final String DOCUMENT_NAME = TEST_NAME + "DOCUMENT" + GUID.generate(); + final String CLIENT_NAME = "Some Test Client " + GUID.generate(); + + try + { + transactionService.getRetryingTransactionHelper().doInTransaction( + new RetryingTransactionCallback() + { + @Override + public Void execute() throws Throwable + { + NodeRef companyHomeNodeRef = repositoryHelper.getCompanyHome(); + + /* Create folder within companyHome */ + FileInfo folderInfo = fileFolderService.create(companyHomeNodeRef, FOLDER_NAME, ContentModel.TYPE_FOLDER); + nodeService.setProperty(folderInfo.getNodeRef(), ContentModel.PROP_NAME, FOLDER_NAME); + assertNotNull(folderInfo); + + // and document + FileInfo document = fileFolderService.create(folderInfo.getNodeRef(), DOCUMENT_NAME, ContentModel.TYPE_CONTENT); + assertNotNull(document); + nodeService.setProperty(document.getNodeRef(), ContentModel.PROP_NAME, DOCUMENT_NAME); + + return null; + } + }); + + withCmisService(new CmisServiceCallback() { + @SuppressWarnings("unchecked") + @Override + public String execute(CmisService cmisService) { + List repositories = cmisService.getRepositoryInfos(null); + assertTrue(repositories.size() > 0); + RepositoryInfo repo = repositories.get(0); + String repositoryId = repo.getId(); + + // ensure there are custom type, aspect and association defined + TypeDefinition tpdfn = cmisService.getTypeDefinition(repositoryId, "I:sctst:client", null); + assertNotNull("the I:sctst:client type is not defined", tpdfn); + TypeDefinition aspectDfn = cmisService.getTypeDefinition(repositoryId, "P:sctst:clientRelated", null); + assertNotNull("the P:sctst:clientRelated aspect is not defined", aspectDfn); + TypeDefinition relDfn = cmisService.getTypeDefinition(repositoryId, "R:sctst:relatedClients", null); + assertNotNull("the R:sctst:relatedClients association is not defined", relDfn); + + // create cmis:item within test folder + PropertiesImpl properties = new PropertiesImpl(); + properties.addProperty(new PropertyIdImpl(PropertyIds.OBJECT_TYPE_ID, tpdfn.getId())); + properties.addProperty(new PropertyStringImpl(PropertyIds.NAME, CLIENT_NAME)); + properties.addProperty(new PropertyStringImpl("sctst:clientId", "id" + GUID.generate())); + properties.addProperty(new PropertyStringImpl("sctst:clientName", CLIENT_NAME)); + + ObjectData folderData = cmisService.getObjectByPath(repositoryId, "/" + FOLDER_NAME, null, null, null, null, null, null, null); + + cmisService.createItem(repositoryId, properties, folderData.getId(), null, null, null, null); + + ObjectData contentData = cmisService.getObjectByPath(repositoryId, "/" + FOLDER_NAME + "/" + DOCUMENT_NAME, null, null, null, null, null, null, null); + + // add test aspect sctst:clientRelated to document + Properties props = cmisService.getProperties(repositoryId, contentData.getId(), null, null); + + PropertyData propAspects = props.getProperties().get(PropertyIds.SECONDARY_OBJECT_TYPE_IDS); + + @SuppressWarnings("rawtypes") + List aspects = propAspects.getValues(); + aspects.add("P:sctst:clientRelated"); + + properties = new PropertiesImpl(); + properties.addProperty(new PropertyStringImpl(PropertyIds.SECONDARY_OBJECT_TYPE_IDS, aspects)); + cmisService.updateProperties(repositoryId, new Holder(contentData.getId()), null, properties, null); + // ensure document has sctst:clientRelated aspect applied + aspects = cmisService.getProperties(repositoryId, contentData.getId(), null, null).getProperties().get(PropertyIds.SECONDARY_OBJECT_TYPE_IDS).getValues(); + assertTrue("P:sctst:clientRelated excpected", aspects.contains("P:sctst:clientRelated")); + + ObjectData itemData = cmisService.getObjectByPath(repositoryId, "/" + FOLDER_NAME + "/" + CLIENT_NAME, null, null, null, null, null, null, null); + // create relationship between cmis:document and cmis:item + properties = new PropertiesImpl(); + properties.addProperty(new PropertyIdImpl(PropertyIds.OBJECT_TYPE_ID, "R:sctst:relatedClients")); + properties.addProperty(new PropertyIdImpl(PropertyIds.SOURCE_ID, contentData.getId())); + properties.addProperty(new PropertyIdImpl(PropertyIds.TARGET_ID, itemData.getId())); + cmisService.createRelationship(repositoryId, properties, null, null, null, null); + + return ""; + + }; + }, CmisVersion.CMIS_1_1); + } + finally + { + AuthenticationUtil.popAuthentication(); + } + } @Test public void testMNT10529() throws Exception diff --git a/source/test-resources/opencmis/testcmis_item_model.xml b/source/test-resources/opencmis/testcmis_item_model.xml new file mode 100644 index 0000000000..d7e7ab3453 --- /dev/null +++ b/source/test-resources/opencmis/testcmis_item_model.xml @@ -0,0 +1,64 @@ + + + + + + + + Test CMIS Item relations model + SSergey + 1.0 + + + + + + + + + + + + + + + + Someco Test Client + sys:base + + + d:text + + + d:text + + + + + + + + Someco Test Client Related + + + Related Clients + + false + true + + + sctst:client + false + true + + + + + + + diff --git a/source/test-resources/test-cmisinteger_modell-context.xml b/source/test-resources/test-cmisinteger_modell-context.xml index 3ddd89ada2..96048b38a1 100644 --- a/source/test-resources/test-cmisinteger_modell-context.xml +++ b/source/test-resources/test-cmisinteger_modell-context.xml @@ -7,6 +7,7 @@ opencmis/testcmisinteger_model.xml + opencmis/testcmis_item_model.xml tenant/exampleModel.xml