Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@ The repository contains 3 projects:
| UploadDirectory | UploadDirectory | [UploadDirectory](https://github.com/relativitydev/relativity-transfer-sdk-samples/blob/main/Source/Relativity.Transfer.SDK.Samples.Repository/FullPathWorkflow/UploadDirectory.cs) |
| UploadDirectoryWithCustomizedRetryPolicy | UploadDirectory | [UploadDirectoryWithCustomizedRetryPolicy](https://github.com/relativitydev/relativity-transfer-sdk-samples/blob/main/Source/Relativity.Transfer.SDK.Samples.Repository/FullPathWorkflow/UploadDirectoryWithCustomizedRetryPolicy.cs) |
| UploadDirectoryWithExclusionPolicy | UploadDirectory | [UploadDirectoryWithExclusionPolicy](https://github.com/relativitydev/relativity-transfer-sdk-samples/blob/main/Source/Relativity.Transfer.SDK.Samples.Repository/FullPathWorkflow/UploadDirectoryWithExclusionPolicy.cs) |
| CloudUpload | CloudUpload | [CloudUpload](https://github.com/relativitydev/relativity-transfer-sdk-samples/blob/main/Source/Relativity.Transfer.SDK.Samples.Repository/FullPathWorkflow/CloudUpload.cs) |
| UploadFile | UploadFile | [UploadFile](https://github.com/relativitydev/relativity-transfer-sdk-samples/blob/main/Source/Relativity.Transfer.SDK.Samples.Repository/FullPathWorkflow/UploadFile.cs) |
| UploadItems | UploadFile | [UploadItems](https://github.com/relativitydev/relativity-transfer-sdk-samples/blob/main/Source/Relativity.Transfer.SDK.Samples.Repository/FullPathWorkflow/UploadItems.cs) |
| UploadToFilesharePathBasedOnWorkspaceId | UploadDirectoryByWorkspaceId | [UploadToFilesharePathBasedOnWorkspaceId](https://github.com/relativitydev/relativity-transfer-sdk-samples/blob/main/Source/Relativity.Transfer.SDK.Samples.Repository/FullPathWorkflow/UploadToFileSharePathBasedOnWorkspaceId.cs) |
Expand Down
6 changes: 0 additions & 6 deletions Source/Relativity.Transfer.SDK.Samples.CLI/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,6 @@
using Relativity.Transfer.SDK.Samples.Core.Runner;
using Relativity.Transfer.SDK.Samples.Core.Services;
using Relativity.Transfer.SDK.Samples.Core.UI;
using Relativity.Transfer.SDK.Samples.Repository.FullPathWorkflow;
using Relativity.Transfer.SDK.Samples.Repository.JobBasedWorkflow;
using FullPathWorkflowUploadDirectory = Relativity.Transfer.SDK.Samples.Repository.FullPathWorkflow.UploadDirectory;
using FullPathWorkflowDownloadDirectory = Relativity.Transfer.SDK.Samples.Repository.FullPathWorkflow.DownloadDirectory;
using JobBasedWorkflowUploadDirectory = Relativity.Transfer.SDK.Samples.Repository.JobBasedWorkflow.UploadDirectory;
using JobBasedWorkflowDownloadDirectory = Relativity.Transfer.SDK.Samples.Repository.JobBasedWorkflow.DownloadDirectory;

namespace Relativity.Transfer.SDK.Samples.CLI;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,10 @@
<ItemGroup>
<PackageReference Include="ByteSize" Version="2.1.2" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
<PackageReference Include="Relativity.Transfer.SDK" Version="2.1.2" />
<PackageReference Include="Spectre.Console" Version="0.48.0" />
<PackageReference Include="System.Configuration.ConfigurationManager" Version="8.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="8.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="8.0.0" />
<PackageReference Include="System.Text.Json" Version="8.0.4" />
</ItemGroup>

<ItemGroup>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ internal enum SampleOrder
UploadFile,
UploadItems,
UploadDirectory,
CloudUpload,
UploadDirectoryWithCustomizedRetryPolicy,
UploadDirectoryWithExclusionPolicy,
DownloadFile,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ internal enum TransferType
UploadDirectory,
UploadFile,
UploadItems,
CloudUpload,
DownloadDirectory,
DownloadFile,
UploadDirectoryByWorkspaceId,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,17 +1,21 @@
namespace Relativity.Transfer.SDK.Samples.Core.Configuration;
using System;

namespace Relativity.Transfer.SDK.Samples.Core.Configuration;

internal record Configuration(
CommonConfiguration Common,
SourceAndDestinationConfiguration UploadFile,
SourceAndDestinationConfiguration UploadDirectory,
SourceAndDestinationConfiguration CloudUpload,
SourceAndDestinationConfiguration DownloadFile,
SourceAndDestinationConfiguration DownloadDirectory,
SourceAndWorkspaceIdConfiguration UploadDirectoryByWorkspaceId,
TwoSourcesAndDestinationConfiguration UploadDirectoryBasedOnExistingJob,
SourceAndTwoDestinationsConfiguration DownloadDirectoryBasedOnExistingJob)
{
public void Deconstruct(out CommonConfiguration common, out SourceAndDestinationConfiguration uploadFile,
out SourceAndDestinationConfiguration uploadDirectory, out SourceAndDestinationConfiguration downloadFile,
out SourceAndDestinationConfiguration uploadDirectory, out SourceAndDestinationConfiguration cloudUpload,
out SourceAndDestinationConfiguration downloadFile,
out SourceAndDestinationConfiguration downloadDirectory,
out SourceAndWorkspaceIdConfiguration uploadDirectoryByWorkspaceId,
out TwoSourcesAndDestinationConfiguration uploadDirectoryBasedOnExistingJob,
Expand All @@ -20,6 +24,7 @@ public void Deconstruct(out CommonConfiguration common, out SourceAndDestination
common = Common;
uploadFile = UploadFile;
uploadDirectory = UploadDirectory;
cloudUpload = CloudUpload;
downloadFile = DownloadFile;
downloadDirectory = DownloadDirectory;
uploadDirectoryByWorkspaceId = UploadDirectoryByWorkspaceId;
Expand All @@ -35,6 +40,21 @@ internal static Configuration ForUploadDirectory(CommonConfiguration common,
uploadDirectory,
new SourceAndDestinationConfiguration(string.Empty, string.Empty),
new SourceAndDestinationConfiguration(string.Empty, string.Empty),
new SourceAndDestinationConfiguration(string.Empty, string.Empty),
new SourceAndWorkspaceIdConfiguration(string.Empty, -1),
new TwoSourcesAndDestinationConfiguration(string.Empty, string.Empty, string.Empty),
new SourceAndTwoDestinationsConfiguration(string.Empty, string.Empty, string.Empty));
}

internal static Configuration ForCloudUpload(CommonConfiguration common,
SourceAndDestinationConfiguration cloudUpload)
{
return new Configuration(common,
new SourceAndDestinationConfiguration(string.Empty, string.Empty),
new SourceAndDestinationConfiguration(string.Empty, string.Empty),
cloudUpload,
new SourceAndDestinationConfiguration(string.Empty, string.Empty),
new SourceAndDestinationConfiguration(string.Empty, string.Empty),
new SourceAndWorkspaceIdConfiguration(string.Empty, -1),
new TwoSourcesAndDestinationConfiguration(string.Empty, string.Empty, string.Empty),
new SourceAndTwoDestinationsConfiguration(string.Empty, string.Empty, string.Empty));
Expand All @@ -47,6 +67,8 @@ internal static Configuration ForUploadFile(CommonConfiguration common,
uploadFile,
new SourceAndDestinationConfiguration(string.Empty, string.Empty),
new SourceAndDestinationConfiguration(string.Empty, string.Empty),
new SourceAndDestinationConfiguration(string.Empty, string.Empty),

new SourceAndDestinationConfiguration(string.Empty, string.Empty),
new SourceAndWorkspaceIdConfiguration(string.Empty, -1),
new TwoSourcesAndDestinationConfiguration(string.Empty, string.Empty, string.Empty),
Expand All @@ -61,6 +83,7 @@ internal static Configuration ForUploadItems(CommonConfiguration common,
new SourceAndDestinationConfiguration(string.Empty, string.Empty),
new SourceAndDestinationConfiguration(string.Empty, string.Empty),
new SourceAndDestinationConfiguration(string.Empty, string.Empty),
new SourceAndDestinationConfiguration(string.Empty, string.Empty),
new SourceAndWorkspaceIdConfiguration(string.Empty, -1),
new TwoSourcesAndDestinationConfiguration(string.Empty, string.Empty, string.Empty),
new SourceAndTwoDestinationsConfiguration(string.Empty, string.Empty, string.Empty));
Expand All @@ -73,6 +96,7 @@ internal static Configuration ForDownloadDirectory(CommonConfiguration common,
new SourceAndDestinationConfiguration(string.Empty, string.Empty),
new SourceAndDestinationConfiguration(string.Empty, string.Empty),
new SourceAndDestinationConfiguration(string.Empty, string.Empty),
new SourceAndDestinationConfiguration(string.Empty, string.Empty),
downloadDirectory,
new SourceAndWorkspaceIdConfiguration(string.Empty, -1),
new TwoSourcesAndDestinationConfiguration(string.Empty, string.Empty, string.Empty),
Expand All @@ -83,6 +107,7 @@ internal static Configuration ForDownloadFile(CommonConfiguration common,
SourceAndDestinationConfiguration downloadFile)
{
return new Configuration(common,
new SourceAndDestinationConfiguration(string.Empty, string.Empty),
new SourceAndDestinationConfiguration(string.Empty, string.Empty),
new SourceAndDestinationConfiguration(string.Empty, string.Empty),
downloadFile,
Expand All @@ -100,6 +125,7 @@ internal static Configuration ForUploadDirectoryByWorkspaceId(CommonConfiguratio
new SourceAndDestinationConfiguration(string.Empty, string.Empty),
new SourceAndDestinationConfiguration(string.Empty, string.Empty),
new SourceAndDestinationConfiguration(string.Empty, string.Empty),
new SourceAndDestinationConfiguration(string.Empty, string.Empty),
uploadDirectory,
new TwoSourcesAndDestinationConfiguration(string.Empty, string.Empty, string.Empty),
new SourceAndTwoDestinationsConfiguration(string.Empty, string.Empty, string.Empty));
Expand All @@ -113,6 +139,7 @@ internal static Configuration ForUploadDirectoryBasedOnExistingJob(CommonConfigu
new SourceAndDestinationConfiguration(string.Empty, string.Empty),
new SourceAndDestinationConfiguration(string.Empty, string.Empty),
new SourceAndDestinationConfiguration(string.Empty, string.Empty),
new SourceAndDestinationConfiguration(string.Empty, string.Empty),
new SourceAndWorkspaceIdConfiguration(string.Empty, -1),
uploadDirectory,
new SourceAndTwoDestinationsConfiguration(string.Empty, string.Empty, string.Empty));
Expand All @@ -126,6 +153,7 @@ internal static Configuration ForDownloadDirectoryBasedOnExistingJob(CommonConfi
new SourceAndDestinationConfiguration(string.Empty, string.Empty),
new SourceAndDestinationConfiguration(string.Empty, string.Empty),
new SourceAndDestinationConfiguration(string.Empty, string.Empty),
new SourceAndDestinationConfiguration(string.Empty, string.Empty),
new SourceAndWorkspaceIdConfiguration(string.Empty, -1),
new TwoSourcesAndDestinationConfiguration(string.Empty, string.Empty, string.Empty),
downloadDirectory);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,18 @@ public void PrintCreatingTransfer(Guid jobId, PathBase source, PathBase destinat
AnsiConsole.WriteLine();
}

public void PrintCreatingTransfer(Guid jobId, CloudLocation source, PathBase destination, params string[] additionalLines)
{
AnsiConsole.WriteLine();
AnsiConsole.MarkupLine($"Creating transfer [green]{jobId}[/]:");
if (source != null) AnsiConsole.MarkupLine($"\tFrom: [purple3]{source}[/]");
if (destination != null) AnsiConsole.MarkupLine($"\tTo: [orange4]{destination}[/]");

AddAdditionalLinesIfRequired(additionalLines);

AnsiConsole.WriteLine();
}

public void PrintTransferResult(TransferJobResult result, string headerLine = "Transfer has finished:",
bool waitForKeyHit = true)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ internal interface IConsoleLogger
{
Task PrintExitMessageAsync();
void PrintCreatingTransfer(Guid jobId, PathBase source, PathBase destination, params string[] additionalLines);
void PrintCreatingTransfer(Guid jobId, CloudLocation source, PathBase destination, params string[] additionalLines);
void PrintTransferResult(TransferJobResult result, string headerLine = "Transfer has finished:", bool waitForKeyHit = true);
void Info(string msg);
void PrintError(Exception exception);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,13 @@
<ItemGroup>
<PackageReference Include="ByteSize" Version="2.1.2" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
<PackageReference Include="Relativity.Transfer.SDK" Version="2.1.2" />
<PackageReference Include="Relativity.Transfer.SDK" Version="4.2.1" />
<PackageReference Include="Spectre.Console" Version="0.48.0" />
<PackageReference Include="System.Configuration.ConfigurationManager" Version="8.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="8.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="8.0.0" />
<PackageReference Include="Microsoft.CSharp" Version="4.7.0" />
<PackageReference Include="System.Text.Json" Version="8.0.4" />
<PackageReference Include="System.Text.Json" Version="8.0.5" />
<PackageReference Include="System.Xml.ReaderWriter" Version="4.3.1" />
</ItemGroup>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,8 @@ private Configuration.Configuration AskForParameters(Configuration.Configuration
SampleAttribute sampleAttribute)
{
PrintTitle("Sample configuration (press enter to use default value)");
var newCommon = AskForCommonParameters(configuration);

var newCommon = sampleAttribute.TransferType == TransferType.CloudUpload ? AskForCloudUploadParameters(configuration) : AskForCommonParameters(configuration);

return AskForTransferTypeSpecificParameters(configuration, sampleAttribute, newCommon);
}
Expand All @@ -53,6 +54,12 @@ private Configuration.Configuration AskForTransferTypeSpecificParameters(

return Configuration.Configuration.ForUploadDirectory(common,
new SourceAndDestinationConfiguration(source, destination));

case TransferType.CloudUpload:
source = AnsiConsole.Ask("Source SasURL", configuration.CloudUpload.Source);
destination = AnsiConsole.Ask("Destination directory", GetDefaultUploadDirectoryDestination(common, configuration.CloudUpload.Destination));

return Configuration.Configuration.ForCloudUpload(common, new SourceAndDestinationConfiguration(source, destination));

case TransferType.UploadFile:
source = AnsiConsole.Ask("Source file", configuration.UploadFile.Source);
Expand Down Expand Up @@ -175,6 +182,22 @@ private static CommonConfiguration AskForCommonParameters(Configuration.Configur
JobId = jobId
};
}

private static CommonConfiguration AskForCloudUploadParameters(Configuration.Configuration configuration)
{
AnsiConsole.MarkupLine($"Client name [green]({configuration.Common.ClientName})[/]");
var jobId = Guid.NewGuid();
AnsiConsole.MarkupLine($"Job ID [green]({jobId})[/]");
var instanceUrl = AnsiConsole.Ask("Instance URL", configuration.Common.InstanceUrl);
var clientId = AnsiConsole.Ask("Client secret ID", configuration.Common.OAuthCredentials.ClientId);
var clientSecret = AnsiConsole.Ask("Client secret", configuration.Common.OAuthCredentials.ClientSecret);

return new CommonConfiguration(configuration.Common.ClientName, instanceUrl, string.Empty,
string.Empty, new OAuthCredentials(clientId, clientSecret))
{
JobId = jobId
};
}

private static void PrintDescription(SampleAttribute sampleAttribute)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,12 @@
// Should be an UNC format path to the directory on RelativityOne fileshare.
"Destination": ""
},
"CloudUpload": {
// Should be a Azure DataLake Storage SasURL with Read and List permissions.
"Source": "",
// Should be an UNC format path to the directory on RelativityOne fileshare.
"Destination": ""
},
"DownloadFile": {
// Should be an UNC format path to the file RelativityOne fileshare.
"Source": "",
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
using System.Threading;
using System.Threading.Tasks;
using Relativity.Transfer.SDK.Interfaces.Options;
using Relativity.Transfer.SDK.Interfaces.Paths;
using Relativity.Transfer.SDK.Samples.Core.Attributes;
using Relativity.Transfer.SDK.Samples.Core.Authentication;
using Relativity.Transfer.SDK.Samples.Core.Configuration;
using Relativity.Transfer.SDK.Samples.Core.Helpers;
using Relativity.Transfer.SDK.Samples.Core.ProgressHandler;
using Relativity.Transfer.SDK.Samples.Core.Runner;

namespace Relativity.Transfer.SDK.Samples.Repository.FullPathWorkflow;

[Sample(SampleOrder.CloudUpload,
"Cloud upload",
"The sample illustrates how to implement Cloud (Azure ADLS) upload to a RelativityOne file share. ",
typeof(CloudUpload),
TransferType.CloudUpload)]
internal class CloudUpload : ISample
{
private readonly IConsoleLogger _consoleLogger;
private readonly IPathExtension _pathExtension;
private readonly IRelativityAuthenticationProviderFactory _relativityAuthenticationProviderFactory;
private readonly IProgressHandlerFactory _progressHandlerFactory;

public CloudUpload(IConsoleLogger consoleLogger, IPathExtension pathExtension, IRelativityAuthenticationProviderFactory relativityAuthenticationProviderFactory, IProgressHandlerFactory progressHandlerFactory)
{
_consoleLogger = consoleLogger;
_pathExtension = pathExtension;
_relativityAuthenticationProviderFactory = relativityAuthenticationProviderFactory;
_progressHandlerFactory = progressHandlerFactory;
}

public async Task ExecuteAsync(Configuration configuration, CancellationToken token)
{
var clientName = configuration.Common.ClientName;
var jobId = configuration.Common.JobId;
var source = new CloudLocation(configuration.CloudUpload.Source);
var destination = string.IsNullOrWhiteSpace(configuration.CloudUpload.Destination)
? _pathExtension.GetDefaultRemoteDirectoryPathForUpload(configuration.Common)
: new DirectoryPath(configuration.CloudUpload.Destination);
var authenticationProvider = _relativityAuthenticationProviderFactory.Create(configuration.Common);
var progressHandler = _progressHandlerFactory.Create();

// The builder follows the Fluent convention, and more options will be added in the future. The only required component (besides the client name)
// is the authentication provider - a provided one that utilizes an OAuth-based approach has been provided, but the custom implementation can be created.
var transferClient = TransferClientBuilder.FullPathWorkflow
.WithAuthentication(authenticationProvider)
.WithClientName(clientName)
.WithStagingExplorerContext()
.Build();

_consoleLogger.PrintCreatingTransfer(jobId, source, destination);

var result = await transferClient
.CloudUploadAsync(jobId, source, destination, new CloudUploadOptions(), progressHandler, token)
.ConfigureAwait(false);

_consoleLogger.PrintTransferResult(result);
}
}
Loading