示例#1
0
        public override void Deserialize(JObject json, int vercode)
        {
            if (json == null)
            {
                return;
            }
            syncVersion   = new SyncVersion(JsonHelper.Get <JObject>(json, "syncVersion"), vercode);
            head          = JsonHelper.GetFloat(json, "head");
            neck          = JsonHelper.GetFloat(json, "neck");
            shoulderWidth = JsonHelper.GetFloat(json, "shoulderWidth");
            body          = JsonHelper.GetFloat(json, "body");

            hipWidth = JsonHelper.GetFloat(json, "hipWidth");
            foreArm  = JsonHelper.GetFloat(json, "foreArm");
            upperArm = JsonHelper.GetFloat(json, "upperArm");
            palm     = JsonHelper.GetFloat(json, "palm");

            upperLeg   = JsonHelper.GetFloat(json, "upperLeg");
            lowerLeg   = JsonHelper.GetFloat(json, "lowerLeg");
            heelHeight = JsonHelper.GetFloat(json, "heelHeight");
            footLength = JsonHelper.GetFloat(json, "footLength");

            boydHeight = JsonHelper.GetFloat(json, "boydHeight");

            bodyHeightSkeleton    = JsonHelper.GetFloat(json, "bodyHeightSkeleton");
            bodySwingspanSkeleton = JsonHelper.GetFloat(json, "bodySwingspanSkeleton");
        }
示例#2
0
 public ItemChangeMetadata(SyncId itemId, ChangeKind changeKind, SyncVersion creationVersion, SyncVersion changeVersion)
 {
     ItemId          = itemId;
     ChangeKind      = changeKind;
     CreationVersion = creationVersion;
     ChangeVersion   = changeVersion;
 }
示例#3
0
        private static SyncItem LoadItem(XmlDocument document)
        {
            SyncItem loadedItem = new SyncItem();

            XmlNode itemNode = document.DocumentElement;

            loadedItem.ID           = XmlUtil.GetAttribute("id", itemNode);
            loadedItem.Name         = XmlUtil.GetAttribute("name", itemNode);
            loadedItem.ParentID     = XmlUtil.GetAttribute("parentid", itemNode);
            loadedItem.TemplateID   = XmlUtil.GetAttribute("tid", itemNode);
            loadedItem.MasterID     = XmlUtil.GetAttribute("mid", itemNode);
            loadedItem.BranchId     = XmlUtil.GetAttribute("bid", itemNode);
            loadedItem.TemplateName = XmlUtil.GetAttribute("template", itemNode);

            SyncVersion loadedVersion = loadedItem.AddVersion(
                XmlUtil.GetAttribute("language", itemNode),
                XmlUtil.GetAttribute("version", itemNode),
                string.Empty);

            foreach (XmlNode node in itemNode.SelectNodes("fields/field"))
            {
                XmlNode content = node.SelectSingleNode("content");
                loadedVersion.AddField(
                    XmlUtil.GetAttribute("tfid", node),
                    XmlUtil.GetAttribute("key", node),
                    XmlUtil.GetAttribute("key", node),
                    content != null ? XmlUtil.GetValue(content) : null,
                    content != null);
            }
            return(loadedItem);
        }
        private static SyncVersion ReadVersion(Tokenizer reader)
        {
            SyncVersion syncVersion = new SyncVersion();
            SyncVersion result;

            try
            {
                Dictionary <string, string> dictionary = ReadHeaders(reader);
                syncVersion.Language = dictionary["language"];
                syncVersion.Version  = dictionary["version"];
                syncVersion.Revision = dictionary["revision"];
                reader.NextLine();
                while (reader.Line == "----field----")
                {
                    SyncField syncField = SyncField.ReadField(reader);
                    if (syncField != null)
                    {
                        syncVersion.Fields.Add(syncField);
                    }
                }
                result = syncVersion;
            }
            catch (Exception innerException)
            {
                throw new Exception(string.Format("Failed to load version {0} for language {1}", syncVersion.Version, syncVersion.Language), innerException);
            }
            return(result);
        }
示例#5
0
        private static void GetPendingChanges()
        {
            if (!PendingChanges.Any())
            {
                return;
            }

            var changeSet = PendingChanges.Peek();

            if (changeSet != null)
            {
                var doc = SyncVersion.GetDocumentTypeByCod(changeSet);

                // show Progress
                var percent = Convert.ToInt32(((double)index++ / (double)changesetsCount) * 100);

                ShowProgress(string.Format("{0}% {1}", percent, doc.DocumentName));

                if (doc != null)
                {
                    DoSync(doc, changeSet);
                    PendingChanges.Pop();
                }
                else
                {
                    //TODO handle null Documents locally.
                    PendingChanges.Pop();
                }
            }

            if (PendingChanges.Any())
            {
                GetPendingChanges();
            }
        }
