Skip to content

Commit

Permalink
Рефакторинг
Browse files Browse the repository at this point in the history
- Убрано дублирование кода в части разбора XML-файлов
- Реализация чтения XML-файлов теперь находится в наследуюемых классах
- Исправление пространств имен
  • Loading branch information
YPermitin committed Jul 11, 2023
1 parent ed17a90 commit 8d1b7d6
Show file tree
Hide file tree
Showing 21 changed files with 183 additions and 715 deletions.
Original file line number Diff line number Diff line change
@@ -1,63 +1,21 @@
using System.Collections;
using System.Globalization;
using System.Xml;
using YPermitin.FIASToolSet.DistributionReader.Models;

namespace YPermitin.FIASToolSet.DistributionReader.DataReaders;
namespace YPermitin.FIASToolSet.DistributionReader.DataCollections;

public class AddressObjectTypeCollection : IEnumerable<AddressObjectType>
public class AddressObjectTypeCollection : FIASObjectCollection<AddressObjectType, AddressObjectTypeCollection.AddressObjectTypeEnumerator>
{
private readonly string _dataFilePath;
private AddressObjectTypeEnumerator _enumerator;

public AddressObjectTypeCollection(string dataFilePath)
public AddressObjectTypeCollection(string dataFilePath) : base(dataFilePath)
{
_dataFilePath = dataFilePath;
}

public IEnumerator<AddressObjectType> GetEnumerator()
public class AddressObjectTypeEnumerator : FIASObjectEnumerator<AddressObjectType>
{
if (_enumerator == null)
public AddressObjectTypeEnumerator(string dataFilePath) : base(dataFilePath)
{
_enumerator = new AddressObjectTypeEnumerator(_dataFilePath);
}

return _enumerator;
}

IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}

public class AddressObjectTypeEnumerator : IEnumerator<AddressObjectType>
{
private readonly string _dataFilePath;

private AddressObjectType _current;

private XmlReader _reader;
private XmlReader Reader {
get
{
if (_reader == null)
{
_reader = XmlReader.Create(_dataFilePath);
}
return _reader;
}
}

public AddressObjectTypeEnumerator(string dataFilePath)
{
_dataFilePath = dataFilePath;
}

public AddressObjectType Current => _current;

object IEnumerator.Current => Current;

public bool MoveNext()
public override bool MoveNext()
{
while (Reader.Read())
{
Expand All @@ -82,38 +40,11 @@ public bool MoveNext()
_current = newObject;
return true;
}
else
{
_current = null;
}
}
}

DisposeXmlReader();
_current = null;
return false;
}

public void Reset()
{
DisposeXmlReader();
}

public void Dispose()
{
DisposeXmlReader();
}

private void DisposeXmlReader()
{
if (_reader != null)
{
if(_reader.ReadState != ReadState.Closed)
_reader.Close();

_reader.Dispose();

_reader = null;
}
}
}
}
Original file line number Diff line number Diff line change
@@ -1,63 +1,21 @@
using System.Collections;
using System.Globalization;
using System.Xml;
using YPermitin.FIASToolSet.DistributionReader.Models;

namespace YPermitin.FIASToolSet.DistributionReader.DataReaders;
namespace YPermitin.FIASToolSet.DistributionReader.DataCollections;

public class ApartmentTypeCollection : IEnumerable<ApartmentType>
public class ApartmentTypeCollection : FIASObjectCollection<ApartmentType, ApartmentTypeCollection.ApartmentTypeEnumerator>
{
private readonly string _dataFilePath;
private ApartmentTypeEnumerator _enumerator;

public ApartmentTypeCollection(string dataFilePath)
public ApartmentTypeCollection(string dataFilePath) : base(dataFilePath)
{
_dataFilePath = dataFilePath;
}

public IEnumerator<ApartmentType> GetEnumerator()
public class ApartmentTypeEnumerator : FIASObjectEnumerator<ApartmentType>
{
if (_enumerator == null)
public ApartmentTypeEnumerator(string dataFilePath) : base(dataFilePath)
{
_enumerator = new ApartmentTypeEnumerator(_dataFilePath);
}

return _enumerator;
}

IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}

public class ApartmentTypeEnumerator : IEnumerator<ApartmentType>
{
private readonly string _dataFilePath;

private ApartmentType _current;

private XmlReader _reader;
private XmlReader Reader {
get
{
if (_reader == null)
{
_reader = XmlReader.Create(_dataFilePath);
}
return _reader;
}
}

public ApartmentTypeEnumerator(string dataFilePath)
{
_dataFilePath = dataFilePath;
}

public ApartmentType Current => _current;

object IEnumerator.Current => Current;

public bool MoveNext()
public override bool MoveNext()
{
while (Reader.Read())
{
Expand All @@ -78,42 +36,14 @@ public bool MoveNext()
&& DateOnly.TryParse(updateDateValue, CultureInfo.InvariantCulture, DateTimeStyles.None, out DateOnly updateDate)
&& bool.TryParse(isActiveValue, out bool isActive))
{
var newObject = new ApartmentType(id, nameValue, shortNameValue, descriptionValue, startDate, endDate, updateDate, isActive);
_current = newObject;
_current = new ApartmentType(id, nameValue, shortNameValue, descriptionValue, startDate, endDate, updateDate, isActive);
return true;
}
else
{
_current = null;
}
}
}

DisposeXmlReader();
_current = null;
return false;
}

public void Reset()
{
DisposeXmlReader();
}

public void Dispose()
{
DisposeXmlReader();
}

private void DisposeXmlReader()
{
if (_reader != null)
{
if(_reader.ReadState != ReadState.Closed)
_reader.Close();

_reader.Dispose();

_reader = null;
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
using System.Collections;
using System.Xml;

namespace YPermitin.FIASToolSet.DistributionReader.DataCollections;

public abstract class FIASObjectCollection<TItem, TEnumerator> : IEnumerable<TItem>
where TItem : class
where TEnumerator : IEnumerator<TItem>
{
private readonly string _dataFilePath;

private IEnumerator<TItem> _enumerator;

public FIASObjectCollection(string dataFilePath)
{
_dataFilePath = dataFilePath;
}

public IEnumerator<TItem> GetEnumerator()
{
if (_enumerator == null)
{
_enumerator = (IEnumerator<TItem>)Activator.CreateInstance(typeof(TEnumerator), _dataFilePath);
}

return _enumerator;
}

IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}

public abstract class FIASObjectEnumerator<TParsedItem> : IEnumerator<TParsedItem> where TParsedItem : class
{
private readonly string _dataFilePath;

protected TParsedItem _current;

private XmlReader _reader;
protected XmlReader Reader {
get
{
if (_reader == null)
{
_reader = XmlReader.Create(_dataFilePath);
}
return _reader;
}
}

public FIASObjectEnumerator(string dataFilePath)
{
_dataFilePath = dataFilePath;
}

public TParsedItem Current => _current;

object IEnumerator.Current => Current;

public virtual bool MoveNext()
{
throw new NotImplementedException();
}

public void Reset()
{
DisposeXmlReader();
}

public void Dispose()
{
DisposeXmlReader();
}

private void DisposeXmlReader()
{
if (_reader != null)
{
if(_reader.ReadState != ReadState.Closed)
_reader.Close();

_reader.Dispose();

_reader = null;
}
}
}
}
Loading

0 comments on commit 8d1b7d6

Please sign in to comment.