/// <summary> /// Сравнение всех свойств элемента на соответствие /// </summary> /// <param name="item">С кем сравниваем</param> /// <returns>Возвращает true, если все свойства у обоих экземпляров равны</returns> public virtual bool Equals(IManifestFileItem item) { if (item == null) { return(false); } if (item == this) { return(true); } //сначала сравниваем булевые значения //их проще сравнивать return(item.Delete == this.Delete && item.GAC == (IRegInfo)this.GAC && item.REGASM == (IRegInfo)this.REGASM && item.REGSRV32 == (IRegInfo)this.REGSRV32 && item.DoNotUpdate == this.DoNotUpdate //строчечки && (string.Compare(item.Type, this.Type, true) == 0) && (string.Compare(item.FileName, this.fileNameField, true) == 0) && (string.Compare(item.Version, this.Version, true) == 0) && (string.Compare(item.CRC, this.CRC, true) == 0) && (string.Compare(item.AddinName, this.AddinName, true) == 0) && (string.Compare(item.PublicKeyToken, this.PublicKeyToken, true) == 0) //и, в конце, массивчик && (HasEqualsFolders(item))); }
/// <summary> /// Удаление элемента из манифесте по точному соответствию /// </summary> /// <param name="item">Удаляемый элемент</param> public void RemoveItem(IManifestFileItem item) { if (item == null) { return; } if (_contentField.Count == 0) { return; } ManifestFileItem curent = null; for (int i = 0; i < _contentField.Count; i++) { curent = _contentField[i]; if (curent != null && curent.Equals(item)) { _contentField.Remove(curent); break; } } }
/// <summary> /// Добавление нового файла в манифест /// </summary> /// <param name="item">Данные о файле</param> /// <exception cref="NullReferenceException">При передаче пустой ссылки</exception> public void AddItem(IManifestFileItem item) { if (item == null) { throw new NullReferenceException("Попытка добавления информации о файле в манифест по пустой ссылке"); } ManifestFileItem newItem = new ManifestFileItem(); newItem.UpdateBy(item); AddItem(newItem); }
/// <summary> /// Замена параметров для первого файла с таким же именем в манифесте /// </summary> /// <param name="item">Файл с новыми параметрами</param> public void UpdateItemBy(IManifestFileItem item) { if (item == null || item.FileName != null) { return; } foreach (var i in _contentField) { if (item.FileName.Equals(i.FileName)) { i.UpdateBy(item); break; } } }
/// <summary> /// Проверка наличия элемента с такими же значениями в Манифесте /// </summary> /// <param name="item">Проверяемый элемент</param> /// <returns>Возвращает флаг наличия в манифесте элемента с такими же значениями</returns> public bool Contains(IManifestFileItem item) { if (item == null) { return(false); } foreach (var curItem in _contentField) { if (item.Equals(curItem)) { return(true); } } return(false); }
/// <summary> /// Обновление текущего экземпляра значениями из переданного (принимаются только экземпляры своего типа) /// </summary> /// <param name="newItemValues">Новые значения для текущего экземпляра</param> public virtual void UpdateBy(IManifestFileItem newItemValues) { if (newItemValues == null) { return; } this.FileName = newItemValues.FileName; this.Folders = newItemValues.Folders; this.Version = newItemValues.Version; this.CRC = newItemValues.CRC; this.Type = newItemValues.Type; this.GAC = new RegInfo(newItemValues.GAC); this.REGASM = new RegInfo(newItemValues.REGASM); this.REGSRV32 = new RegInfo(newItemValues.REGSRV32); this.PublicKeyToken = newItemValues.PublicKeyToken; this.Delete = newItemValues.Delete; this.AddinName = newItemValues.AddinName; this.DoNotUpdate = newItemValues.DoNotUpdate; }
/// <summary> /// Проверка на соответствие папок в элементах Манифеста /// </summary> /// <param name="item">Сравниваемый элемент</param> /// <returns>Возвращает флаг соответствия папок в Манифестах</returns> public bool HasEqualsFolders(IManifestFileItem item) { if (item == null) { return(false); } if (item.Folders == null || this.Folders == null) { return(false); } if (item.Folders.Length == this.Folders.Length) { //приводим все имена папок в один регистр var eThisFolders = new List <string>(); foreach (var folder in this.Folders) { eThisFolders.Add(folder.ToLower()); } var eItemFolders = new List <string>(); foreach (var folder in item.Folders) { eItemFolders.Add(folder.ToLower()); } foreach (var thisFolder in this.Folders) { if (!eItemFolders.Contains(thisFolder)) { return(false); } } return(true); } return(false); }