示例#6
0
        public static SyncVersion SetFieldValue(this SyncVersion syncVersion, IFieldInfo fieldInfo, string value)
        {
            SyncField field      = syncVersion.Fields.FirstOrDefault(f => f.FieldID == fieldInfo.FieldId);
            var       fieldIndex = syncVersion.Fields.IndexOf(field);

            syncVersion.Fields[fieldIndex].FieldValue = value;
            return(syncVersion);
        }
        public SyncItem UpdateStatistics(SyncItem syncItem)
        {
            SyncVersion versionToUpdate = GetVersionToUpdate(syncItem);
            int         index           = syncItem.Versions.IndexOf(versionToUpdate);
            SyncVersion syncVersion     = syncItem.Versions[index];

            syncVersion.SetFieldValue(StatisticsTemplateFields.Updated, DateUtil.IsoNowWithTicks);
            syncVersion.SetFieldValue(StatisticsTemplateFields.UpdatedBy, _config.CurrentUser);
            return(syncItem);
        }
示例#8
0
        /// <summary>
        /// SyncVersion to string.
        /// </summary>
        /// <param name="version">The version.</param>
        /// <returns></returns>
        private static string SyncVersion2String(SyncVersion version)
        {
            string retVal = null;

            if (version != null)
            {
                retVal = version.ReplicaKey.ToString() + "." + version.TickCount;
            }

            return(retVal);
        }
示例#9
0
        public override void Deserialize(JObject json, int vercode)
        {
            if (json == null)
            {
                return;
            }
            syncVersion = new SyncVersion(JsonHelper.Get <JObject>(json, "syncVersion"), vercode);

            userBaseInfo = new UserBaseInfo(JsonHelper.Get <JObject>(json, "userBaseInfo"), vercode);

            bodyInfo = new BodyInfo(JsonHelper.Get <JObject>(json, "bodyInfo"), vercode);
        }
示例#10
0
 public static void SerializeVersion(TextWriter writer, SyncVersion syncVersion)
 {
     WriteSplitter("version", writer);
     WriteHeader("language", syncVersion.Language, writer);
     WriteHeader("version", syncVersion.Version, writer);
     WriteHeader("revision", syncVersion.Revision, writer);
     writer.WriteLine();
     foreach (SyncField current in syncVersion.Fields)
     {
         SerializeField(writer, current);
     }
 }
        /// <summary>
        ///     Creates a new version for a content item in a particular language.
        /// </summary>
        /// <param name="itemDefinition">Used to identify the particular item</param>
        /// <param name="baseVersion">The version to copy off of</param>
        /// <param name="context"></param>
        /// <returns></returns>
        public override int AddVersion(ItemDefinition itemDefinition, VersionUri baseVersion, CallContext context)
        {
            if (!ItemsById.ContainsKey(itemDefinition.ID))
            {
                return(-1);
            }
            SyncItem current = ItemsById[itemDefinition.ID];

            int num = -1;

            Language baseVersionLanguage = baseVersion.Language;

            if (Language.Invariant.Equals(baseVersionLanguage))
            {
                baseVersionLanguage = LanguageManager.DefaultLanguage;
            }

            if (baseVersion.Version != null && baseVersion.Version.Number > 0)
            {
                // copy version
                SyncVersion matchingVersion = (current.Versions ?? new List <SyncVersion>())
                                              .OrderByDescending(vr => int.Parse(vr.Version))
                                              .FirstOrDefault(vr => vr.Language.Equals(baseVersionLanguage.Name));

                int?maxVersionNumber = matchingVersion != null?int.Parse(matchingVersion.Version) : null as int?;

                num = maxVersionNumber.HasValue && maxVersionNumber > 0 ? maxVersionNumber.Value + 1 : -1;

                if (num > 0)
                {
                    SyncVersion newVersion = current.AddVersion(matchingVersion.Language, num.ToString(),
                                                                matchingVersion.Revision);

                    IList <SyncField> currentFieldValues = matchingVersion.Fields;

                    foreach (SyncField fieldValue in currentFieldValues)
                    {
                        newVersion.AddField(fieldValue.FieldID, fieldValue.FieldName, fieldValue.FieldKey,
                                            fieldValue.FieldValue, true);
                    }
                }
            }
            if (num == -1)
            {
                num = 1;

                // add blank version
                current.AddVersion(baseVersionLanguage.Name, num.ToString(), Guid.NewGuid().ToString());
            }

            return(num);
        }
