554 lines
26 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 Table
{
public int idCapitolo { get; set; }
public int idSezione { get; set; }
public int idOrdinamento { get; set; }
public int idPagina { get; set; }
public string posizione { get; set; }
}
public class TableEvoluzione: Table
{
public List<string> columns { get; set; }
public List<Rows> rows { get; set; }
public List<Nota> note { get; set; }
// NEW
public string descrizione { get; set; }
public List<Legenda> legenda { get; set; }
public int writeColumns(SqlConnection conn)
{
string sqlCommand = "(idREP_IMM_MON_Column, column1, column2, column3, column4, column5) "
+ "VALUES (@idREP_IMM_MON_Column, @column1, @column2, @column3, @column4, @column5) ";
int primarykey = Convert.ToInt32((new SqlCommand("SELECT count(*) from REP_IMM_MON_Columns", conn)).ExecuteScalar()) + 1;
SqlCommand insertTo = new SqlCommand("INSERT INTO REP_IMM_MON_Columns " + sqlCommand, conn);
insertTo.Parameters.AddWithValue("@idREP_IMM_MON_Column", primarykey);
for (int i = 1; i <= 5; i++ )
if (i <= this.columns.Count)
insertTo.Parameters.AddWithValue("@column" + i,this.columns[i - 1]);
else
insertTo.Parameters.AddWithValue("@column" + i, DBNull.Value);
int rowsUpdatedInserted = insertTo.ExecuteNonQuery();
if (rowsUpdatedInserted != 0)
return primarykey;
return 0;
}
public void writeDB(SqlConnection conn)
{
string sqlCommand = "(idREP_IMM_MON_TableEvoluzione, idREP_IMM_MON_Pagina, idREP_IMM_MON_Column, descrizione, posizione, nota1, nota2, nota3, idREP_IMM_MON_Legenda) "
+ "VALUES (@idREP_IMM_MON_TableEvoluzione, @idREP_IMM_MON_Pagina, @idREP_IMM_MON_Column, @descrizione, @posizione, @nota1, @nota2, @nota3, @idREP_IMM_MON_Legenda) ";
int primaryKey = Convert.ToInt32((new SqlCommand("SELECT count(*) from REP_IMM_MON_TableEvoluzione", conn)).ExecuteScalar()) + 1;
int idColumn = writeColumns(conn);
SqlCommand insertTo = new SqlCommand("INSERT INTO REP_IMM_MON_TableEvoluzione " + sqlCommand, conn);
insertTo.Parameters.AddWithValue("@idREP_IMM_MON_TableEvoluzione", primaryKey);
insertTo.Parameters.AddWithValue("@idREP_IMM_MON_Pagina", this.idPagina);
insertTo.Parameters.AddWithValue("@idREP_IMM_MON_Column", idColumn);
insertTo.Parameters.AddWithValue("@descrizione", this.descrizione);
insertTo.Parameters.AddWithValue("@posizione", this.posizione);
if(Legenda.writeDB(conn, this.legenda) != 0 )
insertTo.Parameters.AddWithValue("@idREP_IMM_MON_Legenda", Legenda.writeDB(conn, this.legenda));
else
insertTo.Parameters.AddWithValue("@idREP_IMM_MON_Legenda", DBNull.Value);
for (int i = 1; i <= 3; i++)
{
if (this.note != null && i <= this.note.Count)
insertTo.Parameters.AddWithValue("@nota" + i, note[i-1].valore);
else
insertTo.Parameters.AddWithValue("@nota" + i, DBNull.Value);
}
int rowsUpdatedInserted = insertTo.ExecuteNonQuery();
if (rowsUpdatedInserted != 0)
foreach(var row in this.rows)
row.writeDB(conn, idColumn);
}
public List<string> getProperties()
{
List<string> properties = new List<string>();
TableEvoluzione objectChart = new TableEvoluzione();
foreach (var prop in objectChart.GetType().GetProperties())
{
properties.Add(prop.Name.ToLower());
}
properties.Remove("idcapitolo");
properties.Remove("idsezione");
properties.Remove("idordinamento");
return properties;
}
public static void writeTableEvoluzione(XmlNode attribute, List<string> tagList, string nextTag, Data data)
{
List<string> stringValueList = new List<string>();
List<TableEvoluzione.Rows> rowsList = new List<TableEvoluzione.Rows>();
List<Nota> noteList = new List<Nota>();
TableEvoluzione tableEvoluzione = new TableEvoluzione();
foreach (XmlNode attr in attribute.ChildNodes)
if (!tagList.Contains(attr.Name.ToString()))
{
PropertyInfo propertyInfo = tableEvoluzione.GetType().GetProperty(attr.Name);
if (propertyInfo.PropertyType.Name.Equals("String"))
propertyInfo.SetValue(tableEvoluzione, Convert.ChangeType(attr.InnerText, propertyInfo.PropertyType), null);
else if(attr.Name.Equals("legenda"))
propertyInfo.SetValue(tableEvoluzione, Convert.ChangeType(Legenda.getLegenda(attr), propertyInfo.PropertyType), null);
else
{
foreach (XmlNode innerAttr in attr.ChildNodes)
{
switch (innerAttr.Name)
{
case "column":
stringValueList.Add(innerAttr.InnerXml.ToString());
break;
case "row":
foreach (XmlNode column in innerAttr.ChildNodes)
{
TableEvoluzione.Rows rows = new TableEvoluzione.Rows();
stringValueList = new List<string>();
foreach (XmlNode _row in column)
stringValueList.Add(_row.InnerText);
rows.row = stringValueList;
rowsList.Add(rows);
}
break;
case "nota":
Nota nota = new Nota();
foreach (XmlNode row in innerAttr.ChildNodes)
{
PropertyInfo propertyInfoNota = nota.GetType().GetProperty(row.Name);
propertyInfoNota.SetValue(nota, Convert.ChangeType(row.InnerXml.ToString(), propertyInfoNota.PropertyType), null);
}
noteList.Add(nota);
break;
}
}
switch (attr.Name)
{
case "columns":
propertyInfo.SetValue(tableEvoluzione, Convert.ChangeType(stringValueList, propertyInfo.PropertyType), null);
break;
case "rows":
propertyInfo.SetValue(tableEvoluzione, Convert.ChangeType(rowsList, propertyInfo.PropertyType), null);
break;
case "note":
propertyInfo.SetValue(tableEvoluzione, Convert.ChangeType(noteList, propertyInfo.PropertyType), null);
break;
}
stringValueList = new List<string>();
}
}
tableEvoluzione.idCapitolo = ReadXML.idCapitolo;
tableEvoluzione.idSezione = ReadXML.idSezione;
tableEvoluzione.idOrdinamento = ReadXML.idOrdinamento;
tableEvoluzione.idPagina = ReadXML.idPagina;
ReadXML.idOrdinamento++;
data.tableEvoluzioneList.Add(tableEvoluzione);
}
public class Rows {
public List<string> row { get; set; }
public void writeDB(SqlConnection conn)
{
string sqlCommand = "(idREP_IMM_MON_Row, row1, row2, row3, row4, row5) VALUES "
+ "(@idREP_IMM_MON_Row, @row1, @row2, @row3, @row4, @row5)";
SqlCommand insertTo = new SqlCommand("INSERT INTO REP_IMM_MON_Rows " + sqlCommand, conn);
int primaryKey = Convert.ToInt32((new SqlCommand("SELECT count(*) from REP_IMM_MON_Rows", conn)).ExecuteScalar()) + 1;
insertTo.Parameters.AddWithValue("@idREP_IMM_MON_Row", primaryKey);
for (int i = 1; i <= 5; i++)
{
if (this.row != null && (i-1) < this.row.Count)
insertTo.Parameters.AddWithValue("@row" + i, row[i-1]);
else
insertTo.Parameters.AddWithValue("@row" + i, DBNull.Value);
}
int rowsUpdatedInserted = insertTo.ExecuteNonQuery();
}
public void writeDB(SqlConnection conn, int idColumn)
{
string sqlCommand = "(idREP_IMM_MON_Row, idREP_IMM_MON_Column, row1, row2, row3, row4, row5) VALUES "
+ "(@idREP_IMM_MON_Row, @idColumn, @row1, @row2, @row3, @row4, @row5)";
SqlCommand insertTo = new SqlCommand("INSERT INTO REP_IMM_MON_Rows " + sqlCommand, conn);
int primaryKey = Convert.ToInt32((new SqlCommand("SELECT count(*) from REP_IMM_MON_Rows", conn)).ExecuteScalar()) + 1;
insertTo.Parameters.AddWithValue("@idREP_IMM_MON_Row", primaryKey);
insertTo.Parameters.AddWithValue("@idColumn", idColumn);
for (int i = 1; i <= 5; i++)
{
if (this.row != null && (i - 1) < this.row.Count)
insertTo.Parameters.AddWithValue("@row" + i, row[i - 1]);
else
insertTo.Parameters.AddWithValue("@row" + i, DBNull.Value);
}
int rowsUpdatedInserted = insertTo.ExecuteNonQuery();
}
}
}
public class TableImposta : Table
{
public List<Rows> row { get; set; }
public int writeColumns(SqlConnection conn, List<string> columns)
{
string sqlCommand = "(idREP_IMM_MON_Column, column1, column2, column3, column4, column5) "
+ "VALUES (@idREP_IMM_MON_Column, @column1, @column2, @column3, @column4, @column5) ";
int primarykey = Convert.ToInt32((new SqlCommand("SELECT count(*) from REP_IMM_MON_Columns", conn)).ExecuteScalar()) + 1;
SqlCommand insertTo = new SqlCommand("INSERT INTO REP_IMM_MON_Columns " + sqlCommand, conn);
insertTo.Parameters.AddWithValue("@idREP_IMM_MON_Column", primarykey);
for (int i = 1; i <= 5; i++)
if (i <= columns.Count)
insertTo.Parameters.AddWithValue("@column" + i, columns[i - 1]);
else
insertTo.Parameters.AddWithValue("@column" + i, DBNull.Value);
int rowsUpdatedInserted = insertTo.ExecuteNonQuery();
if (rowsUpdatedInserted != 0)
return primarykey;
return 0;
}
public void writeDB(SqlConnection conn)
{
List<string> columns = new List<string>();
columns.Add("Imposta");
columns.Add("Acconto (o versamento intera imposta)");
columns.Add("Saldo");
string sqlCommand = "(idREP_IMM_MON_TableImposta, idREP_IMM_MON_Pagina, idREP_IMM_MON_Column) "
+ "VALUES (@idREP_IMM_MON_TableImposta, @idREP_IMM_MON_Pagina, @idREP_IMM_MON_Column) ";
int primarykey = Convert.ToInt32((new SqlCommand("SELECT count(*) from REP_IMM_MON_TableImposta", conn)).ExecuteScalar()) + 1;
int idColumn = writeColumns(conn, columns);
SqlCommand insertTo = new SqlCommand("INSERT INTO REP_IMM_MON_TableImposta " + sqlCommand, conn);
insertTo.Parameters.AddWithValue("@idREP_IMM_MON_TableImposta", primarykey);
insertTo.Parameters.AddWithValue("@idREP_IMM_MON_Pagina", this.idPagina);
insertTo.Parameters.AddWithValue("@idREP_IMM_MON_Column", idColumn);
int rowsUpdatedInserted = insertTo.ExecuteNonQuery();
if (rowsUpdatedInserted != 0)
foreach (var item in this.row)
item.writeDB(conn, idColumn);
}
public List<string> getProperties()
{
List<string> properties = new List<string>();
TableImposta objectChart = new TableImposta();
foreach (var prop in objectChart.GetType().GetProperties())
{
properties.Add(prop.Name.ToLower());
}
properties.Remove("idcapitolo");
properties.Remove("idsezione");
properties.Remove("idordinamento");
properties.Remove("idpagina");
return properties;
}
public class Rows
{
public List<string> row { get; set; }
public void writeDB(SqlConnection conn, int idColumn)
{
string sqlCommand = "(idREP_IMM_MON_Row, idREP_IMM_MON_Column, row1, row2, row3, row4, row5) VALUES "
+ "(@idREP_IMM_MON_Row, @idColumn, @row1, @row2, @row3, @row4, @row5)";
SqlCommand insertTo = new SqlCommand("INSERT INTO REP_IMM_MON_Rows " + sqlCommand, conn);
int primaryKey = Convert.ToInt32((new SqlCommand("SELECT count(*) from REP_IMM_MON_Rows", conn)).ExecuteScalar()) + 1;
insertTo.Parameters.AddWithValue("@idREP_IMM_MON_Row", primaryKey);
insertTo.Parameters.AddWithValue("@idColumn", idColumn);
for (int i = 1; i <= 5; i++)
{
if (this.row != null && (i - 1) < this.row.Count)
insertTo.Parameters.AddWithValue("@row" + i, row[i - 1]);
else
insertTo.Parameters.AddWithValue("@row" + i, DBNull.Value);
}
int rowsUpdatedInserted = insertTo.ExecuteNonQuery();
}
}
public static void writeTableImposta(XmlNode attribute, List<string> tagList, string nextTag, Data data)
{
List<string> stringValueList = new List<string>();
List<string> propertiesList = new List<string>();
List<TableImposta.Rows> rowsList = new List<TableImposta.Rows>();
TableImposta tableImposta = new TableImposta();
propertiesList = tableImposta.getProperties();
foreach (XmlNode attr in attribute.ChildNodes)
if (!tagList.Contains(attr.Name.ToString()))
{
PropertyInfo propertyInfo = tableImposta.GetType().GetProperty(attr.Name);
if (propertyInfo.PropertyType.Name.Equals("String"))
propertyInfo.SetValue(tableImposta, Convert.ChangeType(attr.InnerText, propertyInfo.PropertyType), null);
else
{
TableImposta.Rows rows = new TableImposta.Rows();
stringValueList = new List<string>();
foreach (XmlNode innerAttr in attr.ChildNodes)
stringValueList.Add(innerAttr.InnerText);
rows.row = stringValueList;
rowsList.Add(rows);
}
if (attr.NextSibling == null)
propertyInfo.SetValue(tableImposta, Convert.ChangeType(rowsList, propertyInfo.PropertyType), null);
}
tableImposta.idCapitolo = ReadXML.idCapitolo;
tableImposta.idSezione = ReadXML.idSezione;
tableImposta.idOrdinamento = ReadXML.idOrdinamento;
tableImposta.idPagina = ReadXML.idPagina;
ReadXML.idOrdinamento++;
data.tableImpostaList.Add(tableImposta);
}
}
public class TableCittaPrincipali : Table
{
public List<RowCittaPrincipali> row { get; set; }
// NEW
public string descrizione { get; set; }
public List<Legenda> legenda { get; set; }
public void writeCittaPrincipali(SqlConnection conn, int primarykey)
{
string sqlCommand = "(idREP_IMM_MON_CittaPrincipale, idREP_IMM_MON_TableCittaPrincipale, citta, trend, centroMedioAcquisto, "
+ "periferiaMedioAcquisto, centroMedioAffitto, periferiaMedioAffitto, centroRedditoMedio, periferiaRedditoMedio) "
+ "VALUES (@idREP_IMM_MON_CittaPrincipale, @idREP_IMM_MON_TableCittaPrincipale, @citta, @trend, @centroMedioAcquisto, "
+ "@periferiaMedioAcquisto, @centroMedioAffitto, @periferiaMedioAffitto, @centroRedditoMedio, @periferiaRedditoMedio)";
foreach (var item in this.row)
{
SqlCommand insertTo = new SqlCommand("INSERT INTO REP_IMM_MON_CittaPrincipali " + sqlCommand, conn);
insertTo.Parameters.AddWithValue("@idREP_IMM_MON_TableCittaPrincipale", primarykey);
insertTo.Parameters.AddWithValue("@idREP_IMM_MON_CittaPrincipale", Convert.ToInt32((new SqlCommand("SELECT count(*) from REP_IMM_MON_CittaPrincipali", conn)).ExecuteScalar()) + 1);
insertTo.Parameters.AddWithValue("@citta", item.citta);
insertTo.Parameters.AddWithValue("@trend", item.trendVivacita);
insertTo.Parameters.AddWithValue("@centroMedioAcquisto", item.prezzoMedioAcquisto.centro);
insertTo.Parameters.AddWithValue("@periferiaMedioAcquisto", item.prezzoMedioAcquisto.periferia);
insertTo.Parameters.AddWithValue("@centroMedioAffitto", item.prezzoMedioAffitto.centro);
insertTo.Parameters.AddWithValue("@periferiaMedioAffitto", item.prezzoMedioAffitto.periferia);
insertTo.Parameters.AddWithValue("@centroRedditoMedio", item.redditivitaMedia.centro);
insertTo.Parameters.AddWithValue("@periferiaRedditoMedio", item.redditivitaMedia.periferia);
int rowsUpdatedInserted = insertTo.ExecuteNonQuery();
}
}
public void writeDB(SqlConnection conn)
{
string sqlCommand = "(idREP_IMM_MON_TableCittaPrincipale, idREP_IMM_MON_Pagina, descrizione, posizione, idREP_IMM_MON_Legenda) "
+ "VALUES (@idREP_IMM_MON_TableCittaPrincipale, @idREP_IMM_MON_Pagina, @descrizione, @posizione, @idREP_IMM_MON_Legenda) ";
int primaryKey = Convert.ToInt32((new SqlCommand("SELECT count(*) from REP_IMM_MON_TableCittaPrincipali", conn)).ExecuteScalar()) + 1;
SqlCommand insertTo = new SqlCommand("INSERT INTO REP_IMM_MON_TableCittaPrincipali " + sqlCommand, conn);
insertTo.Parameters.AddWithValue("@idREP_IMM_MON_Pagina", this.idPagina);
insertTo.Parameters.AddWithValue("@idREP_IMM_MON_TableCittaPrincipale", primaryKey);
insertTo.Parameters.AddWithValue("@descrizione", this.descrizione);
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)
writeCittaPrincipali(conn, primaryKey);
}
public List<string> getProperties()
{
List<string> properties = new List<string>();
TableCittaPrincipali objectChart = new TableCittaPrincipali();
foreach (var prop in objectChart.GetType().GetProperties())
{
properties.Add(prop.Name.ToLower());
}
properties.Remove("idcapitolo");
properties.Remove("idsezione");
properties.Remove("idordinamento");
properties.Remove("idpagina");
return properties;
}
public static void writeCittaPrincipali(XmlNode attribute, List<string> tagList, string nextTag, Data data)
{
List<Legenda> legendaList = new List<Legenda>();
TableCittaPrincipali tableCittaPrincipali = new TableCittaPrincipali();
List<String> tableCittaPrincipaliAttributes = tableCittaPrincipali.getProperties();
List<RowCittaPrincipali> rowList = new List<RowCittaPrincipali>();
foreach (XmlNode attr in attribute.ChildNodes)
if (!tagList.Contains(attr.Name.ToString()))
{
PropertyInfo propertyInfo = tableCittaPrincipali.GetType().GetProperty(attr.Name);
if (!attr.Name.Equals("row") && !attr.Name.ToLower().Equals("legenda"))
{
tableCittaPrincipaliAttributes.Remove(Utility.RemoveDiacritics(attr.Name.ToLower()));
propertyInfo.SetValue(tableCittaPrincipali, Convert.ChangeType(attr.InnerText, propertyInfo.PropertyType), null);
}
else if (attr.Name.ToLower().Equals("legenda"))
{
legendaList = Legenda.getLegenda(attr);
propertyInfo = tableCittaPrincipali.GetType().GetProperty(attr.Name);
propertyInfo.SetValue(tableCittaPrincipali, Convert.ChangeType(legendaList, propertyInfo.PropertyType), null);
}
else
rowList.Add(RowCittaPrincipali.getRowCittaPrincipali(attr));
tableCittaPrincipaliAttributes.Remove(Utility.RemoveDiacritics(attr.Name.ToLower()));
if (tableCittaPrincipaliAttributes.Count > 0 && attr.NextSibling.Name.Equals("legenda"))
{
propertyInfo.SetValue(tableCittaPrincipali, Convert.ChangeType(rowList, propertyInfo.PropertyType), null);
tableCittaPrincipaliAttributes.Remove(Utility.RemoveDiacritics(attr.Name.ToLower()));
}
if (!(tableCittaPrincipaliAttributes.Count > 0))
{
tableCittaPrincipali.idCapitolo = ReadXML.idCapitolo;
tableCittaPrincipali.idSezione = ReadXML.idSezione;
tableCittaPrincipali.idOrdinamento = ReadXML.idOrdinamento;
tableCittaPrincipali.idPagina = ReadXML.idPagina;
ReadXML.idOrdinamento++;
data.cityList.Add(tableCittaPrincipali);
tableCittaPrincipali = new TableCittaPrincipali();
tableCittaPrincipaliAttributes = tableCittaPrincipali.getProperties();
}
}
else ReadXML.extractTag(attr, attr.Name.ToString());
}
}
public class RowCittaPrincipali {
public string citta { get; set; }
public string trendVivacita { get; set; }
public PrezzoMedio prezzoMedioAcquisto { get; set; }
public PrezzoMedio prezzoMedioAffitto { get; set; }
public PrezzoMedio redditivitaMedia { get; set; }
public List<string> getProperties()
{
List<string> properties = new List<string>();
RowCittaPrincipali objectChart = new RowCittaPrincipali();
foreach (var prop in objectChart.GetType().GetProperties())
{
properties.Add(prop.Name.ToLower());
}
properties.Remove("idcapitolo");
properties.Remove("idsezione");
properties.Remove("idordinamento");
properties.Remove("idpagina");
return properties;
}
public static RowCittaPrincipali getRowCittaPrincipali(XmlNode attribute)
{
RowCittaPrincipali row = new RowCittaPrincipali();
foreach (XmlNode attr in attribute.ChildNodes)
{
PropertyInfo propertyInfo = row.GetType().GetProperty(Utility.RemoveDiacritics(attr.Name));
if (propertyInfo.PropertyType.Name.Equals("String"))
propertyInfo.SetValue(row, Convert.ChangeType(translateStringInSymbol(attr.InnerText), propertyInfo.PropertyType), null);
else
propertyInfo.SetValue(row, Convert.ChangeType(PrezzoMedio.getPrezzoMedio(attr), propertyInfo.PropertyType), null);
}
return row;
}
public static string translateStringInSymbol(string trend) {
string result = "";
switch (trend) {
case "=":
result = "horizontalArrow.png";
break;
case "-":
result = "downArrow.png";
break;
case "+":
result = "upArrow.png";
break;
default:
result = trend;
break;
}
return result;
}
}
public class PrezzoMedio {
public string centro { get; set; }
public string periferia { get; set; }
public List<string> getProperties()
{
List<string> properties = new List<string>();
PrezzoMedio objectChart = new PrezzoMedio();
foreach (var prop in objectChart.GetType().GetProperties())
{
properties.Add(prop.Name.ToLower());
}
properties.Remove("idcapitolo");
properties.Remove("idsezione");
properties.Remove("idordinamento");
properties.Remove("idpagina");
return properties;
}
public static PrezzoMedio getPrezzoMedio(XmlNode attribute)
{
PrezzoMedio prezzoMedio = new PrezzoMedio();
foreach (XmlNode attr in attribute.ChildNodes)
{
PropertyInfo propertyInfo = prezzoMedio.GetType().GetProperty(Utility.RemoveDiacritics(attr.Name.ToLower()));
propertyInfo.SetValue(prezzoMedio, Convert.ChangeType(attr.InnerText, propertyInfo.PropertyType), null);
}
return prezzoMedio;
}
}
}