using System; using System.Collections.Generic; using System.Linq; using BeWo.Data.Entities; using BeWo.Service.Core; using BS.Shared.DataContracts; using Utils = BS.Shared.Core.Utils; namespace BeWo.Service.DCEntityMapper { public class VarFieldDC_VarFieldDefMapper { public List VarFieldMapToDCs(IList defs, IList values) { List result = new List(); foreach (var iDef in defs) { var dc = new VarFieldDC(); dc.ControlType = iDef.ControlType; dc.DecimalPlaces = iDef.DecimalPlaces; dc.Group = iDef.Group; dc.Label = iDef.Label; if (!string.IsNullOrEmpty(iDef.PossibleItems)) { dc.PossibleItems = iDef.PossibleItems.Split(';').ToList(); } dc.XCoordinate = iDef.XCoordinate; dc.YCoordinate = iDef.YCoordinate; dc.VarFieldDefOid = iDef.Oid.Value; dc.Height = iDef.Height; dc.Width = iDef.Width; dc.ColumnSpan = iDef.ColumnSpan; dc.RowSpan = iDef.RowSpan; if (values != null) { var value = values.SingleOrDefault(i => i.VarFieldDefOid.Equals(iDef.Oid)); if (value != null) { dc.VarFieldValueOid = value.Oid; dc.VarFieldValueVersion = value.Version; Type type = Type.GetType(value.TypeName); dc.VarFieldValue = Utils.XMLDeserializeFromString(value.SerializedValue, type); } } result.Add(dc); } return result; } public IList VarFieldMergeToEntity(IList values, List dcs, BeWoEntityBase entity) { if (dcs != null) { foreach (var idc in dcs) { var value = values.SingleOrDefault(v => idc.VarFieldDefOid.Equals(v.VarFieldDefOid)); if (value != null) { ServiceLogic.ConcurrencyCheck(idc.VarFieldValueVersion, value); } if (idc.VarFieldValue == null && value != null) { values.Remove(value); } if (idc.VarFieldValue != null) { var typeName = idc.VarFieldValue.GetType().FullName; var serializedValue = Utils.XMLSerializeToString(idc.VarFieldValue); if (value == null) { values.Add(new VarFieldValue { SerializedValue = serializedValue, TypeName = typeName, VarFieldDefOid = idc.VarFieldDefOid, ObjectOid = entity.Oid, ObjectTid = entity.Tid }); } else if (!typeName.Equals(value.TypeName) || !serializedValue.Equals(value.SerializedValue)) { value.SerializedValue = serializedValue; value.TypeName = typeName; } } } } return values; } } }