diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/MainObjectListPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/MainObjectListPanel.java
index 0881fb6036e..1a6e8ecd3b4 100644
--- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/MainObjectListPanel.java
+++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/MainObjectListPanel.java
@@ -9,6 +9,8 @@
import com.evolveum.midpoint.gui.api.GuiStyleConstants;
import com.evolveum.midpoint.gui.api.component.button.CsvDownloadButtonPanel;
import com.evolveum.midpoint.gui.api.page.PageBase;
+import com.evolveum.midpoint.gui.api.prism.wrapper.PrismContainerWrapper;
+import com.evolveum.midpoint.gui.api.prism.wrapper.PrismObjectWrapper;
import com.evolveum.midpoint.gui.api.util.WebComponentUtil;
import com.evolveum.midpoint.gui.impl.component.icon.CompositedIcon;
import com.evolveum.midpoint.gui.impl.component.icon.CompositedIconBuilder;
@@ -17,11 +19,10 @@
import com.evolveum.midpoint.model.api.ModelAuthorizationAction;
import com.evolveum.midpoint.model.api.authentication.CompiledObjectCollectionView;
import com.evolveum.midpoint.model.common.util.DefaultColumnUtils;
-import com.evolveum.midpoint.prism.PrismContext;
-import com.evolveum.midpoint.prism.PrismObject;
-import com.evolveum.midpoint.prism.PrismObjectDefinition;
+import com.evolveum.midpoint.prism.*;
import com.evolveum.midpoint.prism.delta.DeltaFactory;
import com.evolveum.midpoint.prism.delta.ObjectDelta;
+import com.evolveum.midpoint.prism.path.ItemPath;
import com.evolveum.midpoint.schema.GetOperationOptions;
import com.evolveum.midpoint.schema.ObjectDeltaOperation;
import com.evolveum.midpoint.schema.SelectorOptions;
@@ -203,7 +204,7 @@ protected DisplayType getMainButtonDisplayType(){
@Override
protected Map getMainButtonLayerIcons(){
- if (!isCollectionViewPanel()){
+ if (!isCollectionViewPanelForCompiledView()){
return null;
}
Map layerIconMap = new HashMap<>();
@@ -271,7 +272,8 @@ protected String getFilename() {
}
@Override
- protected void createReportPerformed(String name, SearchFilterType filter, List indexOfColumns, AjaxRequestTarget target) {
+ protected void createReportPerformed(String name, SearchFilterType filter, IModel> reportWrapper,
+ List indexOfColumns, AjaxRequestTarget target) {
PrismContext prismContext = getPageBase().getPrismContext();
PrismObjectDefinition def = prismContext.getSchemaRegistry().findObjectDefinitionByType(ReportType.COMPLEX_TYPE);
PrismObject obj = null;
@@ -290,6 +292,27 @@ protected void createReportPerformed(String name, SearchFilterType filter, List<
name = getPageBase().createStringResource("ObjectTypeGuiDescriptor.report").getString() + "-" + oid;
}
report.setName(WebComponentUtil.createPolyFromOrigString(name));
+ try {
+ PrismContainerWrapper csvConfig = reportWrapper.getObject().findContainer(ItemPath.create(ReportType.F_EXPORT, ExportConfigurationType.F_CSV));
+ if (csvConfig != null && csvConfig.getValue() != null) {
+ ExportConfigurationType export = new ExportConfigurationType();
+ export.setType(ExportType.CSV);
+ CsvExportType csv = csvConfig.getValue().getRealValue().clone();
+ List- removedItem = new ArrayList();
+ for(Item item : (Collection
- ) csv.asPrismContainerValue().getItems()) {
+ if (item.getRealValue() == null) {
+ removedItem.add(item);
+ }
+ }
+ for (Item item : removedItem) {
+ csv.asPrismContainerValue().getItems().remove(item);
+ }
+ export.setCsv(csv);
+ report.setExport(export);
+ }
+ } catch (SchemaException e) {
+ LOGGER.error("Couldn't find csv export container", e);
+ }
report.setReportEngine(ReportEngineSelectionType.COLLECTION);
ObjectCollectionReportEngineConfigurationType objectCollection = new ObjectCollectionReportEngineConfigurationType();
objectCollection.setUseOnlyReportView(true);
@@ -464,14 +487,14 @@ protected boolean isCreateNewObjectEnabled(){
}
protected List getNewObjectInfluencesList(){
- if (isCollectionViewPanel()){
+ if (isCollectionViewPanelForCompiledView()){
return new ArrayList<>();
}
return getAllApplicableArchetypeViews();
}
protected DisplayType getNewObjectButtonStandardDisplayType(){
- if (isCollectionViewPanel()) {
+ if (isCollectionViewPanelForCompiledView()) {
CompiledObjectCollectionView view = getObjectCollectionView();
if (isArchetypedCollectionView(view)) {
diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/ObjectListPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/ObjectListPanel.java
index ed380dd1a6e..75a216f1d06 100644
--- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/ObjectListPanel.java
+++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/ObjectListPanel.java
@@ -27,7 +27,6 @@
import com.evolveum.midpoint.web.component.util.SelectableBean;
import com.evolveum.midpoint.web.component.util.SerializableSupplier;
import com.evolveum.midpoint.web.component.util.VisibleBehaviour;
-import com.evolveum.midpoint.web.page.admin.home.PageDashboardConfigurable;
import com.evolveum.midpoint.web.page.admin.server.dto.OperationResultStatusPresentationProperties;
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;
import org.apache.commons.lang3.StringUtils;
@@ -230,7 +229,7 @@ protected String getSearchByNameParameterValue() {
// }
protected Search createSearch() {
- return SearchFactory.createSearch(type.getClassDefinition(), isCollectionViewPanel() ? getCollectionNameParameterValue().toString() : null,
+ return SearchFactory.createSearch(type.getClassDefinition(), isCollectionViewPanelForCompiledView() ? getCollectionNameParameterValue().toString() : null,
null, getPageBase(), true);
}
@@ -568,7 +567,7 @@ protected String getTableIdKeyValue(){
if (tableId == null) {
return null;
}
- if (!isCollectionViewPanel()) {
+ if (!isCollectionViewPanelForCompiledView()) {
return tableId.name();
}
return tableId.name() + "." + getCollectionNameParameterValue().toString();
@@ -660,7 +659,7 @@ protected WebMarkupContainer createTableButtonToolbar(String id) {
protected String getStorageKey(){
- if (isCollectionViewPanel()) {
+ if (isCollectionViewPanelForCompiledView()) {
StringValue collectionName = getCollectionNameParameterValue();
String collectionNameValue = collectionName != null ? collectionName.toString() : "";
return WebComponentUtil.getObjectListPageStorageKey(collectionNameValue);
@@ -753,6 +752,7 @@ protected CompiledObjectCollectionView getObjectCollectionView() {
}
compiledView.setCollection(widget.getData().getCollection());
dashboardWidgetView = compiledView;
+ return dashboardWidgetView;
} catch (SchemaException | CommunicationException | ConfigurationException | SecurityViolationException | ExpressionEvaluationException
| ObjectNotFoundException e) {
LOGGER.error("Couldn't compile collection " + collection.getName(), e);
@@ -771,10 +771,24 @@ private StringValue getCollectionNameParameterValue(){
return parameters == null ? null : parameters.get(PageBase.PARAMETER_OBJECT_COLLECTION_NAME);
}
- protected boolean isCollectionViewPanel() {
+ protected boolean isCollectionViewPanelForWidget() {
+ PageParameters parameters = getPageBase().getPageParameters();
+ if (parameters != null) {
+ StringValue widget = parameters.get(PageBase.PARAMETER_DASHBOARD_WIDGET_NAME);
+ StringValue dashboardOid = parameters.get(PageBase.PARAMETER_DASHBOARD_TYPE_OID);
+ return widget != null && widget.toString() != null && dashboardOid != null && dashboardOid.toString() != null;
+ }
+ return false;
+ }
+
+ protected boolean isCollectionViewPanelForCompiledView() {
return getCollectionNameParameterValue() != null && getCollectionNameParameterValue().toString() != null;
}
+ protected boolean isCollectionViewPanel() {
+ return isCollectionViewPanelForCompiledView() || isCollectionViewPanelForWidget();
+ }
+
@SuppressWarnings("unchecked")
protected BaseSortableDataProvider> getDataProvider() {
diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/button/CsvDownloadButtonPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/button/CsvDownloadButtonPanel.java
index 70a9a9b6d1f..b2e2d82b2e6 100644
--- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/button/CsvDownloadButtonPanel.java
+++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/button/CsvDownloadButtonPanel.java
@@ -12,6 +12,7 @@
import java.util.List;
import com.evolveum.midpoint.gui.api.model.LoadableModel;
+import com.evolveum.midpoint.gui.api.prism.wrapper.PrismObjectWrapper;
import com.evolveum.midpoint.util.logging.Trace;
import com.evolveum.midpoint.util.logging.TraceManager;
import com.evolveum.midpoint.web.component.data.BaseSortableDataProvider;
@@ -19,6 +20,7 @@
import com.evolveum.midpoint.web.component.dialog.ExportingPanel;
import com.evolveum.midpoint.web.component.search.Search;
+import com.evolveum.midpoint.xml.ns._public.common.common_3.ReportType;
import com.evolveum.prism.xml.ns._public.query_3.SearchFilterType;
import org.apache.commons.lang.StringUtils;
@@ -160,8 +162,9 @@ public void exportPerformed(AjaxRequestTarget target) {
}
@Override
- protected void createReportPerformed(String name, SearchFilterType filter, AjaxRequestTarget target) {
- CsvDownloadButtonPanel.this.createReportPerformed(name, filter, exportableColumnsIndex, target);
+ protected void createReportPerformed(String name, SearchFilterType filter,
+ IModel> report, AjaxRequestTarget target) {
+ CsvDownloadButtonPanel.this.createReportPerformed(name, filter, report, exportableColumnsIndex, target);
}
@Override
@@ -188,7 +191,7 @@ public boolean isVisibleCreateReportOption() {
protected abstract String getFilename();
- protected abstract void createReportPerformed(String name, SearchFilterType filter, List indexOfColumns, AjaxRequestTarget target);
+ protected abstract void createReportPerformed(String name, SearchFilterType filter, IModel> report, List indexOfColumns, AjaxRequestTarget target);
public boolean isVisibleCreateReportOption() {
return true;
diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/dialog/CsvExportConfigurtionTabPanel.html b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/dialog/CsvExportConfigurtionTabPanel.html
new file mode 100644
index 00000000000..7d33f634df4
--- /dev/null
+++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/dialog/CsvExportConfigurtionTabPanel.html
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/dialog/CsvExportConfigurtionTabPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/dialog/CsvExportConfigurtionTabPanel.java
new file mode 100644
index 00000000000..125546d9bf5
--- /dev/null
+++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/dialog/CsvExportConfigurtionTabPanel.java
@@ -0,0 +1,88 @@
+/*
+ * Copyright (c) 2010-2019 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.web.component.dialog;
+
+import com.evolveum.midpoint.gui.api.component.BasePanel;
+import com.evolveum.midpoint.gui.api.component.form.CheckBoxPanel;
+import com.evolveum.midpoint.gui.api.component.result.MessagePanel;
+import com.evolveum.midpoint.gui.api.model.LoadableModel;
+import com.evolveum.midpoint.gui.api.prism.wrapper.PrismContainerWrapper;
+import com.evolveum.midpoint.gui.api.prism.wrapper.PrismObjectWrapper;
+import com.evolveum.midpoint.gui.impl.prism.panel.ItemPanelSettingsBuilder;
+import com.evolveum.midpoint.prism.Containerable;
+import com.evolveum.midpoint.prism.path.ItemPath;
+import com.evolveum.midpoint.prism.query.ObjectFilter;
+import com.evolveum.midpoint.prism.query.ObjectQuery;
+import com.evolveum.midpoint.util.exception.SchemaException;
+import com.evolveum.midpoint.util.logging.LoggingUtils;
+import com.evolveum.midpoint.util.logging.Trace;
+import com.evolveum.midpoint.util.logging.TraceManager;
+import com.evolveum.midpoint.web.component.AceEditor;
+import com.evolveum.midpoint.web.component.message.FeedbackAlerts;
+import com.evolveum.midpoint.web.component.search.Search;
+import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour;
+import com.evolveum.midpoint.web.model.PrismContainerWrapperModel;
+import com.evolveum.midpoint.web.model.PrismPropertyWrapperModel;
+import com.evolveum.midpoint.xml.ns._public.common.common_3.*;
+import com.evolveum.prism.xml.ns._public.query_3.SearchFilterType;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
+import org.apache.wicket.markup.html.panel.Panel;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.model.StringResourceModel;
+
+/**
+ * @author skublik
+ */
+
+public class CsvExportConfigurtionTabPanel extends BasePanel {
+
+ private static final Trace LOGGER = TraceManager.getTrace(ExportingFilterTabPanel.class);
+
+ private static final String ID_WARNING_MESSAGE = "warningMessage";
+ private static final String ID_CSV_FIELD = "csv";
+
+ private LoadableModel search;
+ private FeedbackAlerts feedbackList;
+ private IModel> report;
+
+ public CsvExportConfigurtionTabPanel(String id, IModel> report) {
+ super(id);
+ this.report = report;
+ }
+
+ @Override
+ protected void onInitialize() {
+ super.onInitialize();
+ initLayer();
+ }
+
+ private void initLayer() {
+
+ StringResourceModel messageModel = getPageBase().createStringResource("ExportingFilterTabPanel.message.useFilter");
+ MessagePanel warningMessage = new MessagePanel(ID_WARNING_MESSAGE, MessagePanel.MessagePanelType.WARN, messageModel);
+ warningMessage.setOutputMarkupId(true);
+ add(warningMessage);
+
+ Panel csv = null;
+ try {
+ csv = getPageBase().initItemPanel(ID_CSV_FIELD, CsvExportType.COMPLEX_TYPE, PrismContainerWrapperModel.fromContainerWrapper(report,
+ ItemPath.create(ReportType.F_EXPORT, ExportConfigurationType.F_CSV)), new ItemPanelSettingsBuilder().build());
+ } catch (SchemaException e) {
+ LOGGER.error("Could not create panel for filter. Reason: {}", e.getMessage(), e);
+ }
+ add(csv);
+ }
+
+ public CsvExportType getFilter() throws Exception {
+ PrismContainerWrapper csv = report.getObject().findContainer(ItemPath.create(ReportType.F_EXPORT, ExportConfigurationType.F_CSV));
+ return csv.getValue().getRealValue();
+ }
+}
diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/dialog/ExportingFilterTabPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/dialog/ExportingFilterTabPanel.java
index 44e391bb4ea..0e47f8f2109 100644
--- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/dialog/ExportingFilterTabPanel.java
+++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/dialog/ExportingFilterTabPanel.java
@@ -42,7 +42,6 @@ public class ExportingFilterTabPanel extends BasePanel {
private static final String ID_FILTER_FIELD = "filter";
private LoadableModel search;
- private FeedbackAlerts feedbackList;
private IModel check = new IModel() {
private boolean check = false;
@@ -78,10 +77,9 @@ public void setObject(String object) {
}
};
- public ExportingFilterTabPanel(String id, LoadableModel search, FeedbackAlerts feedbackList) {
+ public ExportingFilterTabPanel(String id, LoadableModel search) {
super(id);
this.search = search;
- this.feedbackList = feedbackList;
}
@Override
diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/dialog/ExportingPanel.html b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/dialog/ExportingPanel.html
index 46d30bfe734..af75eb02e36 100644
--- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/dialog/ExportingPanel.html
+++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/dialog/ExportingPanel.html
@@ -7,7 +7,7 @@
-->
-
+
diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/dialog/ExportingPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/dialog/ExportingPanel.java
index 0ccb309fe2c..303fbf58c2a 100644
--- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/dialog/ExportingPanel.java
+++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/dialog/ExportingPanel.java
@@ -12,16 +12,34 @@
import java.util.List;
import com.evolveum.midpoint.gui.api.component.tabs.PanelTab;
+import com.evolveum.midpoint.gui.api.factory.wrapper.ItemWrapperFactory;
+import com.evolveum.midpoint.gui.api.factory.wrapper.PrismObjectWrapperFactory;
+import com.evolveum.midpoint.gui.api.factory.wrapper.WrapperContext;
import com.evolveum.midpoint.gui.api.model.LoadableModel;
+import com.evolveum.midpoint.gui.api.prism.ItemStatus;
+import com.evolveum.midpoint.gui.api.prism.wrapper.PrismObjectWrapper;
+import com.evolveum.midpoint.gui.impl.prism.panel.ItemPanelSettingsBuilder;
+import com.evolveum.midpoint.prism.PrismObject;
+import com.evolveum.midpoint.prism.PrismObjectDefinition;
+import com.evolveum.midpoint.prism.path.ItemPath;
+import com.evolveum.midpoint.task.api.Task;
+import com.evolveum.midpoint.util.exception.SchemaException;
import com.evolveum.midpoint.util.logging.Trace;
import com.evolveum.midpoint.util.logging.TraceManager;
+import com.evolveum.midpoint.web.component.AjaxSubmitButton;
import com.evolveum.midpoint.web.component.TabbedPanel;
+import com.evolveum.midpoint.web.component.form.Form;
import com.evolveum.midpoint.web.component.input.TextPanel;
import com.evolveum.midpoint.web.component.message.FeedbackAlerts;
import com.evolveum.midpoint.web.component.search.Search;
import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour;
+import com.evolveum.midpoint.web.model.PrismContainerWrapperModel;
+import com.evolveum.midpoint.xml.ns._public.common.common_3.DashboardReportEngineConfigurationType;
+import com.evolveum.midpoint.xml.ns._public.common.common_3.ExportConfigurationType;
+import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectCollectionReportEngineConfigurationType;
+import com.evolveum.midpoint.xml.ns._public.common.common_3.ReportType;
import com.evolveum.prism.xml.ns._public.query_3.SearchFilterType;
import org.apache.wicket.Component;
@@ -36,6 +54,7 @@
import org.apache.wicket.extensions.markup.html.tabs.ITab;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.markup.repeater.Item;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
@@ -59,7 +78,7 @@ public class ExportingPanel extends BasePanel implements Popupable {
private static final Trace LOGGER = TraceManager.getTrace(ExportingPanel.class);
private static final long serialVersionUID = 1L;
- private static final String ID_PANEL = "panel";
+ private static final String ID_MAIN_FORM = "mainForm";
private static final String ID_WARNING_MESSAGE = "warningMessage";
private static final String ID_FEEDBACK = "feedback";
private static final String ID_CREATE_REPORT = "createReport";
@@ -73,6 +92,14 @@ public class ExportingPanel extends BasePanel implements Popupable {
private Long exportSizeLimit;
private LoadableModel search;
private final IModel nameModel;
+ private IModel> report = new LoadableModel>(false) {
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ protected PrismObjectWrapper load() {
+ return initReportWrapper();
+ }
+ };
public ExportingPanel(String id, DataTable, ?> dataTable, List exportedColumnsIndex,
Long exportSizeLimit, LoadableModel search, IModel name) {
@@ -92,26 +119,27 @@ protected void onInitialize() {
}
private void initLayout() {
- WebMarkupContainer panel = new WebMarkupContainer(ID_PANEL);
+ initReportWrapper();
+ Form form = new Form<>(ID_MAIN_FORM, true);
MessagePanel warningMessage = new MessagePanel(ID_WARNING_MESSAGE, MessagePanel.MessagePanelType.WARN, getWarningMessageModel());
warningMessage.setOutputMarkupId(true);
warningMessage.add(new VisibleBehaviour(() -> getWarningMessageModel() != null));
- panel.add(warningMessage);
+ form.add(warningMessage);
FeedbackAlerts feedbackList = new FeedbackAlerts(ID_FEEDBACK);
feedbackList.setOutputMarkupId(true);
feedbackList.setOutputMarkupPlaceholderTag(true);
- panel.add(feedbackList);
+ form.add(feedbackList);
TextPanel nameField = new TextPanel(ID_NAME, nameModel);
- panel.add(nameField);
- nameField.getBaseFormComponent().add(new AjaxFormComponentUpdatingBehavior("change") {
-
- @Override
- protected void onUpdate(AjaxRequestTarget target) {
- }
- });
+ form.add(nameField);
+// nameField.getBaseFormComponent().add(new AjaxFormComponentUpdatingBehavior("change") {
+//
+// @Override
+// protected void onUpdate(AjaxRequestTarget target) {
+// }
+// });
TabbedPanel tabPanel = new TabbedPanel(ID_TAB, createTabs(feedbackList)){
@Override
@@ -128,18 +156,16 @@ public void onClick(AjaxRequestTarget target) {
};
}
};
- panel.add(tabPanel);
+ form.add(tabPanel);
PanelTab columnTabPanel = (PanelTab) tabPanel.getTabs().getObject().get(0);
PanelTab filterTabPanel = (PanelTab) tabPanel.getTabs().getObject().get(1);
- AjaxButton createReport = new AjaxButton(ID_CREATE_REPORT,
- new StringResourceModel("ExportingPopupPanel.createReport", this, null)) {
-
+ AjaxSubmitButton createReport = new AjaxSubmitButton(ID_CREATE_REPORT, getPageBase().createStringResource("ExportingPopupPanel.createReport")) {
private static final long serialVersionUID = 1L;
@Override
- public void onClick(AjaxRequestTarget target) {
- performSelectedColumns(columnTabPanel, target);
+ protected void onSubmit(AjaxRequestTarget target) {
+ performSelectedColumns(columnTabPanel);
if (exportedColumnsIndex.isEmpty()) {
LOGGER.warn("None columns selected");
getPageBase().warn(createStringResource("ExportingPanel.message.error.selectColumn").getString());
@@ -162,9 +188,14 @@ public void onClick(AjaxRequestTarget target) {
return;
}
}
- createReportPerformed(nameModel.getObject(), filter, target);
+ createReportPerformed(nameModel.getObject(), filter, report, target);
((PageBase) getPage()).hideMainPopup(target);
}
+
+ @Override
+ protected void onError(AjaxRequestTarget target) {
+ target.add(getPageBase().getFeedbackPanel());
+ }
};
createReport.add(new VisibleEnableBehaviour() {
@Override
@@ -172,15 +203,13 @@ public boolean isVisible() {
return isVisibleCreateReportOption();
}
});
- panel.add(createReport);
- AjaxButton exportSelected = new AjaxButton(ID_EXPORT,
- new StringResourceModel("ExportingPopupPanel.exportSelected", this, null)) {
-
+ form.add(createReport);
+ AjaxSubmitButton exportSelected = new AjaxSubmitButton(ID_EXPORT, getPageBase().createStringResource("ExportingPopupPanel.exportSelected")) {
private static final long serialVersionUID = 1L;
@Override
- public void onClick(AjaxRequestTarget target) {
- performSelectedColumns(columnTabPanel, target);
+ public void onSubmit(AjaxRequestTarget target) {
+ performSelectedColumns(columnTabPanel);
if (exportedColumnsIndex.isEmpty()) {
LOGGER.warn("None columns selected");
getPageBase().warn("ExportingPanel.message.error.selectColumn");
@@ -190,8 +219,13 @@ public void onClick(AjaxRequestTarget target) {
((PageBase) getPage()).hideMainPopup(target);
exportPerformed(target);
}
+
+ @Override
+ protected void onError(AjaxRequestTarget target) {
+ target.add(getPageBase().getFeedbackPanel());
+ }
};
- panel.add(exportSelected);
+ form.add(exportSelected);
AjaxButton cancelButton = new AjaxButton(ID_CANCEL,
new StringResourceModel("Button.cancel", this, null)) {
@@ -202,19 +236,36 @@ public void onClick(AjaxRequestTarget target) {
cancelPerformed(target);
}
};
- panel.add(cancelButton);
- add(panel);
+ form.add(cancelButton);
+ add(form);
}
- private void performSelectedColumns(PanelTab columnTabPanel, AjaxRequestTarget target) {
+ private PrismObjectWrapper initReportWrapper() {
+ Task task = getPageBase().createSimpleTask("Create report wrapper");
+ PrismObjectDefinition def = getPageBase().getPrismContext().getSchemaRegistry().findObjectDefinitionByType(ReportType.COMPLEX_TYPE);
+ PrismObjectWrapperFactory factory = getPageBase().findObjectWrapperFactory(def);
+
+ WrapperContext context = new WrapperContext(task, task.getResult());
+ context.setCreateIfEmpty(false);
+ try {
+ PrismObject reportType = def.instantiate();
+ PrismObjectWrapper objectWrapper = factory.createObjectWrapper(reportType, ItemStatus.ADDED, context);
+ return objectWrapper;
+ } catch (SchemaException e) {
+ LOGGER.error("Could not create object wrapper for report. Reason: {}", e.getMessage(), e);
+ }
+ return null;
+ }
+
+ private void performSelectedColumns(PanelTab columnTabPanel) {
exportedColumnsIndex.clear();
BoxedTablePanel> table = (BoxedTablePanel>) columnTabPanel.getPanel();
List availableData = ((SelectableListDataProvider) table.getDataTable().getDataProvider()).getSelectedObjects();
exportedColumnsIndex.addAll(availableData);
}
- protected void createReportPerformed(String name, SearchFilterType filter, AjaxRequestTarget target) {
-
+ protected void createReportPerformed(String name, SearchFilterType filter, IModel> report,
+ AjaxRequestTarget target) {
}
private List createTabs(FeedbackAlerts feedbackList) {
@@ -230,7 +281,7 @@ public WebMarkupContainer createPanel(String panelId) {
tabs.add(new PanelTab(getPageBase().createStringResource("ExportingPopupPanel.filter")) {
@Override
public WebMarkupContainer createPanel(String panelId) {
- return new ExportingFilterTabPanel(panelId, search, feedbackList){
+ return new ExportingFilterTabPanel(panelId, search){
@Override
public PageBase getPageBase() {
return ExportingPanel.this.getPageBase();
@@ -243,6 +294,19 @@ public boolean isVisible() {
return isVisibleCreateReportOption();
}
});
+
+ tabs.add(new PanelTab(getPageBase().createStringResource("ExportingPopupPanel.ExportConfiguration")) {
+ @Override
+ public WebMarkupContainer createPanel(String panelId) {
+ return new CsvExportConfigurtionTabPanel(panelId, report);
+ }
+
+ @Override
+ public boolean isVisible() {
+ return isVisibleCreateReportOption();
+ }
+ });
+
return tabs;
}
diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/reports/component/AuditLogViewerPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/reports/component/AuditLogViewerPanel.java
index 068db238aaa..68f0937945d 100644
--- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/reports/component/AuditLogViewerPanel.java
+++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/reports/component/AuditLogViewerPanel.java
@@ -20,6 +20,7 @@
import javax.xml.datatype.XMLGregorianCalendar;
import javax.xml.namespace.QName;
+import com.evolveum.midpoint.gui.api.prism.wrapper.PrismObjectWrapper;
import com.evolveum.midpoint.gui.api.util.WebPrismUtil;
import com.evolveum.midpoint.prism.ItemDefinition;
import com.evolveum.midpoint.prism.path.ItemPath;
@@ -608,7 +609,7 @@ protected String getFilename() {
}
@Override
- protected void createReportPerformed(String name, SearchFilterType filter, List object, AjaxRequestTarget target) {
+ protected void createReportPerformed(String name, SearchFilterType filter, IModel> report, List object, AjaxRequestTarget target) {
}
diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/TaskTablePanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/TaskTablePanel.java
index 4cbae9cbeda..eee1dec7021 100644
--- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/TaskTablePanel.java
+++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/TaskTablePanel.java
@@ -196,7 +196,7 @@ private void taskDetailsPerformed(String oid) {
private List, String>> initTaskColumns() {
List, String>> columns = new ArrayList<>();
- if (!isCollectionViewPanel()){
+ if (!isCollectionViewPanelForCompiledView()){
columns.add(createTaskCategoryColumn());
}
columns.addAll(initCustomTaskColumns());
diff --git a/infra/schema/src/main/resources/xml/ns/public/common/common-core-3.xsd b/infra/schema/src/main/resources/xml/ns/public/common/common-core-3.xsd
index 69270c670a7..69075b0d9fe 100755
--- a/infra/schema/src/main/resources/xml/ns/public/common/common-core-3.xsd
+++ b/infra/schema/src/main/resources/xml/ns/public/common/common-core-3.xsd
@@ -17067,6 +17067,7 @@
4.2
+ true
@@ -17074,7 +17075,12 @@
Condition for the searched objects. Searched object will be shown if the condition evaluates to true.
+ This condition use only for reports and as last option because of performance.
+
+ 4.2
+ true
+
diff --git a/model/model-api/src/main/java/com/evolveum/midpoint/model/api/interaction/DashboardService.java b/model/model-api/src/main/java/com/evolveum/midpoint/model/api/interaction/DashboardService.java
index b6ba04ff52b..5e65190ae1d 100644
--- a/model/model-api/src/main/java/com/evolveum/midpoint/model/api/interaction/DashboardService.java
+++ b/model/model-api/src/main/java/com/evolveum/midpoint/model/api/interaction/DashboardService.java
@@ -9,6 +9,7 @@
import java.util.Collection;
import java.util.List;
+import com.evolveum.midpoint.audit.api.AuditEventRecord;
import com.evolveum.midpoint.prism.PrismObject;
import com.evolveum.midpoint.schema.GetOperationOptions;
import com.evolveum.midpoint.schema.SelectorOptions;
@@ -34,11 +35,20 @@
@Experimental
public interface DashboardService {
- DashboardWidget createWidgetData(DashboardWidgetType widget, Task task, OperationResult result) throws SchemaException, CommunicationException, ConfigurationException, SecurityViolationException, ExpressionEvaluationException, ObjectNotFoundException;
+ DashboardWidget createWidgetData(DashboardWidgetType widget, Task task, OperationResult result)
+ throws SchemaException, CommunicationException, ConfigurationException, SecurityViolationException,
+ ExpressionEvaluationException, ObjectNotFoundException;
- List> searchObjectFromCollection(CollectionRefSpecificationType collection, QName typeForFilter, Collection> options, Task task, OperationResult result) throws SchemaException, ObjectNotFoundException, SecurityViolationException, CommunicationException, ConfigurationException, ExpressionEvaluationException;
+ List> searchObjectFromCollection(CollectionRefSpecificationType collection, QName typeForFilter,
+ Collection> options, Task task, OperationResult result) throws SchemaException,
+ ObjectNotFoundException, SecurityViolationException, CommunicationException, ConfigurationException, ExpressionEvaluationException;
- ObjectCollectionType getObjectCollectionType(DashboardWidgetType widget, Task task, OperationResult result) throws ObjectNotFoundException, SchemaException, CommunicationException, ConfigurationException, SecurityViolationException, ExpressionEvaluationException;
+ List searchObjectFromCollection(CollectionRefSpecificationType collectionConfig, Task task, OperationResult result)
+ throws SchemaException, ObjectNotFoundException, SecurityViolationException, CommunicationException, ConfigurationException,
+ ExpressionEvaluationException;
+
+ ObjectCollectionType getObjectCollectionType(DashboardWidgetType widget, Task task, OperationResult result) throws ObjectNotFoundException,
+ SchemaException, CommunicationException, ConfigurationException, SecurityViolationException, ExpressionEvaluationException;
CollectionRefSpecificationType getCollectionRefSpecificationType(DashboardWidgetType widget, Task task, OperationResult result);
diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/controller/DashboardServiceImpl.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/controller/DashboardServiceImpl.java
index 1329ee83d9f..93734ae83df 100644
--- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/controller/DashboardServiceImpl.java
+++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/controller/DashboardServiceImpl.java
@@ -10,6 +10,8 @@
import java.util.*;
+import com.evolveum.midpoint.audit.api.AuditEventRecord;
+import com.evolveum.midpoint.model.api.util.DashboardUtils;
import com.evolveum.midpoint.prism.query.AndFilter;
import com.evolveum.midpoint.prism.query.ObjectFilter;
import com.evolveum.midpoint.schema.GetOperationOptions;
@@ -381,11 +383,14 @@ private void evaluateVariation(DashboardWidgetType widget, ExpressionVariables v
}
@Override
- public List> searchObjectFromCollection(CollectionRefSpecificationType collectionConfig, QName typeForFilter, Collection> defaultOptions, Task task, OperationResult result) throws SchemaException, ObjectNotFoundException, SecurityViolationException, CommunicationException, ConfigurationException, ExpressionEvaluationException {
+ public List> searchObjectFromCollection(CollectionRefSpecificationType collectionConfig, QName typeForFilter,
+ Collection> defaultOptions, Task task, OperationResult result)
+ throws SchemaException, ObjectNotFoundException, SecurityViolationException, CommunicationException, ConfigurationException, ExpressionEvaluationException {
SearchFilterType searchFilter;
SearchFilterType searchFilterForMerge = null;
Collection> options = defaultOptions;
Class type;
+ ExpressionType condition = null;
if (collectionConfig.getCollectionRef() != null && collectionConfig.getFilter() != null) {
LOGGER.error("CollectionRefSpecificationType contains CollectionRef and Filter, please define only one");
@@ -403,6 +408,9 @@ public List> searchObjectFromCollection(CollectionRefSpe
if (collection.getSelectorOptions() != null) {
options = MiscSchemaUtil.optionsTypeToOptions(collection.getSelectorOptions(), prismContext);
}
+ if (collection.getCondition() != null) {
+ condition = collection.getCondition();
+ }
} else {
searchFilter = collectionConfig.getFilter();
if (collectionConfig.getBaseCollectionRef() != null &&
@@ -420,6 +428,9 @@ public List> searchObjectFromCollection(CollectionRefSpe
if (collection.getSelectorOptions() != null) {
options = MiscSchemaUtil.optionsTypeToOptions(collection.getSelectorOptions(), prismContext);
}
+ if (collection.getCondition() != null) {
+ condition = collection.getCondition();
+ }
} else {
searchFilterForMerge = collectionConfig.getBaseCollectionRef().getFilter();
}
@@ -468,13 +479,55 @@ public List> searchObjectFromCollection(CollectionRefSpe
ObjectFilter objectFilter = query.getFilter();
- objectFilter = collectionProcessor.evaluateExpressionsInFilter(objectFilter, task.getResult(), task);
+ objectFilter = collectionProcessor.evaluateExpressionsInFilter(objectFilter, result, task);
query.setFilter(objectFilter);
List> values;
- values = modelService.searchObjects(type, query, options, task, task.getResult());
+ values = modelService.searchObjects(type, query, options, task, result);
+ if(condition != null) {
+ return evaluateCondition(condition, values, task, result);
+ }
return values;
}
+ @Override
+ public List searchObjectFromCollection(CollectionRefSpecificationType collectionConfig, Task task, OperationResult result)
+ throws SchemaException, ObjectNotFoundException, SecurityViolationException, CommunicationException, ConfigurationException, ExpressionEvaluationException {
+ List auditRecords = new ArrayList<>();
+ if (collectionConfig.getCollectionRef() != null) {
+ ObjectReferenceType ref = collectionConfig.getCollectionRef();
+ Class refType = prismContext.getSchemaRegistry().determineClassForType(ref.getType());
+ ObjectCollectionType collection = (ObjectCollectionType) modelService
+ .getObject(refType, ref.getOid(), null, task, result).asObjectable();
+ if (collection.getAuditSearch() != null) {
+ Map parameters = new HashMap<>();
+ String query = DashboardUtils.getQueryForListRecords(DashboardUtils.createQuery(collection, parameters, false, clock));
+ auditRecords = auditService.listRecords(query, parameters, result);
+ if (auditRecords == null) {
+ auditRecords = new ArrayList<>();
+ }
+ if (collection.getCondition() != null) {
+ return evaluateCondition(collection.getCondition(), auditRecords, task, result);
+ }
+ }
+ }
+ return auditRecords;
+ }
+
+ private List evaluateCondition(ExpressionType condition, List values, Task task, OperationResult result)
+ throws CommunicationException, ObjectNotFoundException, SchemaException, SecurityViolationException, ConfigurationException, ExpressionEvaluationException {
+ List newValues = new ArrayList();
+ for (T value : values) {
+ ExpressionVariables variables = new ExpressionVariables();
+ variables.put(ExpressionConstants.VAR_OBJECT, value, value.getClass());
+ PrismPropertyValue conditionValue = ExpressionUtil.evaluateCondition(variables, condition, null, expressionFactory,
+ "Evaluate condition", task, result);
+ if (conditionValue != null && Boolean.TRUE.equals(conditionValue.getRealValue())) {
+ newValues.add(value);
+ }
+ }
+ return newValues;
+ }
+
@Override
public ObjectCollectionType getObjectCollectionType(DashboardWidgetType widget, Task task, OperationResult result) throws ObjectNotFoundException, SchemaException, CommunicationException, ConfigurationException, SecurityViolationException, ExpressionEvaluationException {
if (isCollectionRefOfCollectionNull(widget)) {
diff --git a/model/report-impl/src/main/java/com/evolveum/midpoint/report/impl/controller/export/CsvExporterController.java b/model/report-impl/src/main/java/com/evolveum/midpoint/report/impl/controller/export/CsvExporterController.java
index 0d4e0882345..efb3affadd9 100644
--- a/model/report-impl/src/main/java/com/evolveum/midpoint/report/impl/controller/export/CsvExporterController.java
+++ b/model/report-impl/src/main/java/com/evolveum/midpoint/report/impl/controller/export/CsvExporterController.java
@@ -13,10 +13,14 @@
import com.evolveum.midpoint.model.common.util.DefaultColumnUtils;
import com.evolveum.midpoint.prism.PrismObject;
import com.evolveum.midpoint.prism.PrismObjectDefinition;
+import com.evolveum.midpoint.prism.PrismPropertyValue;
import com.evolveum.midpoint.prism.path.ItemPath;
+import com.evolveum.midpoint.repo.common.expression.ExpressionUtil;
+import com.evolveum.midpoint.repo.common.expression.ExpressionVariables;
import com.evolveum.midpoint.report.impl.ReportServiceImpl;
import com.evolveum.midpoint.schema.GetOperationOptions;
import com.evolveum.midpoint.schema.SelectorOptions;
+import com.evolveum.midpoint.schema.constants.ExpressionConstants;
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.schema.util.MiscSchemaUtil;
import com.evolveum.midpoint.task.api.Task;
@@ -143,21 +147,17 @@ public byte[] processCollection(String nameOfReport, ObjectCollectionReportEngin
if (!isAuditCollection) {
csvFile = createTableBoxForObjectView(collectionRefSpecification, compiledCollection, task, result);
} else {
- csvFile = createTableBoxForAuditView(collection, compiledCollection, task, result);
+ csvFile = createTableForAuditView(collectionRefSpecification, compiledCollection, task, result);
}
return csvFile;
}
- private byte[] createTableBoxForAuditView(ObjectCollectionType collection, CompiledObjectCollectionView compiledCollection, Task task, OperationResult result) {
- Map parameters = new HashMap<>();
- String query = DashboardUtils
- .getQueryForListRecords(DashboardUtils.createQuery(collection, parameters, false, getReportService().getClock()));
- List auditRecords = getReportService().getAuditService().listRecords(query, parameters, result);
- if (auditRecords == null) {
- auditRecords = new ArrayList<>();
- }
+ private byte[] createTableForAuditView(CollectionRefSpecificationType collectionRef, CompiledObjectCollectionView compiledCollection,
+ Task task, OperationResult result) throws CommunicationException, ObjectNotFoundException, SchemaException,
+ SecurityViolationException, ConfigurationException, ExpressionEvaluationException {
+ List auditRecords = getReportService().getDashboardService().searchObjectFromCollection(collectionRef, task, result);
if (compiledCollection.getColumns().isEmpty()) {
getReportService().getModelInteractionService().applyView(compiledCollection, DefaultColumnUtils.getDefaultAuditEventsView());
diff --git a/model/report-impl/src/main/java/com/evolveum/midpoint/report/impl/controller/export/HtmlExportController.java b/model/report-impl/src/main/java/com/evolveum/midpoint/report/impl/controller/export/HtmlExportController.java
index 30c109854a1..fb74a27fce5 100644
--- a/model/report-impl/src/main/java/com/evolveum/midpoint/report/impl/controller/export/HtmlExportController.java
+++ b/model/report-impl/src/main/java/com/evolveum/midpoint/report/impl/controller/export/HtmlExportController.java
@@ -128,7 +128,7 @@ public byte[] processDashboard(DashboardReportEngineConfigurationType dashboardC
LOGGER.error("CollectionRef is null for report of audit records");
throw new IllegalArgumentException("CollectionRef is null for report of audit records");
}
- tableBox = createTableBoxForAuditView(widgetData.getLabel(), collection, compiledCollection, false, task, result);
+ tableBox = createTableBoxForAuditView(widgetData.getLabel(), collectionRefSpecification, compiledCollection, false, task, result);
break;
}
if (tableBox != null) {
@@ -215,9 +215,9 @@ public byte[] processCollection(String nameOfReport, ObjectCollectionReportEngin
ContainerTag tableBox;
boolean isAuditCollection = collection != null && collection.getAuditSearch() != null;
if (!isAuditCollection) {
- tableBox = createTableBoxForObjectView(label, collectionConfig.getCollection(), compiledCollection, true, task, result);
+ tableBox = createTableBoxForObjectView(label, collectionRefSpecification, compiledCollection, true, task, result);
} else {
- tableBox = createTableBoxForAuditView(label, collection, compiledCollection, true, task, result);
+ tableBox = createTableBoxForAuditView(label, collectionRefSpecification, compiledCollection, true, task, result);
}
body.append(tableBox.render());
@@ -391,16 +391,11 @@ private ContainerTag createTableBoxForObjectView(String label, CollectionRefSpec
}
private ContainerTag createTableBoxForAuditView(
- String label, ObjectCollectionType collection, @NotNull CompiledObjectCollectionView compiledCollection,
- boolean recordProgress, Task task, OperationResult result) {
- Map parameters = new HashMap<>();
+ String label, CollectionRefSpecificationType collection, @NotNull CompiledObjectCollectionView compiledCollection,
+ boolean recordProgress, Task task, OperationResult result) throws CommunicationException, ObjectNotFoundException,
+ SchemaException, SecurityViolationException, ConfigurationException, ExpressionEvaluationException {
long startMillis = getReportService().getClock().currentTimeMillis();
- String query = DashboardUtils
- .getQueryForListRecords(DashboardUtils.createQuery(collection, parameters, false, getReportService().getClock()));
- List records = getReportService().getAuditService().listRecords(query, parameters, result);
- if (records == null || records.isEmpty()) {
- return null;
- }
+ List records = getReportService().getDashboardService().searchObjectFromCollection(collection, task, result);
if (compiledCollection.getColumns().isEmpty()) {
getReportService().getModelInteractionService().applyView(compiledCollection, DefaultColumnUtils.getDefaultAuditEventsView());
diff --git a/model/report-impl/src/test/java/com/evolveum/midpoint/report/BasicNewReportTest.java b/model/report-impl/src/test/java/com/evolveum/midpoint/report/BasicNewReportTest.java
index a526325d788..60422b8cb08 100644
--- a/model/report-impl/src/test/java/com/evolveum/midpoint/report/BasicNewReportTest.java
+++ b/model/report-impl/src/test/java/com/evolveum/midpoint/report/BasicNewReportTest.java
@@ -56,30 +56,40 @@ public abstract class BasicNewReportTest extends AbstractReportIntegrationTest {
public static final File COLLECTION_SHADOW_WITH_VIEW_FILE = new File(COMMON_DIR, "object-collection-shadow-of-resource-with-view.xml");
public static final File DASHBOARD_TRIPLE_VIEW_FILE = new File(COMMON_DIR, "dashboard-with-triple-view.xml");
public static final File COLLECTION_BASIC = new File(COMMON_DIR, "object-collection-basic-filter.xml");
+ public static final File COLLECTION_USER_WITH_CONDITION_FILE = new File(COMMON_DIR, "object-collection-all-user-with-condition.xml");
+ public static final File COLLECTION_AUDIT_WITH_CONDITION_FILE = new File(COMMON_DIR, "object-collection-audit-records-with-condition.xml");
public static final File REPORT_DASHBOARD_WITH_DEFAULT_COLUMN_FILE = new File(TEST_REPORTS_DIR, "report-dashboard-with-default-column.xml");
public static final File REPORT_DASHBOARD_WITH_VIEW_FILE = new File(TEST_REPORTS_DIR, "report-dashboard-with-view.xml");
public static final File REPORT_DASHBOARD_WITH_TRIPLE_VIEW_FILE = new File(TEST_REPORTS_DIR, "report-dashboard-with-triple-view.xml");
- public static final File REPORT_OBJECT_COLLECTION_WITH_DEFAULT_COLUMN_FILE = new File(TEST_REPORTS_DIR, "report-object-collection-with-default-column.xml");
- public static final File REPORT_OBJECT_COLLECTION_WITH_VIEW_FILE = new File(TEST_REPORTS_DIR, "report-object-collection-with-view.xml");
- public static final File REPORT_OBJECT_COLLECTION_WITH_DOUBLE_VIEW_FILE = new File(TEST_REPORTS_DIR, "report-object-collection-with-double-view.xml");
+
public static final File REPORT_AUDIT_COLLECTION_WITH_DEFAULT_COLUMN_FILE = new File(TEST_REPORTS_DIR, "report-audit-collection-with-default-column.xml");
public static final File REPORT_AUDIT_COLLECTION_WITH_VIEW_FILE = new File(TEST_REPORTS_DIR, "report-audit-collection-with-view.xml");
public static final File REPORT_AUDIT_COLLECTION_WITH_DOUBLE_VIEW_FILE = new File(TEST_REPORTS_DIR, "report-audit-collection-with-double-view.xml");
+ public static final File REPORT_AUDIT_COLLECTION_WITH_CONDITION_FILE = new File(TEST_REPORTS_DIR, "report-audit-collection-with-condition.xml");
+
+ public static final File REPORT_OBJECT_COLLECTION_WITH_DEFAULT_COLUMN_FILE = new File(TEST_REPORTS_DIR, "report-object-collection-with-default-column.xml");
+ public static final File REPORT_OBJECT_COLLECTION_WITH_VIEW_FILE = new File(TEST_REPORTS_DIR, "report-object-collection-with-view.xml");
+ public static final File REPORT_OBJECT_COLLECTION_WITH_DOUBLE_VIEW_FILE = new File(TEST_REPORTS_DIR, "report-object-collection-with-double-view.xml");
public static final File REPORT_OBJECT_COLLECTION_WITH_FILTER_FILE = new File(TEST_REPORTS_DIR, "report-object-collection-with-filter.xml");
public static final File REPORT_OBJECT_COLLECTION_WITH_FILTER_AND_BASIC_COLLECTION_FILE = new File(TEST_REPORTS_DIR, "report-object-collection-with-filter-and-basic-collection.xml");
+ public static final File REPORT_OBJECT_COLLECTION_WITH_CONDITION_FILE = new File(TEST_REPORTS_DIR, "report-object-collection-with-condition.xml");
public static final String REPORT_DASHBOARD_WITH_DEFAULT_COLUMN_OID = "2b44aa2e-dd86-4842-bcf5-762c8a9a8582";
public static final String REPORT_DASHBOARD_WITH_VIEW_OID = "2b44aa2e-dd86-4842-bcf5-762c8a9a8533";
public static final String REPORT_DASHBOARD_WITH_TRIPLE_VIEW_OID = "2b87aa2e-dd86-4842-bcf5-76200a9a8533";
- public static final String REPORT_OBJECT_COLLECTION_WITH_DEFAULT_COLUMN_OID = "2b44aa2e-dd86-4842-bcf5-762c8a9a85ab";
- public static final String REPORT_OBJECT_COLLECTION_WITH_VIEW_OID = "2b44aa2e-dd86-4842-bcf5-762c8a9a85de";
- public static final String REPORT_OBJECT_COLLECTION_WITH_DOUBLE_VIEW_OID = "2b44aa2e-dd86-4842-bcf5-762c8a9a85ef";
+
public static final String REPORT_AUDIT_COLLECTION_WITH_DEFAULT_COLUMN_OID = "2b44aa2e-dd86-4842-bcf5-762c8a9a85bc";
public static final String REPORT_AUDIT_COLLECTION_WITH_VIEW_OID = "2b44aa2e-dd86-4842-bcf5-762c8a9a85cd";
public static final String REPORT_AUDIT_COLLECTION_WITH_DOUBLE_VIEW_OID = "2b44aa2e-dd86-4842-bcf5-762c8a9a85fg";
+ public static final String REPORT_AUDIT_COLLECTION_WITH_CONDITION_OID = "2b44aa2e-dd86-4842-bcf5-762c8a9a85rr";
+
+ public static final String REPORT_OBJECT_COLLECTION_WITH_DEFAULT_COLUMN_OID = "2b44aa2e-dd86-4842-bcf5-762c8a9a85ab";
+ public static final String REPORT_OBJECT_COLLECTION_WITH_VIEW_OID = "2b44aa2e-dd86-4842-bcf5-762c8a9a85de";
+ public static final String REPORT_OBJECT_COLLECTION_WITH_DOUBLE_VIEW_OID = "2b44aa2e-dd86-4842-bcf5-762c8a9a85ef";
public static final String REPORT_OBJECT_COLLECTION_WITH_FILTER_OID = "2b44aa2e-dd86-4842-bcf5-762c8a9a85gh";
public static final String REPORT_OBJECT_COLLECTION_WITH_FILTER_AND_BASIC_COLLECTION_OID = "2b44aa2e-dd86-4842-bcf5-762c8a9a85hi";
+ public static final String REPORT_OBJECT_COLLECTION_WITH_CONDITION_OID = "2b44aa2e-dd86-4842-bcf5-762c8a9a851a";
public static final String RESOURCE_DUMMY_OID = "10000000-0000-0000-0000-000000000004";
@@ -112,9 +122,11 @@ public void initSystem(Task initTask, OperationResult initResult) throws Excepti
importObjectFromFile(COLLECTION_RESOURCE_WITH_VIEW_FILE, initResult);
importObjectFromFile(COLLECTION_TASK_WITH_VIEW_FILE, initResult);
importObjectFromFile(COLLECTION_AUDIT_WITH_VIEW_FILE, initResult);
+ importObjectFromFile(COLLECTION_AUDIT_WITH_CONDITION_FILE, initResult);
importObjectFromFile(COLLECTION_ASSIGNMENT_HOLDER_WITH_VIEW_FILE, initResult);
importObjectFromFile(COLLECTION_SHADOW_WITH_VIEW_FILE, initResult);
importObjectFromFile(DASHBOARD_TRIPLE_VIEW_FILE, initResult);
+ importObjectFromFile(COLLECTION_USER_WITH_CONDITION_FILE, initResult);
importObjectFromFile(REPORT_DASHBOARD_WITH_DEFAULT_COLUMN_FILE, initResult);
importObjectFromFile(REPORT_DASHBOARD_WITH_VIEW_FILE, initResult);
@@ -125,8 +137,10 @@ public void initSystem(Task initTask, OperationResult initResult) throws Excepti
importObjectFromFile(REPORT_AUDIT_COLLECTION_WITH_DEFAULT_COLUMN_FILE, initResult);
importObjectFromFile(REPORT_AUDIT_COLLECTION_WITH_VIEW_FILE, initResult);
importObjectFromFile(REPORT_AUDIT_COLLECTION_WITH_DOUBLE_VIEW_FILE, initResult);
+ importObjectFromFile(REPORT_AUDIT_COLLECTION_WITH_CONDITION_FILE, initResult);
importObjectFromFile(REPORT_OBJECT_COLLECTION_WITH_FILTER_FILE, initResult);
importObjectFromFile(REPORT_OBJECT_COLLECTION_WITH_FILTER_AND_BASIC_COLLECTION_FILE, initResult);
+ importObjectFromFile(REPORT_OBJECT_COLLECTION_WITH_CONDITION_FILE, initResult);
}
@Test
@@ -151,61 +165,75 @@ public void test003CreateDashboardReportWithTripleView() throws Exception {
}
@Test
- public void test010CreateObjectCollectionReportWithDefaultColumn() throws Exception {
- PrismObject report = getObject(ReportType.class, REPORT_OBJECT_COLLECTION_WITH_DEFAULT_COLUMN_OID);
+ public void test101CreateAuditCollectionReportWithDefaultColumn() throws Exception {
+ PrismObject report = getObject(ReportType.class, REPORT_AUDIT_COLLECTION_WITH_DEFAULT_COLUMN_OID);
runReport(report, false);
basicCheckOutputFile(report);
}
@Test
- public void test011CreateObjectCollectionReportWithView() throws Exception {
- PrismObject report = getObject(ReportType.class, REPORT_OBJECT_COLLECTION_WITH_VIEW_OID);
+ public void test102CreateAuditCollectionReportWithView() throws Exception {
+ PrismObject report = getObject(ReportType.class, REPORT_AUDIT_COLLECTION_WITH_VIEW_OID);
runReport(report, false);
basicCheckOutputFile(report);
}
@Test
- public void test012CreateObjectCollectionReportWithDoubleView() throws Exception {
- PrismObject report = getObject(ReportType.class, REPORT_OBJECT_COLLECTION_WITH_DOUBLE_VIEW_OID);
+ public void test103CreateAuditCollectionReportWithDoubleView() throws Exception {
+ PrismObject report = getObject(ReportType.class, REPORT_AUDIT_COLLECTION_WITH_DOUBLE_VIEW_OID);
runReport(report, false);
basicCheckOutputFile(report);
}
@Test
- public void test013CreateAuditCollectionReportWithDefaultColumn() throws Exception {
- PrismObject report = getObject(ReportType.class, REPORT_AUDIT_COLLECTION_WITH_DEFAULT_COLUMN_OID);
+ public void test104CreateAuditCollectionReportWithCondition() throws Exception {
+ PrismObject report = getObject(ReportType.class, REPORT_AUDIT_COLLECTION_WITH_CONDITION_OID);
runReport(report, false);
basicCheckOutputFile(report);
}
@Test
- public void test014CreateAuditCollectionReportWithView() throws Exception {
- PrismObject report = getObject(ReportType.class, REPORT_AUDIT_COLLECTION_WITH_VIEW_OID);
+ public void test110CreateObjectCollectionReportWithDefaultColumn() throws Exception {
+ PrismObject report = getObject(ReportType.class, REPORT_OBJECT_COLLECTION_WITH_DEFAULT_COLUMN_OID);
runReport(report, false);
basicCheckOutputFile(report);
}
@Test
- public void test015CreateAuditCollectionReportWithDoubleView() throws Exception {
- PrismObject report = getObject(ReportType.class, REPORT_AUDIT_COLLECTION_WITH_DOUBLE_VIEW_OID);
+ public void test111CreateObjectCollectionReportWithView() throws Exception {
+ PrismObject report = getObject(ReportType.class, REPORT_OBJECT_COLLECTION_WITH_VIEW_OID);
runReport(report, false);
basicCheckOutputFile(report);
}
@Test
- public void test016CreateObjectCollectionReportWithFilter() throws Exception {
+ public void test112CreateObjectCollectionReportWithDoubleView() throws Exception {
+ PrismObject report = getObject(ReportType.class, REPORT_OBJECT_COLLECTION_WITH_DOUBLE_VIEW_OID);
+ runReport(report, false);
+ basicCheckOutputFile(report);
+ }
+
+ @Test
+ public void test113CreateObjectCollectionReportWithFilter() throws Exception {
PrismObject report = getObject(ReportType.class, REPORT_OBJECT_COLLECTION_WITH_FILTER_OID);
runReport(report, false);
basicCheckOutputFile(report);
}
@Test
- public void test017CreateObjectCollectionReportWithFilterAndBasicCollection() throws Exception {
+ public void test114CreateObjectCollectionReportWithFilterAndBasicCollection() throws Exception {
PrismObject report = getObject(ReportType.class, REPORT_OBJECT_COLLECTION_WITH_FILTER_AND_BASIC_COLLECTION_OID);
runReport(report, false);
basicCheckOutputFile(report);
}
+ @Test
+ public void test115CreateObjectCollectionReportWithCondition() throws Exception {
+ PrismObject report = getObject(ReportType.class, REPORT_OBJECT_COLLECTION_WITH_CONDITION_OID);
+ runReport(report, false);
+ basicCheckOutputFile(report);
+ }
+
protected PrismObject runReport(PrismObject report, boolean errorOk) throws Exception {
Task task = getTestTask();
OperationResult result = task.getResult();
diff --git a/model/report-impl/src/test/java/com/evolveum/midpoint/report/TestCsvReport.java b/model/report-impl/src/test/java/com/evolveum/midpoint/report/TestCsvReport.java
index eaf9abbe842..047330f0063 100644
--- a/model/report-impl/src/test/java/com/evolveum/midpoint/report/TestCsvReport.java
+++ b/model/report-impl/src/test/java/com/evolveum/midpoint/report/TestCsvReport.java
@@ -45,59 +45,73 @@ public void test003CreateDashboardReportWithTripleView() throws Exception {
}
@Override
- public void test010CreateObjectCollectionReportWithDefaultColumn() throws Exception {
- expectedColumns = 6;
- expectedRow = 4;
- super.test010CreateObjectCollectionReportWithDefaultColumn();
+ public void test101CreateAuditCollectionReportWithDefaultColumn() throws Exception {
+ expectedColumns = 8;
+ expectedRow = -1;
+ super.test101CreateAuditCollectionReportWithDefaultColumn();
}
@Override
- public void test011CreateObjectCollectionReportWithView() throws Exception {
+ public void test102CreateAuditCollectionReportWithView() throws Exception {
expectedColumns = 2;
- expectedRow = 2;
- super.test011CreateObjectCollectionReportWithView();
+ expectedRow = -1;
+ super.test102CreateAuditCollectionReportWithView();
}
@Override
- public void test012CreateObjectCollectionReportWithDoubleView() throws Exception {
+ public void test103CreateAuditCollectionReportWithDoubleView() throws Exception {
expectedColumns = 3;
- expectedRow = 4;
- super.test012CreateObjectCollectionReportWithDoubleView();
+ expectedRow = -1;
+ super.test103CreateAuditCollectionReportWithDoubleView();
}
- @Override
- public void test013CreateAuditCollectionReportWithDefaultColumn() throws Exception {
+ @Test
+ public void test104CreateAuditCollectionReportWithCondition() throws Exception {
expectedColumns = 8;
- expectedRow = 46;
- super.test013CreateAuditCollectionReportWithDefaultColumn();
+ expectedRow = 2;
+ super.test104CreateAuditCollectionReportWithCondition();
+ }
+
+ @Override
+ public void test110CreateObjectCollectionReportWithDefaultColumn() throws Exception {
+ expectedColumns = 6;
+ expectedRow = 4;
+ super.test110CreateObjectCollectionReportWithDefaultColumn();
}
@Override
- public void test014CreateAuditCollectionReportWithView() throws Exception {
+ public void test111CreateObjectCollectionReportWithView() throws Exception {
expectedColumns = 2;
- expectedRow = 48;
- super.test014CreateAuditCollectionReportWithView();
+ expectedRow = 2;
+ super.test111CreateObjectCollectionReportWithView();
}
@Override
- public void test015CreateAuditCollectionReportWithDoubleView() throws Exception {
+ public void test112CreateObjectCollectionReportWithDoubleView() throws Exception {
expectedColumns = 3;
- expectedRow = 50;
- super.test015CreateAuditCollectionReportWithDoubleView();
+ expectedRow = 4;
+ super.test112CreateObjectCollectionReportWithDoubleView();
}
@Override
- public void test016CreateObjectCollectionReportWithFilter() throws Exception {
+ public void test113CreateObjectCollectionReportWithFilter() throws Exception {
expectedColumns = 2;
expectedRow = 3;
- super.test016CreateObjectCollectionReportWithFilter();
+ super.test113CreateObjectCollectionReportWithFilter();
}
@Override
- public void test017CreateObjectCollectionReportWithFilterAndBasicCollection() throws Exception {
+ public void test114CreateObjectCollectionReportWithFilterAndBasicCollection() throws Exception {
expectedColumns = 2;
expectedRow = 2;
- super.test017CreateObjectCollectionReportWithFilterAndBasicCollection();
+ super.test114CreateObjectCollectionReportWithFilterAndBasicCollection();
+ }
+
+ @Test
+ public void test115CreateObjectCollectionReportWithCondition() throws Exception {
+ expectedColumns = 6;
+ expectedRow = 2;
+ super.test115CreateObjectCollectionReportWithCondition();
}
private void setExpectedValueForDashboardReport() {
@@ -115,10 +129,14 @@ protected ExportConfigurationType getExportConfiguration() {
protected List basicCheckOutputFile(PrismObject report) throws IOException, SchemaException, ObjectNotFoundException, SecurityViolationException, CommunicationException, ConfigurationException, ExpressionEvaluationException {
List lines = super.basicCheckOutputFile(report);
- if (lines.size() != expectedRow) {
+ if (expectedRow != -1 && lines.size() != expectedRow) {
fail("Unexpected count of rows of csv report. Expected: " + expectedRow + ", Actual: " + lines.size());
}
+ if (expectedRow == -1 && lines.size() < 2) {
+ fail("Unexpected count of rows of csv report. Expected: more as one, Actual: " + lines.size());
+ }
+
int actualColumns = getNumberOfColumns(lines);
if (actualColumns != expectedColumns) {
diff --git a/model/report-impl/src/test/resources/common/object-collection-all-user-with-condition.xml b/model/report-impl/src/test/resources/common/object-collection-all-user-with-condition.xml
new file mode 100644
index 00000000000..16e36027502
--- /dev/null
+++ b/model/report-impl/src/test/resources/common/object-collection-all-user-with-condition.xml
@@ -0,0 +1,24 @@
+
+
+
+ All users with condition
+ UserType
+
+
+
+
+
+
+
diff --git a/model/report-impl/src/test/resources/common/object-collection-audit-records-with-condition.xml b/model/report-impl/src/test/resources/common/object-collection-audit-records-with-condition.xml
new file mode 100644
index 00000000000..68d6eb07898
--- /dev/null
+++ b/model/report-impl/src/test/resources/common/object-collection-audit-records-with-condition.xml
@@ -0,0 +1,25 @@
+
+
+
+ Audit records with condition
+
+ select * from m_audit_event as aer where aer.eventStage=1
+ P1D
+
+
+
+
+
+
diff --git a/model/report-impl/src/test/resources/reports/report-audit-collection-with-condition.xml b/model/report-impl/src/test/resources/reports/report-audit-collection-with-condition.xml
new file mode 100644
index 00000000000..2afc4f3c14f
--- /dev/null
+++ b/model/report-impl/src/test/resources/reports/report-audit-collection-with-condition.xml
@@ -0,0 +1,16 @@
+
+
+
+ Audit Collection report with condition
+ collection
+
+
+
+
+
+
diff --git a/model/report-impl/src/test/resources/reports/report-object-collection-with-condition.xml b/model/report-impl/src/test/resources/reports/report-object-collection-with-condition.xml
new file mode 100644
index 00000000000..73c3e5d5e5f
--- /dev/null
+++ b/model/report-impl/src/test/resources/reports/report-object-collection-with-condition.xml
@@ -0,0 +1,16 @@
+
+
+
+ Object Collection report with condition
+ collection
+
+
+
+
+
+