示例#12
0
        protected override void UpdateMetadataStoreWithLocalChanges()
        {
            SyncVersion newVersion = new SyncVersion(0, _metaData.GetNextTickCount());

            _metaData.DeleteDetector.MarkAllItemsUnreported();
            foreach (SyncTransferData data in _localItems)
            {
                //Look up an item's metadata by its ID...
                ItemMetadata item = _metaData.FindItemMetadataByUniqueIndexedField(URI_COLUMNNAME, data.Uri);

                if (item == null)
                {
                    //New item, must have been created since that last time the metadata was updated.
                    //Create the item metadata required for sync (giving it a SyncID and a version, defined to be a DWORD and a ULONGLONG
                    //For creates, simply provide the relative replica ID (0) and the tick count for the provider (ever increasing)
                    SyncGlobalId globalId = new SyncGlobalId(0, Guid.NewGuid());
                    item = _metaData.CreateItemMetadata(new SyncId(globalId), newVersion);
                    item.ChangeVersion = newVersion;
                    item.SetCustomField(URI_COLUMNNAME, data.Uri);
                    SaveItemMetadata(item);
                    //Increment sync item counter need for reporting progress info
                    base.RemainingSessionWorkEstimate++;
                }
                else
                {
                    if (data.LastModified > item.GetUInt64Field(TIMESTAMP_COLUMNNAME))                     // the item has changed since the last sync operation.
                    {
                        //Changed Item, this item has changed since the last time the metadata was updated.
                        //Assign a new version by simply stating "who" modified this item (0 = local/me) and "when" (tick count for the store)
                        item.ChangeVersion = newVersion;
                        SaveItemMetadata(item);
                        //Increment sync item counter need for reporting progress info
                        base.RemainingSessionWorkEstimate++;
                    }
                    else
                    {
                        //Unchanged item, nothing has changes so just mark it as live so that the metadata knows it has not been deleted.
                        _metaData.DeleteDetector.ReportLiveItemById(item.GlobalId);
                    }
                }
            }

            //Now go back through the items that are no longer in the store and mark them as deleted in the metadata.
            //This sets the item as a tombstone.
            foreach (ItemMetadata item in _metaData.DeleteDetector.FindUnreportedItems())
            {
                item.MarkAsDeleted(newVersion);
                SaveItemMetadata(item);
            }
        }
        private SyncVersion GetVersionToUpdate(SyncItem syncItem)
        {
            SyncVersion versionToUpdate = syncItem.Versions.FirstOrDefault(v => _config.DefaultVersion.Equals(v));

            if (versionToUpdate != null)
            {
                versionToUpdate = syncItem.Versions.FirstOrDefault(v => v.Language == _config.DefaultVersion.Language);
                if (versionToUpdate != null)
                {
                    versionToUpdate = syncItem.Versions.FirstOrDefault();
                }
            }
            return(versionToUpdate);
        }
示例#14
0
        void UpdateMetadataStoreWithLocalChanges(IEnumerable<MegaNodeHelper> nodes)
        {
            SyncVersion newVersion = new SyncVersion(0, _metadata.GetNextTickCount());

            _metadata.DeleteDetector.MarkAllItemsUnreported();
            foreach (var node in nodes)
            {
                var item = FindItemMetadataByNodeId(node.Node.Id);
                if (item == null)
                {
                    item = CreateItemMetadata(new SyncId(new SyncGlobalId(0, Guid.NewGuid())), newVersion);
                    item.ChangeVersion = newVersion;
                    SaveItemMetadata(item, node.Node.Id, node.Path);
                }
                else
                {
                    if (node.Path != item.GetStringField(PATH_COLUMNNAME)) 
                    {
                        if (node.Node.Type == MegaNodeType.Folder)
                        {
                            item.MarkAsDeleted(newVersion);
                            item.ChangeVersion = newVersion;
                            SaveItemMetadata(item);
                            var newItem = CreateItemMetadata(new SyncId(new SyncGlobalId(0, Guid.NewGuid())), newVersion);
                            newItem.ChangeVersion = newVersion;
                            SaveItemMetadata(newItem, node.Node.Id, node.Path);
                        }
                        else
                        {
                            //Changed Item, this item has changed since the last time the metadata was updated.
                            item.ChangeVersion = newVersion;
                            SaveItemMetadata(item, node.Node.Id, node.Path);
                        }
                    }
                    else
                    {
                        //Unchanged item, nothing has changes so just mark it as live so that the metadata knows it has not been deleted.
                        _metadata.DeleteDetector.ReportLiveItemById(item.GlobalId);
                    }
                }
            }

            foreach (ItemMetadata item in _metadata.DeleteDetector.FindUnreportedItems())
            {
                item.MarkAsDeleted(newVersion);
                SaveItemMetadata(item);
            }
        }
示例#15
0
        //Update the metadata store with changes that have occured on the data store since the last time it was updated.
        public void UpdateMetadataStoreWithLocalChanges()
        {
            SyncVersion newVersion = new SyncVersion(0, _metadata.GetNextTickCount());

            _metadata.DeleteDetector.MarkAllItemsUnreported();
            foreach (Guid id in _store.Ids)
            {
                ItemData     data = _store.Get(id);
                ItemMetadata item = null;

                //Look up an item's metadata by its ID...
                item = _metadata.FindItemMetadataById(new SyncId(id));
                if (null == item)
                {
                    //New item, must have been created since that last time the metadata was updated.
                    //Create the item metadata required for sync (giving it a SyncID and a version, defined to be a DWORD and a ULONGLONG
                    //For creates, simply provide the relative replica ID (0) and the tick count for the provider (ever increasing)
                    item = _metadata.CreateItemMetadata(new SyncId(id), newVersion);
                    item.ChangeVersion = newVersion;
                    SaveItemMetadata(item, data.TimeStamp);
                    _syncItemCount++;
                }
                else
                {
                    if (data.TimeStamp > item.GetUInt64Field(TIMESTAMP_COLUMNNAME)) // the item has changed since the last sync operation.
                    {
                        //Changed Item, this item has changed since the last time the metadata was updated.
                        //Assign a new version by simply stating "who" modified this item (0 = local/me) and "when" (tick count for the store)
                        item.ChangeVersion = newVersion;
                        SaveItemMetadata(item, data.TimeStamp);
                        _syncItemCount++;
                    }
                    else
                    {
                        //Unchanged item, nothing has changes so just mark it as live so that the metadata knows it has not been deleted.
                        _metadata.DeleteDetector.ReportLiveItemById(new SyncId(id));
                    }
                }
            }

            //Now go back through the items that are no longer in the store and mark them as deleted in the metadata.
            //This sets the item as a tombstone.
            foreach (ItemMetadata item in _metadata.DeleteDetector.FindUnreportedItems())
            {
                item.MarkAsDeleted(newVersion);
                SaveItemMetadata(item, 0); // set timestamp to 0 for tombstones
            }
        }
