using Hermes.Model; using System; using System.Text; using Microsoft.VisualBasic.FileIO; using System.IO; namespace Hermes { class CitoyensSerializer { public const string CIVILITE_FIELD = "Civilité"; public const string NOM_FIELD = "Nom"; public const string NOM_NAISSANCE_FIELD = "Nom de naissance"; public const string PRENOM_FIELD = "Prénom"; public const string DATE_NAISSANCE_FIELD = "Date de naissance"; public const string PROFESSION_FIELD = "Profession"; public const string TYPE_RESIDENCE_FIELD = "Résidence secondaire"; public const string MAIL_FIELD = "E-Mail"; public const string TEL_FIELD = "Téléphone"; public const string TEL_PORT_FIELD = "Mobile"; public const string QUARTIER_FIELD = "Quartier"; public const string ADRESSE_FIELD = "Adresse locale"; public const string ADRESSE_BATIMENT_FIELD = "Bâtiment"; public const string ADRESSE_NUMERO_BATIMENT_FIELD = "Numéro d'appartement"; public const string ADRESSE_EXT_FIELD = "Adresse"; public const string ADRESSE_EXT_CP_FIELD = "Code postal"; public const string ADRESSE_EXT_VILLE_FIELD = "Ville"; public const string DATE_CREATION_FIELD = "Date de création"; public const string DATE_MODIFICATION_FIELD = "Date de modification"; public const string TYPE_RESIDENCE_LABEL_FIELD = "Résidence"; public const string AGE_FIELD = "Age"; public const string ADRESSE_CP_FIELD = "Code postal local"; public const string ADRESSE_VILLE_FIELD = "Ville locale"; public const string ADRESSE_PRINCIPALE_FIELD = "Adresse principale"; public const string ADRESSE_PRINCIPALE_CP_FIELD = "Code postal principal"; public const string ADRESSE_PRINCIPALE_VILLE_FIELD = "Ville principale"; public const string ADRESSE_SECONDAIRE_FIELD = "Adresse secondaire"; public const string ADRESSE_SECONDAIRE_CP_FIELD = "Code postal secondaire"; public const string ADRESSE_SECONDAIRE_VILLE_FIELD = "Ville secondaire"; public const string UNKNOWN_FIELD = "unknown"; private string[] fields = null; public CitoyensSerializer(string[] pField) { fields = pField; } public CitoyensSerializer() { fields = new string[] { CIVILITE_FIELD, NOM_FIELD, NOM_NAISSANCE_FIELD, PRENOM_FIELD, DATE_NAISSANCE_FIELD, PROFESSION_FIELD, TYPE_RESIDENCE_FIELD, MAIL_FIELD, TEL_FIELD, TEL_PORT_FIELD, QUARTIER_FIELD, ADRESSE_FIELD, ADRESSE_BATIMENT_FIELD, ADRESSE_NUMERO_BATIMENT_FIELD, ADRESSE_EXT_FIELD, ADRESSE_EXT_CP_FIELD, ADRESSE_EXT_VILLE_FIELD, DATE_CREATION_FIELD, DATE_MODIFICATION_FIELD }; } public string GetCsvHeader() { StringBuilder sb = new StringBuilder(); if(fields != null) { for(int i = 0; i < fields.Length; i++) { sb.Append($"\"{fields[i]}\""); if(i < fields.Length - 1) { sb.Append(";"); } } } return sb.ToString(); } public string Serialize(Citoyen citoyen) { StringBuilder sb = new StringBuilder(); if(fields != null) { for(int i = 0; i < fields.Length; i++) { sb.Append("\""); switch(fields[i]) { case CIVILITE_FIELD: sb.Append(citoyen.Civilite == null ? "" : citoyen.Civilite.Replace("\"", "")); break; case NOM_FIELD: sb.Append(citoyen.Nom == null ? "" : citoyen.Nom.Replace("\"", "")); break; case NOM_NAISSANCE_FIELD: sb.Append(citoyen.NomNaissance == null ? "" : citoyen.NomNaissance.Replace("\"", "")); break; case PRENOM_FIELD: sb.Append(citoyen.Prenom == null ? "" : citoyen.Prenom.Replace("\"", "")); break; case DATE_NAISSANCE_FIELD: sb.Append(citoyen.DateNaissance == null ? "" : (new DateTimeOffset(citoyen.DateNaissance.Value)).ToUnixTimeSeconds().ToString()); break; case PROFESSION_FIELD: sb.Append(citoyen.Profession == null ? "" : citoyen.Profession.Replace("\"", "")); break; case TYPE_RESIDENCE_FIELD: sb.Append(citoyen.TypeResidence.ToString()); break; case MAIL_FIELD: sb.Append(citoyen.Mail == null ? "" : citoyen.Mail.Replace("\"", "")); break; case TEL_FIELD: sb.Append(citoyen.Tel == null ? "" : citoyen.Tel.Replace("\"", "")); break; case TEL_PORT_FIELD: sb.Append(citoyen.TelPort == null ? "" : citoyen.TelPort.Replace("\"", "")); break; case QUARTIER_FIELD: sb.Append(citoyen.Quartier == null ? "" : citoyen.Quartier.Replace("\"", "")); break; case ADRESSE_FIELD: sb.Append(citoyen.Adresse == null ? "" : citoyen.Adresse.Replace("\"", "")); break; case ADRESSE_BATIMENT_FIELD: sb.Append(citoyen.AdresseBatiment == null ? "" : citoyen.AdresseBatiment.Replace("\"", "")); break; case ADRESSE_NUMERO_BATIMENT_FIELD: sb.Append(citoyen.AdresseNumeroBatiment == null ? "" : citoyen.AdresseNumeroBatiment.Replace("\"", "")); break; case ADRESSE_EXT_FIELD: sb.Append(citoyen.AdresseExt == null ? "" : citoyen.AdresseExt.Replace("\"", "")); break; case ADRESSE_EXT_CP_FIELD: sb.Append(citoyen.AdresseExtCP == null ? "" : citoyen.AdresseExtCP.Replace("\"", "")); break; case ADRESSE_EXT_VILLE_FIELD: sb.Append(citoyen.AdresseExtVille == null ? "" : citoyen.AdresseExtVille.Replace("\"", "")); break; case DATE_CREATION_FIELD: sb.Append((new DateTimeOffset(citoyen.DateCreation)).ToUnixTimeSeconds().ToString()); break; case DATE_MODIFICATION_FIELD: sb.Append((new DateTimeOffset(citoyen.DateModification)).ToUnixTimeSeconds().ToString()); break; case AGE_FIELD: sb.Append(citoyen.Age); break; case ADRESSE_CP_FIELD: sb.Append(citoyen.AdresseCP == null ? "" : citoyen.AdresseCP.Replace("\"", "")); break; case ADRESSE_VILLE_FIELD: sb.Append(citoyen.AdresseVille == null ? "" : citoyen.AdresseVille.Replace("\"", "")); break; case ADRESSE_PRINCIPALE_FIELD: sb.Append(citoyen.AdressePrincipale == null ? "" : citoyen.AdressePrincipale.Replace("\"", "")); break; case ADRESSE_PRINCIPALE_CP_FIELD: sb.Append(citoyen.AdressePrincipaleCP == null ? "" : citoyen.AdressePrincipaleCP.Replace("\"", "")); break; case ADRESSE_PRINCIPALE_VILLE_FIELD: sb.Append(citoyen.AdressePrincipaleVille == null ? "" : citoyen.AdressePrincipaleVille.Replace("\"", "")); break; case ADRESSE_SECONDAIRE_FIELD: sb.Append(citoyen.AdresseSecondaire == null ? "" : citoyen.AdresseSecondaire.Replace("\"", "")); break; case ADRESSE_SECONDAIRE_CP_FIELD: sb.Append(citoyen.AdresseSecondaireCP == null ? "" : citoyen.AdresseSecondaireCP.Replace("\"", "")); break; case ADRESSE_SECONDAIRE_VILLE_FIELD: sb.Append(citoyen.AdresseSecondaireVille == null ? "" : citoyen.AdresseSecondaireVille.Replace("\"", "")); break; default: break; } sb.Append("\""); if(i < fields.Length - 1) { sb.Append(";"); } } } return sb.ToString(); } public static string[] ParseHeader(string line) { TextFieldParser parser = new TextFieldParser(new StringReader(line)); parser.HasFieldsEnclosedInQuotes = true; parser.SetDelimiters(";"); return parser.ReadFields(); } public Citoyen Deserialize(string line) { TextFieldParser parser = new TextFieldParser(new StringReader(line)); parser.HasFieldsEnclosedInQuotes = true; parser.SetDelimiters(";"); string[] props = parser.ReadFields(); if(props == null || props.Length != fields.Length) { return null; } Citoyen citoyen = new Citoyen(); for(int i = 0; i < fields.Length; i++) { switch(fields[i]) { case CIVILITE_FIELD: citoyen.Civilite = props[i]; break; case NOM_FIELD: citoyen.Nom = props[i]; break; case NOM_NAISSANCE_FIELD: citoyen.NomNaissance = props[i]; break; case PRENOM_FIELD: citoyen.Prenom = props[i]; break; case DATE_NAISSANCE_FIELD: if(!string.IsNullOrWhiteSpace(props[i])) { try { citoyen.DateNaissance = DateTimeOffset.FromUnixTimeSeconds(long.Parse(props[i])).LocalDateTime; } catch(Exception) {} } break; case PROFESSION_FIELD: citoyen.Profession = props[i]; break; case TYPE_RESIDENCE_FIELD: try { citoyen.TypeResidence = bool.Parse(props[i]); } catch(Exception) {} break; case MAIL_FIELD: citoyen.Mail = props[i]; break; case TEL_FIELD: citoyen.Tel = props[i]; break; case TEL_PORT_FIELD: citoyen.TelPort = props[i]; break; case QUARTIER_FIELD: citoyen.Quartier = props[i]; break; case ADRESSE_FIELD: citoyen.Adresse = props[i]; break; case ADRESSE_BATIMENT_FIELD: citoyen.AdresseBatiment = props[i]; break; case ADRESSE_NUMERO_BATIMENT_FIELD: citoyen.AdresseNumeroBatiment = props[i]; break; case ADRESSE_EXT_FIELD: citoyen.AdresseExt = props[i]; break; case ADRESSE_EXT_CP_FIELD: citoyen.AdresseExtCP = props[i]; break; case ADRESSE_EXT_VILLE_FIELD: citoyen.AdresseExtVille = props[i]; break; case DATE_CREATION_FIELD: try { citoyen.DateCreation = DateTimeOffset.FromUnixTimeSeconds(long.Parse(props[i])).LocalDateTime; } catch(Exception) { citoyen.DateCreation = DateTime.Now; } break; case DATE_MODIFICATION_FIELD: try { citoyen.DateModification = DateTimeOffset.FromUnixTimeSeconds(long.Parse(props[i])).LocalDateTime; } catch(Exception) { citoyen.DateModification = DateTime.Now; } break; default: break; } } return citoyen; } } }