Beispiel #1
0
        private static bool LoadModel(FileWithParam fwp)
        {
            Type             type  = typeof(clss.model.packet);
            XmlRootAttribute xRoot = new XmlRootAttribute()
            {
                ElementName = type.Name, IsNullable = true
            };
            XmlSerializer xSer = new XmlSerializer(type, xRoot);

            TextReader reader = null;

            if (!GetTextViaXmlDocument(fwp, type.Name, out reader))
            {
                return(false);
            }

            try
            {
                ILoadManager ilmngr = xSer.Deserialize(reader) as clss.model.packet;
                return(Load(ilmngr));
            }
            catch (Exception ex)
            {
                Log.write(ex.Message);
                return(false);
            }
            finally
            {
                reader.Close();
            }
        }
Beispiel #2
0
        private static bool LoadFile(FileWithParam fwp)
        {
            //проверка
            //корректности имени файла
            if (!FileCheck.CheckFileName(fwp))
            {
                return(false);
            }
            //действительности данных
            if (!FileCheck.CheckValidData(fwp))
            {
                return(false);
            }
            //корректности кодировки
            if (!FileCheck.CheckEncodingXml(fwp))
            {
                return(false);
            }
            //валидации файла
            if (!FileCheck.CheckValidXml(fwp))
            {
                return(false);
            }

            try
            {
                bool loaded = false;

                //словарь вариантов загрузок: ключ и значение (цель делегата)
                Dictionary <string, LoadDelegate> oper = new Dictionary <string, LoadDelegate>
                {
                    { "loadcategory", LoadCategory },
                    { "loadvat", LoadVat },
                    { "loadbrand", LoadBrand },
                    { "loadmodel", LoadModel },
                };

                loaded = oper.ContainsKey(fwp.MethodLoad.ToLower()) ? oper[fwp.MethodLoad.ToLower()](fwp) : LoadError(fwp);

                //switch (fwp.MethodLoad.ToLower())
                //{
                //    case "loadcategory":
                //        loaded = LoadCategory(fwp);
                //        break;
                //    case "loadvat":
                //        loaded = LoadVat(fwp);
                //        break;
                //    default:
                //        loaded = LoadError(fwp);
                //        break;
                //}

                return(loaded);
            }
            catch (Exception ex)
            {
                Log.write(ex.Message);
                return(false);
            }
        }
Beispiel #3
0
        /// <summary>
        /// Кодировка xml-документа
        /// </summary>
        public static Encoding GetEncoding(FileWithParam fwp)
        {
            try
            {
                using (var strmReader = new StreamReader(fwp.FullName))
                {
                    using (var xmlReader = XmlReader.Create(strmReader))
                    {
                        if (!xmlReader.Read())
                        {
                            xmlReader.Close();
                            strmReader.Close();
                            Log.write("Ошибка чтения XML-документа (XmlReader).");
                            return(null);
                        }

                        string   encoding = xmlReader.GetAttribute("encoding");
                        Encoding en       = Encoding.GetEncoding(encoding);
                        return(en);
                    }
                }
            }
            catch (Exception ex)
            {
                fwp.ErrorMsg = ex.Message;
                return(null);
            }
        }
Beispiel #4
0
        /// <summary>
        /// Проверка валидации файла
        /// </summary>
        public static bool CheckValidXml(FileWithParam fwp)
        {
            if (!fwp.SignValidXml)
            {
                Log.write(string.Concat("Ошибка загрузки файла.  Не найдена верна xsd-схема и метод загрузки. ", fwp.ErrorMsg ?? "").Trim());
            }

            return(fwp.SignValidXml);
        }
Beispiel #5
0
        /// <summary>
        /// Проверка действительности данных
        /// </summary>
        public static bool CheckValidData(FileWithParam fwp)
        {
            if (!fwp.SignValidData)
            {
                Log.write(string.Concat("Ошибка загрузки файла. ", fwp.ErrorMsg ?? "Недействительные данные."));
            }

            return(fwp.SignValidData);
        }
Beispiel #6
0
        /// <summary>
        /// Проверка корректности имени файла.
        /// </summary>
        public static bool CheckFileName(FileWithParam fwp)
        {
            if (!fwp.SignFileName)
            {
                Log.write("Ошибка загрузки файла. Некорректное имя файла.");
            }

            return(fwp.SignFileName);
        }