示例#16
0
        void UpdateMetadataStoreWithLocalChanges(IEnumerable <MegaNodeHelper> nodes)
        {
            SyncVersion newVersion = new SyncVersion(0, _metadata.GetNextTickCount());

            _metadata.DeleteDetector.MarkAllItemsUnreported();
            foreach (var node in nodes)
            {
                var item = FindItemMetadataByNodeId(node.Node.Id);
                if (item == null)
                {
                    item = CreateItemMetadata(new SyncId(new SyncGlobalId(0, Guid.NewGuid())), newVersion);
                    item.ChangeVersion = newVersion;
                    SaveItemMetadata(item, node.Node.Id, node.Path);
                }
                else
                {
                    if (node.Path != item.GetStringField(PATH_COLUMNNAME))
                    {
                        if (node.Node.Type == MegaNodeType.Folder)
                        {
                            item.MarkAsDeleted(newVersion);
                            item.ChangeVersion = newVersion;
                            SaveItemMetadata(item);
                            var newItem = CreateItemMetadata(new SyncId(new SyncGlobalId(0, Guid.NewGuid())), newVersion);
                            newItem.ChangeVersion = newVersion;
                            SaveItemMetadata(newItem, node.Node.Id, node.Path);
                        }
                        else
                        {
                            //Changed Item, this item has changed since the last time the metadata was updated.
                            item.ChangeVersion = newVersion;
                            SaveItemMetadata(item, node.Node.Id, node.Path);
                        }
                    }
                    else
                    {
                        //Unchanged item, nothing has changes so just mark it as live so that the metadata knows it has not been deleted.
                        _metadata.DeleteDetector.ReportLiveItemById(item.GlobalId);
                    }
                }
            }

            foreach (ItemMetadata item in _metadata.DeleteDetector.FindUnreportedItems())
            {
                item.MarkAsDeleted(newVersion);
                SaveItemMetadata(item);
            }
        }
 public SyncVersion BuildSyncVersion()
 {
     SyncVersion version = new SyncVersion
     {
         Language = DefaultVersion.Language,
         Version = DefaultVersion.Version,
         Revision = Guid.NewGuid().ToString()
     };
     string date = DateUtil.IsoNowWithTicks;
     version.AddField(StatisticsTemplateFields.Created, date);
     version.AddField(StatisticsTemplateFields.CreatedBy, CurrentUser);
     version.AddField(StatisticsTemplateFields.Revision, Guid.NewGuid().ToString());
     version.AddField(StatisticsTemplateFields.Updated, date);
     version.AddField(StatisticsTemplateFields.UpdatedBy, CurrentUser);
     return version;
 }
示例#18
0
        private void MarkAsTombstoneMetadataItem(PrimaryKeyId?eventPk)
        {
            if (eventPk == null)
            {
                throw new ArgumentNullException("eventPk");
            }
            SyncVersion  newVersion = GetNewSyncVersion();
            ItemMetadata item       = Provider.ReplicaMetadata.FindItemMetadataByUniqueIndexedField(SyncReplicaMetadata.URI_COLUMNNAME,
                                                                                                    eventPk);

            //Если метаданные для данного элемента отсутсвуют то нет необходимости создавать их и помечать как удаленные
            if (item != null)
            {
                item.MarkAsDeleted(newVersion);
                Provider.ReplicaMetadata.SaveItemMetadata(item);
            }
        }
        public SyncVersion BuildSyncVersion()
        {
            SyncVersion version = new SyncVersion
            {
                Language = DefaultVersion.Language,
                Version  = DefaultVersion.Version,
                Revision = Guid.NewGuid().ToString()
            };
            string date = DateUtil.IsoNowWithTicks;

            version.AddField(StatisticsTemplateFields.Created, date);
            version.AddField(StatisticsTemplateFields.CreatedBy, CurrentUser);
            version.AddField(StatisticsTemplateFields.Revision, Guid.NewGuid().ToString());
            version.AddField(StatisticsTemplateFields.Updated, date);
            version.AddField(StatisticsTemplateFields.UpdatedBy, CurrentUser);
            return(version);
        }
