Updates content and properties of the item to those identified by version parameter.
public WebDAVResponse UpdateToVersion(IVersion version)
{
// Create a new version and copy content and properties from IVersion passed as a parameter.
// Replace content and properties of this item.
Version ver = version as Version;
if (ver.ItemId != this.fItemId)
return new WebDAVResponse(409, "Conflict");
using (SqlConnection conn = new SqlConnection(fConnStr))
{
conn.Open();
SqlCommand cmd = conn.CreateCommand();
Version currVersion = this.VersionHistory.CurrentVersion as Version;
int newVersionNumber = currVersion.VersionNumber + 1;
// Create a new version
cmd.CommandText =
"SET @Identity = NEWID()"
+ " INSERT INTO Version"
+ " (ItemId, VersionId, VersionNumber, Name, Comment, CreatorDisplayName, ContentType, Created)"
+
" SELECT @ItemId, @Identity, @VersionNumber, Name, Comment, CreatorDisplayName, ContentType, GETUTCDATE()"
+ " FROM Item"
+ " WHERE ItemId = @ItemId";
cmd.Parameters.Add("@ItemId", SqlDbType.UniqueIdentifier).Value = this.fItemId;
cmd.Parameters.Add("@VersionNumber", SqlDbType.Int).Value = newVersionNumber;
SqlParameter idParm = cmd.Parameters.Add("@Identity", SqlDbType.UniqueIdentifier);
idParm.Direction = ParameterDirection.Output;
cmd.ExecuteNonQuery();
Guid newID = (Guid)idParm.Value;
cmd.Parameters.Clear();
// Copy properties to this item
cmd.CommandText = "DELETE FROM Property WHERE ItemID = @ItemID";
cmd.Parameters.Add("@ItemId", SqlDbType.UniqueIdentifier).Value = this.fItemId;
cmd.ExecuteNonQuery();
cmd.CommandText = "INSERT INTO Property"
+ " (ItemId, Name, Namespace, PropVal)"
+ " SELECT @ItemId, Name, Namespace, PropVal"
+ " FROM VersionProperty"
+ " WHERE VersionId = @VersionId";
cmd.Parameters.Add("@VersionId", SqlDbType.UniqueIdentifier).Value = ver.VersionId;
cmd.ExecuteNonQuery();
// Copy properties to new version
cmd.CommandText = "INSERT INTO VersionProperty"
+ " (VersionId, Name, Namespace, PropVal)"
+ " SELECT @NewVerId, Name, Namespace, PropVal"
+ " FROM VersionProperty"
+ " WHERE VersionId = @VersionId";
cmd.Parameters.Clear();
cmd.Parameters.Add("@VersionId", SqlDbType.UniqueIdentifier).Value = ver.VersionId;
cmd.Parameters.Add("@NewVerId", SqlDbType.UniqueIdentifier).Value = newID;
cmd.ExecuteNonQuery();
// Copy content to this item
File.Copy(ver.FilePath, this.fFilePath, true);
// Copy content to new version
File.Copy(ver.FilePath, this.fItemDir + "\\" + newVersionNumber);
return new OkResponse();
}
}
IVersionableItem Interface | ITHit.WebDAV.Server.DeltaV Namespace