Exemple #1
0
        /// <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)));
        }
Exemple #2
0
        /// <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;
                }
            }
        }
Exemple #3
0
        /// <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);
        }
Exemple #4
0
        /// <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;
                }
            }
        }
Exemple #5
0
        /// <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);
        }
Exemple #6
0
        /// <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;
        }
Exemple #7
0
        /// <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);
        }