diff --git a/examples/hawkbit-example-ddi-client/pom.xml b/examples/hawkbit-example-ddi-client/pom.xml
index 8ce1749dd..bd87a65bc 100644
--- a/examples/hawkbit-example-ddi-client/pom.xml
+++ b/examples/hawkbit-example-ddi-client/pom.xml
@@ -37,19 +37,25 @@
com.netflix.feign
feign-core
- 8.16.0
+
+ 8.14.2
com.netflix.feign
feign-jackson
- 8.16.0
+
+ 8.14.2
javax.servlet
javax.servlet-api
+
+ org.springframework.plugin
+ spring-plugin-core
+
junit
diff --git a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/ApplicationJsonRequestHeaderInterceptor.java b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/ApplicationJsonRequestHeaderInterceptor.java
index 680da74f1..df43444d6 100644
--- a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/ApplicationJsonRequestHeaderInterceptor.java
+++ b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/ApplicationJsonRequestHeaderInterceptor.java
@@ -22,6 +22,8 @@ public class ApplicationJsonRequestHeaderInterceptor implements RequestIntercept
@Override
public void apply(final RequestTemplate template) {
template.header("Accept", MediaType.APPLICATION_JSON_VALUE);
+ // template.header("Accept",
+ // EnableHypermediaSupport.HypermediaType.HAL);
template.header("Content-Type", MediaType.APPLICATION_JSON_VALUE);
}
diff --git a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiDefaultFeignClient.java b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiDefaultFeignClient.java
index 4dd29d7c1..73b1d4f81 100644
--- a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiDefaultFeignClient.java
+++ b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiDefaultFeignClient.java
@@ -5,6 +5,10 @@ package org.eclipse.hawkbit.ddi.client;
import org.eclipse.hawkbit.ddi.client.resource.RootControllerResourceClient;
import org.springframework.cloud.netflix.feign.support.ResponseEntityDecoder;
+import org.springframework.hateoas.hal.Jackson2HalModule;
+
+import com.fasterxml.jackson.databind.DeserializationFeature;
+import com.fasterxml.jackson.databind.ObjectMapper;
import feign.Feign;
import feign.Feign.Builder;
@@ -26,12 +30,18 @@ public class DdiDefaultFeignClient {
private final String tenant;
public DdiDefaultFeignClient(final String baseUrl, final String tenant) {
+
+ final ObjectMapper mapper = new ObjectMapper()
+ .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
+ .registerModule(new Jackson2HalModule());
+
feignBuilder = Feign.builder().contract(new IgnoreMultipleConsumersProducersSpringMvcContract())
.requestInterceptor(new ApplicationJsonRequestHeaderInterceptor()).logLevel(Level.FULL)
.logger(new Logger.ErrorLogger()).encoder(new JacksonEncoder())
- .decoder(new ResponseEntityDecoder(new JacksonDecoder()));
+ .decoder(new ResponseEntityDecoder(new JacksonDecoder(mapper)));
this.baseUrl = baseUrl;
this.tenant = tenant;
+
}
public Builder getFeignBuilder() {
diff --git a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiExampleClient.java b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiExampleClient.java
index c7b81e4fe..c0fb6ff9c 100644
--- a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiExampleClient.java
+++ b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/DdiExampleClient.java
@@ -3,36 +3,55 @@
*/
package org.eclipse.hawkbit.ddi.client;
-import org.springframework.stereotype.Component;
+import java.util.regex.Pattern;
-@Component
-public class DdiExampleClient {
+import org.eclipse.hawkbit.ddi.json.model.DdiControllerBase;
+import org.eclipse.hawkbit.ddi.json.model.DdiDeploymentBase;
+import org.springframework.hateoas.Link;
+import org.springframework.http.ResponseEntity;
+
+//@Component
+public class DdiExampleClient implements Runnable {
private final String controllerId;
- private final String name;
- private final String description;
- private final String baseUrl;
+
final DdiDefaultFeignClient ddiDefaultFeignClient;
- public DdiExampleClient(final String baseUrl, final String controllerId, final String name,
- final String description, final String tenant) {
+ public DdiExampleClient(final String baseUrl, final String controllerId, final String tenant) {
super();
this.controllerId = controllerId;
- this.name = name;
- this.description = description;
- this.baseUrl = baseUrl;
ddiDefaultFeignClient = new DdiDefaultFeignClient(baseUrl, tenant);
}
+ @Override
+ public void run() {
+
+ ResponseEntity response;
+
+ for (int i = 0; i < 20; i++) {
+
+ response = ddiDefaultFeignClient.getRootControllerResourceClient().getControllerBase(controllerId);
+ final DdiControllerBase controllerBase = response.getBody();
+ final Link controllerDeploymentBaseLink = controllerBase.getLink("deploymentBase");
+
+ if (controllerDeploymentBaseLink != null) {
+ // TOD actung download nur einmal starten
+ startDownload(controllerDeploymentBaseLink);
+ }
+
+ try {
+ Thread.sleep(2000);
+ } catch (final InterruptedException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ }
+
+ }
+
public void startDdiClient() {
- // final ResponseEntity response =
-
- ddiDefaultFeignClient.getRootControllerResourceClient().getControllerBase(controllerId);
-
- // final DdiControllerBase controllerBase = response.getBody();
-
- System.out.println("test");
+ //
// TODO notify every 10 seconds on the rollout server
@@ -42,4 +61,32 @@ public class DdiExampleClient {
}
+ private void startDownload(final Link controllerDeploymentBaseLink) {
+
+ // controllerDeploymentBaseLink.
+
+ // final List varibles = controllerDeploymentBaseLink.get
+
+ final String link = controllerDeploymentBaseLink.getHref();
+ final String[] segs = link.split(Pattern.quote("/"));
+ final String[] ending = segs[8].split(Pattern.quote("?"));
+ final String actionId = ending[0];
+ final String resource = ending[1].substring(2);
+
+ final ResponseEntity respone = ddiDefaultFeignClient.getRootControllerResourceClient()
+ .getControllerBasedeploymentAction(controllerId, Long.valueOf(actionId), Integer.valueOf(resource));
+
+ final DdiDeploymentBase ddiDeploymentBase = respone.getBody();
+
+ final Link downloadLink = ddiDeploymentBase.getDeployment().getChunks().get(0).getArtifacts().get(0)
+ .getLink("download");
+
+ System.out.println("download startet ....");
+
+ }
+
+ private void startSimulatedInstalltion() {
+
+ }
+
}
diff --git a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/resource/RootControllerResourceClient.java b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/resource/RootControllerResourceClient.java
index 80b71dda9..69ae96d84 100644
--- a/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/resource/RootControllerResourceClient.java
+++ b/examples/hawkbit-example-ddi-client/src/main/java/org/eclipse/hawkbit/ddi/client/resource/RootControllerResourceClient.java
@@ -9,6 +9,7 @@ import org.springframework.cloud.netflix.feign.FeignClient;
/**
* Client binding for the Rootcontroller resource of the DDI API.
*/
+
@FeignClient(url = "${hawkbit.url:localhost:8080}/" + RootControllerResourceClient.PATH)
public interface RootControllerResourceClient extends DdiRootControllerRestApi {
diff --git a/examples/hawkbit-example-ddi-client/src/test/java/org/eclipse/hawkbit/example/ddi/client/AppTest.java b/examples/hawkbit-example-ddi-client/src/test/java/org/eclipse/hawkbit/example/ddi/client/AppTest.java
index bb369f478..78608b11d 100644
--- a/examples/hawkbit-example-ddi-client/src/test/java/org/eclipse/hawkbit/example/ddi/client/AppTest.java
+++ b/examples/hawkbit-example-ddi-client/src/test/java/org/eclipse/hawkbit/example/ddi/client/AppTest.java
@@ -11,9 +11,10 @@ public class AppTest {
@Test
public void AppTest() {
- final DdiExampleClient ddiClient = new DdiExampleClient("http://localhost:8080/", "mytest", "mytest", "desc",
- "DEFAULT");
- ddiClient.startDdiClient();
+ final DdiExampleClient ddiClient = new DdiExampleClient("http://localhost:8080/", "jktest", "DEFAULT");
+ ddiClient.run();
+
+ System.out.println("next steps........................");
}
}
diff --git a/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiChunk.java b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiChunk.java
index 4ff9debe4..78de8591d 100644
--- a/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiChunk.java
+++ b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiChunk.java
@@ -18,15 +18,19 @@ import javax.validation.constraints.NotNull;
public class DdiChunk {
@NotNull
- private final String part;
+ private String part;
@NotNull
- private final String version;
+ private String version;
@NotNull
- private final String name;
+ private String name;
- private final List artifacts;
+ private List artifacts;
+
+ public DdiChunk() {
+
+ }
/**
* Constructor.
diff --git a/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiConfig.java b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiConfig.java
index fa4f19882..5ec1b4dde 100644
--- a/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiConfig.java
+++ b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiConfig.java
@@ -8,12 +8,20 @@
*/
package org.eclipse.hawkbit.ddi.json.model;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonInclude.Include;
+import com.fasterxml.jackson.annotation.JsonProperty;
+
/**
* Standard configuration for the target.
*/
+@JsonInclude(Include.NON_NULL)
+@JsonIgnoreProperties(ignoreUnknown = true)
public class DdiConfig {
- private final DdiPolling polling;
+ @JsonProperty
+ private DdiPolling polling;
/**
* Constructor.
@@ -26,6 +34,10 @@ public class DdiConfig {
this.polling = polling;
}
+ public DdiConfig() {
+
+ }
+
public DdiPolling getPolling() {
return polling;
}
diff --git a/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiControllerBase.java b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiControllerBase.java
index b044c3537..3f160157c 100644
--- a/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiControllerBase.java
+++ b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiControllerBase.java
@@ -10,12 +10,20 @@ package org.eclipse.hawkbit.ddi.json.model;
import org.springframework.hateoas.ResourceSupport;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonInclude.Include;
+import com.fasterxml.jackson.annotation.JsonProperty;
+
/**
* {@link DdiControllerBase} resource content.
*/
+@JsonInclude(Include.NON_NULL)
+@JsonIgnoreProperties(ignoreUnknown = true)
public class DdiControllerBase extends ResourceSupport {
- private final DdiConfig config;
+ @JsonProperty
+ private DdiConfig config;
/**
* Constructor.
@@ -28,6 +36,10 @@ public class DdiControllerBase extends ResourceSupport {
this.config = config;
}
+ public DdiControllerBase() {
+
+ }
+
public DdiConfig getConfig() {
return config;
}
diff --git a/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiDeployment.java b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiDeployment.java
index 55538f8e2..7f8c84d39 100644
--- a/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiDeployment.java
+++ b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiDeployment.java
@@ -17,11 +17,15 @@ import com.fasterxml.jackson.annotation.JsonValue;
*/
public class DdiDeployment {
- private final HandlingType download;
+ private HandlingType download;
- private final HandlingType update;
+ private HandlingType update;
- private final List chunks;
+ private List chunks;
+
+ public DdiDeployment() {
+
+ }
/**
* Constructor.
diff --git a/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiDeploymentBase.java b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiDeploymentBase.java
index 25c7a62ed..4d89f759b 100644
--- a/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiDeploymentBase.java
+++ b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiDeploymentBase.java
@@ -21,10 +21,10 @@ public class DdiDeploymentBase extends ResourceSupport {
@JsonProperty("id")
@NotNull
- private final String deplyomentId;
+ private String deplyomentId;
@NotNull
- private final DdiDeployment deployment;
+ private DdiDeployment deployment;
/**
* Constructor.
@@ -39,6 +39,10 @@ public class DdiDeploymentBase extends ResourceSupport {
this.deployment = deployment;
}
+ public DdiDeploymentBase() {
+
+ }
+
public DdiDeployment getDeployment() {
return deployment;
}
diff --git a/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiPolling.java b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiPolling.java
index 4ad67d340..489178be8 100644
--- a/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiPolling.java
+++ b/hawkbit-ddi-api/src/main/java/org/eclipse/hawkbit/ddi/json/model/DdiPolling.java
@@ -8,12 +8,20 @@
*/
package org.eclipse.hawkbit.ddi.json.model;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonInclude.Include;
+import com.fasterxml.jackson.annotation.JsonProperty;
+
/**
* Polling interval for the SP target.
*/
+@JsonInclude(Include.NON_NULL)
+@JsonIgnoreProperties(ignoreUnknown = true)
public class DdiPolling {
- private final String sleep;
+ @JsonProperty
+ private String sleep;
/**
* Constructor.
@@ -26,6 +34,9 @@ public class DdiPolling {
this.sleep = sleep;
}
+ public DdiPolling() {
+ }
+
public String getSleep() {
return sleep;
}