static void Main(string[] args) { var sr = new StreamReader(@"..\..\..\Data\input.txt"); var n = Convert.ToInt32(sr.ReadLine()); var installedSoft = new ASoftware[n]; ISoftwareParser parser = new JsonSoftwareParser(); var xmlObjects = new List <string>(); for (int i = 0; i < n; i++) { var line = sr.ReadLine(); var type = line.Substring(0, line.IndexOf('{') - 1); var json = line.Substring(line.IndexOf('{')); ASoftware software = null; switch (type) { case "FreeSoftware": software = parser.ParseSoftware <FreeSoftware>(json); xmlObjects.Add(XmlFiller.CreateXml <FreeSoftware>(software)); break; case "Shareware": software = parser.ParseSoftware <Shareware>(json); xmlObjects.Add(XmlFiller.CreateXml <Shareware>(software)); break; case "CommercialSoftware": software = parser.ParseSoftware <CommercialSoftware>(json); xmlObjects.Add(XmlFiller.CreateXml <CommercialSoftware>(software)); break; default: throw new FormatException($"Unknown type of Software: {type}"); } installedSoft[i] = software; } Console.WriteLine("List of XmlObjects: "); foreach (var xmlObject in xmlObjects) { Console.WriteLine(xmlObject); } Console.WriteLine(); Console.WriteLine("List of Available Software for current date: "); var availableSoft = AvailableSoftwareChecker.CheckSoftware(installedSoft); foreach (var software in availableSoft) { software.PrintInfo(); } }
/// <summary> /// Создание XML объекта из классов ASoftware /// </summary> /// <param name="software">Сериализуемый класс</param> /// <typeparam name="T">Тип програмного обеспечения</typeparam> /// <returns>Строку с XML описанием объекта</returns> public static string CreateXml <T> (ASoftware software) where T : ASoftware { var serializer = new XmlSerializer(typeof(T)); var stream = new MemoryStream(); serializer.Serialize(stream, software); stream.Position = 0; var streamReader = new StreamReader(stream); var xmlObject = streamReader.ReadToEnd(); return(xmlObject); }
public DecoratorNoLicenses(ASoftware software) : base(software) { }
public ADecorator(ASoftware software) { this.software = software; }