Skip to content

Commit

Permalink
Cleanup (#67)
Browse files Browse the repository at this point in the history
* remove unused logger

* removed sdk exception

* removed java8utils

* removed noopauth

* assert on filter type

* moved to custom date type

* moved DateFilterRange

* removed deprecated method

* introduced static access to builder

* format

* adjusted readme

* moved to static builder access

* remove unused dependencies

* format

* removed redundant type arg

* null sensitive
  • Loading branch information
jonathanlukas authored Aug 7, 2024
1 parent 6905db6 commit 68dc534
Show file tree
Hide file tree
Showing 32 changed files with 315 additions and 392 deletions.
49 changes: 5 additions & 44 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -156,7 +156,7 @@ CamundaOperateClient client = new CamundaOperateClient(configuration);
When you search objects, you can get results as List or as SearchResult. The SearchResult gives you a sortValues that you can use to paginate your results :

```java
SearchQuery query = new SearchQuery.Builder().filter(someFilter).sort(new Sort("name", SortOrder.ASC)).size(20).searchAfter(previousResult.getSortValues()).build();
SearchQuery query = SearchQuery.builder().filter(someFilter).sort(new Sort("name", SortOrder.ASC)).size(20).searchAfter(previousResult.getSortValues()).build();
```

### Process definitions
Expand All @@ -166,8 +166,8 @@ SearchQuery query = new SearchQuery.Builder().filter(someFilter).sort(new Sort("
ProcessDefinition def = client.getProcessDefinition(1L);

//Search process definitions
ProcessDefinitionFilter processDefinitionFilter = new ProcessDefinitionFilter.Builder().name("Customer Onboarding").build();
SearchQuery procDefQuery = new SearchQuery.Builder().filter(processDefinitionFilter).size(20).sort(new Sort("version", SortOrder.ASC)).build();
ProcessDefinitionFilter processDefinitionFilter = ProcessDefinitionFilter.builder().name("Customer Onboarding").build();
SearchQuery<ProcessDefinition> procDefQuery = SearchQuery.<ProcessDefinition>builder().filter(processDefinitionFilter).size(20).sort(new Sort("version", SortOrder.ASC)).build();

List<ProcessDefinition> list = client.searchProcessDefinitions(procDefQuery);

Expand All @@ -178,8 +178,8 @@ SearchResult<ProcessDefinition> result = client.searchProcessDefinitionResults(p

```java
//search process instances based on filters
ProcessInstanceFilter instanceFilter = new ProcessInstanceFilter.Builder().bpmnProcessId("customer_onboarding_en").startDate(new DateFilter(new Date(), DateFilterRange.MONTH)).build();
SearchQuery instanceQuery = new SearchQuery.Builder().filter(instanceFilter).size(20).sort(new Sort("state", SortOrder.ASC)).build();
ProcessInstanceFilter instanceFilter = ProcessInstanceFilter.builder().bpmnProcessId("customer_onboarding_en").startDate(OperateDate.filter(new Date(), DateFilterRange.MONTH)).build();
SearchQuery<ProcessInstance> instanceQuery = SearchQuery.<ProcessInstance>builder().filter(instanceFilter).size(20).sort(new Sort("state", SortOrder.ASC)).build();

List<ProcessInstance> list = client.searchProcessInstances(instanceQuery);

Expand All @@ -189,45 +189,6 @@ SearchResult<ProcessInstance> result = client.searchProcessInstanceResults(insta
ProcessInstance instance = client.getProcessInstance(instances.get(0).getKey());
```

### Flow Node Instances

```java
//search flow node instances based on filters
FlownodeInstanceFilter flownodeFilter = new FlownodeInstanceFilter.Builder()
.processInstanceKey(4L).startDate(new DateFilter(new Date(), DateFilterRange.YEAR)).build();
SearchQuery flownodeQuery = new SearchQuery.Builder().filter(flownodeFilter).size(20).sort(new Sort("state", SortOrder.ASC)).build();

List<FlownodeInstance> flownodes = client.searchFlownodeInstances(flownodeQuery);

//get a flownode instance by its key
FlownodeInstance flownodes = client.getFlownodeInstance(flownodes.get(0).getKey());
```

### Variables

```java
//search variables based on filters
VariableFilter variableFilter = new VariableFilter.Builder().processInstanceKey(4L).build();
SearchQuery varQuery = new SearchQuery.Builder().filter(variableFilter).size(5).sort(new Sort("name", SortOrder.ASC)).build();

List<Variable> variables = client.searchVariables(varQuery);

//get a variable by its key
Variable var = client.getVariable(variables.get(0).getKey());
```

### Incidents

```java
//search incidents based on filters
IncidentFilter incidentFilter = new IncidentFilter.Builder().creationTime(new DateFilter(new Date(), DateFilterRange.YEAR)).build();
SearchQuery incidentQuery = new SearchQuery.Builder().filter(incidentFilter).size(20).sort(new Sort("state", SortOrder.ASC)).build();
List<Incident> incidents = client.searchIncidents(incidentQuery);

//get a incident by its key
Incident incident = client.getIncident(incidents.get(0).getKey());
```

## Note
A similar library is available for the Tasklist API of Camunda Platform 8 here:
[camunda-tasklist-client-java](https://github.com/camunda-community-hub/camunda-tasklist-client-java)
Original file line number Diff line number Diff line change
Expand Up @@ -29,21 +29,21 @@ public ProcessInstanceController(CamundaOperateClient camundaOperateClient) {

@GetMapping
public List<ProcessInstanceWrapper> getProcessInstances() throws OperateException {
return camundaOperateClient.searchProcessInstances(new SearchQuery.Builder().build()).stream()
return camundaOperateClient.searchProcessInstances(SearchQuery.builder().build()).stream()
.map(
pi -> {
try {
return new ProcessInstanceWrapper(
pi,
camundaOperateClient.searchFlowNodeInstances(
new SearchQuery.Builder()
SearchQuery.builder()
.filter(
FlowNodeInstanceFilter.builder()
.processInstanceKey(pi.getKey())
.build())
.build()),
camundaOperateClient.searchVariables(
new SearchQuery.Builder()
SearchQuery.builder()
.filter(
VariableFilter.builder().processInstanceKey(pi.getKey()).build())
.build()));
Expand Down
31 changes: 0 additions & 31 deletions extension/java-client-operate/README.md

This file was deleted.

27 changes: 5 additions & 22 deletions extension/java-client-operate/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -42,16 +42,16 @@
<artifactId>jackson-annotations</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>io.camunda</groupId>
<artifactId>spring-boot-starter-camunda-sdk</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
Expand All @@ -63,21 +63,4 @@
<scope>test</scope>
</dependency>
</dependencies>

<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<configuration>
<ignoredUnusedDeclaredDependencies>
<ignoredUnusedDeclaredDependency>io.camunda:spring-boot-starter-camunda-sdk</ignoredUnusedDeclaredDependency>
</ignoredUnusedDeclaredDependencies>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>

</project>
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,16 @@
import io.camunda.operate.http.DefaultHttpClient;
import io.camunda.operate.http.HttpClient;
import io.camunda.operate.model.*;
import io.camunda.operate.search.DecisionDefinitionFilter;
import io.camunda.operate.search.DecisionInstanceFilter;
import io.camunda.operate.search.DecisionRequirementsFilter;
import io.camunda.operate.search.Filter;
import io.camunda.operate.search.FlowNodeInstanceFilter;
import io.camunda.operate.search.IncidentFilter;
import io.camunda.operate.search.ProcessDefinitionFilter;
import io.camunda.operate.search.ProcessInstanceFilter;
import io.camunda.operate.search.SearchQuery;
import io.camunda.operate.search.VariableFilter;
import io.camunda.zeebe.model.bpmn.Bpmn;
import io.camunda.zeebe.model.bpmn.BpmnModelInstance;
import java.io.ByteArrayInputStream;
Expand Down Expand Up @@ -108,6 +117,7 @@ public List<ProcessDefinition> searchProcessDefinitions(SearchQuery query)

public SearchResult<ProcessDefinition> searchProcessDefinitionResults(SearchQuery query)
throws OperateException {
assertSearchQueryType(ProcessDefinitionFilter.class, query);
return httpClient.post(searchProcessDefinition, query);
}

Expand All @@ -118,6 +128,7 @@ public List<DecisionDefinition> searchDecisionDefinitions(SearchQuery query)

public SearchResult<DecisionDefinition> searchDecisionDefinitionResults(SearchQuery query)
throws OperateException {
assertSearchQueryType(DecisionDefinitionFilter.class, query);
return httpClient.post(searchDecisionDefinition, query);
}

Expand All @@ -127,6 +138,7 @@ public List<DecisionInstance> searchDecisionInstances(SearchQuery query) throws

public SearchResult<DecisionInstance> searchDecisionInstanceResults(SearchQuery query)
throws OperateException {
assertSearchQueryType(DecisionInstanceFilter.class, query);
return httpClient.post(searchDecisionInstance, query);
}

Expand All @@ -136,6 +148,7 @@ public List<FlowNodeInstance> searchFlowNodeInstances(SearchQuery query) throws

public SearchResult<FlowNodeInstance> searchFlowNodeInstanceResults(SearchQuery query)
throws OperateException {
assertSearchQueryType(FlowNodeInstanceFilter.class, query);
return httpClient.post(searchFlowNodeInstance, query);
}

Expand All @@ -144,6 +157,7 @@ public List<Variable> searchVariables(SearchQuery query) throws OperateException
}

public SearchResult<Variable> searchVariableResults(SearchQuery query) throws OperateException {
assertSearchQueryType(VariableFilter.class, query);
return httpClient.post(searchVariable, query);
}

Expand All @@ -153,6 +167,7 @@ public List<ProcessInstance> searchProcessInstances(SearchQuery query) throws Op

public SearchResult<ProcessInstance> searchProcessInstanceResults(SearchQuery query)
throws OperateException {
assertSearchQueryType(ProcessInstanceFilter.class, query);
return httpClient.post(searchProcessInstance, query);
}

Expand All @@ -163,6 +178,7 @@ public List<DecisionRequirements> searchDecisionRequirements(SearchQuery query)

public SearchResult<DecisionRequirements> searchDecisionRequirementsResults(SearchQuery query)
throws OperateException {
assertSearchQueryType(DecisionRequirementsFilter.class, query);
return httpClient.post(searchDecisionRequirements, query);
}

Expand All @@ -171,6 +187,7 @@ public List<Incident> searchIncidents(SearchQuery query) throws OperateException
}

public SearchResult<Incident> searchIncidentResults(SearchQuery query) throws OperateException {
assertSearchQueryType(IncidentFilter.class, query);
return httpClient.post(searchIncident, query);
}

Expand Down Expand Up @@ -221,4 +238,11 @@ public Variable getVariable(Long key) throws OperateException {
private Map<String, String> key(Long key) {
return Map.of("key", String.valueOf(key));
}

private void assertSearchQueryType(Class<? extends Filter> type, SearchQuery query) {
if (query.getFilter() != null && !query.getFilter().getClass().isAssignableFrom(type)) {
throw new IllegalStateException(
"Expected filter of type " + type + " but got " + query.getFilter().getClass());
}
}
}

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -24,11 +24,6 @@ public JwtAuthentication(JwtCredential jwtCredential, TokenResponseMapper tokenR
this.tokenResponseMapper = tokenResponseMapper;
}

@Deprecated
public JwtCredential getJwtCredential() {
return jwtCredential;
}

@Override
public Map<String, String> getTokenHeader() {
if (token == null || timeout == null || timeout.isBefore(LocalDateTime.now())) {
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,6 @@
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import io.camunda.operate.auth.Authentication;
import io.camunda.operate.exception.SdkException;
import java.lang.invoke.MethodHandles;
import java.net.URL;
import java.util.List;
import java.util.Map;
Expand All @@ -22,13 +20,9 @@
import org.apache.hc.core5.http.io.HttpClientResponseHandler;
import org.apache.hc.core5.http.io.entity.StringEntity;
import org.apache.hc.core5.http.message.BasicHeader;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/** Default Http Client powered by Apache HttpClient */
public class DefaultHttpClient implements HttpClient {

private static final Logger LOG = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
private final Map<TypeReference<?>, String> endpointMap;
private final CloseableHttpClient httpClient;
private final Authentication authentication;
Expand Down Expand Up @@ -60,7 +54,8 @@ public <T> T get(TypeReference<T> responseType, Map<String, String> pathParams)
try {
return httpClient.execute(httpGet, handleResponse(responseType));
} catch (Exception e) {
throw new SdkException(String.format("Failed GET to %s, due to %s", url, e.getMessage()), e);
throw new RuntimeException(
String.format("Failed GET to %s, due to %s", url, e.getMessage()), e);
}
}

Expand All @@ -81,7 +76,7 @@ public <T, U> T post(TypeReference<T> responseType, U body) {
try {
return httpClient.execute(httpPost, handleResponse(responseType));
} catch (Exception e) {
throw new SdkException(
throw new RuntimeException(
String.format("Failed POST to %s with body %s, due to %s", url, data, e.getMessage()), e);
}
}
Expand All @@ -95,7 +90,7 @@ public <T> T delete(TypeReference<T> responseType, Map<String, String> pathParam
try {
return httpClient.execute(httpDelete, handleResponse(responseType));
} catch (Exception e) {
throw new SdkException(
throw new RuntimeException(
String.format("Failed DELETE to %s, due to %s", url, e.getMessage()), e);
}
}
Expand Down Expand Up @@ -124,10 +119,10 @@ private <T> HttpClientResponseHandler<T> handleResponse(TypeReference<T> respons
responseType, objectMapper, this::handleErrorResponse);
}

private SdkException handleErrorResponse(Integer code) {
private RuntimeException handleErrorResponse(Integer code) {
if (code == HttpStatus.SC_UNAUTHORIZED || code == HttpStatus.SC_FORBIDDEN) {
authentication.resetToken();
}
return new SdkException("Response not successful: " + code);
return new RuntimeException("Response not successful: " + code);
}
}
Loading

0 comments on commit 68dc534

Please sign in to comment.