Ejemplo n.º 1
0
        public LuccaDevisesFile(List <string> lines)
        {
            if (lines == null)
            {
                throw new IncorrectFile("Les lignes sont nulles");
            }

            if (lines.Count < 3)
            {
                throw new IncorrectFile(string.Join("\r\n", lines));
            }

            for (int i = 0; i < lines.Count; i++)
            {
                int lineFormatIndex = i < 2 ? i : 2; // which regex to check : 0 - 1 : equiv, > 1 : 2

                if (!CheckRule(lines[i], linesFormats[lineFormatIndex]))
                {
                    throw new MisformatLine(lines[i], linesFormats[lineFormatIndex]);
                }
            }
            _deviseToConvert = GetDeviseToConvert(lines[0]);
            _numberOfDevises = int.Parse(lines[1]);

            if (lines.Count - 2 < _numberOfDevises)
            {
                throw new NotEnoughChangeRates(_numberOfDevises.ToString());
            }

            foreach (var line in lines.GetRange(2, lines.Count - 2))
            {
                var newDeviseChangeRate = GetDevisesChangeRates(line);
                if (_devisesChangeRateTuples.Any(dcrt => dcrt.DeviseCible == newDeviseChangeRate.DeviseCible && dcrt.DeviseSource == newDeviseChangeRate.DeviseSource) ||
                    _devisesChangeRateTuples.Any(dcrt => dcrt.DeviseCible == newDeviseChangeRate.DeviseSource && dcrt.DeviseSource == newDeviseChangeRate.DeviseCible))
                {
                    throw new DoubleDeviseChangeRate(newDeviseChangeRate.DeviseCible, newDeviseChangeRate.DeviseSource);
                }
                _devisesChangeRateTuples.Add(newDeviseChangeRate);
            }

            if (!_devisesChangeRateTuples.Any(dcrt => dcrt.DeviseCible == _deviseToConvert.DeviseCible || dcrt.DeviseSource == _deviseToConvert.DeviseCible))
            {
                throw new MissingDevise(_deviseToConvert.DeviseCible);
            }

            if (!_devisesChangeRateTuples.Any(dcrt => dcrt.DeviseCible == _deviseToConvert.DeviseSource || dcrt.DeviseSource == _deviseToConvert.DeviseSource))
            {
                throw new MissingDevise(_deviseToConvert.DeviseSource);
            }
        }
Ejemplo n.º 2
0
 public bool EqualsInvertedDevises(DeviseToConvert dtc)
 {
     return(dtc.DeviseSource == this.DeviseCible && dtc.DeviseCible == this.DeviseSource);
 }