343 lines
14 KiB
C#
343 lines
14 KiB
C#
|
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;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|