using System; using System.IO; using System.Collections.Generic; using System.Linq; using System.Text; using System.Xml; using System.Data.SqlClient; using System.Reflection; namespace XMLExtractor { public class Image { public string id { get; set; } public string posizione { get; set; } public string descrizione { get; set; } public string byteImage { get; set; } public int idCapitolo { get; set; } public int idSezione { get; set; } public int idOrdinamento { get; set; } public int idPagina { get; set; } //public List note { get; set; } public static List getProperties() { List properties = new List(); Image objectChart = new Image(); foreach (var prop in objectChart.GetType().GetProperties()) { properties.Add(prop.Name.ToLower()); } properties.Remove("idcapitolo"); properties.Remove("idsezione"); properties.Remove("idordinamento"); properties.Remove("idpagina"); //properties.Remove("note"); return properties; } public void writeDB(SqlConnection conn) { SqlCommand cmdCount = new SqlCommand("SELECT count(*) from REP_IMM_MON_IMAGE WHERE idRep_IMM_MON_Pagina = @idRep_IMM_MON_Pagina " + "AND bytesImage = @bytesImage", conn); cmdCount.Parameters.AddWithValue("@idRep_IMM_MON_Pagina", this.idPagina); cmdCount.Parameters.AddWithValue("@bytesImage", this.byteImage); int idREP_IMM_MON_Template = Convert.ToInt32(cmdCount.ExecuteScalar()); if (idREP_IMM_MON_Template == 0) { string sqlCommand = "(idREP_IMM_MON_Image, idREP_IMM_MON_Pagina, bytesImage, isIcon, descrizione, posizione) VALUES " + "(@idREP_IMM_MON_Image, @idREP_IMM_MON_Pagina, @bytesImage, @isIcon, @descrizione, @posizione)"; SqlCommand insertTo = new SqlCommand("INSERT INTO REP_IMM_MON_Image " + sqlCommand, conn); int primaryKey = Convert.ToInt32((new SqlCommand("SELECT count(*) from REP_IMM_MON_IMAGE", conn)).ExecuteScalar()) + 1; insertTo.Parameters.AddWithValue("@idREP_IMM_MON_Image", primaryKey); insertTo.Parameters.AddWithValue("@idREP_IMM_MON_Pagina", this.idPagina); insertTo.Parameters.AddWithValue("@bytesImage", this.id); insertTo.Parameters.AddWithValue("@isIcon", getIsIcon(this.posizione)); insertTo.Parameters.AddWithValue("@descrizione", this.descrizione != null? this.descrizione : ""); insertTo.Parameters.AddWithValue("@posizione", this.posizione.Substring(0,1)); int rowsUpdatedInserted = insertTo.ExecuteNonQuery(); } } public static void writeImage(XmlNode attribute, List tagList, string nextTag, Data data) { Image image = new Image(); //bool presenzaNota = attribute.ChildNodes.Cast().Any(x => x.Name.Equals("note")); List imageAttributes = Image.getProperties(); //if (presenzaNota) //imageAttributes.Add("note"); foreach (XmlNode attr in attribute.ChildNodes) if (!tagList.Contains(attr.Name.ToString())) { PropertyInfo propertyInfo = image.GetType().GetProperty(attr.Name); propertyInfo.SetValue(image, Convert.ChangeType(attr.InnerText, propertyInfo.PropertyType), null); if (attr.Name.Contains("byteImage") && !attr.InnerText.Equals("")) LoadImage(attr.InnerText, image.id); } image.idCapitolo = ReadXML.idCapitolo; image.idSezione = ReadXML.idSezione; image.idOrdinamento = ReadXML.idOrdinamento; image.idPagina = ReadXML.idPagina; data.imageList.Add(image); ReadXML.idOrdinamento++; imageAttributes = Image.getProperties(); } public static void writeIcon(XmlNodeList node, Data data) { List attributes = new List() { "name", "position" }; foreach (XmlNode tag in node) { Image image = new Image(); foreach (XmlNode innerTag in tag.ChildNodes) { string attributeName = innerTag.Name.Equals("name") ? "id" : (innerTag.Name.Equals("position") ? "posizione" : innerTag.Name); PropertyInfo propertyInfo = image.GetType().GetProperty(attributeName); propertyInfo.SetValue(image, Convert.ChangeType( attributeName.Equals("id") ? innerTag.InnerText+".jpeg": innerTag.InnerText, propertyInfo.PropertyType), null); } image.byteImage = image.id; image.idCapitolo = ReadXML.idCapitolo; image.idSezione = ReadXML.idSezione; image.idOrdinamento = ReadXML.idOrdinamento; ; image.idPagina = ReadXML.idPagina; data.imageList.Add(image); ReadXML.idOrdinamento++; } } public static int getIsIcon (string position) { Dictionary isIcon = new Dictionary(); isIcon.Add("L", 0); isIcon.Add("R", 0); isIcon.Add("A", 0); isIcon.Add("LB", 3); isIcon.Add("RB", 4); isIcon.Add("LT", 1); isIcon.Add("RT", 2); return isIcon[position]; } public static void LoadImage(string byteImage, string nameImage) { // Convert Base64 String to byte[] byte[] imageBytes = Convert.FromBase64String(byteImage); MemoryStream ms = new MemoryStream(imageBytes, 0, imageBytes.Length); // Convert byte[] to Image ms.Write(imageBytes, 0, imageBytes.Length); System.Drawing.Image image = System.Drawing.Image.FromStream(ms, false, true); image.Save(@"C:\Users\nazio\Desktop\Immobiliare Monitoraggio\" + nameImage+".jpeg", System.Drawing.Imaging.ImageFormat.Jpeg); } } }