diff --git a/hawkbit-simple-ui/src/main/java/org/eclipse/hawkbit/ui/simple/view/TargetView.java b/hawkbit-simple-ui/src/main/java/org/eclipse/hawkbit/ui/simple/view/TargetView.java index ace972bfd..98d4f5523 100644 --- a/hawkbit-simple-ui/src/main/java/org/eclipse/hawkbit/ui/simple/view/TargetView.java +++ b/hawkbit-simple-ui/src/main/java/org/eclipse/hawkbit/ui/simple/view/TargetView.java @@ -9,7 +9,6 @@ */ package org.eclipse.hawkbit.ui.simple.view; -import java.time.ZoneOffset; import java.util.Collections; import java.util.Date; import java.util.LinkedList; @@ -18,18 +17,21 @@ import java.util.Map; import java.util.Objects; import java.util.Optional; import java.util.Set; +import java.time.ZoneOffset; import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletionStage; import java.util.function.Function; -import java.util.stream.Collectors; import java.util.stream.Stream; import jakarta.annotation.security.RolesAllowed; import com.vaadin.flow.component.Component; import com.vaadin.flow.component.Key; +import com.vaadin.flow.component.Unit; import com.vaadin.flow.component.button.Button; import com.vaadin.flow.component.button.ButtonVariant; +import com.vaadin.flow.component.ClickEvent; +import com.vaadin.flow.component.ComponentEventListener; import com.vaadin.flow.component.checkbox.CheckboxGroup; import com.vaadin.flow.component.datetimepicker.DateTimePicker; import com.vaadin.flow.component.dependency.Uses; @@ -46,6 +48,8 @@ import com.vaadin.flow.component.textfield.TextField; import com.vaadin.flow.data.renderer.ComponentRenderer; import com.vaadin.flow.router.PageTitle; import com.vaadin.flow.router.Route; +import com.vaadin.flow.theme.lumo.LumoUtility; +import org.eclipse.hawkbit.mgmt.json.model.MgmtPollStatus; import org.eclipse.hawkbit.mgmt.json.model.distributionset.MgmtActionType; import org.eclipse.hawkbit.mgmt.json.model.distributionset.MgmtDistributionSet; import org.eclipse.hawkbit.mgmt.json.model.distributionset.MgmtTargetAssignmentRequestBody; @@ -62,6 +66,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.Utils; import org.springframework.util.ObjectUtils; +import java.util.stream.Collectors; @PageTitle("Targets") @Route(value = "targets", layout = MainLayout.class) @@ -69,6 +74,7 @@ import org.springframework.util.ObjectUtils; @Uses(Icon.class) public class TargetView extends TableView { + public static final String STATUS = "Status"; public static final String CONTROLLER_ID = "Controller Id"; public static final String TAG = "Tag"; @@ -79,6 +85,8 @@ public class TargetView extends TableView { @Override protected void addColumns(final Grid grid) { + grid.addColumn(new ComponentRenderer(TargetStatusCell::new)).setHeader(STATUS).setAutoWidth(true) + .setFlexGrow(0); grid.addColumn(MgmtTarget::getControllerId).setHeader(CONTROLLER_ID).setAutoWidth(true); grid.addColumn(MgmtTarget::getName).setHeader(Constants.NAME).setAutoWidth(true); grid.addColumn(MgmtTarget::getTargetTypeName).setHeader(Constants.TYPE).setAutoWidth(true); @@ -157,64 +165,126 @@ public class TargetView extends TableView { } } - @SuppressWarnings({"java:S1171", "java:S3599"}) + @SuppressWarnings({ "java:S1171", "java:S3599" }) private static class RawFilter implements Filter.Rsql { - private final TextField textFilter = new TextField("Raw Filter"); + private final TextField textFilter = new TextField("Raw Filter", ""); private final VerticalLayout layout = new VerticalLayout(); + private final Select savedFilters = new Select<>(); private RawFilter(final HawkbitMgmtClient hawkbitClient) { - textFilter.setPlaceholder(""); - final Select savedFilters = new Select<>( - "Saved Filters", - e -> { - if (e.getValue() != null) { - textFilter.setValue(e.getValue().getQuery()); - } - }); + final Button createBtn = Utils.tooltip(new Button("Save", VaadinIcon.PLUS.create()), "Save"); + final Button updateBtn = Utils.tooltip(new Button(VaadinIcon.HARDDRIVE.create()), "Update"); + updateBtn.setEnabled(false); + + savedFilters.setLabel("Saved Filters"); + savedFilters.addValueChangeListener(e -> { + if (e.getValue() != null) { + textFilter.setValue(e.getValue().getQuery()); + updateBtn.setEnabled(true); + createBtn.setText("Save as"); + } else { + textFilter.clear(); + updateBtn.setEnabled(false); + createBtn.setText("Save"); + } + }); savedFilters.setEmptySelectionAllowed(true); - savedFilters.setItems( - Optional.ofNullable( - hawkbitClient.getTargetFilterQueryRestApi() - .getFilters(0, 30, null, null, null) - .getBody().getContent()) - .orElse(Collections.emptyList())); + savedFilters.setItems(listFilters(hawkbitClient)); savedFilters.setItemLabelGenerator( query -> Optional.ofNullable(query).map(MgmtTargetFilterQuery::getName).orElse("