185 lines
9.2 KiB
C#
185 lines
9.2 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Xml;
|
|
using System.Reflection;
|
|
using System.Data.SqlClient;
|
|
|
|
namespace XMLExtractor
|
|
{
|
|
public class ChartMediaDeiPrezzi {
|
|
public string asseX { get; set; }
|
|
public string asseY { get; set; }
|
|
public string descrizione { get; set; }
|
|
public string posizione { get; set; }
|
|
public List<ValueMediaDeiPrezzi> listMediaPrezzi { get; set; }
|
|
public int idCapitolo { get; set; }
|
|
public int idSezione { get; set; }
|
|
public int idPagina { get; set; }
|
|
public int idOrdinamento { get; set; }
|
|
public List<Legenda> legenda { get; set; }
|
|
//public List<Nota> note { get; set; }
|
|
|
|
public void writeDB(SqlConnection conn)
|
|
{
|
|
|
|
string sqlCommand = "(idREP_IMM_MON_Grafico, idREP_IMM_MON_Pagina, idTipologia, descrizione, asseX, asseY, posizione, "
|
|
+ "idREP_IMM_MON_Legenda) VALUES (@idREP_IMM_MON_Grafico, @idREP_IMM_MON_Pagina, @idTipologia, @descrizione, "
|
|
+ "@asseX, @asseY, @posizione, @idREP_IMM_MON_Legenda)";
|
|
SqlCommand insertTo = new SqlCommand("INSERT INTO REP_IMM_MON_Grafici " + sqlCommand, conn);
|
|
int primaryKey = Convert.ToInt32((new SqlCommand("SELECT count(*) from REP_IMM_MON_Grafici", conn)).ExecuteScalar()) + 1;
|
|
insertTo.Parameters.AddWithValue("@idREP_IMM_MON_Grafico", primaryKey);
|
|
insertTo.Parameters.AddWithValue("@idREP_IMM_MON_Pagina", this.idPagina);
|
|
insertTo.Parameters.AddWithValue("@idTipologia", 2);
|
|
insertTo.Parameters.AddWithValue("@descrizione", this.descrizione);
|
|
insertTo.Parameters.AddWithValue("@asseX", this.asseX);
|
|
insertTo.Parameters.AddWithValue("@asseY", this.asseY);
|
|
insertTo.Parameters.AddWithValue("@posizione", this.posizione);
|
|
insertTo.Parameters.AddWithValue("@idREP_IMM_MON_Legenda", Legenda.writeDB(conn, this.legenda));
|
|
|
|
int rowsUpdatedInserted = insertTo.ExecuteNonQuery();
|
|
if (rowsUpdatedInserted != 0)
|
|
foreach(var item in this.listMediaPrezzi)
|
|
item.writeDB(conn, primaryKey);
|
|
}
|
|
|
|
public List<string> getProperties() {
|
|
List<string> properties = new List<string>();
|
|
ChartMediaDeiPrezzi objectChart = new ChartMediaDeiPrezzi();
|
|
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 static void writeChartMediaDeiPrezzi(XmlNode attribute, List<string> tagList, string nextTag, Data data)
|
|
{
|
|
ChartMediaDeiPrezzi chart = new ChartMediaDeiPrezzi();
|
|
ValueMediaDeiPrezzi chartValues = new ValueMediaDeiPrezzi();
|
|
List<Legenda> legendaList = new List<Legenda>();
|
|
List<ValueMediaDeiPrezzi> chartValuesList = new List<ValueMediaDeiPrezzi>();
|
|
List<String> chartAttributes = chart.getProperties();
|
|
PropertyInfo propertyInfo;
|
|
//bool presenzaNota = attribute.ChildNodes.Cast<XmlNode>().Any(x => x.Name.Equals("note"));
|
|
//if (presenzaNota)
|
|
//chartAttributes.Add("note");
|
|
|
|
foreach (XmlNode attr in attribute.ChildNodes)
|
|
{
|
|
//if (attr.Name.ToString().Equals("note"))
|
|
//chartAttributes.Add("note");
|
|
|
|
if (!tagList.Contains(attr.Name.ToString()))
|
|
{
|
|
if (!attr.Name.ToLower().Equals("listmediaprezzi") && !attr.Name.ToLower().Equals("legenda") /*&& !attr.Name.ToLower().Equals("note")*/)
|
|
{
|
|
propertyInfo = chart.GetType().GetProperty(attr.Name);
|
|
propertyInfo.SetValue(chart, Convert.ChangeType(attr.InnerText, propertyInfo.PropertyType), null);
|
|
chartAttributes.Remove(attr.Name.ToLower());
|
|
}
|
|
else
|
|
{
|
|
if (attr.Name.ToLower().Equals("listmediaprezzi")) {
|
|
//foreach (XmlNode listAttr in attr.ChildNodes)
|
|
chartValuesList = ValueMediaDeiPrezzi.getMediaDeiPrezzi(attr);
|
|
propertyInfo = chart.GetType().GetProperty(attr.Name);
|
|
propertyInfo.SetValue(chart, Convert.ChangeType(chartValuesList, propertyInfo.PropertyType), null);
|
|
}
|
|
else /*if (attr.Name.ToLower().Equals("legenda"))*/
|
|
{
|
|
legendaList = Legenda.getLegenda(attr);
|
|
propertyInfo = chart.GetType().GetProperty(attr.Name);
|
|
propertyInfo.SetValue(chart, Convert.ChangeType(legendaList, propertyInfo.PropertyType), null);
|
|
|
|
}
|
|
|
|
/*else
|
|
{
|
|
propertyInfo = chart.GetType().GetProperty(attr.Name);
|
|
propertyInfo.SetValue(chart, Convert.ChangeType(Nota.getNote(attr), propertyInfo.PropertyType), null);
|
|
|
|
}*/
|
|
|
|
chartAttributes.Remove(attr.Name.ToLower());
|
|
}
|
|
if (!(chartAttributes.Count > 0))
|
|
{
|
|
chart.idCapitolo = ReadXML.idCapitolo;
|
|
chart.idSezione = ReadXML.idSezione;
|
|
chart.idOrdinamento = ReadXML.idOrdinamento;
|
|
chart.idPagina = ReadXML.idPagina;
|
|
ReadXML.idOrdinamento++;
|
|
data.chartMediaDeiPrezziList.Add(chart);
|
|
chart = new ChartMediaDeiPrezzi();
|
|
chartValues = new ValueMediaDeiPrezzi();
|
|
chartAttributes = chart.getProperties();
|
|
}
|
|
}
|
|
else ReadXML.extractTag(attr, attr.Name.ToString());
|
|
}
|
|
}
|
|
|
|
public class ValueMediaDeiPrezzi
|
|
{
|
|
public string key { get; set; }
|
|
public double valMin { get; set; }
|
|
public double valMax { get; set; }
|
|
public double prezzo1 { get; set; }
|
|
public double prezzo2 { get; set; }
|
|
public string mesi { get; set; }
|
|
|
|
public void writeDB(SqlConnection conn, int primaryKey)
|
|
{
|
|
string sqlCommand = "(idREP_IMM_MON_PuntiGrafico, idREP_IMM_MON_Grafico, chiave, valMin, valMax, prezzo1, prezzo2, mesi) "
|
|
+ "VALUES (@idREP_IMM_MON_PuntiGrafico, @idREP_IMM_MON_Grafico, @chiave, @valMin, @valMax, @prezzo1, @prezzo2, @mesi) ";
|
|
|
|
|
|
SqlCommand insertTo = new SqlCommand("INSERT INTO REP_IMM_MON_PuntiGrafico " + sqlCommand, conn);
|
|
insertTo.Parameters.AddWithValue("@idREP_IMM_MON_Grafico", primaryKey);
|
|
insertTo.Parameters.AddWithValue("@idREP_IMM_MON_PuntiGrafico", Convert.ToInt32((new SqlCommand("SELECT count(*) from REP_IMM_MON_PuntiGrafico", conn)).ExecuteScalar()) + 1);
|
|
insertTo.Parameters.AddWithValue("@chiave", this.key);
|
|
insertTo.Parameters.AddWithValue("@valMin", this.valMin);
|
|
insertTo.Parameters.AddWithValue("@valMax", this.valMax);
|
|
insertTo.Parameters.AddWithValue("@prezzo1", this.prezzo1);
|
|
insertTo.Parameters.AddWithValue("@prezzo2", this.prezzo2);
|
|
insertTo.Parameters.AddWithValue("@mesi", this.mesi);
|
|
|
|
int rowsUpdatedInserted = insertTo.ExecuteNonQuery();
|
|
}
|
|
|
|
public static List<ValueMediaDeiPrezzi> getMediaDeiPrezzi(XmlNode attr)
|
|
{
|
|
ValueMediaDeiPrezzi valueMediaDeiPrezziObject = new ValueMediaDeiPrezzi();
|
|
List<ValueMediaDeiPrezzi> valueMediaDeiPrezziList = new List<ValueMediaDeiPrezzi>();
|
|
foreach (XmlNode innerAttr in attr.ChildNodes)
|
|
{
|
|
foreach (XmlNode inner in innerAttr.ChildNodes)
|
|
{
|
|
PropertyInfo propertyInfo = valueMediaDeiPrezziObject.GetType().GetProperty(inner.Name);
|
|
if (inner.Name.Equals("mesi") || inner.Name.Equals("key"))
|
|
propertyInfo.SetValue(valueMediaDeiPrezziObject, Convert.ChangeType(inner.InnerText, propertyInfo.PropertyType), null);
|
|
else
|
|
{
|
|
string valore = inner.InnerText.Replace(".", ",");
|
|
propertyInfo.SetValue(valueMediaDeiPrezziObject, Convert.ChangeType(Convert.ToDecimal(valore), propertyInfo.PropertyType), null);
|
|
|
|
}
|
|
}
|
|
valueMediaDeiPrezziList.Add(valueMediaDeiPrezziObject);
|
|
valueMediaDeiPrezziObject = new ValueMediaDeiPrezzi();
|
|
}
|
|
return valueMediaDeiPrezziList;
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|