Skip to content

Commit

Permalink
simulation ui, progress bar column
Browse files Browse the repository at this point in the history
  • Loading branch information
1azyman committed Feb 13, 2023
1 parent f607e5e commit 769ee8d
Show file tree
Hide file tree
Showing 7 changed files with 237 additions and 50 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
package com.evolveum.midpoint.gui.api.component.progressbar;

import com.evolveum.midpoint.util.LocalizableMessage;

public class ProgressBar {

public enum State {

SUCCESS("bg-success"),
INFO("bg-info"),
DANGER("bg-danger"),
WARNINIG("bg-warning"),
SECONDARY("bg-secondary"),
PRIMARY("bg-primary");

private String cssClass;

State(String cssClass) {
this.cssClass = cssClass;
}

public String getCssClass() {
return cssClass;
}
}

private double value;

private State state;

private LocalizableMessage text;

public ProgressBar(double value, State state) {
this.value = value;
this.state = state;
}

public double getValue() {
return value;
}

public void setValue(double value) {
this.value = value;
}

public State getState() {
return state;
}

public void setState(State state) {
this.state = state;
}

public LocalizableMessage getText() {
return text;
}

public void setText(LocalizableMessage text) {
this.text = text;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@
<!DOCTYPE html>
<html xmlns:wicket="http://wicket.apache.org">
<wicket:panel>
<div class="progress-bar" wicket:id="progressBar"/>
<wicket:container wicket:id="bars">
<div class="progress-bar" wicket:id="bar"/>
</wicket:container>
<div class="text-sm text-secondary" wicket:id="text"/>
</wicket:panel>
</html>
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
/*
* Copyright (c) 2016-2021 Evolveum and contributors
*
* This work is dual-licensed under the Apache License 2.0
* and European Union Public License. See LICENSE file for details.
*/
package com.evolveum.midpoint.gui.api.component.progressbar;

import java.util.List;

import org.apache.wicket.Component;
import org.apache.wicket.behavior.AttributeAppender;
import org.apache.wicket.markup.ComponentTag;
import org.apache.wicket.markup.html.WebComponent;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView;
import org.apache.wicket.model.IModel;

import com.evolveum.midpoint.gui.api.component.BasePanel;

/**
* @author semancik
*/
public class ProgressBarPanel extends BasePanel<List<ProgressBar>> {
private static final long serialVersionUID = 1L;

private static final String ID_BARS = "bars";
private static final String ID_BAR = "bar";
private static final String ID_TEXT = "text";

public ProgressBarPanel(String id, IModel<List<ProgressBar>> model) {
super(id, model);

initLayout();
}

@Override
protected void onComponentTag(ComponentTag tag) {
super.onComponentTag(tag);

checkComponentTag(tag, "div");
}

private void initLayout() {
add(AttributeAppender.append("class", "progress rounded"));

ListView<ProgressBar> bars = new ListView<>(ID_BARS, getModelObject()) {
@Override
protected void populateItem(ListItem<ProgressBar> item) {
item.add(createBar(ID_BAR, item.getModel()));
}
};
add(bars);

Label text = new Label(ID_TEXT);
add(text);
}

private Component createBar(String id, IModel<ProgressBar> model) {
WebComponent bar = new WebComponent(id);
bar.add(AttributeAppender.append("class", () -> model.getObject().getState().getCssClass()));
bar.add(AttributeAppender.append("style", () -> "width: " + model.getObject().getValue() + "%;"));

return bar;
}
}

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,7 @@

package com.evolveum.midpoint.gui.impl.page.admin.simulation;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Objects;
import java.util.*;
import java.util.stream.Collectors;

import org.apache.commons.lang3.StringUtils;
Expand All @@ -23,10 +20,12 @@
import org.apache.wicket.extensions.markup.html.repeater.data.table.LambdaColumn;
import org.apache.wicket.markup.repeater.Item;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.LoadableDetachableModel;
import org.apache.wicket.request.mapper.parameter.PageParameters;
import org.jetbrains.annotations.NotNull;

import com.evolveum.midpoint.gui.api.component.data.provider.ISelectableDataProvider;
import com.evolveum.midpoint.gui.api.component.progressbar.ProgressBar;
import com.evolveum.midpoint.gui.api.util.WebComponentUtil;
import com.evolveum.midpoint.gui.impl.component.ContainerableListPanel;
import com.evolveum.midpoint.gui.impl.component.search.SearchContext;
Expand All @@ -36,9 +35,12 @@
import com.evolveum.midpoint.prism.path.ItemPath;
import com.evolveum.midpoint.util.DisplayableValue;
import com.evolveum.midpoint.web.component.data.column.ContainerableNameColumn;
import com.evolveum.midpoint.web.component.data.column.ProgressBarColumn;
import com.evolveum.midpoint.web.component.util.SelectableBean;
import com.evolveum.midpoint.web.session.UserProfileStorage;
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;
import com.evolveum.prism.xml.ns._public.types_3.ItemDeltaType;
import com.evolveum.prism.xml.ns._public.types_3.ObjectDeltaType;

/**
* Created by Viliam Repan (lazyman).
Expand Down Expand Up @@ -214,11 +216,76 @@ protected IColumn<SelectableBean<SimulationResultProcessedObjectType>, String> c
return createStateColumn(displayModel);
} else if (SimulationResultProcessedObjectType.F_TYPE.equivalent(path)) {
return createTypeColumn(displayModel);
} else if (SimulationResultProcessedObjectType.F_DELTA.equivalent(path)) {
return createDeltaColumn(displayModel);
}

return super.createCustomExportableColumn(displayModel, customColumn, expression);
}

private IColumn<SelectableBean<SimulationResultProcessedObjectType>, String> createDeltaColumn(IModel<String> displayModel) {
return new ProgressBarColumn<>(displayModel) {

@Override
protected @NotNull IModel<List<ProgressBar>> createProgressBarModel(IModel<SelectableBean<SimulationResultProcessedObjectType>> rowModel) {
return new LoadableDetachableModel<>() {

@Override
protected List<ProgressBar> load() {
SimulationResultProcessedObjectType object = rowModel.getObject().getValue();
ObjectDeltaType delta = object.getDelta();
if (delta == null) {
return Collections.emptyList();
}

switch (delta.getChangeType()) {
case ADD:
return Collections.singletonList(new ProgressBar(100, ProgressBar.State.SUCCESS));
case DELETE:
return Collections.singletonList(new ProgressBar(100, ProgressBar.State.DANGER));
default:
}

List<ItemDeltaType> deltas = delta.getItemDelta();
int total = deltas.size();
int add = 0;
int modify = 0;
int delete = 0;

for (ItemDeltaType id : deltas) {
switch (id.getModificationType()) {
case ADD:
add++;
break;
case REPLACE:
modify++;
break;
case DELETE:
delete++;
break;
}
}

List<ProgressBar> bars = new ArrayList<>();
addProgressBar(bars, ProgressBar.State.SUCCESS, add, total);
addProgressBar(bars, ProgressBar.State.INFO, modify, total);
addProgressBar(bars, ProgressBar.State.DANGER, delete, total);

return bars;
}

private void addProgressBar(List<ProgressBar> bars, ProgressBar.State state, int size, int total) {
if (size == 0) {
return;
}

bars.add(new ProgressBar(size * 100 / (double) total, state));
}
};
}
};
}

private IColumn<SelectableBean<SimulationResultProcessedObjectType>, String> createStateColumn(IModel<String> displayModel) {
return new AbstractColumn<>(displayModel) {
@Override
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package com.evolveum.midpoint.web.component.data.column;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulator;
import org.apache.wicket.extensions.markup.html.repeater.data.table.AbstractColumn;
import org.apache.wicket.markup.repeater.Item;
import org.apache.wicket.model.IModel;
import org.jetbrains.annotations.NotNull;

import com.evolveum.midpoint.gui.api.component.progressbar.ProgressBar;
import com.evolveum.midpoint.gui.api.component.progressbar.ProgressBarPanel;

public class ProgressBarColumn<R extends Serializable, S extends Serializable> extends AbstractColumn<R, S> {

private static final long serialVersionUID = 1L;

public ProgressBarColumn(IModel<String> displayModel) {
super(displayModel);
}

@Override
public void populateItem(Item<ICellPopulator<R>> item, String id, IModel<R> rowModel) {
item.add(new ProgressBarPanel(id, createProgressBarModel(rowModel)));
}

protected @NotNull IModel<List<ProgressBar>> createProgressBarModel(IModel<R> rowModel) {
return () -> new ArrayList<>();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,8 @@ public class DefaultColumnUtils {
.put(SimulationResultProcessedObjectType.class, Arrays.asList(
new ColumnWrapper(SimulationResultProcessedObjectType.F_NAME),
new ColumnWrapper(SimulationResultProcessedObjectType.F_TYPE),
new ColumnWrapper(SimulationResultProcessedObjectType.F_STATE)))
new ColumnWrapper(SimulationResultProcessedObjectType.F_STATE),
new ColumnWrapper(SimulationResultProcessedObjectType.F_DELTA)))
.build();
}

Expand Down

0 comments on commit 769ee8d

Please sign in to comment.