Skip to content

Commit

Permalink
simulation ui, related objects widget paging and css fixes + added cu…
Browse files Browse the repository at this point in the history
…rrently displayed object first if needed
  • Loading branch information
1azyman committed Feb 15, 2023
1 parent 3cb4814 commit 569e065
Show file tree
Hide file tree
Showing 6 changed files with 125 additions and 8 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
package com.evolveum.midpoint.gui.impl.page.admin.simulation;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Objects;

import org.apache.wicket.Component;
import org.apache.wicket.model.IModel;
import org.jetbrains.annotations.NotNull;

import com.evolveum.midpoint.gui.impl.component.search.Search;
import com.evolveum.midpoint.prism.query.ObjectPaging;
import com.evolveum.midpoint.prism.query.ObjectQuery;
import com.evolveum.midpoint.schema.GetOperationOptions;
import com.evolveum.midpoint.schema.SelectorOptions;
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.task.api.Task;
import com.evolveum.midpoint.util.exception.CommonException;
import com.evolveum.midpoint.xml.ns._public.common.common_3.SimulationResultProcessedObjectType;

/**
* Just and extension of {@link RelatedObjectsProvider}, which prepends currently displayed processed objects into
* list of related objects (for better navigation).
*/
public class CombinedRelatedObjectsProvider extends RelatedObjectsProvider {

private IModel<SimulationResultProcessedObjectType> self;

public CombinedRelatedObjectsProvider(Component component, @NotNull IModel<Search<SimulationResultProcessedObjectType>> searchModel,
IModel<SimulationResultProcessedObjectType> self) {

super(component, searchModel);

this.self = self;
}

@Override
protected List<SimulationResultProcessedObjectType> searchObjects(Class<SimulationResultProcessedObjectType> type, ObjectQuery query, Collection<SelectorOptions<GetOperationOptions>> options, Task task, OperationResult result) throws CommonException {
List<SimulationResultProcessedObjectType> results = super.searchObjects(type, query, options, task, result);

boolean prependSelf = false;
if (self.getObject() != null && query != null && query.getPaging() != null) {
ObjectPaging paging = query.getPaging();
if (Objects.equals(paging.getOffset(), 0)) {
prependSelf = true;
}
}

if (!prependSelf) {
return results;
}

List<SimulationResultProcessedObjectType> list = new ArrayList<>();
list.add(self.getObject());
list.addAll(results);

return list;
}

@Override
protected Integer countObjects(Class<SimulationResultProcessedObjectType> type, ObjectQuery query, Collection<SelectorOptions<GetOperationOptions>> currentOptions, Task task, OperationResult result) throws CommonException {
Integer count = super.countObjects(type, query, currentOptions, task, result);

return self.getObject() != null ? count + 1 : count;
}

@Override
protected ObjectPaging createPaging(long offset, long pageSize) {
if (self.getObject() != null) {
if (offset == 0) {
pageSize = pageSize - 1;
} else {
offset = offset - 1;
}
}

return super.createPaging(offset, pageSize);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
<div class="row">
<div class="col-3">
<div wicket:id="details"/>
<wicket:enclosure wicket:child="relatedObjects">
<wicket:enclosure child="relatedObjects">
<div class="card">
<div class="card-header">
<h3 class="card-title">
Expand All @@ -24,6 +24,10 @@ <h3 class="card-title">
<div class="card-body p-0">
<table class="table" wicket:id="relatedObjects"/>
</div>
<div class="card-footer d-flex align-items-center" wicket:id="footer">
<div class="flex-grow-1" wicket:id="count"/>
<div wicket:id="paging"/>
</div>
</div>
</wicket:enclosure>
</div>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,14 @@
import org.apache.wicket.Component;
import org.apache.wicket.RestartResponseException;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.behavior.AttributeAppender;
import org.apache.wicket.extensions.markup.html.repeater.data.table.DataTable;
import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
import org.apache.wicket.extensions.markup.html.repeater.data.table.LambdaColumn;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.basic.MultiLineLabel;
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;
Expand Down Expand Up @@ -47,8 +51,10 @@
import com.evolveum.midpoint.util.logging.Trace;
import com.evolveum.midpoint.util.logging.TraceManager;
import com.evolveum.midpoint.web.component.breadcrumbs.Breadcrumb;
import com.evolveum.midpoint.web.component.data.CountToolbar;
import com.evolveum.midpoint.web.component.data.SelectableDataTable;
import com.evolveum.midpoint.web.component.data.column.AjaxLinkColumn;
import com.evolveum.midpoint.web.component.data.paging.NavigatorPanel;
import com.evolveum.midpoint.web.component.prism.show.VisualizationDto;
import com.evolveum.midpoint.web.component.prism.show.VisualizationPanel;
import com.evolveum.midpoint.web.component.prism.show.WrapperVisualization;
Expand Down Expand Up @@ -90,6 +96,9 @@ public class PageSimulationResultObject extends PageAdmin implements SimulationP
private static final String ID_RELATED_OBJECTS = "relatedObjects";
private static final String ID_CHANGES_NEW = "changesNew";
private static final String ID_CHANGES = "changes";
private static final String ID_PAGING = "paging";
private static final String ID_FOOTER = "footer";
private static final String ID_COUNT = "count";

private IModel<SimulationResultType> resultModel;

Expand Down Expand Up @@ -360,7 +369,7 @@ protected Search<SimulationResultProcessedObjectType> load() {
}
};

RelatedObjectsProvider provider = new RelatedObjectsProvider(this, searchModel) {
CombinedRelatedObjectsProvider provider = new CombinedRelatedObjectsProvider(this, searchModel, objectModel) {

@Override
protected @NotNull String getSimulationResultOid() {
Expand All @@ -376,10 +385,36 @@ protected Search<SimulationResultProcessedObjectType> load() {
List<IColumn<SelectableBean<SimulationResultProcessedObjectType>, String>> columns = createColumns();

DataTable<SelectableBean<SimulationResultProcessedObjectType>, String> relatedObjects =
new SelectableDataTable<>(ID_RELATED_OBJECTS, columns, provider, 10);
new SelectableDataTable<>(ID_RELATED_OBJECTS, columns, provider, 10) {

@Override
protected Item<IColumn<SelectableBean<SimulationResultProcessedObjectType>, String>> newCellItem(String id, int index, IModel<IColumn<SelectableBean<SimulationResultProcessedObjectType>, String>> model) {
Item<IColumn<SelectableBean<SimulationResultProcessedObjectType>, String>> item = super.newCellItem(id, index, model);
item.add(AttributeAppender.append("class", "align-middle"));

return item;
}

};
relatedObjects.add(new VisibleBehaviour(() -> relatedObjects.getRowCount() > 1));
add(relatedObjects);

final WebMarkupContainer footer = new WebMarkupContainer(ID_FOOTER);
footer.add(new VisibleBehaviour(() -> relatedObjects.getPageCount() > 1));
add(footer);

final Label count = new Label(ID_COUNT, () -> CountToolbar.createCountString(relatedObjects));
footer.add(count);

final NavigatorPanel paging = new NavigatorPanel(ID_PAGING, relatedObjects, true) {

@Override
protected String getPaginationCssClass() {
return null;
}
};
footer.add(paging);

DetailsTablePanel details = new DetailsTablePanel(ID_DETAILS,
() -> "fa-solid fa-circle-question",
createStringResource("PageSimulationResultObject.details"),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,6 @@

public class RelatedObjectsProvider extends SelectableBeanContainerDataProvider<SimulationResultProcessedObjectType> {

public static final String SORT_BY_NAME = "name";

public RelatedObjectsProvider(Component component, @NotNull IModel<Search<SimulationResultProcessedObjectType>> searchModel) {
super(component, searchModel, null, true);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -310,7 +310,7 @@ private void initLayout(final BoxedTablePanel boxedTablePanel, final Table table
footerContainer.setOutputMarkupId(true);
footerContainer.add(new VisibleBehaviour(() -> isPagingVisible()));

final Label count = new Label(ID_COUNT, () -> CountToolbar.createCountString(PagingFooter.this, dataTable));
final Label count = new Label(ID_COUNT, () -> CountToolbar.createCountString(dataTable));
count.setOutputMarkupId(true);
footerContainer.add(count);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -70,12 +70,12 @@ private IModel<String> createModel(Component component, IPageable pageable) {

@Override
protected String load() {
return createCountString(component, pageable);
return createCountString(pageable);
}
};
}

public static String createCountString(Component component, IPageable pageable) {
public static String createCountString(IPageable pageable) {
long from = 0;
long to = 0;
long count = 0;
Expand Down

0 comments on commit 569e065

Please sign in to comment.