示例#20
0
        public async Task <IActionResult> Post([FromBody] SyncTodoModel syncData)
        {
            if (syncData?.SyncTodoItems == null || syncData.SyncTodoItems.Length == 0)
            {
                return(BadRequest());
            }

            var userId          = User.GetUserId();
            var latestVersionId = (await _versionRepository.SelectAsync(1, _ => _.UserId == userId, _ => _.VersionId)).FirstOrDefault()?.VersionId ?? -1;

            if (latestVersionId > 0 && latestVersionId > syncData.Version)
            {
                return(BadRequest(new { Error = "请先同步数据" }));
            }

            // TODO: 使用 redis 分布式锁,锁当前用户的操作,顺序同步

            // 处理 todoItem
            var toAddTodoItems = syncData.SyncTodoItems.Where(_ => _.Type == OperationType.Add).Select(_ => _.TodoItem).ToArray();
            var todoRepository = HttpContext.RequestServices.GetRequiredService <ITodoItemRepository>();
            await todoRepository.InsertAsync(toAddTodoItems);

            var toDeleteTodoItemIds = syncData.SyncTodoItems.Where(_ => _.Type == OperationType.Delete).Select(_ => _.TodoItem.TodoId).Distinct().ToList();
            await todoRepository.UpdateAsync(todo => toDeleteTodoItemIds.Contains(todo.TodoId), t => t.IsDeleted, true);

            var toUpdateItems = syncData.SyncTodoItems.Where(_ => _.Type == OperationType.Update).Select(_ => _.TodoItem).ToArray();

            foreach (var item in toUpdateItems)
            {
                await todoRepository.UpdateAsync(item);
            }

            var version = new SyncVersion()
            {
                SyncData = syncData.ToJson(),
                UserId   = userId,
                SyncTime = DateTime.UtcNow
            };
            await _versionRepository.InsertAsync(version);

            return(Ok(new
            {
                VersionId = version.VersionId
            }));
        }
示例#21
0
        public static SyncVersion Clone(this SyncVersion version)
        {
            Assert.ArgumentNotNull(version, "version");

            var newSyncVersion = new SyncVersion
            {
                Language = version.Language,
                Revision = version.Revision,
                Version  = version.Version
            };

            foreach (var field in version.Fields)
            {
                newSyncVersion.AddField(field.FieldID, field.FieldName, field.FieldKey, field.FieldValue, true);
            }

            return(newSyncVersion);
        }
示例#22
0
		public static SyncVersion Clone(this SyncVersion version)
		{
			Assert.ArgumentNotNull(version, "version");

			var newSyncVersion = new SyncVersion
			{
				Language = version.Language,
				Revision = version.Revision,
				Version = version.Version
			};

			foreach (var field in version.Fields)
			{
				newSyncVersion.AddField(field.FieldID, field.FieldName, field.FieldKey, field.FieldValue, true);
			}

			return newSyncVersion;
		}
示例#23
0
        /// <summary>
        /// Создает новый объект метаданных элемента, который может быть использован для добавления записи метаданных нового элемента в хранилище метаданных.
        /// </summary>
        /// <param name="globalId">The global id.</param>
        /// <param name="creationVersion">The creation version.</param>
        /// <returns></returns>
        public override ItemMetadata CreateItemMetadata(SyncId globalId, SyncVersion creationVersion)
        {
            if (globalId == null || creationVersion == null)
            {
                throw new ArgumentNullException();
            }
            if (globalId.IsVariableLength != IdFormats.ItemIdFormat.IsVariableLength ||
                globalId.RawId.Length != IdFormats.ItemIdFormat.Length)
            {
                throw new SyncIdFormatMismatchException("globalId");
            }

            ItemMetadataAdaptor retVal = ItemMetadataAdaptor.CreateInstance(globalId, ReplicaId);

            retVal.CreationVersion = creationVersion;
            retVal.ChangeVersion   = creationVersion;
            return(retVal);
        }
示例#24
0
        /// <summary>
        /// Parses the sync version  to SyncVersion object example "1.2" "1212.321".
        /// </summary>
        /// <param name="version">The version.</param>
        /// <returns></returns>
        private static SyncVersion String2SyncVersion(string version)
        {
            SyncVersion retVal = SyncVersion.UnknownVersion;

            if (!string.IsNullOrEmpty(version))
            {
                string [] parts = version.Split('.');
                try
                {
                    retVal = new SyncVersion(Convert.ToUInt32(parts[0]), Convert.ToUInt64(parts[1]));
                }
                catch
                {
                    throw new ArgumentException("invalid version");
                }
            }
            return(retVal);
        }
示例#25
0
        internal ItemMetadata CreateItemMetadata(SyncId syncId = null, SyncVersion newVersion = null)
        {
            var setChangeVersion = false;

            if (newVersion == null || syncId == null)
            {
                newVersion       = new SyncVersion(0, _metadata.GetNextTickCount());
                syncId           = new SyncId(new SyncGlobalId(0, Guid.NewGuid()));
                setChangeVersion = true;
            }
            var result = _metadata.CreateItemMetadata(syncId, newVersion);

            if (setChangeVersion)
            {
                result.ChangeVersion = newVersion;
            }
            return(result);
        }
示例#26
0
        private ItemMetadata CreateMetadataItem(PrimaryKeyId?eventPk)
        {
            if (eventPk == null)
            {
                throw new ArgumentNullException("eventPk");
            }
            SyncVersion newVersion = GetNewSyncVersion();
            //New item, must have been created since that last time the metadata was updated.
            //Create the item metadata required for sync (giving it a SyncID and a version, defined to be a DWORD and a ULONGLONG
            //For creates, simply provide the relative replica ID (0) and the tick count for the provider (ever increasing)
            SyncGlobalId globalId = new SyncGlobalId(0, Guid.NewGuid());
            ItemMetadata retVal   = Provider.ReplicaMetadata.CreateItemMetadata(new SyncId(globalId), newVersion);

            retVal.ChangeVersion = newVersion;
            //Set Uri as pk event
            retVal.SetCustomField(SyncReplicaMetadata.URI_COLUMNNAME, (Guid)eventPk.Value);
            Provider.ReplicaMetadata.SaveItemMetadata(retVal);

            return(retVal);
        }
