示例#1
0
        /// <summary>
        /// Encode un segment.
        /// </summary>
        /// <param name="segment">Segment à encoder.</param>
        /// <param name="encChars">Caractères d'encodage utilisés.</param>
        /// <returns></returns>
        public static string Encode(ISegment segment, EncodingCharacters encChars)
        {
            StringBuilder retSegment = new StringBuilder();

            // Code du segment et premier séparateur de champ
            retSegment.Append(segment.SegmentName);
            retSegment.Append(encChars.FieldSeparator);

            // Si segment MSH : position de départ sur MSH-2 car MSH-1 correspond au séparateur de champ
            int startPos = InteropUtil.IsSegmentDefDelimiters(segment.SegmentName) ? 2 : 1;

            // Parcours des champs
            for (int i = startPos; i <= segment.Fields.Count; i++)
            {
                try
                {
                    // Parcours des répétitions
                    IType[] repetitions = segment.GetField(i);

                    for (int j = 0; j < repetitions.Length; j++)
                    {
                        string repValue = PipeParser.Encode(repetitions[j], encChars);

                        // Si MSH-2 : il faut annuler l'échappement des caractères réservés
                        if (InteropUtil.IsSegmentDefDelimiters(segment.SegmentName) && i == 2)
                        {
                            repValue = EscapeCharacterUtil.Unescape(repValue, encChars);
                        }

                        retSegment.Append(repValue);

                        if (j < repetitions.Length - 1)
                        {
                            retSegment.Append(encChars.RepetitionSeparator);
                        }
                    }
                }
                catch
                {
                    throw;
                }

                retSegment.Append(encChars.FieldSeparator);
            }

            return(InteropUtil.RemoveExtraDelimiters(retSegment.ToString(), encChars.FieldSeparator));
        }
示例#2
0
        /// <summary>
        /// Encode du type de données.
        /// </summary>
        /// <param name="type">Type de données à encoder.</param>
        /// <param name="encChars">Caractères d'encodage utilisés.</param>
        /// <param name="subComponent">Indique si l'on encode un sous-composant.</param>
        /// <returns></returns>
        public static string Encode(IType type, EncodingCharacters encChars, bool subComponent = false)
        {
            StringBuilder retType = new StringBuilder();

            if (type is ITypePrimitive)
            {
                ITypePrimitive primitive = type as ITypePrimitive;
                if (primitive == null)
                {
                    throw new EncodingException("Une erreur s'est produite à la conversion de 'IType' vers 'ITypePrimitive'.");
                }
                else
                {
                    retType.Append(PipeParser.Encode(primitive, encChars));
                }
            }
            else
            {
                ITypeComposite composite = type as ITypeComposite;
                if (composite == null)
                {
                    throw new EncodingException("Une erreur s'est produite à la conversion de 'IType' vers 'ITypeComposite'.");
                }
                else
                {
                    StringBuilder retComp       = new StringBuilder();
                    char          compDelimiter = subComponent ? encChars.SubComponentSeparator : encChars.ComponentSeparator;

                    for (int i = 0; i < composite.Components.Length; i++)
                    {
                        retComp.Append(PipeParser.Encode(composite.Components[i], encChars, true));
                        if (i < composite.Components.Length - 1)
                        {
                            retComp.Append(compDelimiter);
                        }
                    }

                    retType.Append(InteropUtil.RemoveExtraDelimiters(retComp.ToString(), compDelimiter));
                }
            }

            return(retType.ToString());
        }
示例#3
0
 /// <summary>
 /// Encode un type de données primitif.
 /// </summary>
 /// <param name="primitive">Type de données à encoder.</param>
 /// <param name="encChars">Caractères d'encodage utilisés.</param>
 /// <returns></returns>
 public static string Encode(ITypePrimitive primitive, EncodingCharacters encChars)
 {
     return(EscapeCharacterUtil.Escape(primitive.Value, encChars));
 }
示例#4
0
        /// <summary>
        /// Constructeur.
        /// </summary>
        /// <param name="countryCode">Code pays exporté sur les champs <see cref="MSH.VersionId"/> (MSH-12) et <see cref="MSH.CountryCode/> (MSH-17).</param>
        /// <param name="version">Version de la norme exportée sur le champ <see cref="MSH.VersionId"/> (MSH-12).</param>
        /// <param name="exportPaths">Chemins d'export des fichiers.</param>
        /// <param name="encChars">Caractères d'encodage à utiliser.</param>
        /// <param name="fileExtension">Extension des fichiers générés.</param>
        /// <param name="validationFileExtension">Extension des fichiers de validation.</param>
        /// <param name="msgControlIdInMilliseconds">Indique si le champ <see cref="MSH.MessageControlId"/> (MSH-10) est généré en millisecondes.</param>
        /// <param name="createValidationFile">Indique si un fichier de validation doit être créé pour chaque fichier généré.</param>
        public EncodingOptions(string countryCode,
                               string version,
                               List <string> exportPaths,
                               EncodingCharacters encChars     = null,
                               string fileExtension            = null,
                               string validationFileExtension  = null,
                               bool msgControlIdInMilliseconds = true,
                               bool createValidationFile       = true)
        {
            if (string.IsNullOrWhiteSpace(countryCode))
            {
                throw new EncodingException($"Le code pays à exporter sur les champs {InteropUtil.ConstructFieldNumber("MSH", 12)} et {InteropUtil.ConstructFieldNumber("MSH", 17)} n'a pas été renseignée.");
            }

            if (!Structure.Table.CountryCode.Description.ContainsKey(countryCode))
            {
                throw new EncodingException($"Le code pays à exporter sur les champs {InteropUtil.ConstructFieldNumber("MSH", 12)} et {InteropUtil.ConstructFieldNumber("MSH", 17)} n'est pas valide.");
            }

            if (string.IsNullOrWhiteSpace(version))
            {
                throw new EncodingException($"La version de la norme à exporter sur le champ {InteropUtil.ConstructFieldNumber("MSH", 12)} n'a pas été renseignée.");
            }

            if (!VersionID.Description.ContainsKey(version))
            {
                throw new EncodingException($"La version de la norme à exporter sur le champ {InteropUtil.ConstructFieldNumber("MSH", 12)} n'est pas valide.");
            }

            if (exportPaths == null || !exportPaths.Any())
            {
                throw new EncodingException("Aucun chemin d'export n'a été renseigné.");
            }

            if (encChars == null)
            {
                this._encChars = new EncodingCharacters();
            }
            else
            {
                this._encChars = encChars;
            }

            if (string.IsNullOrWhiteSpace(fileExtension))
            {
                this._fileExtension = EncoderContainer.CSTS_DEFAULT_EXTENSION_HL7;
            }
            else
            {
                this._fileExtension = fileExtension;
            }

            if (string.IsNullOrWhiteSpace(validationFileExtension))
            {
                this._validationFileExtension = EncoderContainer.CSTS_DEFAULT_EXTENSION_VALIDATION;
            }
            else
            {
                this._validationFileExtension = validationFileExtension;
            }

            this._msgControlIdInMilliseconds = msgControlIdInMilliseconds;
            this._version              = version;
            this._countryCode          = countryCode;
            this._exportPaths          = exportPaths;
            this._createValidationFile = createValidationFile;
        }