RepositoryPathManager
class RepositoryPathManager
Represents a class object to manage paths within a given repository.
using System;
using System.IO;
namespace Relativity.DataExchange.Service
{
internal class RepositoryPathManager
{
public const int MinVolumeSize = 500;
private readonly int maxVolumeSize;
private string currentSubDirectory;
private string lastSubdirectory;
private int currentFileNumber;
public string CurrentDestinationDirectory => currentSubDirectory;
public int MaxVolumeSize => maxVolumeSize;
public RepositoryPathManager(int maximumVolumeSize)
{
currentSubDirectory = GetNewSubdirectory();
lastSubdirectory = string.Copy(currentSubDirectory);
maxVolumeSize = Math.Max(500, maximumVolumeSize);
}
public static string GetNewSubDirectory(string path)
{
return Path.Combine(path, GetNewSubdirectory()) + "\\";
}
public void Rollback()
{
if (currentFileNumber == 1) {
currentFileNumber = maxVolumeSize;
currentSubDirectory = string.Copy(lastSubdirectory);
} else
currentFileNumber--;
}
public string GetNextDestinationDirectory(string repositoryPath)
{
currentFileNumber++;
if (currentFileNumber > maxVolumeSize) {
currentFileNumber = 1;
lastSubdirectory = string.Copy(currentSubDirectory);
currentSubDirectory = GetNewSubdirectory();
}
return Path.Combine(repositoryPath, currentSubDirectory) + "\\";
}
private static string GetNewSubdirectory()
{
return "RV_" + Guid.NewGuid().ToString();
}
}
}