public HL7MappingSegment(string segmentName, string value, HL7MappingSegment parentSegment, int subindex) : this()
 {
     this.SegmentName   = value;
     this.ParentSegment = parentSegment;
     this.ParentSegment.SubSegments.Add(this);
     this.Index_L1 = parentSegment.Index_L1;
     this.Index_L1 = subindex;
 }
        //public void ImportMapping()
        //{
        //    this.ImportMapping(this.FileInfo);
        //}

        public Hl7Mapping ImportMapping(FileInfo fi)
        {
            if (!fi.Exists)
            {
                MessageBox.Show("Mappingfilen (oversikt over feltnavn):\r\n" + fi.FullName + "\r\nikke funnet. Ignorer mappingen", "Innlesing av mapping fil feilet", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return(this);
            }

            string str = String.Empty;

            try
            {
                using (StreamReader sr = new StreamReader(fi.FullName, Encoding.ASCII))
                {
                    HL7MappingSegment parentSegment = null;
                    _HL7Segments             = new HL7MappingSegments();
                    this.FileInfo            = fi;
                    this.MappingFileFullPath = fi.FullName;

                    while (!sr.EndOfStream)
                    {
                        str = sr.ReadLine();

                        // -- Fjern kommentar --
                        str = HL7.TrimComment(str, COMMENT_CHAR);

                        string[] fields = str.Split(new char[] { '\t' });
                        {
                            string strTmp = GetFieldAsString(fields, INDEX_SECTION);
                            if (String.IsNullOrEmpty(strTmp))
                            {
                                continue; // Do not save segments with empty names
                            }


                            if (String.IsNullOrWhiteSpace(GetFieldAsString(fields, INDEX_SECTION)))
                            {
                                continue; // Do not save segments with empty names
                            }

                            if (GetFieldAsString(fields, INDEX_SECTION).ToUpper().Contains(DISPLAY_NAME))
                            {
                                DisplayName = GetFieldAsString(fields, 1);
                                continue;
                            }

                            // -- Parse feltene i segmentet --
                            HL7MappingSegment segment = new HL7MappingSegment();
                            segment.SectionName = GetFieldAsString(fields, INDEX_SECTION);

                            segment.Index_L1 = GetFieldAsint(fields, INDEX_INDEX_L1);

                            segment.Index_L2 = GetFieldAsint(fields, INDEX_INDEX_L2);

                            if (GetFieldAsString(fields, INDEX_COLLAPSED_DEFAULT).ToUpper() == STR_COLLAPSE_DEFAULT)
                            {
                                segment.CollapsedDefault = true;
                            }

                            // -- Styrer om verdien skal erstattes av *****
                            if (GetFieldAsString(fields, INDEX_DISPLAY_STYLE_VALUE).ToUpper() == STR_HIDE_VALUE)
                            {
                                segment.HideValue = true;
                            }
                            // -- Styrer om verdien skal vises i bold font
                            if (GetFieldAsString(fields, INDEX_DISPLAY_STYLE_VALUE).ToUpper() == STR_BOLD_VALUE)
                            {
                                segment.ShowValueAsBold = true;
                            }


                            // -- Constraints - Numerisk verdi og feltlengder --
                            string constraintsTmp        = String.Empty;
                            char   CONSTRAINTS_SEPARATOR = ';';
                            int    MAX_FIELD_LENGTH      = 9999;
                            constraintsTmp = GetFieldAsString(fields, INDEX_CONSTRAINT).ToUpper();

                            if (!string.IsNullOrEmpty(constraintsTmp))
                            {
                                string[] fieldsConstr = constraintsTmp.Split(CONSTRAINTS_SEPARATOR);
                                foreach (string constr in fieldsConstr)
                                {
                                    if (constr == "N")
                                    {
                                        segment.IsNumeric = true;
                                    }
                                    if (constr.Contains("L"))
                                    {
                                        string   tmp          = constr.Replace("L", "");
                                        string[] fieldsLength = tmp.Split(',');
                                        if (fieldsLength.Length == 2)
                                        {
                                            int minTmp = 0;
                                            if (int.TryParse(fieldsLength[0], out minTmp))
                                            {
                                                segment.MinLenght = minTmp;
                                            }
                                            else
                                            {
                                                MessageBox.Show("Kunne ikke lese inn min lengde for segmentet " + segment.ToString());
                                            }

                                            int maxTmp = MAX_FIELD_LENGTH;
                                            if (int.TryParse(fieldsLength[1], out maxTmp))
                                            {
                                                segment.MaxLenght = maxTmp;
                                            }
                                            else
                                            {
                                                MessageBox.Show("Kunne ikke lese inn max lengde for segmentet " + segment.ToString());
                                            }
                                        }
                                    }
                                }
                            }

                            string strName = GetFieldAsString(fields, INDEX_NAME);
                            strName             = HL7.TrimComment(strName, COMMENT_CHAR);
                            segment.SegmentName = strName;

                            // -- Håndtering av segment --
                            if (segment.Index_L2 <= 0)
                            {
                                // Current segment er på nivå 1
                                segment.Level = 1;
                                _HL7Segments.Add(segment);

                                //   segment.MappingSection.Segments.Add(segment);
                                //segment.ParentSegment = segment.MappingSection.Segment; SEGMENTER I DETTE NIVÅET HAR IKKE PARENT SEGMENT. KUN SECTION.
                            }
                            else if (segment.Index_L2 > 0)
                            {
                                // Segmentet er et subsegment. Parentsegment ble satt i FORRIGE iterasjon.
                                segment.Level = 2;

                                // Legger til parent segment.
                                HL7MappingSegment parentSegmentTmp = this._HL7Segments.GetSegment(segment.SectionName, segment.Index_L1, 0);  // segment.MappingSection.Segments.GetSegment(segment.SectionName, segment.Index_L1, 0);
                                segment.ParentSegment = parentSegmentTmp;

                                segment.ParentSegment.SubSegments.Add(segment);
                            }
                            else
                            {
                                MessageBox.Show("Nivå 3 ikke implementert i mappingen. Navnene på feltene vises ikke korrekt", "Importere navn for meldingsvisning", MessageBoxButtons.OK, MessageBoxIcon.Error);
                            }
                        }
                    }
                    sr.Close();
                    // PopulateListOfSections();
                    return(this);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Feil under innlesing av mappingfilen (oversikt over feltnavn)\r\n" + str + "\r\n\n" + ex.Message + "\r\n\n" + ex.StackTrace, "Innlesing av mapping", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return(null);
            }
        }