Skip to content

Commit

Permalink
moving paging from report to view
Browse files Browse the repository at this point in the history
  • Loading branch information
skublik committed May 3, 2021
1 parent 1afbcb9 commit e36a6d2
Show file tree
Hide file tree
Showing 18 changed files with 142 additions and 59 deletions.
Expand Up @@ -115,12 +115,12 @@
</expression>
</export>
</column>
<paging>
<orderDirection>ascending</orderDirection>
<orderBy>name</orderBy>
</paging>
<type>AccessCertificationDefinitionType</type>
</view>
<paging>
<orderDirection>ascending</orderDirection>
<orderBy>name</orderBy>
</paging>
<subreport>
<name>campaigns</name>
<type>AccessCertificationCampaignType</type>
Expand Down
8 changes: 4 additions & 4 deletions config/initial-objects/140-report-certification-campaigns.xml
Expand Up @@ -163,13 +163,13 @@
</expression>
</export>
</column>
<paging>
<orderDirection>ascending</orderDirection>
<orderBy>name</orderBy>
</paging>
<type>AccessCertificationCampaignType</type>
</view>
<useOnlyReportView>true</useOnlyReportView>
<paging>
<orderDirection>ascending</orderDirection>
<orderBy>name</orderBy>
</paging>
<parameter>
<name>alsoClosedCampaigns</name>
<type>boolean</type>
Expand Down
6 changes: 3 additions & 3 deletions config/initial-objects/160-report-certification-decisions.xml
Expand Up @@ -138,11 +138,11 @@
</expression>
</export>
</column>
<paging>
<orderBy>objectRef/@/name</orderBy>
</paging>
<type>c:AccessCertificationCaseType</type>
</view>
<paging>
<orderBy>objectRef/@/name</orderBy>
</paging>
<parameter>
<name>campaignName</name>
<type>c:ObjectReferenceType</type>
Expand Down
Expand Up @@ -12,9 +12,22 @@
import java.util.List;
import java.util.function.Supplier;

import com.evolveum.midpoint.prism.path.ItemName;
import com.evolveum.midpoint.prism.query.ObjectPaging;
import com.evolveum.midpoint.schema.util.ObjectQueryUtil;
import com.evolveum.midpoint.web.component.search.*;

import com.evolveum.prism.xml.ns._public.query_3.OrderDirectionType;

import com.evolveum.prism.xml.ns._public.query_3.PagingType;

import com.evolveum.prism.xml.ns._public.types_3.ItemPathType;

import org.apache.commons.lang3.StringUtils;
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.util.SortParam;
import org.apache.wicket.extensions.markup.html.repeater.util.SortableDataProvider;
import org.apache.wicket.model.IModel;
import org.apache.wicket.request.mapper.parameter.PageParameters;
import org.apache.wicket.util.string.StringValue;
Expand All @@ -36,10 +49,6 @@
import com.evolveum.midpoint.web.component.data.column.ColumnUtils;
import com.evolveum.midpoint.web.component.data.column.ObjectNameColumn;
import com.evolveum.midpoint.web.component.menu.cog.InlineMenuItem;
import com.evolveum.midpoint.web.component.search.ContainerTypeSearchItem;
import com.evolveum.midpoint.web.component.search.Search;
import com.evolveum.midpoint.web.component.search.SearchFactory;
import com.evolveum.midpoint.web.component.search.SearchValue;
import com.evolveum.midpoint.web.component.util.SelectableBean;
import com.evolveum.midpoint.web.component.util.SerializableSupplier;
import com.evolveum.midpoint.web.session.PageStorage;
Expand Down Expand Up @@ -121,8 +130,18 @@ protected ObjectQuery getCustomizeContentQuery() {
return null;
}

