From d1b288688e893cc789a39ddabe7c9017bfde5aa8 Mon Sep 17 00:00:00 2001 From: Klaus Jonke Date: Wed, 6 May 2020 12:55:47 +0200 Subject: [PATCH 1/7] Added CaseInstance and Migration Services --- Camunda.Api.Client/Batch/BatchInfo.cs | 4 + Camunda.Api.Client/CamundaClient.cs | 6 + .../CaseInstanceBinaryVariableValue.cs | 17 +++ .../CaseInstanceDeleteVariable.cs | 14 +++ .../CaseInstance/CaseInstanceModifications.cs | 18 +++ .../CaseInstance/CaseInstanceQuery.cs | 63 ++++++++++ .../CaseInstance/CaseInstanceQueryVariable.cs | 20 ++++ .../CaseInstance/CaseInstanceResource.cs | 110 ++++++++++++++++++ .../CaseInstance/CaseInstanceService.cs | 21 ++++ .../CaseInstance/CaseInstanceSorting.cs | 10 ++ .../CaseInstance/CaseInstanceVariableValue.cs | 14 +++ .../CaseInstance/ChangeCaseInstanceState.cs | 18 +++ .../CaseInstance/ICaseInstanceRestService.cs | 54 +++++++++ .../CaseInstance/ICaseInstanceService.cs | 8 ++ .../Migration/IMigrationRestService.cs | 22 ++++ .../Migration/MigrationExecutionRequest.cs | 39 +++++++ .../Migration/MigrationInstruction.cs | 26 +++++ .../Migration/MigrationInstructionReport.cs | 20 ++++ Camunda.Api.Client/Migration/MigrationPlan.cs | 26 +++++ .../Migration/MigrationPlanRequest.cs | 25 ++++ .../Migration/MigrationService.cs | 46 ++++++++ 21 files changed, 581 insertions(+) create mode 100644 Camunda.Api.Client/CaseInstance/CaseInstanceBinaryVariableValue.cs create mode 100644 Camunda.Api.Client/CaseInstance/CaseInstanceDeleteVariable.cs create mode 100644 Camunda.Api.Client/CaseInstance/CaseInstanceModifications.cs create mode 100644 Camunda.Api.Client/CaseInstance/CaseInstanceQuery.cs create mode 100644 Camunda.Api.Client/CaseInstance/CaseInstanceQueryVariable.cs create mode 100644 Camunda.Api.Client/CaseInstance/CaseInstanceResource.cs create mode 100644 Camunda.Api.Client/CaseInstance/CaseInstanceService.cs create mode 100644 Camunda.Api.Client/CaseInstance/CaseInstanceSorting.cs create mode 100644 Camunda.Api.Client/CaseInstance/CaseInstanceVariableValue.cs create mode 100644 Camunda.Api.Client/CaseInstance/ChangeCaseInstanceState.cs create mode 100644 Camunda.Api.Client/CaseInstance/ICaseInstanceRestService.cs create mode 100644 Camunda.Api.Client/CaseInstance/ICaseInstanceService.cs create mode 100644 Camunda.Api.Client/Migration/IMigrationRestService.cs create mode 100644 Camunda.Api.Client/Migration/MigrationExecutionRequest.cs create mode 100644 Camunda.Api.Client/Migration/MigrationInstruction.cs create mode 100644 Camunda.Api.Client/Migration/MigrationInstructionReport.cs create mode 100644 Camunda.Api.Client/Migration/MigrationPlan.cs create mode 100644 Camunda.Api.Client/Migration/MigrationPlanRequest.cs create mode 100644 Camunda.Api.Client/Migration/MigrationService.cs diff --git a/Camunda.Api.Client/Batch/BatchInfo.cs b/Camunda.Api.Client/Batch/BatchInfo.cs index 55e70da..d20fb2d 100644 --- a/Camunda.Api.Client/Batch/BatchInfo.cs +++ b/Camunda.Api.Client/Batch/BatchInfo.cs @@ -44,5 +44,9 @@ public class BatchInfo /// The tenant id of the batch. /// public string TenantId; + /// + /// The id of the user that created the batch. + /// + public string CreateUserId; } } diff --git a/Camunda.Api.Client/CamundaClient.cs b/Camunda.Api.Client/CamundaClient.cs index fa296f7..7ec1923 100644 --- a/Camunda.Api.Client/CamundaClient.cs +++ b/Camunda.Api.Client/CamundaClient.cs @@ -18,6 +18,7 @@ using Camunda.Api.Client.Job; using Camunda.Api.Client.JobDefinition; using Camunda.Api.Client.Message; +using Camunda.Api.Client.Migration; using Camunda.Api.Client.ProcessDefinition; using Camunda.Api.Client.ProcessInstance; using Camunda.Api.Client.Signal; @@ -41,6 +42,7 @@ public class CamundaClient private Lazy _incidentApi; private Lazy _jobDefinitionApi; private Lazy _jobApi; + private Lazy _migrationRestService; private Lazy _messageApi; private Lazy _processDefinitionApi; private Lazy _processInstanceApi; @@ -199,6 +201,7 @@ private void CreateServices() _jobApi = CreateService(); _jobDefinitionApi = CreateService(); _messageApi = CreateService(); + _migrationRestService = CreateService(); _processDefinitionApi = CreateService(); _processInstanceApi = CreateService(); _signalApi = CreateService(); @@ -281,6 +284,9 @@ public static CamundaClient Create(HttpClient httpClient) /// public MessageService Messages => new MessageService(_messageApi.Value); + /// + public MigrationService Migrations => new MigrationService(_migrationRestService.Value); + /// public ProcessDefinitionService ProcessDefinitions => new ProcessDefinitionService(_processDefinitionApi.Value); diff --git a/Camunda.Api.Client/CaseInstance/CaseInstanceBinaryVariableValue.cs b/Camunda.Api.Client/CaseInstance/CaseInstanceBinaryVariableValue.cs new file mode 100644 index 0000000..6cda027 --- /dev/null +++ b/Camunda.Api.Client/CaseInstance/CaseInstanceBinaryVariableValue.cs @@ -0,0 +1,17 @@ +#region Usings + +using Newtonsoft.Json; + +#endregion + +namespace Camunda.Api.Client.CaseInstance +{ + public class CaseInstanceBinaryVariableValue + { + [JsonProperty("data")] + public string Data; + + [JsonProperty("valueType")] + public BinaryVariableType ValueType; + } +} diff --git a/Camunda.Api.Client/CaseInstance/CaseInstanceDeleteVariable.cs b/Camunda.Api.Client/CaseInstance/CaseInstanceDeleteVariable.cs new file mode 100644 index 0000000..d26fed2 --- /dev/null +++ b/Camunda.Api.Client/CaseInstance/CaseInstanceDeleteVariable.cs @@ -0,0 +1,14 @@ +#region Usings + +using Newtonsoft.Json; + +#endregion + +namespace Camunda.Api.Client.CaseInstance +{ + public class CaseInstanceDeleteVariable + { + [JsonProperty("name")] + public string Name; + } +} diff --git a/Camunda.Api.Client/CaseInstance/CaseInstanceModifications.cs b/Camunda.Api.Client/CaseInstance/CaseInstanceModifications.cs new file mode 100644 index 0000000..ff24a8d --- /dev/null +++ b/Camunda.Api.Client/CaseInstance/CaseInstanceModifications.cs @@ -0,0 +1,18 @@ +#region Usings + +using System.Collections.Generic; +using Newtonsoft.Json; + +#endregion + +namespace Camunda.Api.Client.CaseInstance +{ + public class CaseInstanceModifications + { + [JsonProperty("modifications")] + public Dictionary Modifications; + + [JsonProperty("deletions")] + public List Deletions; + } +} diff --git a/Camunda.Api.Client/CaseInstance/CaseInstanceQuery.cs b/Camunda.Api.Client/CaseInstance/CaseInstanceQuery.cs new file mode 100644 index 0000000..b0b14ef --- /dev/null +++ b/Camunda.Api.Client/CaseInstance/CaseInstanceQuery.cs @@ -0,0 +1,63 @@ +#region Usings + +using System.Collections.Generic; +using Newtonsoft.Json; + +#endregion + +namespace Camunda.Api.Client.CaseInstance +{ + public class CaseInstanceQuery + { + [JsonProperty("caseInstanceId")] + public string CaseInstanceId; + + [JsonProperty("businessKey")] + public string BusinessKey; + + [JsonProperty("caseDefinitionId")] + public string CaseDefinitionId; + + [JsonProperty("caseDefinitionKey")] + public string CaseDefinitionKey; + + [JsonProperty("deploymentId")] + public string DeploymentId; + + [JsonProperty("superProcessInstance")] + public string SuperProcessInstance; + + [JsonProperty("subProcessInstance")] + public string SubProcessInstance; + + [JsonProperty("superCaseInstance")] + public string SuperCaseInstance; + + [JsonProperty("subCaseInstance")] + public string SubCaseInstance; + + [JsonProperty("active")] + public bool? Active; + + [JsonProperty("completed")] + public bool? Completed; + + [JsonProperty("tenantIdIn")] + public List TenantIdIn; + + [JsonProperty("withoutTenantId")] + public bool? WithoutTenantId; + + [JsonProperty("variables")] + public List Variables; + + [JsonProperty("variableNamesIgnoreCase")] + public bool VariableNamesIgnoreCase; + + [JsonProperty("variableValuesIgnoreCase")] + public bool VariableValuesIgnoreCase; + + [JsonProperty("sorting")] + public List Sorting; + } +} diff --git a/Camunda.Api.Client/CaseInstance/CaseInstanceQueryVariable.cs b/Camunda.Api.Client/CaseInstance/CaseInstanceQueryVariable.cs new file mode 100644 index 0000000..c9ec3fc --- /dev/null +++ b/Camunda.Api.Client/CaseInstance/CaseInstanceQueryVariable.cs @@ -0,0 +1,20 @@ +#region Usings + +using Newtonsoft.Json; + +#endregion + +namespace Camunda.Api.Client.CaseInstance +{ + public class CaseInstanceQueryVariable + { + [JsonProperty("name")] + public string Name; + + [JsonProperty("operator")] + public ConditionOperator Operator; + + [JsonProperty("value")] + public object Value; + } +} diff --git a/Camunda.Api.Client/CaseInstance/CaseInstanceResource.cs b/Camunda.Api.Client/CaseInstance/CaseInstanceResource.cs new file mode 100644 index 0000000..3ae8675 --- /dev/null +++ b/Camunda.Api.Client/CaseInstance/CaseInstanceResource.cs @@ -0,0 +1,110 @@ +#region Usings + +using System.Collections.Generic; +using System.Net; +using System.Threading.Tasks; + +#endregion + +namespace Camunda.Api.Client.CaseInstance +{ + public class CaseInstanceResource + { + private string _caseInstanceId; + private ICaseInstanceRestService _api; + + internal CaseInstanceResource(ICaseInstanceRestService api, string caseInstanceId) + { + _api = api; + _caseInstanceId = caseInstanceId; + } + + /// + /// Retrieves a case instance by id, according to the CaseInstance interface in the engine. + /// + /// corresponding case instance basis info + public Task Get() => _api.Get(_caseInstanceId); + + /// + /// Retrieves all variables of a given case instance by id. + /// + /// Determines whether serializable variable values (typically variables that store custom Java objects) should be deserialized on server side (default true). Note: While true is the default value for reasons of backward compatibility, we recommend setting this parameter to false when developing web applications that are independent of the Java process applications deployed to the engine. + /// variables key-value pairs. Each key is a variable name and each value a variable value object + public Task> GetVariables(bool? deserializeValues) => + _api.GetVariables(_caseInstanceId, deserializeValues); + + /// + /// Retrieves a variable of a given case instance by id. + /// + /// The name of the variable to get. + /// Determines whether serializable variable values (typically variables that store custom Java objects) should be deserialized on server side (default true). Note: While true is the default value for reasons of backward compatibility, we recommend setting this parameter to false when developing web applications that are independent of the Java process applications deployed to the engine. + /// corresponding variable value object + public Task GetVariableValue(string varName, bool? deserializeValue) => + _api.GetVariableValue(_caseInstanceId, varName, deserializeValue); + + /// + /// Retrieves a binary variable of a given case instance by id. Applicable for byte array and file variables. + /// + /// The name of the variable to get. + /// + public Task GetVariableValueBinary(string varName) => + _api.GetVariableValueBinary(_caseInstanceId, varName); + + /// + /// Updates or deletes the variables of a case instance. Please note: deletion precedes update. + /// + /// an object containing deletions and updates + /// + public Task ModifyVariables(CaseInstanceModifications modifications) => + _api.ModifyVariables(_caseInstanceId, modifications); + + /// + /// Sets a variable of a given case instance by id. + /// + /// The name of the variable to set. + /// variable value object + /// + public Task UpdateVariable(string varName, VariableValue value) => + _api.UpdateVariable(_caseInstanceId, varName, value); + + /// + /// Deletes a variable of a given case instance by id. + /// + /// The name of the variable to delete. + /// + public Task DeleteVariable(string varName) => _api.DeleteVariable(_caseInstanceId, varName); + + /// + /// Sets the serialized value for a binary variable or the binary value for a file variable. + /// + /// The name of the variable to set. + /// + /// + public Task SetVariableBinary(string varName, CaseInstanceBinaryVariableValue value) => + _api.SetVariableBinary(_caseInstanceId, varName, value); + + /// + /// Performs a transition from ACTIVE state to COMPLETED state. In relation to the state transition, it is possible to update or delete case instance variables (please note: deletion precedes update). + /// + /// contains variables to delete or update + /// + public Task Complete(ChangeCaseInstanceState completeCaseInstanceState) => + _api.Complete(_caseInstanceId, completeCaseInstanceState); + + /// + /// Performs a transition from COMPLETED state to CLOSED state. In relation to the state transition, it is possible to update or delete case instance variables (please note: deletion precedes update). + /// + /// contains variables to delete or update + /// + public Task Close(ChangeCaseInstanceState closeCaseInstanceState) => + _api.Close(_caseInstanceId, closeCaseInstanceState); + + /// + /// Performs a transition from ACTIVE state to TERMINATED state. In relation to the state transition, it is possible to update or delete case instance variables (please note: deletion precedes update). + /// + /// contains variables to delete or update + /// + public Task Terminate(ChangeCaseInstanceState terminateCaseInstanceState) => + _api.Terminate(_caseInstanceId, terminateCaseInstanceState); + } +} diff --git a/Camunda.Api.Client/CaseInstance/CaseInstanceService.cs b/Camunda.Api.Client/CaseInstance/CaseInstanceService.cs new file mode 100644 index 0000000..9221eed --- /dev/null +++ b/Camunda.Api.Client/CaseInstance/CaseInstanceService.cs @@ -0,0 +1,21 @@ +namespace Camunda.Api.Client.CaseInstance +{ + public class CaseInstanceService : ICaseInstanceService + { + private ICaseInstanceRestService _api; + + internal CaseInstanceService(ICaseInstanceRestService api) + { + _api = api; + } + + public QueryResource Query(CaseInstanceQuery query = null) => + new QueryResource( + query, + (q, f, m) => _api.GetList(q, f, m), + q => _api.GetListCount(q)); + + /// Id of specific case instance + public CaseInstanceResource this[string caseInstanceId] => new CaseInstanceResource(_api, caseInstanceId); + } +} diff --git a/Camunda.Api.Client/CaseInstance/CaseInstanceSorting.cs b/Camunda.Api.Client/CaseInstance/CaseInstanceSorting.cs new file mode 100644 index 0000000..442f6c1 --- /dev/null +++ b/Camunda.Api.Client/CaseInstance/CaseInstanceSorting.cs @@ -0,0 +1,10 @@ +namespace Camunda.Api.Client.CaseInstance +{ + public enum CaseInstanceSorting + { + CaseInstanceId, + CaseDefinitionKey, + CaseDefinitionId, + TenantId + } +} diff --git a/Camunda.Api.Client/CaseInstance/CaseInstanceVariableValue.cs b/Camunda.Api.Client/CaseInstance/CaseInstanceVariableValue.cs new file mode 100644 index 0000000..9c63a72 --- /dev/null +++ b/Camunda.Api.Client/CaseInstance/CaseInstanceVariableValue.cs @@ -0,0 +1,14 @@ +#region Usings + +using Newtonsoft.Json; + +#endregion + +namespace Camunda.Api.Client.CaseInstance +{ + public class CaseInstanceVariableValue : VariableValue + { + [JsonProperty("local")] + public bool Local; + } +} diff --git a/Camunda.Api.Client/CaseInstance/ChangeCaseInstanceState.cs b/Camunda.Api.Client/CaseInstance/ChangeCaseInstanceState.cs new file mode 100644 index 0000000..c2c76c0 --- /dev/null +++ b/Camunda.Api.Client/CaseInstance/ChangeCaseInstanceState.cs @@ -0,0 +1,18 @@ +#region Usings + +using System.Collections.Generic; +using Newtonsoft.Json; + +#endregion + +namespace Camunda.Api.Client.CaseInstance +{ + public class ChangeCaseInstanceState + { + [JsonProperty("variables")] + public Dictionary Variables; + + [JsonProperty("deletions")] + public List Deletions; + } +} diff --git a/Camunda.Api.Client/CaseInstance/ICaseInstanceRestService.cs b/Camunda.Api.Client/CaseInstance/ICaseInstanceRestService.cs new file mode 100644 index 0000000..211bd35 --- /dev/null +++ b/Camunda.Api.Client/CaseInstance/ICaseInstanceRestService.cs @@ -0,0 +1,54 @@ +#region Usings + +using System.Collections.Generic; +using System.Net; +using System.Threading.Tasks; +using Refit; + +#endregion + +namespace Camunda.Api.Client.CaseInstance +{ + internal interface ICaseInstanceRestService + { + [Get("/case-instance/{id}/variables")] + Task> GetVariables(string id, bool? deserializeValues); + + [Get("/case-instance/{id}/variables/{varName}")] + Task GetVariableValue(string id, string varName, bool? deserializeValue); + + // TODO: check if HttpWebResponse is indeed the correct return type + [Get("/case-instance/{id}/variables/{varName}/data")] + Task GetVariableValueBinary(string id, string varName); + + [Post("/case-instance/{id}/variables")] + Task ModifyVariables(string id, [Body] CaseInstanceModifications modifications); + + [Put("/case-instance/{id}/variables/{varName}")] + Task UpdateVariable(string id, string varName, [Body] VariableValue value); + + [Post("/case-instance/{id}/variables/{varName}/data")] + Task SetVariableBinary(string id, string varName, [Body] CaseInstanceBinaryVariableValue value); + + [Delete("/case-instance/{id}/variables/{varName}")] + Task DeleteVariable(string id, string varName); + + [Get("/case-instance/{id}")] + Task Get(string id); + + [Post("/case-instance")] + Task> GetList([Body] CaseInstanceQuery query, int? firstResult, int? maxResults); + + [Post("/case-instance/count")] + Task GetListCount([Body] CaseInstanceQuery query); + + [Post("/case-instance/{id}/complete")] + Task Complete(string id, [Body] ChangeCaseInstanceState completeCaseInstance); + + [Post("/case-instance/{id}/close")] + Task Close(string id, [Body] ChangeCaseInstanceState closeCaseInstance); + + [Post("/case-instance/{id}/terminate")] + Task Terminate(string id, [Body] ChangeCaseInstanceState terminateCaseInstance); + } +} diff --git a/Camunda.Api.Client/CaseInstance/ICaseInstanceService.cs b/Camunda.Api.Client/CaseInstance/ICaseInstanceService.cs new file mode 100644 index 0000000..c65d63a --- /dev/null +++ b/Camunda.Api.Client/CaseInstance/ICaseInstanceService.cs @@ -0,0 +1,8 @@ +namespace Camunda.Api.Client.CaseInstance +{ + public interface ICaseInstanceService + { + QueryResource Query(CaseInstanceQuery query = null); + CaseInstanceResource this[string caseInstanceId] { get; } + } +} \ No newline at end of file diff --git a/Camunda.Api.Client/Migration/IMigrationRestService.cs b/Camunda.Api.Client/Migration/IMigrationRestService.cs new file mode 100644 index 0000000..a625a49 --- /dev/null +++ b/Camunda.Api.Client/Migration/IMigrationRestService.cs @@ -0,0 +1,22 @@ +using System.Collections.Generic; +using System.Threading.Tasks; +using Camunda.Api.Client.Batch; +using Refit; + +namespace Camunda.Api.Client.Migration +{ + internal interface IMigrationRestService + { + [Post("/migration/generate")] + Task Generate([Body] MigrationPlanRequest request); + + [Post("/migration/validate")] + Task> Validate([Body] MigrationPlan plan); + + [Post("/migration/execute")] + Task Execute([Body] MigrationExecutionRequest request); + + [Post("/migration/executeAsync")] + Task ExecuteAsync([Body] MigrationExecutionRequest request); + } +} diff --git a/Camunda.Api.Client/Migration/MigrationExecutionRequest.cs b/Camunda.Api.Client/Migration/MigrationExecutionRequest.cs new file mode 100644 index 0000000..318914a --- /dev/null +++ b/Camunda.Api.Client/Migration/MigrationExecutionRequest.cs @@ -0,0 +1,39 @@ +using System.Collections.Generic; +using Camunda.Api.Client.ProcessInstance; +using Newtonsoft.Json; + +namespace Camunda.Api.Client.Migration +{ + public class MigrationExecutionRequest + { + /// + /// The migration plan to execute. + /// + [JsonProperty("migrationPlan")] + public MigrationPlan MigrationPlan; + + /// + /// A list of process instance ids to migrate. + /// + [JsonProperty("processInstanceIds")] + public List ProcessInstanceIds; + + /// + /// A process instance query. + /// + [JsonProperty("processInstanceQuery")] + public ProcessInstanceQuery processInstanceQuery; + + /// + /// A boolean value to control whether execution listeners should be invoked during migration. + /// + [JsonProperty("skipCustomListeners")] + public bool SkipCustomListeners; + + /// + /// A boolean value to control whether input/output mappings should be executed during migration. + /// + [JsonProperty("skipIoMappings")] + public bool SkipIoMappings; + } +} diff --git a/Camunda.Api.Client/Migration/MigrationInstruction.cs b/Camunda.Api.Client/Migration/MigrationInstruction.cs new file mode 100644 index 0000000..ddea4d7 --- /dev/null +++ b/Camunda.Api.Client/Migration/MigrationInstruction.cs @@ -0,0 +1,26 @@ +using System.Collections.Generic; +using Newtonsoft.Json; + +namespace Camunda.Api.Client.Migration +{ + public class MigrationInstruction + { + /// + /// The activity ids from the source process definition being mapped. + /// + [JsonProperty("sourceActivityIds")] + public List SourceActivityIds; + + /// + /// The activity ids from the target process definition being mapped. + /// + [JsonProperty("targetActivityIds")] + public List TargetActivityIds; + + /// + /// Configuration flag whether event triggers defined are going to be updated during migration. + /// + [JsonProperty("updateEventTrigger")] + public bool UpdateEventTrigger; + } +} diff --git a/Camunda.Api.Client/Migration/MigrationInstructionReport.cs b/Camunda.Api.Client/Migration/MigrationInstructionReport.cs new file mode 100644 index 0000000..cc11fce --- /dev/null +++ b/Camunda.Api.Client/Migration/MigrationInstructionReport.cs @@ -0,0 +1,20 @@ +using System.Collections.Generic; +using Newtonsoft.Json; + +namespace Camunda.Api.Client.Migration +{ + public class MigrationInstructionReport + { + /// + /// A migration instruction object. + /// + [JsonProperty("instruction")] + public MigrationInstruction Instruction; + + /// + /// A list of instruction validation report messages. + /// + [JsonProperty("failures")] + public List Failures; + } +} diff --git a/Camunda.Api.Client/Migration/MigrationPlan.cs b/Camunda.Api.Client/Migration/MigrationPlan.cs new file mode 100644 index 0000000..710a072 --- /dev/null +++ b/Camunda.Api.Client/Migration/MigrationPlan.cs @@ -0,0 +1,26 @@ +using System.Collections.Generic; +using Newtonsoft.Json; + +namespace Camunda.Api.Client.Migration +{ + public class MigrationPlan + { + /// + /// The id of the source process definition for the migration. + /// + [JsonProperty("sourceProcessDefinitionId")] + public string SourceProcessDefinitionId; + + /// + /// The id of the target process definition for the migration. + /// + [JsonProperty("targetProcessDefinitionId")] + public string TargetProcessDefinitionId; + + /// + /// A list of migration instructions which map equal activities. + /// + [JsonProperty("instructions")] + public List Instructions; + } +} diff --git a/Camunda.Api.Client/Migration/MigrationPlanRequest.cs b/Camunda.Api.Client/Migration/MigrationPlanRequest.cs new file mode 100644 index 0000000..23810a7 --- /dev/null +++ b/Camunda.Api.Client/Migration/MigrationPlanRequest.cs @@ -0,0 +1,25 @@ +using Newtonsoft.Json; + +namespace Camunda.Api.Client.Migration +{ + public class MigrationPlanRequest + { + /// + /// The id of the source process definition for the migration. + /// + [JsonProperty("sourceProcessDefinitionId")] + public string SourceProcessDefinitionId; + + /// + /// The id of the target process definition for the migration. + /// + [JsonProperty("targetProcessDefinitionId")] + public string TargetProcessDefinitionId; + + /// + /// A boolean flag indicating whether instructions between events should be configured to update the event triggers. + /// + [JsonProperty("updateEventTriggers")] + public bool UpdateEventTriggers; + } +} diff --git a/Camunda.Api.Client/Migration/MigrationService.cs b/Camunda.Api.Client/Migration/MigrationService.cs new file mode 100644 index 0000000..dd7ebcb --- /dev/null +++ b/Camunda.Api.Client/Migration/MigrationService.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Threading.Tasks; +using Camunda.Api.Client.Batch; + +namespace Camunda.Api.Client.Migration +{ + public class MigrationService + { + private IMigrationRestService _api; + + internal MigrationService(IMigrationRestService api) + { + _api = api; + } + + /// + /// Generates a migration plan for two process definitions. The generated migration plan contains migration instructions which map equal activities between the two process definitions. + /// + /// + /// + Task Generate(MigrationPlanRequest request) => _api.Generate(request); + + /// + /// Validates a migration plan statically without executing it. + /// + /// + /// + Task> Validate(MigrationPlan plan) => _api.Validate(plan); + + /// + /// Executes a migration plan synchronously for multiple process instances. + /// + /// + /// + Task Execute(MigrationExecutionRequest request) => _api.Execute(request); + + /// + /// Executes a migration plan asynchronously (batch) for multiple process instances. + /// + /// + /// + Task ExecuteAsync(MigrationExecutionRequest request) => _api.ExecuteAsync(request); + } +} From 95cee10b45dd74398c6a266a541d904283b5ec34 Mon Sep 17 00:00:00 2001 From: Klaus Jonke Date: Wed, 6 May 2020 15:10:03 +0200 Subject: [PATCH 2/7] fixing some issues --- Camunda.Api.Client.sln | 5 +++-- Camunda.Api.Client/Camunda.Api.Client.csproj | 3 ++- .../Migration/IMigrationRestService.cs | 2 +- .../Migration/MigrationInstructionReports.cs | 17 +++++++++++++++++ .../Migration/MigrationService.cs | 8 ++++---- 5 files changed, 27 insertions(+), 8 deletions(-) create mode 100644 Camunda.Api.Client/Migration/MigrationInstructionReports.cs diff --git a/Camunda.Api.Client.sln b/Camunda.Api.Client.sln index ed2d51c..6a10230 100644 --- a/Camunda.Api.Client.sln +++ b/Camunda.Api.Client.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 16 -VisualStudioVersion = 16.0.29519.181 +# Visual Studio 15 +VisualStudioVersion = 15.0.28307.1082 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Camunda.Api.Client", "Camunda.Api.Client\Camunda.Api.Client.csproj", "{647F2D5F-4B9C-4A36-AAB6-A787182B6083}" EndProject @@ -18,6 +18,7 @@ Global {647F2D5F-4B9C-4A36-AAB6-A787182B6083}.Release|Any CPU.ActiveCfg = Release|Any CPU {647F2D5F-4B9C-4A36-AAB6-A787182B6083}.Release|Any CPU.Build.0 = Release|Any CPU {9EC88258-9A0B-448B-90F1-9FACA497228D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9EC88258-9A0B-448B-90F1-9FACA497228D}.Debug|Any CPU.Build.0 = Debug|Any CPU {9EC88258-9A0B-448B-90F1-9FACA497228D}.Release|Any CPU.ActiveCfg = Release|Any CPU {9EC88258-9A0B-448B-90F1-9FACA497228D}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection diff --git a/Camunda.Api.Client/Camunda.Api.Client.csproj b/Camunda.Api.Client/Camunda.Api.Client.csproj index c28b4f1..a4283f3 100644 --- a/Camunda.Api.Client/Camunda.Api.Client.csproj +++ b/Camunda.Api.Client/Camunda.Api.Client.csproj @@ -4,7 +4,7 @@ netstandard2.0;net461 true true - 2.5.1-prerelease02 + 2.5.1-prerelease05 Camunda REST API Client Camunda REST API Client Jan Lucansky @@ -19,6 +19,7 @@ LICENSE 1701;1702;1705;1591 true + true diff --git a/Camunda.Api.Client/Migration/IMigrationRestService.cs b/Camunda.Api.Client/Migration/IMigrationRestService.cs index a625a49..31c4b79 100644 --- a/Camunda.Api.Client/Migration/IMigrationRestService.cs +++ b/Camunda.Api.Client/Migration/IMigrationRestService.cs @@ -11,7 +11,7 @@ internal interface IMigrationRestService Task Generate([Body] MigrationPlanRequest request); [Post("/migration/validate")] - Task> Validate([Body] MigrationPlan plan); + Task Validate([Body] MigrationPlan plan); [Post("/migration/execute")] Task Execute([Body] MigrationExecutionRequest request); diff --git a/Camunda.Api.Client/Migration/MigrationInstructionReports.cs b/Camunda.Api.Client/Migration/MigrationInstructionReports.cs new file mode 100644 index 0000000..460ae5b --- /dev/null +++ b/Camunda.Api.Client/Migration/MigrationInstructionReports.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Text; +using Newtonsoft.Json; +using Newtonsoft.Json.Serialization; + +namespace Camunda.Api.Client.Migration +{ + public class MigrationInstructionReports + { + /// + /// The list of instruction validation reports. If no validation errors are detected it is an empty list. + /// + [JsonProperty("instructionReports")] + public List InstructionReports; + } +} diff --git a/Camunda.Api.Client/Migration/MigrationService.cs b/Camunda.Api.Client/Migration/MigrationService.cs index dd7ebcb..46d1b8a 100644 --- a/Camunda.Api.Client/Migration/MigrationService.cs +++ b/Camunda.Api.Client/Migration/MigrationService.cs @@ -20,27 +20,27 @@ internal MigrationService(IMigrationRestService api) /// /// /// - Task Generate(MigrationPlanRequest request) => _api.Generate(request); + public Task Generate(MigrationPlanRequest request) => _api.Generate(request); /// /// Validates a migration plan statically without executing it. /// /// /// - Task> Validate(MigrationPlan plan) => _api.Validate(plan); + public Task Validate(MigrationPlan plan) => _api.Validate(plan); /// /// Executes a migration plan synchronously for multiple process instances. /// /// /// - Task Execute(MigrationExecutionRequest request) => _api.Execute(request); + public Task Execute(MigrationExecutionRequest request) => _api.Execute(request); /// /// Executes a migration plan asynchronously (batch) for multiple process instances. /// /// /// - Task ExecuteAsync(MigrationExecutionRequest request) => _api.ExecuteAsync(request); + public Task ExecuteAsync(MigrationExecutionRequest request) => _api.ExecuteAsync(request); } } From 9500332a1f4b401ddd15ebb29913f8f68a34191f Mon Sep 17 00:00:00 2001 From: Klaus Jonke Date: Fri, 8 May 2020 08:18:58 +0200 Subject: [PATCH 3/7] Renaming (closer to original dto names), typos, fixes, adding Delete to ProcessDefinitionResource (and derivates) --- Camunda.Api.Client/CaseInstance/CaseInstanceResource.cs | 3 ++- .../CaseInstance/ICaseInstanceRestService.cs | 4 ++-- .../JobDefinition/IJobDefinitionRestService.cs | 2 +- Camunda.Api.Client/Migration/IMigrationRestService.cs | 8 ++++---- ...MigrationExecutionRequest.cs => MigrationExecution.cs} | 4 ++-- ...nReport.cs => MigrationInstructionValidationReport.cs} | 2 +- ...MigrationPlanRequest.cs => MigrationPlanGeneration.cs} | 2 +- ...rationInstructionReports.cs => MigrationPlanReport.cs} | 4 ++-- Camunda.Api.Client/Migration/MigrationService.cs | 8 ++++---- .../ProcessDefinition/IProcessDefinitionRestService.cs | 6 +++++- .../ProcessDefinition/ProcessDefinitionResource.cs | 6 ++++++ .../ProcessDefinition/ProcessDefinitionResourceById.cs | 4 +++- .../ProcessDefinition/ProcessDefinitionResourceByKey.cs | 3 +++ .../ProcessDefinitionResourceByKeyAndTenantId.cs | 3 +++ .../ProcessDefinition/ProcessDefinitionService.cs | 3 ++- 15 files changed, 41 insertions(+), 21 deletions(-) rename Camunda.Api.Client/Migration/{MigrationExecutionRequest.cs => MigrationExecution.cs} (91%) rename Camunda.Api.Client/Migration/{MigrationInstructionReport.cs => MigrationInstructionValidationReport.cs} (89%) rename Camunda.Api.Client/Migration/{MigrationPlanRequest.cs => MigrationPlanGeneration.cs} (94%) rename Camunda.Api.Client/Migration/{MigrationInstructionReports.cs => MigrationPlanReport.cs} (77%) diff --git a/Camunda.Api.Client/CaseInstance/CaseInstanceResource.cs b/Camunda.Api.Client/CaseInstance/CaseInstanceResource.cs index 3ae8675..de58bb2 100644 --- a/Camunda.Api.Client/CaseInstance/CaseInstanceResource.cs +++ b/Camunda.Api.Client/CaseInstance/CaseInstanceResource.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Net; +using System.Net.Http; using System.Threading.Tasks; #endregion @@ -47,7 +48,7 @@ public Task GetVariableValue(string varName, bool? deserializeVal /// /// The name of the variable to get. /// - public Task GetVariableValueBinary(string varName) => + public Task GetVariableValueBinary(string varName) => _api.GetVariableValueBinary(_caseInstanceId, varName); /// diff --git a/Camunda.Api.Client/CaseInstance/ICaseInstanceRestService.cs b/Camunda.Api.Client/CaseInstance/ICaseInstanceRestService.cs index 211bd35..e45bcd4 100644 --- a/Camunda.Api.Client/CaseInstance/ICaseInstanceRestService.cs +++ b/Camunda.Api.Client/CaseInstance/ICaseInstanceRestService.cs @@ -1,7 +1,7 @@ #region Usings using System.Collections.Generic; -using System.Net; +using System.Net.Http; using System.Threading.Tasks; using Refit; @@ -19,7 +19,7 @@ internal interface ICaseInstanceRestService // TODO: check if HttpWebResponse is indeed the correct return type [Get("/case-instance/{id}/variables/{varName}/data")] - Task GetVariableValueBinary(string id, string varName); + Task GetVariableValueBinary(string id, string varName); [Post("/case-instance/{id}/variables")] Task ModifyVariables(string id, [Body] CaseInstanceModifications modifications); diff --git a/Camunda.Api.Client/JobDefinition/IJobDefinitionRestService.cs b/Camunda.Api.Client/JobDefinition/IJobDefinitionRestService.cs index dc8b067..e18e1b9 100644 --- a/Camunda.Api.Client/JobDefinition/IJobDefinitionRestService.cs +++ b/Camunda.Api.Client/JobDefinition/IJobDefinitionRestService.cs @@ -16,7 +16,7 @@ internal interface IJobDefinitionRestService Task GetListCount([Body] JobDefinitionQuery query); [Put("/job-definition/suspended")] - Task UpdateSuspensionState(JobDefinitionSuspensionState state); + Task UpdateSuspensionState([Body]JobDefinitionSuspensionState state); [Put("/job-definition/{jobDefinitionId}/suspended")] Task UpdateSuspensionStateForId(string jobDefinitionId, [Body] SuspensionState suspensionState); diff --git a/Camunda.Api.Client/Migration/IMigrationRestService.cs b/Camunda.Api.Client/Migration/IMigrationRestService.cs index 31c4b79..cee6b7d 100644 --- a/Camunda.Api.Client/Migration/IMigrationRestService.cs +++ b/Camunda.Api.Client/Migration/IMigrationRestService.cs @@ -8,15 +8,15 @@ namespace Camunda.Api.Client.Migration internal interface IMigrationRestService { [Post("/migration/generate")] - Task Generate([Body] MigrationPlanRequest request); + Task Generate([Body] MigrationPlanGeneration request); [Post("/migration/validate")] - Task Validate([Body] MigrationPlan plan); + Task Validate([Body] MigrationPlan plan); [Post("/migration/execute")] - Task Execute([Body] MigrationExecutionRequest request); + Task Execute([Body] MigrationExecution request); [Post("/migration/executeAsync")] - Task ExecuteAsync([Body] MigrationExecutionRequest request); + Task ExecuteAsync([Body] MigrationExecution request); } } diff --git a/Camunda.Api.Client/Migration/MigrationExecutionRequest.cs b/Camunda.Api.Client/Migration/MigrationExecution.cs similarity index 91% rename from Camunda.Api.Client/Migration/MigrationExecutionRequest.cs rename to Camunda.Api.Client/Migration/MigrationExecution.cs index 318914a..0be0107 100644 --- a/Camunda.Api.Client/Migration/MigrationExecutionRequest.cs +++ b/Camunda.Api.Client/Migration/MigrationExecution.cs @@ -4,7 +4,7 @@ namespace Camunda.Api.Client.Migration { - public class MigrationExecutionRequest + public class MigrationExecution { /// /// The migration plan to execute. @@ -22,7 +22,7 @@ public class MigrationExecutionRequest /// A process instance query. /// [JsonProperty("processInstanceQuery")] - public ProcessInstanceQuery processInstanceQuery; + public ProcessInstanceQuery ProcessInstanceQuery; /// /// A boolean value to control whether execution listeners should be invoked during migration. diff --git a/Camunda.Api.Client/Migration/MigrationInstructionReport.cs b/Camunda.Api.Client/Migration/MigrationInstructionValidationReport.cs similarity index 89% rename from Camunda.Api.Client/Migration/MigrationInstructionReport.cs rename to Camunda.Api.Client/Migration/MigrationInstructionValidationReport.cs index cc11fce..dd66ff4 100644 --- a/Camunda.Api.Client/Migration/MigrationInstructionReport.cs +++ b/Camunda.Api.Client/Migration/MigrationInstructionValidationReport.cs @@ -3,7 +3,7 @@ namespace Camunda.Api.Client.Migration { - public class MigrationInstructionReport + public class MigrationInstructionValidationReport { /// /// A migration instruction object. diff --git a/Camunda.Api.Client/Migration/MigrationPlanRequest.cs b/Camunda.Api.Client/Migration/MigrationPlanGeneration.cs similarity index 94% rename from Camunda.Api.Client/Migration/MigrationPlanRequest.cs rename to Camunda.Api.Client/Migration/MigrationPlanGeneration.cs index 23810a7..ee4a58e 100644 --- a/Camunda.Api.Client/Migration/MigrationPlanRequest.cs +++ b/Camunda.Api.Client/Migration/MigrationPlanGeneration.cs @@ -2,7 +2,7 @@ namespace Camunda.Api.Client.Migration { - public class MigrationPlanRequest + public class MigrationPlanGeneration { /// /// The id of the source process definition for the migration. diff --git a/Camunda.Api.Client/Migration/MigrationInstructionReports.cs b/Camunda.Api.Client/Migration/MigrationPlanReport.cs similarity index 77% rename from Camunda.Api.Client/Migration/MigrationInstructionReports.cs rename to Camunda.Api.Client/Migration/MigrationPlanReport.cs index 460ae5b..56fb41f 100644 --- a/Camunda.Api.Client/Migration/MigrationInstructionReports.cs +++ b/Camunda.Api.Client/Migration/MigrationPlanReport.cs @@ -6,12 +6,12 @@ namespace Camunda.Api.Client.Migration { - public class MigrationInstructionReports + public class MigrationPlanReport { /// /// The list of instruction validation reports. If no validation errors are detected it is an empty list. /// [JsonProperty("instructionReports")] - public List InstructionReports; + public List InstructionReports; } } diff --git a/Camunda.Api.Client/Migration/MigrationService.cs b/Camunda.Api.Client/Migration/MigrationService.cs index 46d1b8a..84ce9e4 100644 --- a/Camunda.Api.Client/Migration/MigrationService.cs +++ b/Camunda.Api.Client/Migration/MigrationService.cs @@ -20,27 +20,27 @@ internal MigrationService(IMigrationRestService api) /// /// /// - public Task Generate(MigrationPlanRequest request) => _api.Generate(request); + public Task Generate(MigrationPlanGeneration request) => _api.Generate(request); /// /// Validates a migration plan statically without executing it. /// /// /// - public Task Validate(MigrationPlan plan) => _api.Validate(plan); + public Task Validate(MigrationPlan plan) => _api.Validate(plan); /// /// Executes a migration plan synchronously for multiple process instances. /// /// /// - public Task Execute(MigrationExecutionRequest request) => _api.Execute(request); + public Task Execute(MigrationExecution request) => _api.Execute(request); /// /// Executes a migration plan asynchronously (batch) for multiple process instances. /// /// /// - public Task ExecuteAsync(MigrationExecutionRequest request) => _api.ExecuteAsync(request); + public Task ExecuteAsync(MigrationExecution request) => _api.ExecuteAsync(request); } } diff --git a/Camunda.Api.Client/ProcessDefinition/IProcessDefinitionRestService.cs b/Camunda.Api.Client/ProcessDefinition/IProcessDefinitionRestService.cs index 3e34ce3..20af062 100644 --- a/Camunda.Api.Client/ProcessDefinition/IProcessDefinitionRestService.cs +++ b/Camunda.Api.Client/ProcessDefinition/IProcessDefinitionRestService.cs @@ -18,7 +18,11 @@ internal interface IProcessDefinitionRestService Task> GetProcessInstanceStatistics(bool failedJobs, bool? incidents, string incidentsForType); [Delete("/process-definition/{id}")] - Task Delete(string id, bool cascade, bool skipCustomListeners); + Task Delete(string id, bool cascade, bool skipCustomListeners, bool skipIoMappings); + [Delete("/process-definition/key/{key}/delete")] + Task DeleteByKey(string key, bool cascade, bool skipCustomListeners, bool skipIoMappings); + [Delete("/process-definition/key/{key}/tenant-id/{tenantId}/delete")] + Task DeleteByKeyAndTenantId(string key, string tenantId, bool cascade, bool skipCustomListeners, bool skipIoMappings); [Put("/process-definition/{id}/suspended")] Task UpdateSuspensionStateById(string id, [Body] ProcessDefinitionSuspensionState state); diff --git a/Camunda.Api.Client/ProcessDefinition/ProcessDefinitionResource.cs b/Camunda.Api.Client/ProcessDefinition/ProcessDefinitionResource.cs index 357057a..8455038 100644 --- a/Camunda.Api.Client/ProcessDefinition/ProcessDefinitionResource.cs +++ b/Camunda.Api.Client/ProcessDefinition/ProcessDefinitionResource.cs @@ -12,6 +12,12 @@ public abstract class ProcessDefinitionResource /// public abstract Task Get(); + /// + /// Deletes process definition(s). + /// + /// + public abstract Task Delete(bool cascade, bool skipCustomListeners, bool skipIoMappings); + /// /// Retrieves the BPMN 2.0 XML of this process definition. /// diff --git a/Camunda.Api.Client/ProcessDefinition/ProcessDefinitionResourceById.cs b/Camunda.Api.Client/ProcessDefinition/ProcessDefinitionResourceById.cs index 7cc3ce9..c2a1946 100644 --- a/Camunda.Api.Client/ProcessDefinition/ProcessDefinitionResourceById.cs +++ b/Camunda.Api.Client/ProcessDefinition/ProcessDefinitionResourceById.cs @@ -19,6 +19,8 @@ internal ProcessDefinitionResourceById(IProcessDefinitionRestService api, string public override Task Get() => _api.GetById(_processDefinitionId); + public override Task Delete(bool cascade, bool skipCustomListeners, bool skipIoMappings = true) => _api.Delete(_processDefinitionId, cascade, skipCustomListeners, skipIoMappings); + public override Task GetXml() => _api.GetXmlById(_processDefinitionId); public override async Task GetDiagram() => (await _api.GetDiagramById(_processDefinitionId)).Content; @@ -39,7 +41,7 @@ protected override Task> GetActivityStatistics(bool inclu public override Task> GetFormVariables(params string[] variableNames) => _api.GetFormVariablesById(_processDefinitionId, variableNames.Join()); public override Task> GetFormVariables(string[] variableNames, bool deserializeValues = true) => _api.GetFormVariablesById(_processDefinitionId, variableNames.Join(), deserializeValues); - + public override string ToString() => _processDefinitionId; } } diff --git a/Camunda.Api.Client/ProcessDefinition/ProcessDefinitionResourceByKey.cs b/Camunda.Api.Client/ProcessDefinition/ProcessDefinitionResourceByKey.cs index 433c4d9..5822a77 100644 --- a/Camunda.Api.Client/ProcessDefinition/ProcessDefinitionResourceByKey.cs +++ b/Camunda.Api.Client/ProcessDefinition/ProcessDefinitionResourceByKey.cs @@ -20,6 +20,9 @@ internal ProcessDefinitionResourceByKey(IProcessDefinitionRestService api, strin public override Task Get() => _api.GetByKey(_processDefinitionKey); + public override Task Delete(bool cascade, bool skipCustomListeners, bool skipIoMappings = true) => + _api.DeleteByKey(_processDefinitionKey, cascade, skipCustomListeners, skipIoMappings); + public override Task GetXml() => _api.GetXmlByKey(_processDefinitionKey); public override async Task GetDiagram() => (await _api.GetDiagramByKey(_processDefinitionKey)).Content; diff --git a/Camunda.Api.Client/ProcessDefinition/ProcessDefinitionResourceByKeyAndTenantId.cs b/Camunda.Api.Client/ProcessDefinition/ProcessDefinitionResourceByKeyAndTenantId.cs index 83cd0bc..6869fc2 100644 --- a/Camunda.Api.Client/ProcessDefinition/ProcessDefinitionResourceByKeyAndTenantId.cs +++ b/Camunda.Api.Client/ProcessDefinition/ProcessDefinitionResourceByKeyAndTenantId.cs @@ -21,6 +21,9 @@ internal ProcessDefinitionResourceByKeyAndTenantId(IProcessDefinitionRestService public override Task Get() => _api.GetByKeyAndTenantId(_processDefinitionKey, _tenantId); + public override Task Delete(bool cascade, bool skipCustomListeners, bool skipIoMappings) => + _api.DeleteByKeyAndTenantId(_processDefinitionKey, _tenantId, cascade, skipCustomListeners, skipIoMappings); + public override Task GetXml() => _api.GetXmlByKeyAndTenantId(_processDefinitionKey, _tenantId); public override async Task GetDiagram() => (await _api.GetDiagramByKeyAndTenantId(_processDefinitionKey, _tenantId)).Content; diff --git a/Camunda.Api.Client/ProcessDefinition/ProcessDefinitionService.cs b/Camunda.Api.Client/ProcessDefinition/ProcessDefinitionService.cs index b526a54..fcbbff9 100644 --- a/Camunda.Api.Client/ProcessDefinition/ProcessDefinitionService.cs +++ b/Camunda.Api.Client/ProcessDefinition/ProcessDefinitionService.cs @@ -53,7 +53,8 @@ public Task> GetStatistics(bool includeF /// /// true, if all process instances, historic process instances and jobs for this process definition should be deleted. /// true, if only the built-in ExecutionListeners should be notified with the end event. + /// true, if input/output mappings should not be invoked. /// - public Task Delete(string processDefinitionId, bool cascade, bool skipCustomListeners) => _api.Delete(processDefinitionId, cascade, skipCustomListeners); + public Task Delete(string processDefinitionId, bool cascade, bool skipCustomListeners, bool skipIoMappings = true) => _api.Delete(processDefinitionId, cascade, skipCustomListeners, skipIoMappings); } } From 0dfa6cdbceccb3ddc5c1df7d3634e99430ce087d Mon Sep 17 00:00:00 2001 From: jlucansky Date: Fri, 19 Jun 2020 17:20:56 +0200 Subject: [PATCH 4/7] Make CaseInstances available from CamundaClient --- Camunda.Api.Client/CamundaClient.cs | 6 ++++++ Camunda.Api.Client/CaseInstance/CaseInstanceService.cs | 2 +- Camunda.Api.Client/CaseInstance/ICaseInstanceService.cs | 8 -------- 3 files changed, 7 insertions(+), 9 deletions(-) delete mode 100644 Camunda.Api.Client/CaseInstance/ICaseInstanceService.cs diff --git a/Camunda.Api.Client/CamundaClient.cs b/Camunda.Api.Client/CamundaClient.cs index 7ec1923..dcf7019 100644 --- a/Camunda.Api.Client/CamundaClient.cs +++ b/Camunda.Api.Client/CamundaClient.cs @@ -8,6 +8,7 @@ using Camunda.Api.Client.CaseDefinition; using Camunda.Api.Client.CaseExecution; +using Camunda.Api.Client.CaseInstance; using Camunda.Api.Client.DecisionDefinition; using Camunda.Api.Client.Deployment; using Camunda.Api.Client.Execution; @@ -26,6 +27,7 @@ using Camunda.Api.Client.User; using Camunda.Api.Client.UserTask; using Camunda.Api.Client.VariableInstance; + using JsonSerializer = Newtonsoft.Json.JsonSerializer; namespace Camunda.Api.Client @@ -34,6 +36,7 @@ public class CamundaClient { private Lazy _caseDefinitionRestService; private Lazy _caseExecutionRestService; + private Lazy _caseInstanceRestService; private Lazy _decisionDefinitionRestService; private Lazy _deploymentApi; private Lazy _executionApi; @@ -254,6 +257,9 @@ public static CamundaClient Create(HttpClient httpClient) /// public CaseExecutionService CaseExecutions => new CaseExecutionService(_caseExecutionRestService.Value); + /// + public CaseInstanceService CaseInstances => new CaseInstanceService(_caseInstanceRestService.Value); + /// public DecisionDefinitionService DecisionDefinitions => new DecisionDefinitionService(_decisionDefinitionRestService.Value); diff --git a/Camunda.Api.Client/CaseInstance/CaseInstanceService.cs b/Camunda.Api.Client/CaseInstance/CaseInstanceService.cs index 9221eed..bdb5bca 100644 --- a/Camunda.Api.Client/CaseInstance/CaseInstanceService.cs +++ b/Camunda.Api.Client/CaseInstance/CaseInstanceService.cs @@ -1,6 +1,6 @@ namespace Camunda.Api.Client.CaseInstance { - public class CaseInstanceService : ICaseInstanceService + public class CaseInstanceService { private ICaseInstanceRestService _api; diff --git a/Camunda.Api.Client/CaseInstance/ICaseInstanceService.cs b/Camunda.Api.Client/CaseInstance/ICaseInstanceService.cs deleted file mode 100644 index c65d63a..0000000 --- a/Camunda.Api.Client/CaseInstance/ICaseInstanceService.cs +++ /dev/null @@ -1,8 +0,0 @@ -namespace Camunda.Api.Client.CaseInstance -{ - public interface ICaseInstanceService - { - QueryResource Query(CaseInstanceQuery query = null); - CaseInstanceResource this[string caseInstanceId] { get; } - } -} \ No newline at end of file From efcf23862fb3389499a085b2f4c263d5a635e2bf Mon Sep 17 00:00:00 2001 From: jlucansky Date: Fri, 19 Jun 2020 17:51:17 +0200 Subject: [PATCH 5/7] Refactor Variable resource for case instance --- .../CaseInstanceBinaryVariableValue.cs | 17 ----- .../CaseInstance/CaseInstanceModifications.cs | 18 ------ .../CaseInstance/CaseInstanceResource.cs | 63 ++----------------- .../CaseInstance/ICaseInstanceRestService.cs | 6 +- .../CaseInstance/VariableResource.cs | 50 +++++++++++++++ 5 files changed, 58 insertions(+), 96 deletions(-) delete mode 100644 Camunda.Api.Client/CaseInstance/CaseInstanceBinaryVariableValue.cs delete mode 100644 Camunda.Api.Client/CaseInstance/CaseInstanceModifications.cs create mode 100644 Camunda.Api.Client/CaseInstance/VariableResource.cs diff --git a/Camunda.Api.Client/CaseInstance/CaseInstanceBinaryVariableValue.cs b/Camunda.Api.Client/CaseInstance/CaseInstanceBinaryVariableValue.cs deleted file mode 100644 index 6cda027..0000000 --- a/Camunda.Api.Client/CaseInstance/CaseInstanceBinaryVariableValue.cs +++ /dev/null @@ -1,17 +0,0 @@ -#region Usings - -using Newtonsoft.Json; - -#endregion - -namespace Camunda.Api.Client.CaseInstance -{ - public class CaseInstanceBinaryVariableValue - { - [JsonProperty("data")] - public string Data; - - [JsonProperty("valueType")] - public BinaryVariableType ValueType; - } -} diff --git a/Camunda.Api.Client/CaseInstance/CaseInstanceModifications.cs b/Camunda.Api.Client/CaseInstance/CaseInstanceModifications.cs deleted file mode 100644 index ff24a8d..0000000 --- a/Camunda.Api.Client/CaseInstance/CaseInstanceModifications.cs +++ /dev/null @@ -1,18 +0,0 @@ -#region Usings - -using System.Collections.Generic; -using Newtonsoft.Json; - -#endregion - -namespace Camunda.Api.Client.CaseInstance -{ - public class CaseInstanceModifications - { - [JsonProperty("modifications")] - public Dictionary Modifications; - - [JsonProperty("deletions")] - public List Deletions; - } -} diff --git a/Camunda.Api.Client/CaseInstance/CaseInstanceResource.cs b/Camunda.Api.Client/CaseInstance/CaseInstanceResource.cs index de58bb2..7e83012 100644 --- a/Camunda.Api.Client/CaseInstance/CaseInstanceResource.cs +++ b/Camunda.Api.Client/CaseInstance/CaseInstanceResource.cs @@ -26,64 +26,6 @@ internal CaseInstanceResource(ICaseInstanceRestService api, string caseInstanceI /// corresponding case instance basis info public Task Get() => _api.Get(_caseInstanceId); - /// - /// Retrieves all variables of a given case instance by id. - /// - /// Determines whether serializable variable values (typically variables that store custom Java objects) should be deserialized on server side (default true). Note: While true is the default value for reasons of backward compatibility, we recommend setting this parameter to false when developing web applications that are independent of the Java process applications deployed to the engine. - /// variables key-value pairs. Each key is a variable name and each value a variable value object - public Task> GetVariables(bool? deserializeValues) => - _api.GetVariables(_caseInstanceId, deserializeValues); - - /// - /// Retrieves a variable of a given case instance by id. - /// - /// The name of the variable to get. - /// Determines whether serializable variable values (typically variables that store custom Java objects) should be deserialized on server side (default true). Note: While true is the default value for reasons of backward compatibility, we recommend setting this parameter to false when developing web applications that are independent of the Java process applications deployed to the engine. - /// corresponding variable value object - public Task GetVariableValue(string varName, bool? deserializeValue) => - _api.GetVariableValue(_caseInstanceId, varName, deserializeValue); - - /// - /// Retrieves a binary variable of a given case instance by id. Applicable for byte array and file variables. - /// - /// The name of the variable to get. - /// - public Task GetVariableValueBinary(string varName) => - _api.GetVariableValueBinary(_caseInstanceId, varName); - - /// - /// Updates or deletes the variables of a case instance. Please note: deletion precedes update. - /// - /// an object containing deletions and updates - /// - public Task ModifyVariables(CaseInstanceModifications modifications) => - _api.ModifyVariables(_caseInstanceId, modifications); - - /// - /// Sets a variable of a given case instance by id. - /// - /// The name of the variable to set. - /// variable value object - /// - public Task UpdateVariable(string varName, VariableValue value) => - _api.UpdateVariable(_caseInstanceId, varName, value); - - /// - /// Deletes a variable of a given case instance by id. - /// - /// The name of the variable to delete. - /// - public Task DeleteVariable(string varName) => _api.DeleteVariable(_caseInstanceId, varName); - - /// - /// Sets the serialized value for a binary variable or the binary value for a file variable. - /// - /// The name of the variable to set. - /// - /// - public Task SetVariableBinary(string varName, CaseInstanceBinaryVariableValue value) => - _api.SetVariableBinary(_caseInstanceId, varName, value); - /// /// Performs a transition from ACTIVE state to COMPLETED state. In relation to the state transition, it is possible to update or delete case instance variables (please note: deletion precedes update). /// @@ -107,5 +49,10 @@ public Task Close(ChangeCaseInstanceState closeCaseInstanceState) => /// public Task Terminate(ChangeCaseInstanceState terminateCaseInstanceState) => _api.Terminate(_caseInstanceId, terminateCaseInstanceState); + + + public VariableResource Variables => new VariableResource(_api, _caseInstanceId); + + public override string ToString() => _caseInstanceId; } } diff --git a/Camunda.Api.Client/CaseInstance/ICaseInstanceRestService.cs b/Camunda.Api.Client/CaseInstance/ICaseInstanceRestService.cs index e45bcd4..5bdd5f6 100644 --- a/Camunda.Api.Client/CaseInstance/ICaseInstanceRestService.cs +++ b/Camunda.Api.Client/CaseInstance/ICaseInstanceRestService.cs @@ -19,16 +19,16 @@ internal interface ICaseInstanceRestService // TODO: check if HttpWebResponse is indeed the correct return type [Get("/case-instance/{id}/variables/{varName}/data")] - Task GetVariableValueBinary(string id, string varName); + Task GetBinaryVariable(string id, string varName); [Post("/case-instance/{id}/variables")] - Task ModifyVariables(string id, [Body] CaseInstanceModifications modifications); + Task ModifyVariables(string id, [Body] PatchVariables patch); [Put("/case-instance/{id}/variables/{varName}")] Task UpdateVariable(string id, string varName, [Body] VariableValue value); [Post("/case-instance/{id}/variables/{varName}/data")] - Task SetVariableBinary(string id, string varName, [Body] CaseInstanceBinaryVariableValue value); + Task SetBinaryVariable(string id, string varName, BinaryDataContent data, ValueTypeContent valueType); [Delete("/case-instance/{id}/variables/{varName}")] Task DeleteVariable(string id, string varName); diff --git a/Camunda.Api.Client/CaseInstance/VariableResource.cs b/Camunda.Api.Client/CaseInstance/VariableResource.cs new file mode 100644 index 0000000..59607af --- /dev/null +++ b/Camunda.Api.Client/CaseInstance/VariableResource.cs @@ -0,0 +1,50 @@ +using System.Collections.Generic; +using System.Net.Http; +using System.Threading.Tasks; + +namespace Camunda.Api.Client.CaseInstance +{ + public class VariableResource : IVariableResource + { + private string _caseInstanceId; + private ICaseInstanceRestService _api; + + internal VariableResource(ICaseInstanceRestService api, string caseInstanceId) + { + _api = api; + _caseInstanceId = caseInstanceId; + } + + /// + /// Retrieves all variables of a given case instance. + /// + /// Determines whether serializable variable values (typically variables that store custom Java objects) should be deserialized on server side. + public Task> GetAll(bool deserializeValues = true) => _api.GetVariables(_caseInstanceId, deserializeValues); + /// + /// Retrieves a variable from the context of a given case instance. + /// + public Task Get(string variableName, bool deserializeValue = true) => _api.GetVariableValue(_caseInstanceId, variableName, deserializeValue); + /// + /// Retrieves a binary variable from the context of a given case instance. Applicable for byte array and file variables. + /// + public async Task GetBinary(string variableName) => (await _api.GetBinaryVariable(_caseInstanceId, variableName)).Content; + /// + /// Sets a variable in the context of a given case instance. + /// + public Task Set(string variableName, VariableValue variable) => _api.UpdateVariable(_caseInstanceId, variableName, variable); + /// + /// Sets the serialized value for a binary variable or the binary value for a file variable. + /// + public Task SetBinary(string variableName, BinaryDataContent data, BinaryVariableType valueType) => _api.SetBinaryVariable(_caseInstanceId, variableName, data, new ValueTypeContent(valueType.ToString())); + /// + /// Removes a variable from a case instance. + /// + public Task Delete(string variableName) => _api.DeleteVariable(_caseInstanceId, variableName); + /// + /// Updates or deletes the variables in the context of a case instance. Updates precede deletions. So, if a variable is updated AND deleted, the deletion overrides the update. + /// + public Task Modify(PatchVariables patch) => _api.ModifyVariables(_caseInstanceId, patch); + + public override string ToString() => _caseInstanceId; + } +} From 2e33d8deea5438caa0e0f5202c54c1f360f5a0f6 Mon Sep 17 00:00:00 2001 From: jlucansky Date: Fri, 19 Jun 2020 17:59:42 +0200 Subject: [PATCH 6/7] Fix missing instantiation of ICaseInstanceRestService --- Camunda.Api.Client/CamundaClient.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/Camunda.Api.Client/CamundaClient.cs b/Camunda.Api.Client/CamundaClient.cs index dcf7019..20c918a 100644 --- a/Camunda.Api.Client/CamundaClient.cs +++ b/Camunda.Api.Client/CamundaClient.cs @@ -195,6 +195,7 @@ private void CreateServices() { _caseDefinitionRestService = CreateService(); _caseExecutionRestService = CreateService(); + _caseInstanceRestService = CreateService(); _decisionDefinitionRestService = CreateService(); _deploymentApi = CreateService(); _executionApi = CreateService(); From 356758a036bf39d027929bd0b045d7a41dbf83f0 Mon Sep 17 00:00:00 2001 From: jlucansky Date: Sun, 12 Jul 2020 13:23:06 +0200 Subject: [PATCH 7/7] Fix VS version --- Camunda.Api.Client.sln | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Camunda.Api.Client.sln b/Camunda.Api.Client.sln index 6a10230..5168b49 100644 --- a/Camunda.Api.Client.sln +++ b/Camunda.Api.Client.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15 -VisualStudioVersion = 15.0.28307.1082 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.29519.181 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Camunda.Api.Client", "Camunda.Api.Client\Camunda.Api.Client.csproj", "{647F2D5F-4B9C-4A36-AAB6-A787182B6083}" EndProject