示例#27
0
        private void ChangeVersionMetadataItem(PrimaryKeyId?eventPk)
        {
            if (eventPk == null)
            {
                throw new ArgumentNullException("eventPk");
            }
            ItemMetadata item = Provider.ReplicaMetadata.FindItemMetadataByUniqueIndexedField(SyncReplicaMetadata.URI_COLUMNNAME,
                                                                                              eventPk);

            //Если метаданные для данного элемента отсутсвуют то создаем их
            //Это может произойти когда реплика была создана при уже существующих calendar events.
            if (item == null)
            {
                CreateMetadataItem(eventPk);
            }
            else
            {
                SyncVersion newVersion = GetNewSyncVersion();
                item.ChangeVersion = newVersion;
                Provider.ReplicaMetadata.SaveItemMetadata(item);
            }
        }
示例#28
0
        /// <summary>
        /// Builds the version.
        /// </summary>
        /// <param name="item">The item.</param>
        /// <param name="version">The version.</param>
        private static void BuildVersion(SyncItem item, Item version)
        {
            SyncVersion syncVersion = item.AddVersion(version.Language.ToString(), version.Version.ToString(), version.Statistics.Revision);

            if (syncVersion == null)
            {
                return;
            }
            version.Fields.ReadAll();
            version.Fields.Sort();
            foreach (Field field in version.Fields)
            {
                if (TemplateManager.GetTemplate(version).GetField(field.ID) != null && !field.Shared)
                {
                    string fieldValue = GetFieldValue(field);
                    if (fieldValue != null)
                    {
                        syncVersion.AddField(field.ID.ToString(), field.Name, field.Key, fieldValue, true);
                    }
                }
            }
        }
        private static SyncVersion ReadVersion(Tokenizer reader)
        {
            var version = new SyncVersion();
            try
            {
                var dictionary = SerializationUtils.ReadHeaders(reader);
                version.Language = dictionary["language"];
                version.Version = dictionary["version"];
                version.Revision = dictionary["revision"];
                reader.NextLine();

                while (reader.Line == FieldLine)
                {
                    SyncField item = ReadField(reader);
                    if (item != null)
                    {
                        version.Fields.Add(item);
                    }
                }
                return version;
            }
            catch (Exception exception)
            {
                throw new Exception(string.Format("Failed to load version {0} for language {1}", version.Version, version.Language), exception);
            }
        }
示例#30
0
        //Update the metadata store with changes that have occured on the data store since the last time it was updated.
        public void UpdateMetadataStoreWithLocalChanges()
        {
            SyncVersion newVersion = new SyncVersion(0, _metadata.GetNextTickCount());

            _metadata.DeleteDetector.MarkAllItemsUnreported();
            foreach (Guid id in _store.Ids)
            {
                ItemData data = _store.Get(id);
                ItemMetadata item = null;

                //Look up an item's metadata by its ID...
                item = _metadata.FindItemMetadataById(new SyncId(id));
                if (null == item)
                {
                    //New item, must have been created since that last time the metadata was updated.
                    //Create the item metadata required for sync (giving it a SyncID and a version, defined to be a DWORD and a ULONGLONG
                    //For creates, simply provide the relative replica ID (0) and the tick count for the provider (ever increasing)
                    item = _metadata.CreateItemMetadata(new SyncId(id), newVersion);
                    item.ChangeVersion = newVersion;
                    SaveItemMetadata(item, data.TimeStamp);
                    _syncItemCount++;
                }
                else
                {
                    if (data.TimeStamp > item.GetUInt64Field(TIMESTAMP_COLUMNNAME)) // the item has changed since the last sync operation.
                    {
                        //Changed Item, this item has changed since the last time the metadata was updated.
                        //Assign a new version by simply stating "who" modified this item (0 = local/me) and "when" (tick count for the store)
                        item.ChangeVersion = newVersion;
                        SaveItemMetadata(item, data.TimeStamp);
                        _syncItemCount++;
                    }
                    else
                    {
                        //Unchanged item, nothing has changes so just mark it as live so that the metadata knows it has not been deleted.
                        _metadata.DeleteDetector.ReportLiveItemById(new SyncId(id));
                    }
                }
            }

            //Now go back through the items that are no longer in the store and mark them as deleted in the metadata.
            //This sets the item as a tombstone.
            foreach (ItemMetadata item in _metadata.DeleteDetector.FindUnreportedItems())
            {
                item.MarkAsDeleted(newVersion);
                SaveItemMetadata(item, 0); // set timestamp to 0 for tombstones
            }
        }
示例#31
0
 public BodyInfo()
 {
     syncVersion = new SyncVersion();
     boydHeight  = BodyInfoHeight;
 }
