Skip to content

Commit

Permalink
showing object collection from widget and fix toolbar for audit table
Browse files Browse the repository at this point in the history
  • Loading branch information
skublik committed Nov 6, 2020
1 parent f3ef02c commit 7d96d72
Show file tree
Hide file tree
Showing 26 changed files with 438 additions and 342 deletions.
Expand Up @@ -6,20 +6,15 @@
*/
package com.evolveum.midpoint.gui.api.component;

import java.io.Serializable;
import java.util.*;

import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.wicket.Component;
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.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView;
import org.apache.wicket.markup.html.panel.Fragment;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;

Expand Down Expand Up @@ -55,7 +50,6 @@
import com.evolveum.midpoint.web.component.MultiFunctinalButtonDto;
import com.evolveum.midpoint.web.component.MultifunctionalButton;
import com.evolveum.midpoint.web.component.data.column.CheckBoxHeaderColumn;
import com.evolveum.midpoint.web.component.data.column.ObjectNameColumn;
import com.evolveum.midpoint.web.component.util.SelectableBean;
import com.evolveum.midpoint.web.component.util.VisibleBehaviour;
import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour;
Expand All @@ -70,9 +64,6 @@
public abstract class MainObjectListPanel<O extends ObjectType> extends ObjectListPanel<O> {
private static final long serialVersionUID = 1L;

private static final String ID_BUTTON_BAR = "buttonBar";
private static final String ID_BUTTON_REPEATER = "buttonsRepeater";
private static final String ID_BUTTON = "button";
private static final Trace LOGGER = TraceManager.getTrace(MainObjectListPanel.class);

public MainObjectListPanel(String id, Class<O> type) {
Expand Down Expand Up @@ -119,11 +110,6 @@ protected List<ObjectReferenceType> getReferencesList(CompiledObjectCollectionVi
return Arrays.asList(ref);
}

@Override
protected WebMarkupContainer initButtonToolbar(String id) {
return new ButtonBar(id, ID_BUTTON_BAR, this, createToolbarButtonsList(ID_BUTTON));
}

protected List<MultiFunctinalButtonDto> loadButtonDescriptions() {
List<MultiFunctinalButtonDto> multiFunctinalButtonDtos = new ArrayList<>();

Expand Down Expand Up @@ -151,6 +137,7 @@ private CompositedIcon createCompositedIcon(CompiledObjectCollectionView collect
return builder.build();
}

@Override
protected List<Component> createToolbarButtonsList(String buttonId) {
List<Component> buttonsList = new ArrayList<>();
MultifunctionalButton createNewObjectButton = new MultifunctionalButton(buttonId, loadButtonDescriptions()) {
Expand Down Expand Up @@ -272,7 +259,7 @@ public void onClick(AjaxRequestTarget target) {
}
};
createReport.add(AttributeAppender.append("class", "btn btn-default btn-sm btn-margin-right"));
exportDataLink.add(new VisibleEnableBehaviour() {
createReport.add(new VisibleEnableBehaviour() {
private static final long serialVersionUID = 1L;

@Override
Expand Down Expand Up @@ -321,80 +308,6 @@ protected boolean getNewObjectGenericButtonVisibility() {
return true;
}

private void createReportPerformed(AjaxRequestTarget target) {
PrismContext prismContext = getPageBase().getPrismContext();
PrismObjectDefinition<ReportType> def = prismContext.getSchemaRegistry().findObjectDefinitionByType(ReportType.COMPLEX_TYPE);
PrismObject<ReportType> obj = null;
try {
obj = def.instantiate();
} catch (SchemaException e) {
LOGGER.error("Couldn't instantiate new report", e);
getPageBase().error(getString("MainObjectListPanel.message.error.instantiateNewReport"));
target.add(getPageBase().getFeedbackPanel());
return;
}
ReportType report = obj.asObjectable();
ObjectCollectionReportEngineConfigurationType objectCollection = new ObjectCollectionReportEngineConfigurationType();
CompiledObjectCollectionView view = getObjectCollectionView();
CollectionRefSpecificationType collection = new CollectionRefSpecificationType();
objectCollection.setUseOnlyReportView(true);
if (view != null) {
objectCollection.setView(view.toGuiObjectListViewType());
if (view.getCollection() != null && view.getCollection().getCollectionRef() != null) {
if (!QNameUtil.match(view.getCollection().getCollectionRef().getType(), ArchetypeType.COMPLEX_TYPE)) {
collection.setBaseCollectionRef(view.getCollection());
} else {
OperationResult result = new OperationResult(MainObjectListPanel.class.getSimpleName() + "." + "evaluateExpressionsInFilter");
CollectionRefSpecificationType baseCollection = new CollectionRefSpecificationType();
try {
baseCollection.setFilter(getPageBase().getQueryConverter().createSearchFilterType(
WebComponentUtil.evaluateExpressionsInFilter(view.getFilter(), result, getPageBase())));
collection.setBaseCollectionRef(baseCollection);
} catch (SchemaException e) {
LOGGER.error("Couldn't create filter for archetype");
getPageBase().error(getString("MainObjectListPanel.message.error.createArchetypeFilter"));
target.add(getPageBase().getFeedbackPanel());
}
}
}
} else {
objectCollection.setView(getDefaultView());
}
SearchFilterType searchFilter = null;
ObjectQuery query = getSearchModel().getObject().createObjectQuery(getPageBase().getPrismContext());
if (query != null) {
ObjectFilter filter = query.getFilter();
try {
searchFilter = getPageBase().getPrismContext().getQueryConverter().createSearchFilterType(filter);
} catch (Exception e) {
LOGGER.error("Couldn't create filter from search panel", e);
getPageBase().error(getString("ExportingFilterTabPanel.message.error.serializeFilterFromSearch"));
}
}
if (searchFilter != null) {
collection.setFilter(searchFilter);
} else {
try {
SearchFilterType allFilter = prismContext.getQueryConverter().createSearchFilterType(prismContext.queryFactory().createAll());
collection.setFilter(allFilter);
} catch (SchemaException e) {
LOGGER.error("Couldn't create all filter", e);
getPageBase().error(getString("MainObjectListPanel.message.error.createAllFilter"));
target.add(getPageBase().getFeedbackPanel());
return;
}
}
objectCollection.setCollection(collection);
report.setObjectCollection(objectCollection);
report.getAssignment()
.add(ObjectTypeUtil.createAssignmentTo(SystemObjectsType.ARCHETYPE_COLLECTION_REPORT.value(), ObjectTypes.ARCHETYPE, prismContext));
report.getArchetypeRef()
.add(ObjectTypeUtil.createObjectRef(SystemObjectsType.ARCHETYPE_COLLECTION_REPORT.value(), ObjectTypes.ARCHETYPE));

PageReport pageReport = new PageReport(report.asPrismObject(), true);
getPageBase().navigateToNext(pageReport);
}

private GuiObjectListViewType resolveSelectedColumn(List<Integer> indexOfColumns, GuiObjectListViewType view) {
List<GuiObjectColumnType> newColumns = new ArrayList<>();
List<GuiObjectColumnType> oldColumns;
Expand All @@ -411,10 +324,6 @@ private GuiObjectListViewType resolveSelectedColumn(List<Integer> indexOfColumns
return view;
}

protected GuiObjectListViewType getDefaultView() {
return DefaultColumnUtils.getDefaultView(getType());
}

private IModel<String> getRefreshPausePlayButtonModel() {
return () -> {
if (isRefreshEnabled()) {
Expand Down Expand Up @@ -511,25 +420,4 @@ protected DisplayType getNewObjectButtonSpecialDisplayType() {
protected CompositedIconBuilder getNewObjectButtonAdditionalIconBuilder(CompiledObjectCollectionView influencingObject, DisplayType additionalButtonDisplayType) {
return null;
}

private static class ButtonBar extends Fragment {

private static final long serialVersionUID = 1L;

public <O extends ObjectType, S extends Serializable> ButtonBar(String id, String markupId, MainObjectListPanel<O> markupProvider, List<Component> buttonsList) {
super(id, markupId, markupProvider);

initLayout(buttonsList);
}

private <O extends ObjectType> void initLayout(final List<Component> buttonsList) {
ListView<Component> buttonsView = new ListView<Component>(ID_BUTTON_REPEATER, Model.ofList(buttonsList)) {
@Override
protected void populateItem(ListItem<Component> listItem) {
listItem.add(listItem.getModelObject());
}
};
add(buttonsView);
}
}
}
Expand Up @@ -26,10 +26,5 @@
</div>
</div>
</div>
<wicket:fragment wicket:id="buttonBar">
<div class="btn-group" wicket:id="buttonsRepeater">
<a wicket:id="button"></a>
</div>
</wicket:fragment>
<wicket:child />
</wicket:panel>
Expand Up @@ -10,6 +10,8 @@
import java.util.ArrayList;
import java.util.List;

import com.evolveum.midpoint.web.component.data.SelectableBeanContainerDataProvider;

import org.apache.commons.lang3.StringUtils;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.extensions.markup.html.repeater.data.table.DataTable;
Expand Down Expand Up @@ -62,8 +64,8 @@ private void initLayout() {
@Override
public <T> void exportData(IDataProvider<T> dataProvider,
List<IExportableColumn<T, ?>> columns, OutputStream outputStream) {
if (dataProvider instanceof SelectableBeanObjectDataProvider) {
((SelectableBeanObjectDataProvider) dataProvider).setExport(true); // TODO implement more nicely
if (dataProvider instanceof SelectableBeanContainerDataProvider) {
((SelectableBeanContainerDataProvider) dataProvider).setExport(true); // TODO implement more nicely
}
try {
((BaseSortableDataProvider) dataProvider).setExportSize(true);
Expand All @@ -72,8 +74,8 @@ public <T> void exportData(IDataProvider<T> dataProvider,
} catch (Exception ex) {
LOGGER.error("Unable to export data,", ex);
} finally {
if (dataProvider instanceof SelectableBeanObjectDataProvider) {
((SelectableBeanObjectDataProvider) dataProvider).setExport(false);
if (dataProvider instanceof SelectableBeanContainerDataProvider) {
((SelectableBeanContainerDataProvider) dataProvider).setExport(false);
}
}
}
Expand Down
Expand Up @@ -23,6 +23,7 @@
import javax.xml.datatype.XMLGregorianCalendar;
import javax.xml.namespace.QName;

import com.evolveum.midpoint.web.component.data.SelectableBeanContainerDataProvider;
import com.evolveum.midpoint.xml.ns._public.common.audit_3.AuditEventRecordType;

import org.apache.commons.collections4.CollectionUtils;
Expand Down Expand Up @@ -1701,8 +1702,8 @@ public static void clearProviderCache(IDataProvider provider) {
if (provider instanceof BaseSortableDataProvider) {
((BaseSortableDataProvider) provider).clearCache();
}
if (provider instanceof SelectableBeanObjectDataProvider) {
((SelectableBeanObjectDataProvider) provider).clearSelectedObjects();
if (provider instanceof SelectableBeanContainerDataProvider) {
((SelectableBeanContainerDataProvider) provider).clearSelectedObjects();
}
}

Expand Down Expand Up @@ -4693,4 +4694,14 @@ public static Collator getCollator() {
collator.setDecomposition(Collator.FULL_DECOMPOSITION);
return collator;
}

public static CompositedIcon createCreateReportIcon() {
final CompositedIconBuilder builder = new CompositedIconBuilder();
builder.setBasicIcon(WebComponentUtil.createReportIcon(), IconCssStyle.IN_ROW_STYLE);
IconType plusIcon = new IconType();
plusIcon.setCssClass(GuiStyleConstants.CLASS_ADD_NEW_OBJECT);
plusIcon.setColor("green");
builder.appendLayerIcon(plusIcon, LayeredIconCssStyle.BOTTOM_RIGHT_STYLE);
return builder.build();
}
}
Expand Up @@ -13,6 +13,11 @@
<div class="col-md-12" wicket:id="itemsTable" style="margin: 5px 0;"/>
</div>
</div>
<wicket:fragment wicket:id="buttonBar">
<div class="btn-group" wicket:id="buttonsRepeater">
<a wicket:id="button"></a>
</div>
</wicket:fragment>
<wicket:child />
</wicket:panel>
</html>

0 comments on commit 7d96d72

Please sign in to comment.