using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Tango.Core; namespace Tango.DataStore.Editing { public class DataStoreItemModel : ExtendedObject, IDataStoreItem { public IDataStoreItem GlobalItem { get; set; } public DataType OriginalType { get; set; } public Object OriginalValue { get; set; } private Object _value; public Object Value { get { return _value; } set { _value = value; RaisePropertyChangedAuto(); RaisePropertyChanged(nameof(HasDifference)); RaisePropertyChanged(nameof(FormattedValue)); } } private bool _isSelected; public bool IsSelected { get { return _isSelected; } set { _isSelected = value; RaisePropertyChangedAuto(); } } public bool HasDifference { get { if (OriginalType != Type) { return true; } if (OriginalType == DataType.Bytes && Type == DataType.Bytes) { if (OriginalValue != null && Value != null) { return !Enumerable.SequenceEqual(OriginalValue as byte[], Value as byte[]); } } if (Value == null && OriginalValue == null) return false; return !OriginalValue.ToStringSafe().Equals(Value.ToStringSafe()) || (IsGlobal && GlobalItem.Value != Value); } } public String FormattedValue { get { var value = this.ToString(); if (value != null) return value.ToOneLine(); return null; } } public string Guid { get; set; } public string Key { get; set; } private DataType _type; public DataType Type { get { return _type; } set { _type = value; RaisePropertyChangedAuto(); } } private DateTime _date; public DateTime Date { get { return _date; } set { _date = value; RaisePropertyChangedAuto(); } } public bool IsSynchronized { get; set; } public bool ExistsOnMachine { get; set; } private bool _isGlobal; public bool IsGlobal { get { return _isGlobal; } set { _isGlobal = value; RaisePropertyChangedAuto(); } } private bool _isDeleted; public bool IsDeleted { get { return _isDeleted; } set { _isDeleted = value; RaisePropertyChangedAuto(); } } public static DataStoreItemModel FromLocalDataStoreItem(IDataStoreItem local, IDataStoreItem globalItem) { DataStoreItemModel model = new DataStoreItemModel(); model.OriginalValue = local.Value; model.Value = local.Value; model.Guid = local.Guid; model.Key = local.Key; model.OriginalType = local.Type; model.Type = local.Type; model.Date = local.Date; model.IsGlobal = false; model.IsSynchronized = local.IsSynchronized; model.GlobalItem = globalItem; return model; } public static DataStoreItemModel FromGlobalDataStoreItem(IDataStoreItem global) { DataStoreItemModel model = new DataStoreItemModel(); model.GlobalItem = global; model.Guid = global.Guid; model.Key = global.Key; model.Type = global.Type; model.OriginalType = global.Type; model.Date = global.Date; model.IsGlobal = true; model.IsSynchronized = global.IsSynchronized; return model; } public override string ToString() { if (this.Value != null) { return DataStoreHelper.FormatDataStoreItem(this); } else { return null; } } } }