示例#32
0
        public override void Deserialize(JObject json, int vercode)
        {
            if (json == null)
            {
                return;
            }
            syncVersion = new SyncVersion(JsonHelper.Get <JObject>(json, "syncVersion"), vercode);
//			id = JsonHelper.GetString(json,"id");
            email     = JsonHelper.GetString(json, "email");
            firstName = JsonHelper.GetString(json, "firstName");
            lastName  = JsonHelper.GetString(json, "lastName");
            gender    = (GenderEnum)JsonHelper.GetInteger(json, "gender");

            firstCode  = JsonHelper.GetInteger(json, "firstCode");
            country    = JsonHelper.GetString(json, "country");
            secondCode = JsonHelper.GetInteger(json, "secondCode");
            province   = JsonHelper.GetString(json, "province");
            thirdCode  = JsonHelper.GetInteger(json, "thirdCode");
            city       = JsonHelper.GetString(json, "city");

            detailAddress = JsonHelper.GetString(json, "detailAddress");
            postCode      = JsonHelper.GetString(json, "postCode");
            phone         = JsonHelper.GetString(json, "phone");
            facebook      = JsonHelper.GetString(json, "facebook");
            twitter       = JsonHelper.GetString(json, "twitter");


            clubType       = JsonHelper.GetString(json, "clubType");
            graspClubStyle = JsonHelper.GetBoolean(json, "graspHandStyle");
            unitForm       = JsonHelper.GetBoolean(json, "unitForm");

            userType = (UserType)JsonHelper.GetInteger(json, "userType");
            coachID  = JsonHelper.GetString(json, "coachID");

            //userAgeGroup=(UserAgeGroup)JsonHelper.GetInteger(json,"userAgeGroup");
            //userHeightGroup = (UserHeightGroup)JsonHelper.GetInteger(json, "userHeightGroup");
            //userWeightGroup = (UserWeightGroup)JsonHelper.GetInteger(json, "userWeightGroup");
            //userHDCPGroup = (UserHDCPGroup)JsonHelper.GetInteger(json, "userHDCPGroup");


            userAge    = JsonHelper.GetString(json, "userAge");
            userHeight = JsonHelper.GetString(json, "userHeight");
            userWeight = JsonHelper.GetString(json, "userWeight");
            userHDCP   = JsonHelper.GetString(json, "userHDCP");



            //201505280903 ADD
            // userInfoState=(UserInfoState)JsonHelper.GetInteger(json,"userInfoState");


            userName = JsonHelper.GetString(json, "userName");
            passWord = JsonHelper.GetString(json, "passWord");


            userAgeEnum    = JsonHelper.GetInteger(json, "userAgeEnum");
            userHeightEnum = JsonHelper.GetInteger(json, "userHeightEnum");
            userWeightEnum = JsonHelper.GetInteger(json, "userWeightEnum");
            userHDCPEnum   = JsonHelper.GetInteger(json, "userHDCPEnum");

            //20160912
            isUseBioswing           = JsonHelper.GetBoolean(json, "isUseBioswing");
            PelvicPivotAxisEnum     = JsonHelper.GetInteger(json, "PelvicPivotAxisEnum");
            TrailArmActionEnum      = JsonHelper.GetInteger(json, "TrailArmActionEnum");
            PosturalReleaseEnum     = JsonHelper.GetInteger(json, "PosturalReleaseEnum");
            LeverDeliveryActionEnum = JsonHelper.GetInteger(json, "LeverDeliveryActionEnum");
            DownswingPlaneEnum      = JsonHelper.GetInteger(json, "DownswingPlaneEnum");
            HipDifferentialEnum     = JsonHelper.GetInteger(json, "HipDifferentialEnum");
        }
        /// <summary>
        /// Pastes single version from ItemDom into the item
        /// 
        /// </summary>
        /// <param name="item">The item.</param>
        /// <param name="syncVersion">The sync version.</param>
        /// <param name="ignoreMissingTemplateFields">Whether to ignore fields in the serialized item that do not exist on the Sitecore template</param>
        /// <param name="creatingNewItem">Whether the item under update is new or not (controls logging verbosity)</param>
        /// <returns>The version that was pasted</returns>
        protected virtual Item PasteSyncVersion(Item item, SyncVersion syncVersion, bool ignoreMissingTemplateFields, bool creatingNewItem)
        {
            Language language = Language.Parse(syncVersion.Language);
            var targetVersion = global::Sitecore.Data.Version.Parse(syncVersion.Version);
            Item languageItem = item.Database.GetItem(item.ID, language);
            Item languageVersionItem = languageItem.Versions[targetVersion];

            if (languageVersionItem == null)
            {
                languageVersionItem = languageItem.Versions.AddVersion();
                if (!creatingNewItem)
                    _logger.AddedNewVersion(languageVersionItem);
            }

            // ReSharper disable once SimplifyLinqExpression
            if (!languageVersionItem.Versions.GetVersionNumbers().Any(x => x.Number == languageVersionItem.Version.Number))
            {
                if (!creatingNewItem)
                    _logger.AddedNewVersion(languageVersionItem);
            }

            using (new EditContext(languageVersionItem))
            {
                languageVersionItem.RuntimeSettings.ReadOnlyStatistics = true;

                if (languageVersionItem.Versions.Count == 0)
                    languageVersionItem.Fields.ReadAll();

                foreach (Field field in languageVersionItem.Fields)
                {
                    if (!field.Shared && syncVersion.Fields.All(x => x.FieldID != field.ID.ToString()))
                    {
                        _logger.ResetFieldThatDidNotExistInSerialized(field);
                        field.Reset();
                    }
                }

                bool wasOwnerFieldParsed = false;
                foreach (SyncField field in syncVersion.Fields)
                {
                    ID result;
                    if (ID.TryParse(field.FieldID, out result) && result == FieldIDs.Owner)
                        wasOwnerFieldParsed = true;

                    PasteSyncField(languageVersionItem, field, ignoreMissingTemplateFields, creatingNewItem);
                }

                if (!wasOwnerFieldParsed)
                    languageVersionItem.Fields[FieldIDs.Owner].Reset();
            }

            ClearCaches(languageVersionItem.Database, languageVersionItem.ID);
            ResetTemplateEngineIfItemIsTemplate(languageVersionItem);

            return languageVersionItem;
        }
 public bool Equals(SyncVersion obj)
 {
     return Language == obj.Language && Version == obj.Version;
 }
 public static SyncItem AddVersion(this SyncItem syncItem, SyncVersion syncVersion)
 {
     syncItem.Versions.Add(syncVersion);
     return syncItem;
 }
