fixed AtomPub change token handling (similar to CMIS-674)

git-svn-id: https://svn.apache.org/repos/asf/chemistry/dotcmis/trunk@1576756 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/DotCMIS/binding/atompub/atompub.cs b/DotCMIS/binding/atompub/atompub.cs
index f2de6bc..96acdf1 100644
--- a/DotCMIS/binding/atompub/atompub.cs
+++ b/DotCMIS/binding/atompub/atompub.cs
@@ -495,6 +495,37 @@
 

         // ---- common methods ----

 

+        protected cmisObjectType CreateObject(IProperties properties, string changeToken, IList<string> policies)

+        {

+            cmisObjectType cmisObject = new cmisObjectType();

+            IProperties newProps = properties;

+

+            if (changeToken != null)

+            {

+                newProps = new Properties();

+                if (properties != null)

+                {

+                    foreach (IPropertyData prop in properties.PropertyList)

+                    {

+                        ((Properties)newProps).AddProperty(prop);

+                    }

+                }

+

+                if (newProps[PropertyIds.ChangeToken] == null)

+                {

+                    PropertyData changeTokenProperty = new PropertyData(PropertyType.String);

+                    changeTokenProperty.Id = PropertyIds.ChangeToken;

+                    changeTokenProperty.AddValue(changeToken);

+                    ((Properties)newProps).AddProperty(changeTokenProperty);

+                }

+            }

+

+            cmisObject.properties = Converter.Convert(newProps);

+            cmisObject.policyIds = Converter.ConvertPolicies(policies);

+

+            return cmisObject;

+        }

+

         protected cmisObjectType CreateIdObject(string objectId)

         {

             cmisObjectType cmisObject = new cmisObjectType();

@@ -1546,9 +1577,7 @@
             url.AddParameter(AtomPubConstants.ParamVersioningState, versioningState);

 

             // set up object and writer

-            cmisObjectType cmisObject = new cmisObjectType();

-            cmisObject.properties = Converter.Convert(properties);

-            cmisObject.policyIds = Converter.ConvertPolicies(policies);

+            cmisObjectType cmisObject = CreateObject(properties, null, policies);

 

             string mediaType = null;

             Stream stream = null;

@@ -1598,9 +1627,7 @@
 

 

             // set up object and writer

-            cmisObjectType cmisObject = new cmisObjectType();

-            cmisObject.properties = Converter.Convert(properties);

-            cmisObject.policyIds = Converter.ConvertPolicies(policies);

+            cmisObjectType cmisObject = CreateObject(properties, null, policies);

 

             AtomEntryWriter entryWriter = new AtomEntryWriter(cmisObject);

 

@@ -1645,9 +1672,7 @@
             UrlBuilder url = new UrlBuilder(link);

 

             // set up object and writer

-            cmisObjectType cmisObject = new cmisObjectType();

-            cmisObject.properties = Converter.Convert(properties);

-            cmisObject.policyIds = Converter.ConvertPolicies(policies);

+            cmisObjectType cmisObject = CreateObject(properties, null, policies);

 

             AtomEntryWriter entryWriter = new AtomEntryWriter(cmisObject);

 

@@ -1694,9 +1719,7 @@
 

 

             // set up object and writer

-            cmisObjectType cmisObject = new cmisObjectType();

-            cmisObject.properties = Converter.Convert(properties);

-            cmisObject.policyIds = Converter.ConvertPolicies(policies);

+            cmisObjectType cmisObject = CreateObject(properties, null, policies);

 

             AtomEntryWriter entryWriter = new AtomEntryWriter(cmisObject);

 

@@ -1832,9 +1855,7 @@
             url.AddParameter(AtomPubConstants.ParamChangeToken, changeToken);

 

             // set up object and writer

-            cmisObjectType cmisObject = new cmisObjectType();

-            cmisObject.properties = Converter.Convert(properties);

-

+            cmisObjectType cmisObject = CreateObject(properties, changeToken, null);

             AtomEntryWriter entryWriter = new AtomEntryWriter(cmisObject);

 

             // update

@@ -2283,9 +2304,7 @@
             url.AddParameter(AtomPubConstants.ParamCheckIn, "true");

 

             // set up object and writer

-            cmisObjectType cmisObject = new cmisObjectType();

-            cmisObject.properties = Converter.Convert(properties);

-            cmisObject.policyIds = Converter.ConvertPolicies(policies);

+            cmisObjectType cmisObject = CreateObject(properties, null, policies);

 

             if (cmisObject.properties == null)

             {