You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
110 lines
4.5 KiB
110 lines
4.5 KiB
// Author: Gockner, Simon
|
|
// Created: 2020-02-12
|
|
// Copyright(c) 2020 SimonG. All Rights Reserved.
|
|
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
using GBase.DataHandling.Factories;
|
|
using GBase.Interfaces.DataHandling;
|
|
using GBase.Interfaces.DataHandling.Xml;
|
|
using GBase.Interfaces.FileHandling;
|
|
|
|
namespace GBase.FileHandling
|
|
{
|
|
/// <summary>
|
|
/// Internal file handler
|
|
/// </summary>
|
|
public class FileHandler : IFileHandler
|
|
{
|
|
private readonly IXmlDataHandlerFactory _dataHandlerFactory;
|
|
|
|
/// <summary>
|
|
/// Internal file handler
|
|
/// </summary>
|
|
/// <param name="xmlDataHandlerFactory">Factory for the <see cref="IXmlDataHandler"/></param>
|
|
public FileHandler(IXmlDataHandlerFactory xmlDataHandlerFactory)
|
|
{
|
|
_dataHandlerFactory = xmlDataHandlerFactory;
|
|
}
|
|
|
|
/// <summary>
|
|
/// The <see cref="IDataHandler"/> of this <see cref="IFileHandler"/>
|
|
/// </summary>
|
|
private IDataHandler DataHandler { get; set; }
|
|
|
|
/// <summary>
|
|
/// Initialize this <see cref="IFileHandler"/>
|
|
/// </summary>
|
|
/// <param name="path">The path of the database</param>
|
|
/// <param name="cancellationToken">A <see cref="CancellationToken"/> to cancel the asynchronous operation</param>
|
|
/// <returns>True if successful, false if not</returns>
|
|
public async Task<bool> Init(string path, CancellationToken cancellationToken)
|
|
{
|
|
DataHandler = _dataHandlerFactory.Create();
|
|
|
|
bool success = await DataHandler.Init(false, cancellationToken);
|
|
return success;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Set the value for the given property
|
|
/// </summary>
|
|
/// <typeparam name="T">The <see cref="Type"/> of the property</typeparam>
|
|
/// <typeparam name="TProperty">The <see cref="Type"/> of the property</typeparam>
|
|
/// <param name="propertyName">The name of the property</param>
|
|
/// <param name="value">The value to set</param>
|
|
/// <returns>A <see cref="Task"/> to await</returns>
|
|
public async Task SetValue<T, TProperty>(string propertyName, TProperty value)
|
|
{
|
|
await DataHandler.SetValue<T, TProperty>(propertyName, value);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Remove the value for the given property
|
|
/// </summary>
|
|
/// <typeparam name="T">The <see cref="Type"/> of the property</typeparam>
|
|
/// <typeparam name="TProperty">The <see cref="Type"/> of the property</typeparam>
|
|
/// <param name="propertyName">The name of the property</param>
|
|
/// <param name="value">The value to set</param>
|
|
/// <returns>A <see cref="Task"/> to await</returns>
|
|
public async Task RemoveValue<T, TProperty>(string propertyName, TProperty value)
|
|
{
|
|
await DataHandler.RemoveValue<T, TProperty>(propertyName, value);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Get the value for the given property, if multiple values are set the first is returned
|
|
/// </summary>
|
|
/// <typeparam name="T">The <see cref="Type"/> of the property</typeparam>
|
|
/// <typeparam name="TProperty">The <see cref="Type"/> of the property</typeparam>
|
|
/// <param name="propertyName">The name of the property</param>
|
|
/// <returns>The value for the given property</returns>
|
|
public async Task<TProperty> GetValue<T, TProperty>(string propertyName)
|
|
{
|
|
return await DataHandler.GetValue<T, TProperty>(propertyName);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Get all the values that are set for the given property
|
|
/// </summary>
|
|
/// <typeparam name="T">The <see cref="Type"/> of the property</typeparam>
|
|
/// <typeparam name="TProperty">The <see cref="Type"/> of the property</typeparam>
|
|
/// <param name="propertyName">The name of the property</param>
|
|
/// <returns>An <see cref="IEnumerable{T}"/> with all the values for the property</returns>
|
|
public async Task<IEnumerable<TProperty>> GetValues<T, TProperty>(string propertyName)
|
|
{
|
|
return await DataHandler.GetValues<T, TProperty>(propertyName);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Dispose used resources asynchronously
|
|
/// </summary>
|
|
/// <returns>A <see cref="ValueTask"/> to await</returns>
|
|
public async ValueTask DisposeAsync()
|
|
{
|
|
await DataHandler.DisposeAsync();
|
|
}
|
|
}
|
|
} |