示例#36
0
        /// <summary>
        /// Создает новый объект метаданных элемента, который может быть использован для добавления записи метаданных нового элемента в хранилище метаданных.
        /// </summary>
        /// <param name="globalId">The global id.</param>
        /// <param name="creationVersion">The creation version.</param>
        /// <returns></returns>
        public override ItemMetadata CreateItemMetadata(SyncId globalId, SyncVersion creationVersion)
        {
            if (globalId == null || creationVersion == null)
            {
                throw new ArgumentNullException();
            }
            if (globalId.IsVariableLength != IdFormats.ItemIdFormat.IsVariableLength
            || globalId.RawId.Length != IdFormats.ItemIdFormat.Length)
            {
                throw new SyncIdFormatMismatchException("globalId");
            }

            ItemMetadataAdaptor retVal = ItemMetadataAdaptor.CreateInstance(globalId, ReplicaId);
            retVal.CreationVersion = creationVersion;
            retVal.ChangeVersion = creationVersion;
            return retVal;
        }
示例#37
0
 public UserBaseInfo()
 {
     //id =  Utils.GenerateId();
     syncVersion = new SyncVersion();
 }
示例#38
0
 internal ItemMetadata CreateItemMetadata(SyncId syncId = null, SyncVersion newVersion = null)
 {
     var setChangeVersion = false;
     if (newVersion == null || syncId == null)
     {
         newVersion = new SyncVersion(0, _metadata.GetNextTickCount());
         syncId = new SyncId(new SyncGlobalId(0, Guid.NewGuid()));
         setChangeVersion = true;
     }
     var result = _metadata.CreateItemMetadata(syncId, newVersion);
     if (setChangeVersion) { result.ChangeVersion = newVersion; }
     return result;
 }
示例#39
0
 public static SyncVersion AddField(this SyncVersion syncItem, IFieldInfo field, string value)
 {
     syncItem.AddField(field.FieldId, field.Name, field.Key, value, true);
     return(syncItem);
 }
        private static SyncItem ReadItem(Tokenizer reader, bool assertVersion)
        {
            SyncItem syncItem = null;

            while (reader.Line != null && reader.Line.Length == 0)
            {
                reader.NextLine();
            }
            if (reader.Line == null || reader.Line != "----item----")
            {
                throw new Exception("Format error: serialized stream does not start with ----item----");
            }
            syncItem = new SyncItem();
            Dictionary <string, string> dictionary = ReadHeaders(reader);

            syncItem.ID = dictionary["id"];
            int num;

            if (assertVersion && !string.IsNullOrEmpty(dictionary["version"]) && int.TryParse(dictionary["version"], out num) && SyncItem.FormatVersion < num)
            {
                throw new Exception(string.Concat(new object[]
                {
                    "The file was generated using a newer version of Serialization. (",
                    SyncItem.FormatVersion,
                    " < ",
                    num,
                    ")"
                }));
            }
            syncItem.ItemPath = dictionary["path"];
            SyncItem result;

            try
            {
                syncItem.DatabaseName = dictionary["database"];
                syncItem.ParentID     = dictionary["parent"];
                syncItem.Name         = dictionary["name"];
                syncItem.BranchId     = dictionary["master"];
                syncItem.TemplateID   = dictionary["template"];
                syncItem.TemplateName = dictionary["templatekey"];
                reader.NextLine();
                while (reader.Line == "----field----")
                {
                    SyncField syncField = SyncField.ReadField(reader);
                    if (syncField != null)
                    {
                        syncItem.SharedFields.Add(syncField);
                    }
                }
                while (reader.Line == "----version----")
                {
                    SyncVersion syncVersion = ReadVersion(reader);
                    if (syncVersion != null)
                    {
                        syncItem.Versions.Add(syncVersion);
                    }
                }
                result = syncItem;
            }
            catch (Exception innerException)
            {
                throw new Exception("Error reading item: " + syncItem.ItemPath, innerException);
            }
            return(result);
        }