예제 #1
0
        /// <summary>
        /// Write <seealso cref="DataModel"/> to data storage contoller at defined random index. Then write that index to CurrentCategory index collection, and save changes of category storage controller.
        /// </summary>
        /// <param name="category">Adding data</param>
        public void AddData(DataModel data, CategoryModel toCategory)
        {
            List <int> usingIndexes = GetUsingDataIndexes();

            int maxValue = dataController.Count();
            int newIndex = random.Next(0, maxValue);

            while (usingIndexes.Contains(newIndex))
            {
                newIndex = random.Next(0, maxValue);
            }

            dataController.PasteAt(SecureManager.GetIndexOf(newIndex), data);

            List <CategoryModel> categories = categoryController.ToList();

            for (int i = 0; i < categories.Count; i++)
            {
                if (categories[i].Equals(toCategory))
                {
                    CategoryModel newCategory = new CategoryModel {
                        DataIndexes = new List <int>(toCategory.DataIndexes), Name = toCategory.Name
                    };
                    newCategory.DataIndexes.Add(newIndex);
                    categoryController.PasteAt(i, newCategory);
                    break;
                }
            }
        }
예제 #2
0
        /// <summary>
        /// Replace old data by new.
        /// </summary>
        public void ReplaceData(DataModel oldData, DataModel newData)
        {
            List <int> usingIndexes = GetUsingDataIndexes();

            foreach (var index in usingIndexes)
            {
                if (dataController.Get(SecureManager.GetIndexOf(index)).Equals(oldData))
                {
                    dataController.PasteAt(SecureManager.GetIndexOf(index), newData);
                    break;
                }
            }
        }
예제 #3
0
        /// <summary>
        /// Get list of data referenced in CurrentCategory.
        /// </summary>
        /// <returns></returns>
        public List <DataModel> GetData(CategoryModel ofCategory)
        {
            List <DataModel> dataList = new List <DataModel>();

            if (ofCategory.DataIndexes.Count == 0)
            {
                return(dataList);
            }

            dataList.Capacity = ofCategory.DataIndexes.Count;
            foreach (var dataIndex in ofCategory.DataIndexes)
            {
                dataList.Add(dataController.Get(SecureManager.GetIndexOf(dataIndex)));
            }

            return(dataList);
        }
예제 #4
0
        /// <summary>
        /// Finds which category refers to this data, and remove this reference.
        /// </summary>
        /// <param name="data">Data to remove.</param>
        public void RemoveData(DataModel data)
        {
            List <CategoryModel> categories = GetCategories();

            for (int i = 0; i < categories.Count; i++)
            {
                foreach (var dataIndex in categories[i].DataIndexes)
                {
                    if (dataController.Get(SecureManager.GetIndexOf(dataIndex)).Equals(data))
                    {
                        CategoryModel newCategory = new CategoryModel {
                            DataIndexes = new List <int>(categories[i].DataIndexes), Name = categories[i].Name
                        };
                        newCategory.DataIndexes.Remove(dataIndex);
                        categoryController.PasteAt(i, newCategory);
                        return;
                    }
                }
            }
        }
예제 #5
0
        private void SecureStorage()
        {
            var dataIndexes = GetUsingDataIndexes();

            if (dataIndexes.Count == 0)
            {
                return;
            }

            List <DataModel> data = new List <DataModel>();

            foreach (var index in dataIndexes)
            {
                data.Add(dataController.Get(SecureManager.GetIndexOf(index)));
            }

            Random        rng           = new Random();
            DataGenerator generator     = new DataGenerator();
            int           storageLength = dataController.Count();

            foreach (var item in data)
            {
                for (int i = 0; i < storageLength / (50 * data.Count); i++)
                {
                    int index;
                    do
                    {
                        index = rng.Next(storageLength);
                    } while (dataIndexes.Contains(index));

                    dataController.PasteAt(SecureManager.GetIndexOf(index),
                                           new DataModel
                    {
                        Date        = item.Date,
                        Description = item.Description,
                        Login       = item.Login,
                        Password    = generator.GenerateRandomPassword(item.Password.Length)
                    });
                }
            }
        }