Skip to content

Commit

Permalink
more of simulation result details page
Browse files Browse the repository at this point in the history
  • Loading branch information
1azyman committed Jan 26, 2023
1 parent 7ff6450 commit 244e3eb
Show file tree
Hide file tree
Showing 3 changed files with 91 additions and 65 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@

import com.evolveum.midpoint.gui.api.component.BasePanel;
import com.evolveum.midpoint.gui.api.util.WebComponentUtil;
import com.evfxolveum.midpoint.web.component.util.VisibleEnableBehaviour;
import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour;

/**
* Created by Viliam Repan (lazyman).
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,29 +15,15 @@
<div class="card">
<div class="card-header d-flex gap-2 align-items-center">
<i class="mr-1 fa-solid fa-circle-question"></i>
<h5 class="mb-0"><wicket:message key="PageSimulationResult.details"/></h5>
<h5 class="mb-0">
<wicket:message key="PageSimulationResult.details"/>
</h5>
</div>
<div class="card-body p-0">
<table class="table">
<tr>
<td><wicket:message key="PageSimulationResult.startTimestamp"/></td>
<td>2023-01-26T17:32:43+01:00</td>
</tr>
<tr>
<td>End timestamp</td>
<td>2023-01-26T17:32:43+01:00</td>
</tr>
<tr>
<td>Finished in</td>
<td>21 minutes 32 seconds</td>
</tr>
<tr>
<td>Task reference</td>
<td><a href="#">Some reconciliation task</a></td>
</tr>
<tr>
<td>Configuration used</td>
<td><span class="badge badge-success">Production</span></td>
<tr wicket:id="details">
<td wicket:id="label"/>
<td><span wicket:id="value"/></td>
</tr>
</table>
</div>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,54 +9,46 @@

import static com.evolveum.midpoint.schema.util.SimulationMetricReferenceTypeUtil.getDisplayableIdentifier;

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

import com.evolveum.midpoint.gui.api.component.wizard.NavigationPanel;
import com.evolveum.midpoint.gui.api.util.WebComponentUtil;
import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour;

import org.apache.wicket.AttributeModifier;
import org.apache.wicket.Component;
import org.apache.wicket.RestartResponseException;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
import org.apache.wicket.extensions.markup.html.repeater.data.table.ISortableDataProvider;
import org.apache.wicket.extensions.markup.html.repeater.data.table.PropertyColumn;
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 org.apache.wicket.model.LoadableDetachableModel;
import org.apache.wicket.request.mapper.parameter.PageParameters;
import org.jetbrains.annotations.NotNull;

import com.evolveum.midpoint.authentication.api.authorization.AuthorizationAction;
import com.evolveum.midpoint.authentication.api.authorization.PageDescriptor;
import com.evolveum.midpoint.authentication.api.authorization.Url;
import com.evolveum.midpoint.common.Utils;
import com.evolveum.midpoint.gui.api.component.wizard.NavigationPanel;
import com.evolveum.midpoint.gui.api.model.LoadableModel;
import com.evolveum.midpoint.gui.api.util.WebComponentUtil;
import com.evolveum.midpoint.gui.api.util.WebModelServiceUtils;
import com.evolveum.midpoint.gui.impl.component.box.SmallBoxData;
import com.evolveum.midpoint.gui.impl.component.search.Search;
import com.evolveum.midpoint.gui.impl.component.search.SearchBuilder;
import com.evolveum.midpoint.gui.impl.page.admin.simulation.widget.MetricWidgetPanel;
import com.evolveum.midpoint.prism.PrismObject;
import com.evolveum.midpoint.prism.impl.PrismPropertyValueImpl;
import com.evolveum.midpoint.schema.util.ValueDisplayUtil;
import com.evolveum.midpoint.security.api.AuthorizationConstants;
import com.evolveum.midpoint.task.api.Task;
import com.evolveum.midpoint.util.logging.Trace;
import com.evolveum.midpoint.util.logging.TraceManager;
import com.evolveum.midpoint.web.component.data.BoxedTablePanel;
import com.evolveum.midpoint.web.component.data.ObjectDataProvider;
import com.evolveum.midpoint.web.component.data.column.ObjectNameColumn;
import com.evolveum.midpoint.web.component.form.MidpointForm;
import com.evolveum.midpoint.web.component.util.SelectableBean;
import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour;
import com.evolveum.midpoint.web.page.admin.PageAdmin;
import com.evolveum.midpoint.web.page.error.PageError404;
import com.evolveum.midpoint.web.session.UserProfileStorage;
import com.evolveum.midpoint.xml.ns._public.common.common_3.DashboardWidgetType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.SimulationMetricValuesType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.SimulationResultType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.TagType;

import org.jetbrains.annotations.NotNull;

/**
* Created by Viliam Repan (lazyman).
Expand Down Expand Up @@ -84,15 +76,16 @@ public class PageSimulationResult extends PageAdmin implements SimulationPage {
private static final String DOT_CLASS = PageSimulationResult.class.getName() + ".";

private static final String ID_NAVIGATION = "navigation";

private static final String ID_DETAILS = "details";
private static final String ID_LABEL = "label";
private static final String ID_VALUE = "value";
private static final String ID_WIDGETS = "widgets";

private static final String ID_WIDGET = "widget";
private static final String ID_FORM = "form";
private static final String ID_TABLE = "table";

private IModel<SimulationResultType> resultModel;

private IModel<List<ResultDetail>> detailsModel;

public PageSimulationResult() {
this(new PageParameters());
}
Expand Down Expand Up @@ -124,6 +117,44 @@ protected SimulationResultType load() {
return object.asObjectable();
}
};

detailsModel = new LoadableModel<>() {

@Override
protected List<ResultDetail> load() {
List<ResultDetail> list = new ArrayList<>();
list.add(new ResultDetail("PageSimulationResult.startTimestamp",
() -> WebComponentUtil.translateMessage(ValueDisplayUtil.toStringValue(new PrismPropertyValueImpl(resultModel.getObject().getStartTimestamp())))));
list.add(new ResultDetail("PageSimulationResult.endTimestamp",
() -> WebComponentUtil.translateMessage(ValueDisplayUtil.toStringValue(new PrismPropertyValueImpl(resultModel.getObject().getEndTimestamp())))));
list.add(new ResultDetail("PageSimulationResult.finishedIn", () -> "30 minutes")); // todo proper calculation
list.add(new ResultDetail("PageSimulationResult.rootTask", null) {

@Override
public Component createValueComponent(String id) {
return new Label(id); // todo task name with link
}
});
list.add(new ResultDetail("PageSimulationResult.taskStatus", null) {

@Override
public Component createValueComponent(String id) {
return new Label(id); // todo task status badge. Green if running and endTimestamp is not defined, Gray otherwise
}
});
list.add(new ResultDetail("PageSimulationResult.productionConfiguration", null) {

@Override
public Component createValueComponent(String id) {
Label label = new Label(id);
label.add(AttributeModifier.replace("class", "badge badge-success"));
return label;
}
});

return list;
}
};
}

private void initLayout() {
Expand All @@ -141,12 +172,20 @@ protected IModel<String> createTitleModel() {

@Override
protected void onBackPerformed(AjaxRequestTarget target) {
//todo implement
setResponsePage(PageSimulationResults.class);
PageSimulationResult.this.onBackPerformed(target);
}
};
add(navigation);

ListView<ResultDetail> details = new ListView<>(ID_DETAILS, detailsModel) {
@Override
protected void populateItem(ListItem<ResultDetail> item) {
item.add(new Label(ID_LABEL, () -> getString(item.getModelObject().label)));
item.add(item.getModelObject().createValueComponent(ID_VALUE));
}
};
add(details);

// todo implement
IModel<List<DashboardWidgetType>> data = () -> {

Expand All @@ -171,31 +210,32 @@ protected void populateItem(ListItem<DashboardWidgetType> item) {
}
};
add(widgets);
}

private void onWidgetClick(AjaxRequestTarget target, SmallBoxData data) {
System.out.println();
}

MidpointForm form = new MidpointForm(ID_FORM);
add(form);
private void onBackPerformed(AjaxRequestTarget target) {
//todo implement
setResponsePage(PageSimulationResults.class);
}

IModel<Search<SimulationResultType>> search = new LoadableModel<>(false) {
private static class ResultDetail implements Serializable {

@Override
protected Search<SimulationResultType> load() {
return new SearchBuilder(SimulationResultType.class)
.modelServiceLocator(PageSimulationResult.this)
.build();
}
};
String label;

// todo columnsd
List<IColumn<SelectableBean<TagType>, String>> columns = new ArrayList<>();
columns.add(new ObjectNameColumn<>(createStringResource("ObjectType.name")));
columns.add(new PropertyColumn(createStringResource("ObjectType.description"), "value.description"));
IModel<String> value;

ISortableDataProvider<SelectableBean<TagType>, String> provider = new ObjectDataProvider<>(this, search);
BoxedTablePanel<SelectableBean<TagType>> table = new BoxedTablePanel<>(ID_TABLE, provider, columns, UserProfileStorage.TableId.PAGE_SIMULATION_RESULT_TAGS);
form.add(table);
}
public ResultDetail(String label, IModel<String> value) {
this.label = label;
this.value = value;
}

private void onWidgetClick(AjaxRequestTarget target, SmallBoxData data) {
System.out.println();
public Component createValueComponent(String id) {
Label label = new Label(id, value);
label.setRenderBodyOnly(true);
return label;
}
}
}

0 comments on commit 244e3eb

Please sign in to comment.