Hermes/CitoyensSerializer.cs

343 lines
14 KiB
C#
Raw Normal View History

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;
}
}
}