Anul 3 Semestrul 2

This commit is contained in:
2025-07-03 20:56:38 +03:00
parent 184f3bd92e
commit 3b7fb85767
269 changed files with 20955 additions and 0 deletions
@@ -0,0 +1,59 @@
using System;
using FileCompression.Enums;
using FileCompression.Interfaces;
using FileCompression.Services.Composites;
using FileCompression.Services.Strategies;
namespace FileCompression.Services;
public static class CompressorFactory
{
public static ICompressionStrategy CreateCompressorStrategy(CompressionMode mode)
{
return mode switch
{
CompressionMode.Zip => new ZipStrategy(),
CompressionMode.Tar => new TarGzStrategy(),
CompressionMode.TarGz => new TarGzStrategy(),
_ => throw new NotSupportedException($"Compression mode '{mode}' is not supported.")
};
}
public static ICompressor CreateCompressor(string sourcePath, string destinationPath, CompressionMode mode, StrategyContext strategyContext)
{
string basePath = sourcePath.Substring(0, sourcePath.LastIndexOf(Path.DirectorySeparatorChar));
basePath = basePath.Substring(0, sourcePath.LastIndexOf(Path.DirectorySeparatorChar));
Console.WriteLine($"Base path: {basePath}");
if (File.Exists(sourcePath))
{
switch (mode)
{
case CompressionMode.Zip:
return new FileCompressor(sourcePath, destinationPath, basePath, strategyContext);
case CompressionMode.Tar:
return new FileCompressor(sourcePath, destinationPath, basePath, strategyContext);
case CompressionMode.TarGz:
return new TarCompressor(sourcePath, destinationPath, basePath, strategyContext);
default:
throw new NotSupportedException($"Compression mode '{mode}' is not supported.");
}
}
if (Directory.Exists(sourcePath))
{
switch (mode)
{
case CompressionMode.Zip:
return new FolderCompressor(sourcePath, destinationPath, basePath, strategyContext);
case CompressionMode.Tar:
return new FolderCompressor(sourcePath, destinationPath, basePath, strategyContext);
case CompressionMode.TarGz:
return new TarCompressor(sourcePath, destinationPath, basePath, strategyContext);
default:
throw new NotSupportedException($"Compression mode '{mode}' is not supported.");
}
}
throw new ArgumentException("Source path must be a file or directory.", nameof(sourcePath));
}
}