diff --git a/source/java/org/alfresco/opencmis/CMISConnector.java b/source/java/org/alfresco/opencmis/CMISConnector.java index b59ced16d8..5807b74e08 100644 --- a/source/java/org/alfresco/opencmis/CMISConnector.java +++ b/source/java/org/alfresco/opencmis/CMISConnector.java @@ -3427,34 +3427,27 @@ public class CMISConnector implements ApplicationContextAware, ApplicationListen } } else - { - if (value == null) - { - nodeService.removeProperty(nodeRef, propertyQName); - } - else - { - // overflow check - if(propDef.getPropertyDefinition().getPropertyType() == PropertyType.INTEGER && value instanceof BigInteger) - { - org.alfresco.service.cmr.dictionary.PropertyDefinition def = dictionaryService.getProperty(propertyQName); - QName dataDef = def.getDataType().getName(); - BigInteger bigValue = (BigInteger)value; - - if ((bigValue.compareTo(maxInt) > 0 || bigValue.compareTo(minInt) < 0 ) && dataDef.equals(DataTypeDefinition.INT)) - { - throw new CmisConstraintException("Value is out of range for property " + propertyQName.getLocalName()); - } - - if ((bigValue.compareTo(maxLong) > 0 || bigValue.compareTo(minLong) < 0 ) && dataDef.equals(DataTypeDefinition.LONG)) - { - throw new CmisConstraintException("Value is out of range for property " + propertyQName.getLocalName()); - } - } - - nodeService.setProperty(nodeRef, propertyQName, value); - } - } + { + // overflow check + if (propDef.getPropertyDefinition().getPropertyType() == PropertyType.INTEGER && value instanceof BigInteger) + { + org.alfresco.service.cmr.dictionary.PropertyDefinition def = dictionaryService.getProperty(propertyQName); + QName dataDef = def.getDataType().getName(); + BigInteger bigValue = (BigInteger) value; + + if ((bigValue.compareTo(maxInt) > 0 || bigValue.compareTo(minInt) < 0) && dataDef.equals(DataTypeDefinition.INT)) + { + throw new CmisConstraintException("Value is out of range for property " + propertyQName.getLocalName()); + } + + if ((bigValue.compareTo(maxLong) > 0 || bigValue.compareTo(minLong) < 0) && dataDef.equals(DataTypeDefinition.LONG)) + { + throw new CmisConstraintException("Value is out of range for property " + propertyQName.getLocalName()); + } + } + + nodeService.setProperty(nodeRef, propertyQName, value); + } } } diff --git a/source/test-java/org/alfresco/opencmis/CMISTest.java b/source/test-java/org/alfresco/opencmis/CMISTest.java index d67b5be8cf..f8b1f7af13 100644 --- a/source/test-java/org/alfresco/opencmis/CMISTest.java +++ b/source/test-java/org/alfresco/opencmis/CMISTest.java @@ -276,7 +276,96 @@ public class CMISTest this.factory = (AlfrescoCmisServiceFactory)ctx.getBean("CMISServiceFactory"); this.cmisConnector = (CMISConnector) ctx.getBean("CMISConnector"); } - + + /** + * Test for MNT-9203. + */ + @Test + public void testCeheckIn() + { + String repositoryId = null; + ObjectData objectData = null; + Holder objectId = null; + CallContext context = new SimpleCallContext("admin", "admin", CmisVersion.CMIS_1_0); + + final String folderName = "testfolder." + GUID.generate(); + final String docName = "testdoc.txt." + GUID.generate(); + final String customModel = "my.new.model"; + + final QName testCustomTypeQName = QName.createQName(customModel, "sop"); + final QName authorisedByQname = QName.createQName(customModel, "authorisedBy"); + AuthenticationUtil.pushAuthentication(); + AuthenticationUtil.setFullyAuthenticatedUser(AuthenticationUtil.getAdminUserName()); + try + { + final FileInfo fileInfo = transactionService.getRetryingTransactionHelper().doInTransaction(new RetryingTransactionCallback() + { + @Override + public FileInfo execute() throws Throwable + { + NodeRef companyHomeNodeRef = repositoryHelper.getCompanyHome(); + + FileInfo folderInfo = fileFolderService.create(companyHomeNodeRef, folderName, ContentModel.TYPE_FOLDER); + nodeService.setProperty(folderInfo.getNodeRef(), ContentModel.PROP_NAME, folderName); + + FileInfo fileInfo = fileFolderService.create(folderInfo.getNodeRef(), docName, testCustomTypeQName); + Map customProperties = new HashMap(); + + customProperties.put(authorisedByQname, "customPropertyString"); + customProperties.put(ContentModel.PROP_NAME, docName); + nodeService.setProperties(fileInfo.getNodeRef(), customProperties); + + return fileInfo; + } + }); + + CmisService service = factory.getService(context); + try + { + List repositories = service.getRepositoryInfos(null); + assertTrue(repositories.size() > 0); + RepositoryInfo repo = repositories.get(0); + repositoryId = repo.getId(); + objectData = service.getObjectByPath(repositoryId, "/" + folderName + "/" + docName, null, true, IncludeRelationships.NONE, null, false, true, null); + + // checkout + objectId = new Holder(objectData.getId()); + service.checkOut(repositoryId, objectId, null, new Holder(true)); + } + finally + { + service.close(); + } + + try + { + service = factory.getService(context); + + PropertyStringImpl prop = new PropertyStringImpl(); + prop.setId("my:" + authorisedByQname.toPrefixString()); + prop.setValue(null); + + Collection> propsList = new ArrayList>(); + propsList.add(prop); + + Properties properties = new PropertiesImpl(propsList); + + // checkIn on pwc + service.checkIn(repositoryId, objectId, false, properties, null, null, null, null, null, null); + } + finally + { + service.close(); + } + // check that value is null + assertTrue(nodeService.getProperty(fileInfo.getNodeRef(), authorisedByQname) == null); + } + finally + { + AuthenticationUtil.popAuthentication(); + } + } + private FileInfo createContent(final String folderName, final String docName, final boolean isRule) { final FileInfo folderInfo = transactionService.getRetryingTransactionHelper().doInTransaction(new RetryingTransactionCallback() diff --git a/source/test-resources/test-cmisinteger_modell-context.xml b/source/test-resources/test-cmisinteger_modell-context.xml index 00a5447435..3ddd89ada2 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 + tenant/exampleModel.xml