/// Copyright (c) 2021 Iiro Iivanainen, Harri Linna, Jere Pakkanen, Riikka Vilavaara
///
/// Permission is hereby granted, free of charge, to any person obtaining
/// a copy of this software and associated documentation files (the
/// "Software"), to deal in the Software without restriction, including
/// without limitation the rights to use, copy, modify, merge, publish,
/// distribute, sublicense, and/or sell copies of the Software, and to
/// permit persons to whom the Software is furnished to do so, subject to
/// the following conditions:
///
/// The above copyright notice and this permission notice shall be included
/// in all copies or substantial portions of the Software.
///
/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
/// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
/// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
/// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
/// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
/// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
/// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
///
using System.Text.Json.Serialization;
namespace CoreLibrary
{
public class RelativeFilepath
{
private string FilepathAbsolute;
public string FilepathRelative;
public string FilepathRelativeTo;
///
/// Contructor for relative filepath.
///
/// Absolute filepath.
public RelativeFilepath(string path)
{
FilepathAbsolute = path;
}
///
/// JSON constructor for serializing/deserializing.
///
/// Relative filepath.
/// Path that the relation is to.
[JsonConstructor]
public RelativeFilepath(string filepathrelative, string filepathrelativeto)
{
FilepathRelative = filepathrelative;
FilepathRelativeTo = filepathrelativeto;
FilepathAbsolute = System.IO.Path.Combine(FilepathRelativeTo, FilepathRelative);
}
///
/// Set filepath to be related to a filepath.
///
/// Path that the relation is to.
public void SetRelation(string relativeTo)
{
if(FilepathRelativeTo == null) FilepathRelative = System.IO.Path.GetRelativePath(relativeTo, FilepathAbsolute);
FilepathRelativeTo = relativeTo;
FilepathAbsolute = System.IO.Path.Combine(FilepathRelativeTo, FilepathRelative);
}
///
/// Returns the absolute filepath of the relative path file.
///
/// Absolute filepath.
public string GetPath()
{
return FilepathAbsolute;
}
}
}