simple-ui: Also show target attributes in Target's view (#2304)
It is useful to see target attributes in the Target's view: for instance SWUpdate can deliver values from the platform which identify some features of it. This can include an arbitrary data, e.g. platform HW revision, component's versions etc. Thus, add a possibility to see those attributes in the dedicated view. Signed-off-by: Oleksandr Andrushchenko <andr2000@gmail.com>
This commit is contained in:
committed by
GitHub
parent
6bf85a2175
commit
970a434339
@@ -26,6 +26,7 @@ public interface Constants {
|
|||||||
String LAST_MODIFIED_BY = "Last modified by";
|
String LAST_MODIFIED_BY = "Last modified by";
|
||||||
String LAST_MODIFIED_AT = "Last modified at";
|
String LAST_MODIFIED_AT = "Last modified at";
|
||||||
String SECURITY_TOKEN = "Security Token";
|
String SECURITY_TOKEN = "Security Token";
|
||||||
|
String ATTRIBUTES = "Attributes";
|
||||||
|
|
||||||
// rollout
|
// rollout
|
||||||
String GROUP_COUNT = "Group Count";
|
String GROUP_COUNT = "Group Count";
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ import java.util.Date;
|
|||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.Objects;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.concurrent.CompletableFuture;
|
import java.util.concurrent.CompletableFuture;
|
||||||
import java.util.stream.Stream;
|
import java.util.stream.Stream;
|
||||||
@@ -51,6 +52,7 @@ import org.eclipse.hawkbit.ui.simple.view.util.SelectionGrid;
|
|||||||
import org.eclipse.hawkbit.ui.simple.view.util.TableView;
|
import org.eclipse.hawkbit.ui.simple.view.util.TableView;
|
||||||
import org.eclipse.hawkbit.ui.simple.view.util.Utils;
|
import org.eclipse.hawkbit.ui.simple.view.util.Utils;
|
||||||
import org.springframework.util.ObjectUtils;
|
import org.springframework.util.ObjectUtils;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@PageTitle("Targets")
|
@PageTitle("Targets")
|
||||||
@Route(value = "targets", layout = MainLayout.class)
|
@Route(value = "targets", layout = MainLayout.class)
|
||||||
@@ -73,7 +75,7 @@ public class TargetView extends TableView<MgmtTarget, String> {
|
|||||||
grid.addColumn(MgmtTarget::getTargetTypeName).setHeader(Constants.TYPE).setAutoWidth(true);
|
grid.addColumn(MgmtTarget::getTargetTypeName).setHeader(Constants.TYPE).setAutoWidth(true);
|
||||||
|
|
||||||
grid.setItemDetailsRenderer(new ComponentRenderer<>(
|
grid.setItemDetailsRenderer(new ComponentRenderer<>(
|
||||||
TargetDetails::new, TargetDetails::setItem));
|
() -> new TargetDetails(hawkbitClient), TargetDetails::setItem));
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
(query, filter) -> hawkbitClient.getTargetRestApi()
|
(query, filter) -> hawkbitClient.getTargetRestApi()
|
||||||
@@ -209,20 +211,23 @@ public class TargetView extends TableView<MgmtTarget, String> {
|
|||||||
|
|
||||||
private static class TargetDetails extends FormLayout {
|
private static class TargetDetails extends FormLayout {
|
||||||
|
|
||||||
|
private final transient HawkbitMgmtClient hawkbitClient;
|
||||||
private final TextArea description = new TextArea(Constants.DESCRIPTION);
|
private final TextArea description = new TextArea(Constants.DESCRIPTION);
|
||||||
private final TextField createdBy = Utils.textField(Constants.CREATED_BY);
|
private final TextField createdBy = Utils.textField(Constants.CREATED_BY);
|
||||||
private final TextField createdAt = Utils.textField(Constants.CREATED_AT);
|
private final TextField createdAt = Utils.textField(Constants.CREATED_AT);
|
||||||
private final TextField lastModifiedBy = Utils.textField(Constants.LAST_MODIFIED_BY);
|
private final TextField lastModifiedBy = Utils.textField(Constants.LAST_MODIFIED_BY);
|
||||||
private final TextField lastModifiedAt = Utils.textField(Constants.LAST_MODIFIED_AT);
|
private final TextField lastModifiedAt = Utils.textField(Constants.LAST_MODIFIED_AT);
|
||||||
private final TextField securityToken = Utils.textField(Constants.SECURITY_TOKEN);
|
private final TextField securityToken = Utils.textField(Constants.SECURITY_TOKEN);
|
||||||
|
private final TextArea targetAttributes = new TextArea(Constants.ATTRIBUTES);
|
||||||
|
|
||||||
private TargetDetails() {
|
private TargetDetails(HawkbitMgmtClient hawkbitClient) {
|
||||||
|
this.hawkbitClient = hawkbitClient;
|
||||||
description.setMinLength(2);
|
description.setMinLength(2);
|
||||||
Stream.of(
|
Stream.of(
|
||||||
description,
|
description,
|
||||||
createdBy, createdAt,
|
createdBy, createdAt,
|
||||||
lastModifiedBy, lastModifiedAt,
|
lastModifiedBy, lastModifiedAt,
|
||||||
securityToken)
|
securityToken, targetAttributes)
|
||||||
.forEach(field -> {
|
.forEach(field -> {
|
||||||
field.setReadOnly(true);
|
field.setReadOnly(true);
|
||||||
add(field);
|
add(field);
|
||||||
@@ -239,6 +244,13 @@ public class TargetView extends TableView<MgmtTarget, String> {
|
|||||||
lastModifiedBy.setValue(target.getLastModifiedBy());
|
lastModifiedBy.setValue(target.getLastModifiedBy());
|
||||||
lastModifiedAt.setValue(new Date(target.getLastModifiedAt()).toString());
|
lastModifiedAt.setValue(new Date(target.getLastModifiedAt()).toString());
|
||||||
securityToken.setValue(target.getSecurityToken());
|
securityToken.setValue(target.getSecurityToken());
|
||||||
|
var response = hawkbitClient.getTargetRestApi().getAttributes(target.getControllerId());
|
||||||
|
if (response.getStatusCode().is2xxSuccessful()) {
|
||||||
|
targetAttributes.setValue(Objects.requireNonNullElse(response.getBody(), Collections.emptyMap()).entrySet().stream().map(entry -> entry.getKey() + ": " +
|
||||||
|
entry.getValue()).collect(Collectors.joining("\n")));
|
||||||
|
} else {
|
||||||
|
targetAttributes.setValue("Error occurred fetching attributes from server: " + response.getStatusCode());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user