Files
C2P/C2P/WebUserControls/mod_SyncVoc.ascx.cs
T
2015-05-29 13:31:01 +02:00

109 lines
4.1 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using SteamWare;
namespace C2P.WebUserControls
{
public partial class mod_SyncVoc : System.Web.UI.UserControl
{
/// <summary>
/// wrapper classe WS remota
/// </summary>
protected RemoteWS.WS_dataSoapClient clientWS = new RemoteWS.WS_dataSoapClient();
/// <summary>
/// dati remoti
/// </summary>
protected List<string> remoteData;
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
reloadData();
}
}
private void reloadData()
{
DataWrap.DW.resetVocabolario();
// carico dati locali...
lblNumLoc.Text = string.Format("{0} record", DataWrap.DW.dictVocabolario.Count);
// carico dati remoti
remoteData = clientWS.Vocabolario();
lblNumRem.Text = string.Format("{0} record", remoteData.Count);
}
/// <summary>
/// (Ri)carico dati vocabolario remoto
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void btnSync_Click(object sender, EventArgs e)
{
reloadData();
// inizio processo...
DateTime inizio = DateTime.Now;
// ciclo sui risultati...
string[] termine;
int updLoc = 0;
int insRem = 0;
// step 1: update da remoto a locale
foreach (string risultato in remoteData)
{
// cerco termini splittando
try
{
termine = risultato.Split('#');
// in primis cerco SE ESISTA la chiave in locale...
if (DataWrap.DW.dictVocabolario.ContainsKey(termine[0] + "#" + termine[1]))
{
// verifico se il termine sia cambiato...
if (DataWrap.DW.dictVocabolario[termine[0] + "#" + termine[1]] != termine[2] || DataWrap.DW.dictVocabolario[termine[0] + "#" + termine[1]] == null)
{
// faccio upsert
selDataVoc.mgr.upsertLemma(termine[0], termine[1], termine[2]);
updLoc++;
}
}
else // non c'è faccio upsert ed inserisco comunque!
{
// faccio upsert
selDataVoc.mgr.upsertLemma(termine[0], termine[1], termine[2]);
updLoc++;
}
}
catch (Exception exc)
{
if (memLayer.ML.confReadInt("_logLevel") > 6)
{
logger.lg.scriviLog(string.Format("Errore merge vocabolario:{0}{1}", Environment.NewLine, exc));
}
}
}
// step 2: caricamento termini NUOVI locali in db remoto...
string trovato = "";
foreach (string key in DataWrap.DW.dictVocabolario.Keys)
{
// cerco la chiave nell'elenco...
trovato = remoteData.Find(x => x.StartsWith(key));
// se non la trovo chiamo metodo di upsert!
if (trovato == "" || trovato == null)
{
termine = key.Split('#');
clientWS.updateLemma(termine[0], termine[1], DataWrap.DW.dictVocabolario[key]);
insRem++;
}
}
// mostro esito!
lblUpdLoc.Text = string.Format("{0} termini aggiornati in locale", updLoc);
lblInsRem.Text = string.Format("{0} termini nuovi caricati in remoto", insRem);
lblRes.Text = string.Format("Sync effettuato: {0} ms", DateTime.Now.Subtract(inizio).TotalMilliseconds);
// ricarico dati locali e remoti
reloadData();
}
}
}