protected void setDefaultSorting(ISelectableDataProvider<O, SelectableBean<O>> provider){
//should be overrided if needed
protected void setDefaultSorting(SelectableBeanObjectDataProvider<O> provider){
if (isCollectionViewPanel() && getObjectCollectionView().getPaging() != null
&& getObjectCollectionView().getPaging().getOrderBy() != null) {
PagingType paging = getObjectCollectionView().getPaging();
boolean ascending = !OrderDirectionType.DESCENDING.equals(paging.getOrderDirection());
ItemPath orderBy = paging.getOrderBy().getItemPath();
ItemName name = orderBy.lastName();
if (name == null) {
return;
}
provider.setSort(new SortParam(name.getLocalPart(), ascending));
}
}


Expand Down
Expand Up @@ -2413,11 +2413,12 @@ public static void setCurrentPage(Table table, ObjectPaging paging) {
return;
}

if (paging == null) {
if (paging == null || paging.getOffset() == null) {
table.getDataTable().setCurrentPage(0);
return;
}


long itemsPerPage = table.getDataTable().getItemsPerPage();
long page = ((paging.getOffset() + itemsPerPage) / itemsPerPage) - 1;
if (page < 0) {
Expand Down
Expand Up @@ -62,6 +62,7 @@
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.schema.util.MiscSchemaUtil;
import com.evolveum.midpoint.schema.util.ObjectTypeUtil;
import com.evolveum.midpoint.schema.util.ObjectQueryUtil;
import com.evolveum.midpoint.task.api.Task;
import com.evolveum.midpoint.util.QNameUtil;
import com.evolveum.midpoint.util.exception.*;
Expand Down Expand Up @@ -185,8 +186,19 @@ public Search<C> load() {


if (isCollectionViewPanel()) {
search.setCollectionSearchItem(new ObjectCollectionSearchItem(search, getObjectCollectionView()));
CompiledObjectCollectionView view = getObjectCollectionView();
search.setCollectionSearchItem(new ObjectCollectionSearchItem(search, view));
search.setCollectionItemVisible(isCollectionViewPanelForWidget());
if (storage != null && view.getPaging() != null) {
ObjectPaging paging = ObjectQueryUtil.convertToObjectPaging(view.getPaging(), getPrismContext());
if (storage.getPaging() == null) {
storage.setPaging(paging);
}
if (getTableId() != null && paging.getMaxSize() != null
&& !getPageBase().getSessionStorage().getUserProfile().isExistPagingSize(getTableId())) {
getPageBase().getSessionStorage().getUserProfile().setPagingSize(getTableId(), paging.getMaxSize());
}
}
}
if (storage != null) {
storage.setSearch(search);
Expand Down
Expand Up @@ -118,6 +118,14 @@ public void setPagingSize(TableId key, Integer size) {
setPagingSize(key.name(), size);
}

public boolean isExistPagingSize(TableId key) {
Validate.notNull(key, "TableId must not be null.");
Validate.notNull(key.name(), "TableId.name() must not be null.");

Integer size = tables.get(key.name());
return size != null;
}

public void setPagingSize(String key, Integer size) {
Validate.notNull(key, "Key must not be null.");

Expand Down
Expand Up @@ -115,12 +115,12 @@
</expression>
</export>
</column>
<paging>
<orderDirection>ascending</orderDirection>
<orderBy>name</orderBy>
</paging>
<type>AccessCertificationDefinitionType</type>
</view>
<paging>
<orderDirection>ascending</orderDirection>
<orderBy>name</orderBy>
</paging>
<subreport>
<name>campaigns</name>
<type>AccessCertificationCampaignType</type>
Expand Down
Expand Up @@ -163,13 +163,13 @@
</expression>
</export>
</column>
<paging>
<orderDirection>ascending</orderDirection>
<orderBy>name</orderBy>
</paging>
<type>AccessCertificationCampaignType</type>
</view>
<useOnlyReportView>true</useOnlyReportView>
<paging>
<orderDirection>ascending</orderDirection>
<orderBy>name</orderBy>
</paging>
<parameter>
<name>alsoClosedCampaigns</name>
<type>boolean</type>
Expand Down
Expand Up @@ -138,11 +138,11 @@
</expression>
</export>
</column>
<paging>
<orderBy>objectRef/@/name</orderBy>
</paging>
<type>c:AccessCertificationCaseType</type>
</view>
<paging>
<orderBy>objectRef/@/name</orderBy>
</paging>
<parameter>
<name>campaignName</name>
<type>c:ObjectReferenceType</type>
Expand Down
Expand Up @@ -10,6 +10,8 @@
import javax.xml.datatype.XMLGregorianCalendar;
import javax.xml.namespace.QName;

import com.evolveum.prism.xml.ns._public.query_3.PagingType;

import org.jetbrains.annotations.NotNull;

import com.evolveum.midpoint.prism.ItemProcessing;
Expand Down Expand Up @@ -520,6 +522,24 @@ public static void mergeDisplay(DisplayType viewDisplay, DisplayType archetypeDi
}
}

public static void mergePaging(PagingType existPaging, PagingType newPaging) {
if (existPaging.getMaxSize() == null) {
existPaging.setMaxSize(newPaging.getMaxSize());
}
if (existPaging.getGroupBy() == null) {
existPaging.setGroupBy(newPaging.getGroupBy());
}
if (existPaging.getOffset() == null) {
existPaging.setOffset(newPaging.getOffset());
}
if (existPaging.getOrderBy() == null) {
existPaging.setOrderBy(newPaging.getOrderBy());
}
if (existPaging.getOrderDirection() == null) {
existPaging.setOrderDirection(newPaging.getOrderDirection());
}
}

/*
the ordering algorithm is: the first level is occupied by
the column which previousColumn == null || "" || notExistingColumnNameValue.
Expand Down
Expand Up @@ -25619,18 +25619,6 @@
</xsd:appinfo>
</xsd:annotation>
</xsd:element>
<xsd:element name="paging" type="q:PagingType" minOccurs="0" maxOccurs="1">
<xsd:annotation>
<xsd:documentation>
Paging for query.
</xsd:documentation>
<xsd:appinfo>
<a:experimental>true</a:experimental>
<a:since>4.4</a:since>
<a:displayName>ObjectCollectionReportEngineConfigurationType.paging</a:displayName>
</xsd:appinfo>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
Expand Down Expand Up @@ -26456,6 +26444,18 @@
</xsd:appinfo>
</xsd:annotation>
</xsd:element>
<xsd:element name="paging" type="q:PagingType" minOccurs="0" maxOccurs="1">
<xsd:annotation>
<xsd:documentation>
Paging for query.
</xsd:documentation>
<xsd:appinfo>
<a:experimental>true</a:experimental>
<a:since>4.4</a:since>
<a:displayName>GuiObjectListPanelConfigurationType.paging</a:displayName>
</xsd:appinfo>
</xsd:annotation>
</xsd:element>
<!-- TODO: number of results per page (MID-1931) -->
<!-- TODO: later: export settings (GuiExportSettingsType) -->
</xsd:sequence>
Expand Down
Expand Up @@ -15,10 +15,13 @@

import com.evolveum.midpoint.prism.Containerable;
import com.evolveum.midpoint.prism.PrismContext;
import com.evolveum.midpoint.prism.query.ObjectPaging;
import com.evolveum.midpoint.schema.GetOperationOptions;
import com.evolveum.midpoint.schema.SelectorOptions;
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;

import com.evolveum.prism.xml.ns._public.query_3.PagingType;

import org.jetbrains.annotations.NotNull;

import com.evolveum.midpoint.prism.query.ObjectFilter;
Expand Down Expand Up @@ -54,6 +57,7 @@ public class CompiledObjectCollectionView implements DebugDumpable, Serializable
private Integer refreshInterval;
private Collection<SelectorOptions<GetOperationOptions>> options;
private Collection<SelectorOptions<GetOperationOptions>> domainOptions;
private PagingType paging;

private String objectCollectionDescription;

Expand Down Expand Up @@ -242,6 +246,14 @@ public void setObjectCollectionDescription(String objectCollectionDescription) {
this.objectCollectionDescription = objectCollectionDescription;
}

public void setPaging(PagingType paging) {
this.paging = paging;
}

public PagingType getPaging() {
return paging;
}

@Override
public String debugDump(int indent) {
StringBuilder sb = DebugUtil.createTitleStringBuilderLn(CompiledObjectCollectionView.class, indent);
Expand All @@ -260,6 +272,7 @@ public String debugDump(int indent) {
DebugUtil.debugDumpWithLabel(sb, "displayOrder", displayOrder, indent + 1);
DebugUtil.debugDumpWithLabel(sb, "refreshInterval", refreshInterval, indent + 1);
DebugUtil.debugDumpWithLabel(sb, "objectCollectionDescription", objectCollectionDescription, indent + 1);
DebugUtil.debugDumpWithLabelToStringLn(sb, "paging", paging, indent + 1);
return sb.toString();
}

Expand All @@ -281,6 +294,7 @@ public GuiObjectListViewType toGuiObjectListViewType() {
viewType.setSearchBoxConfiguration(getSearchBoxConfiguration());
viewType.setDisplayOrder(getDisplayOrder());
viewType.setRefreshInterval(getRefreshInterval());
viewType.setPaging(getPaging());
return viewType;
}

Expand Down
Expand Up @@ -11,6 +11,8 @@
import java.util.List;
import javax.xml.namespace.QName;

import com.evolveum.prism.xml.ns._public.query_3.PagingType;

import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.springframework.beans.factory.annotation.Autowired;
Expand Down Expand Up @@ -443,6 +445,7 @@ private void compileView(CompiledObjectCollectionView existingView, GuiObjectLis
compileDisplayOrder(existingView, objectListViewType, replaceIfExist);
compileSearchBox(existingView, objectListViewType, replaceIfExist);
compileRefreshInterval(existingView, objectListViewType, replaceIfExist);
compilePaging(existingView, objectListViewType, replaceIfExist);
}
}

Expand Down Expand Up @@ -590,4 +593,16 @@ private void compileSearchBox(CompiledObjectCollectionView existingView, GuiObje
existingView.setSearchBoxConfiguration(newSearchBoxConfig);
}
}

private void compilePaging(CompiledObjectCollectionView existingView, GuiObjectListViewType objectListViewType, boolean replaceIfExist) {
PagingType newPaging = objectListViewType.getPaging();
if (newPaging == null) {
return;
}
if (existingView.getPaging() == null) {
existingView.setPaging(newPaging);
} else if (replaceIfExist) {
MiscSchemaUtil.mergePaging(existingView.getPaging(), newPaging);
}
}
}
Expand Up @@ -1945,7 +1945,7 @@ public <O extends ObjectType> List<StringLimitationResult> validateValue(Protect

@Override
public void processObjectsFromCollection(CollectionRefSpecificationType collectionConfig, QName typeForFilter, Predicate<PrismContainer> handler,
Collection<SelectorOptions<GetOperationOptions>> defaultOptions, ObjectPaging paging, VariablesMap variables, Task task, OperationResult result, boolean recordProgress)
Collection<SelectorOptions<GetOperationOptions>> defaultOptions, ObjectPaging usedPaging, VariablesMap variables, Task task, OperationResult result, boolean recordProgress)
throws SchemaException, ObjectNotFoundException, SecurityViolationException, CommunicationException, ConfigurationException, ExpressionEvaluationException {
Class<? extends Containerable> type = null;

Expand All @@ -1966,7 +1966,7 @@ public void processObjectsFromCollection(CollectionRefSpecificationType collecti
}

ObjectQuery query = prismContext.queryFactory().createQuery();
query.setPaging(paging);
query.setPaging(usedPaging == null ? ObjectQueryUtil.convertToObjectPaging(compiledCollection.getPaging(), prismContext) : usedPaging);
query.setFilter(filter);

if (compiledCollection.getTargetClass(prismContext) == null) {
Expand Down

0 comments on commit e36a6d2

Please sign in to comment.