Beispiel #7
0
        /// <summary>
        /// Проверка корректности кодировки
        /// </summary>
        public static bool CheckEncodingXml(FileWithParam fwp)
        {
            string en    = fwp.Encoding == null ? "" : (fwp.Encoding.HeaderName ?? "");
            string enXml = ConfigurationManager.AppSettings["encodingXml"] ?? "";

            if (!fwp.SignEncodingXml)
            {
                Log.write(string.Format("Ошибка загрузки файла. Несоответствие кодировок в XML-документе: \"{0}\" и config: \"{1}\".", en.ToLower(), enXml.ToLower()));
            }

            return(fwp.SignEncodingXml);
        }
Beispiel #8
0
        /// <summary>
        /// Загузка TextReader с помощью XmlDocument
        /// </summary>
        private static bool GetTextViaXmlDocument(FileWithParam fwp, string xAttr, out TextReader reader)
        {
            string xmlStr = "";

            reader = null;
            try
            {
                XmlDocument  xDoc = new XmlDocument();
                StreamReader sr   = new StreamReader(fwp.FullName, Encoding.GetEncoding(fwp.Encoding.HeaderName));
                try
                {
                    xDoc.Load(sr);
                }
                catch (Exception ex)
                {
                    Log.write(ex.Message);
                    return(false);
                }
                finally
                {
                    sr.Close();
                }

                XmlNode xNode = xDoc.SelectSingleNode(xAttr);
                xmlStr = xNode.OuterXml;
            }
            catch (Exception ex)
            {
                Log.write(ex.Message);
                return(false);
            }

            if (!FileCheck.CheckXmlString(xmlStr))
            {
                return(false);
            }

            reader = new StringReader(xmlStr);
            return(true);
        }
Beispiel #9
0
        /// <summary>
        /// Загузка TextReader с помощью XmlReader
        /// </summary>
        private static bool GetTextViaXmlReader(FileWithParam fwp, string xAttr, out TextReader reader)
        {
            reader = null;
            try
            {
                using (var strmReader = new StreamReader(fwp.FullName))
                {
                    using (var xmlReader = XmlReader.Create(strmReader))
                    {
                        if (!xmlReader.Read())
                        {
                            xmlReader.Close();
                            strmReader.Close();
                            Log.write("Ошибка чтения XML-документа (XmlReader).");
                            return(false);
                        }

                        while (xmlReader.Read())
                        {
                            if (xmlReader.Name.Equals(xAttr) &&
                                xmlReader.NodeType == XmlNodeType.Element)
                            {
                                reader = new StringReader(xmlReader.ReadOuterXml());
                                return(true);
                            }
                        }
                    }
                }
                return(false);
            }
            catch (Exception ex)
            {
                Log.write(ex.Message);
                return(false);
            }
        }
Beispiel #10
0
        /// <summary>
        /// Проверка xml-документа на кодировку. Возвращаемое значение: true - успешно, false - ошибка.
        /// </summary>
        public static bool CheckEncoding(FileWithParam fwp)
        {
            try
            {
                Encoding en;
                string   encodingXml = ConfigurationManager.AppSettings["encodingXml"] ?? ""; //можно перенести в правила загрузки

                if (fwp.Encoding != null)
                {
                    en = fwp.Encoding;
                }
                else
                {
                    return(false);
                }

                return(encodingXml.ToLower() == en.HeaderName.ToLower());
            }
            catch (Exception ex)
            {
                Log.write(ex.Message);
                return(false);
            }
        }
Beispiel #11
0
 /// <summary>
 /// Ошибка загрузки файла
 /// </summary>
 private static bool LoadError(FileWithParam fwp)
 {
     Log.write("Ошибка загрузки файла. Некорректный код.");
     return(false);
 }
