using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using Model.Entities.Base;
using Model.Entities.Files.FS_Entities;
using Model.UnitsOfWork;
namespace Model.Entities.Files.Repo
{
public class Repo_SFile : Base_FS_Repository<SFile>
{
public Repo_SFile(UOW UOW) : base(UOW, Enum_BaseDirectoryEntity.File) { }
protected override void Validation_Create(SFile elem)
{
if (string.IsNullOrEmpty(elem.Name))
throw new Repo_Exception<SFile>(this, elem, "elem name is null or empty");
if (elem.Parent == null)
throw new Repo_Exception<SFile>(this, elem, "parent is null");
if (elem.Parent.ContainsName(elem))
throw new Repo_Exception<SFile>(this, elem, "parent");
if (!File.Exists(elem.PhysicalPath))
throw new Exception();
}
protected override void Validation_Update(SFile old, SFile elem)
{
if (elem.Parent == null)
throw new Exception();
//Перемещение
if (old.Parent != elem.Parent)
{
//В данной папке уже есть элемент с таким именем
if (elem.Parent.ContainsName(elem))
throw new Exception();
try
{
File.Move(old.PhysicalPath, elem.PhysicalPath);
}
catch (Exception ex)
{
throw ex;
}
}
//if (old.Name != elem.Name)
//{
// if (elem.Parent.ContainsName(elem))
// throw new Exception();
//}
}
protected override void Validation_Delete(SFile elem)
{
File.Delete(elem.PhysicalPath);
}
public FileStream GetFile(SFile elem)
{
return new FileStream(elem.PhysicalPath, FileMode.Open);
}
}
}