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)
{