Beispiel #12
0
        /// <summary>
        /// Функция, возвращающая список файлов с параметрами
        /// </summary>
        /// <returns></returns>
        public static List <FileWithParam> GetFiles()
        {
            List <FileWithParam> fwps;
            List <LoadRule>      lrs;
            int cnt = 0;

            //шаблоны
            string patterndate = @"(19|20)\d{2}(0[1-9]|1[012])(0[1-9]|[12][0-9]|3[01])";
            string patternnum  = @"\d+";
            string pattern     = patterndate + "_" + patternnum;

            try
            {
                fwps = new List <FileWithParam>();

                string filePath;
                if (!DataBaseManager.GetSettingValue("filePath", out filePath))
                {
                    return(fwps);
                }

                Utils.CreateDir(filePath);

                DirectoryInfo   dir   = new DirectoryInfo(filePath);
                List <FileInfo> files = dir.GetFiles().ToList();

                if (files.Count == 0)
                {
                    return(fwps);
                }

                //правила загрузки
                lrs = Utils.GetLoadRules();

                if (lrs == null)
                {
                    Log.write("Список правил загрузок пустой!");
                    return(fwps);
                }

                if (lrs.Where(x => x.IsActive && !(x.Pattern == null || x.Pattern.Equals(""))).Count() == 0)
                {
                    Log.write("Список правил загрузок некорректен!");
                    return(fwps);
                }

                //создание директорий и запись файлов на диск по правилам загрузки
                if (!CreateDirAndFilesByRules(lrs))
                {
                    return(fwps);
                }

                //прохождение по списку файлов FileInfo
                foreach (FileInfo file in files)
                {
                    FileWithParam fwp = new FileWithParam();
                    fwp.FullName = file.FullName;
                    fwp.Name     = file.Name;

                    fwp.SignFileName    = false;
                    fwp.SignEncodingXml = false;
                    fwp.SignValidData   = false;
                    fwp.SignValidXml    = false;
                    fwp.ErrorMsg        = null;

                    cnt = 0;
                    foreach (LoadRule lr in lrs.Where(x => x.IsActive && !(x.Pattern == null || x.Pattern.Equals(""))).OrderBy(x => x.Ord))
                    {
                        if (Regex.IsMatch(fwp.Name, "^" + lr.Pattern + "$", RegexOptions.IgnoreCase))
                        {
                            cnt++;
                            if (cnt == 1) //первое совпадение в цикле
                            {
                                //корректное имя файла
                                fwp.SignFileName = true;

                                //кодировка xml-файла
                                fwp.Encoding = FileCheck.GetEncoding(fwp);
                                if (fwp.Encoding == null)
                                {
                                    fwp.SignValidData = false; //ошибка действительности данных - прекращение поиска правил
                                    break;
                                }

                                //проверка кодировки
                                fwp.SignEncodingXml = FileCheck.CheckEncoding(fwp);
                                if (!fwp.SignEncodingXml)     //Некорректная кодировка
                                {
                                    fwp.SignValidData = true; //не является ошибкой действительности данных
                                    break;
                                }
                            }

                            XmlDocument  xnldoc  = new XmlDocument();
                            StreamReader strmrdr = new StreamReader(fwp.FullName, System.Text.Encoding.GetEncoding(fwp.Encoding.HeaderName));
                            try
                            {
                                xnldoc.Load(strmrdr);
                                fwp.SignValidData = true;

                                string errMsg;
                                string pathName = lr.Specs.Where(x => x.IsMain).Select(x => x.PathName).First();
                                //валидация xml
                                if (FileCheck.CheckValidate(xnldoc, pathName, out errMsg)) //успешная валдация - правило найдено - прекращение поиска правил
                                {
                                    fwp.CodeRule     = lr.Code;
                                    fwp.MethodLoad   = lr.Method;
                                    fwp.SignValidXml = true;
                                    fwp.ErrorMsg     = null;
                                    fwp.Order        = lr.Ord;
                                    break;
                                }
                                else
                                {
                                    fwp.SignValidXml = false;
                                    fwp.ErrorMsg     = string.IsNullOrEmpty(fwp.ErrorMsg) ? string.Concat(lr.Pattern, ": ", errMsg) : string.Concat(fwp.ErrorMsg, " ", string.Concat(lr.Pattern, ": ", errMsg));
                                }
                            }
                            catch (Exception ex)
                            {
                                //действительность данных
                                fwp.SignValidData = false;
                                fwp.ErrorMsg      = ex.Message;
                                break;
                            }
                            finally
                            {
                                strmrdr.Close();
                            }
                        }
                    }

                    //шаблон: дата
                    if (fwp.SignFileName)
                    {
                        if (Regex.IsMatch(fwp.Name, patterndate, RegexOptions.IgnoreCase))
                        {
                            Match  match = Regex.Match(fwp.Name, patterndate, RegexOptions.IgnoreCase);
                            string dt    = match.Value;
                            fwp.Date = DateTime.ParseExact(dt, "yyyyMMdd", CultureInfo.InvariantCulture);
                        }
                        else
                        {
                            fwp.Date = new DateTime(2999, 12, 31);
                        }
                    }
                    else
                    {
                        fwp.Date = new DateTime(2999, 12, 31);
                    }
                    fwps.Add(fwp);
                }

                //удаление файлов с диска и директорий по правилам загрузки
                DeleteFilesAndDirByRules(lrs);

                return(fwps);
            }
            catch (Exception ex)
            {
                Log.write(ex.Message);
                return(null);
            }
        }