Skip to content

Commit

Permalink
tables cleanup, preparation for adding table for mappings
Browse files Browse the repository at this point in the history
  • Loading branch information
katkav committed Apr 14, 2021
1 parent 254b444 commit f1e9136
Show file tree
Hide file tree
Showing 25 changed files with 1,502 additions and 858 deletions.
Expand Up @@ -8,6 +8,8 @@

import java.util.*;

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

import org.apache.commons.collections4.CollectionUtils;
import org.apache.wicket.Component;
import org.apache.wicket.ajax.AjaxRequestTarget;
Expand Down Expand Up @@ -98,24 +100,6 @@ protected List<ObjectReferenceType> getReferencesList(CompiledObjectCollectionVi
return Collections.singletonList(ref);
}

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

Collection<CompiledObjectCollectionView> compiledObjectCollectionViews = getNewObjectInfluencesList();

if (CollectionUtils.isNotEmpty(compiledObjectCollectionViews)) {
compiledObjectCollectionViews.forEach(collection -> {
MultiFunctinalButtonDto buttonDesc = new MultiFunctinalButtonDto();
buttonDesc.setCompositedIcon(createCompositedIcon(collection));
buttonDesc.setAdditionalButtonDisplayType(collection.getDisplay());
buttonDesc.setCollectionView(collection);
multiFunctinalButtonDtos.add(buttonDesc);
});
}

return multiFunctinalButtonDtos;
}

private CompositedIcon createCompositedIcon(CompiledObjectCollectionView collectionView) {
DisplayType additionalButtonDisplayType = WebComponentUtil.getNewObjectDisplayTypeFromCollectionView(collectionView, getPageBase());
CompositedIconBuilder builder = getNewObjectButtonAdditionalIconBuilder(collectionView, additionalButtonDisplayType);
Expand All @@ -125,9 +109,26 @@ private CompositedIcon createCompositedIcon(CompiledObjectCollectionView collect
return builder.build();
}

@Override
protected ISelectableDataProvider<O, SelectableBean<O>> createProvider() {
return createSelectableBeanObjectDataProvider(null, null); // default
}

@Override
protected List<Component> createToolbarButtonsList(String buttonId) {
List<Component> buttonsList = new ArrayList<>();

buttonsList.add(createCreateNewObjectButton(buttonId));
buttonsList.add(createImportObjectButton(buttonId));
buttonsList.add(createDownloadButton(buttonId));
buttonsList.add(createCreateReportButton(buttonId));
buttonsList.add(createRefreshButton(buttonId));
buttonsList.add(createPlayPauseButton(buttonId));

return buttonsList;
}

protected MultifunctionalButton createCreateNewObjectButton(String buttonId) {
MultifunctionalButton createNewObjectButton = new MultifunctionalButton(buttonId, loadButtonDescriptions()) {
private static final long serialVersionUID = 1L;

Expand All @@ -143,17 +144,7 @@ protected DisplayType getMainButtonDisplayType() {

@Override
protected Map<IconCssStyle, IconType> getMainButtonLayerIcons() {
if (!isCollectionViewPanelForCompiledView()) {
return null;
}
DisplayType mainButtonDisplayType = getMainButtonDisplayType();
if (mainButtonDisplayType.getIcon() != null && mainButtonDisplayType.getIcon().getCssClass() != null &&
getMainButtonDisplayType().getIcon().getCssClass().contains(GuiStyleConstants.CLASS_ADD_NEW_OBJECT)) {
return null;
}
Map<IconCssStyle, IconType> layerIconMap = new HashMap<>();
layerIconMap.put(IconCssStyle.BOTTOM_RIGHT_STYLE, WebComponentUtil.createIconType(GuiStyleConstants.CLASS_PLUS_CIRCLE, "green"));
return layerIconMap;
return createMainButtonLayerIcons(getMainButtonDisplayType());
}

@Override
Expand All @@ -168,8 +159,65 @@ protected boolean isDefaultButtonVisible() {
};
createNewObjectButton.add(new VisibleBehaviour(this::isCreateNewObjectEnabled));
createNewObjectButton.add(AttributeAppender.append("class", "btn-margin-right"));
buttonsList.add(createNewObjectButton);
return createNewObjectButton;
}

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

Collection<CompiledObjectCollectionView> compiledObjectCollectionViews = getNewObjectInfluencesList();

if (CollectionUtils.isNotEmpty(compiledObjectCollectionViews)) {
compiledObjectCollectionViews.forEach(collection -> {
MultiFunctinalButtonDto buttonDesc = new MultiFunctinalButtonDto();
buttonDesc.setCompositedIcon(createCompositedIcon(collection));
buttonDesc.setOrCreateDefaultAdditionalButtonDisplayType(collection.getDisplay());
buttonDesc.setCollectionView(collection);
multiFunctinalButtonDtos.add(buttonDesc);
});
}

return multiFunctinalButtonDtos;
}

private DisplayType getNewObjectButtonStandardDisplayType() {
if (isCollectionViewPanelForCompiledView()) {

CompiledObjectCollectionView view = getObjectCollectionView();
if (isArchetypedCollectionView(view)) {
return WebComponentUtil.getNewObjectDisplayTypeFromCollectionView(view, getPageBase());
}
}

String sb = createStringResource("MainObjectListPanel.newObject").getString()
+ " "
+ createStringResource("ObjectTypeLowercase." + getType().getSimpleName()).getString();
return WebComponentUtil.createDisplayType(GuiStyleConstants.CLASS_ADD_NEW_OBJECT, "green",
sb);
}

protected Map<IconCssStyle, IconType> createMainButtonLayerIcons(DisplayType mainButtonDisplayType) {
if (!isCollectionViewPanelForCompiledView()) {
return null;
}
// DisplayType mainButtonDisplayType = getMainButtonDisplayType();
return WebComponentUtil.createMainButtonLayerIcon(mainButtonDisplayType);
}

private DisplayType getNewObjectButtonSpecialDisplayType() {
String iconCssStyle = WebComponentUtil.createDefaultBlackIcon(WebComponentUtil.classToQName(getPageBase().getPrismContext(), getType()));

String sb = createStringResource("MainObjectListPanel.newObject").getString()
+ " "
+ createStringResource("ObjectTypeLowercase." + getType().getSimpleName()).getString();
return WebComponentUtil.createDisplayType(iconCssStyle, "", sb);
}

protected boolean getNewObjectGenericButtonVisibility() {
return true;
}

private AjaxIconButton createImportObjectButton(String buttonId) {
AjaxIconButton importObject = new AjaxIconButton(buttonId, new Model<>(GuiStyleConstants.CLASS_UPLOAD),
createStringResource("MainObjectListPanel.import")) {

Expand All @@ -181,26 +229,23 @@ public void onClick(AjaxRequestTarget target) {
}
};
importObject.add(AttributeAppender.append("class", "btn btn-default btn-sm"));
importObject.add(new VisibleEnableBehaviour() {
private static final long serialVersionUID = 1L;

@Override
public boolean isVisible() {
importObject.add(new VisibleBehaviour(this::isImportObjectButtonVisible));
return importObject;
}

boolean isVisible = false;
try {
isVisible = ((PageBase) getPage()).isAuthorized(ModelAuthorizationAction.IMPORT_OBJECTS.getUrl())
&& WebComponentUtil.isAuthorized(AuthorizationConstants.AUTZ_UI_CONFIGURATION_ALL_URL,
AuthorizationConstants.AUTZ_UI_CONFIGURATION_IMPORT_URL);
} catch (Exception ex) {
LOGGER.error("Failed to check authorization for IMPORT action for " + getType().getSimpleName()
+ " object, ", ex);
}
return isVisible;
}
});
buttonsList.add(importObject);
private boolean isImportObjectButtonVisible() {
try {
return ((PageBase) getPage()).isAuthorized(ModelAuthorizationAction.IMPORT_OBJECTS.getUrl())
&& WebComponentUtil.isAuthorized(AuthorizationConstants.AUTZ_UI_CONFIGURATION_ALL_URL,
AuthorizationConstants.AUTZ_UI_CONFIGURATION_IMPORT_URL);
} catch (Exception ex) {
LOGGER.error("Failed to check authorization for IMPORT action for " + getType().getSimpleName()
+ " object, ", ex);
}
return false;
}

private CsvDownloadButtonPanel createDownloadButton(String buttonId) {
boolean canCountBeforeExporting = getType() == null || !ShadowType.class.isAssignableFrom(getType()) ||
isRawOrNoFetchOption(getOptions());
CsvDownloadButtonPanel exportDataLink = new CsvDownloadButtonPanel(buttonId, canCountBeforeExporting) {
Expand Down Expand Up @@ -228,8 +273,10 @@ public boolean isVisible() {
}
});
// exportDataLink.add(AttributeAppender.append("class", "btn-margin-right"));
buttonsList.add(exportDataLink);
return exportDataLink;
}

private AjaxCompositedIconButton createCreateReportButton(String buttonId) {
final CompositedIconBuilder builder = new CompositedIconBuilder();
builder.setBasicIcon(WebComponentUtil.createReportIcon(), IconCssStyle.IN_ROW_STYLE);
IconType plusIcon = new IconType();
Expand All @@ -247,16 +294,11 @@ public void onClick(AjaxRequestTarget target) {
}
};
createReport.add(AttributeAppender.append("class", "btn btn-default btn-sm btn-margin-right"));
createReport.add(new VisibleEnableBehaviour() {
private static final long serialVersionUID = 1L;

@Override
public boolean isVisible() {
return WebComponentUtil.isAuthorized(AuthorizationConstants.AUTZ_UI_ADMIN_CREATE_REPORT_BUTTON_URI);
}
});
buttonsList.add(createReport);
createReport.add(new VisibleBehaviour(() -> WebComponentUtil.isAuthorized(AuthorizationConstants.AUTZ_UI_ADMIN_CREATE_REPORT_BUTTON_URI)));
return createReport;
}

private AjaxIconButton createRefreshButton(String buttonId) {
AjaxIconButton refreshIcon = new AjaxIconButton(buttonId, new Model<>(GuiStyleConstants.CLASS_RECONCILE),
createStringResource("MainObjectListPanel.refresh")) {

Expand All @@ -271,8 +313,10 @@ public void onClick(AjaxRequestTarget target) {
}
};
refreshIcon.add(AttributeAppender.append("class", "btn btn-default btn-margin-left btn-sm"));
buttonsList.add(refreshIcon);
return refreshIcon;
}

private AjaxIconButton createPlayPauseButton(String buttonId) {
AjaxIconButton playPauseIcon = new AjaxIconButton(buttonId, getRefreshPausePlayButtonModel(),
getRefreshPausePlayButtonTitleModel()) {

Expand All @@ -286,13 +330,7 @@ public void onClick(AjaxRequestTarget target) {
}
};
playPauseIcon.add(AttributeAppender.append("class", "btn btn-default btn-sm"));
buttonsList.add(playPauseIcon);

return buttonsList;
}

protected boolean getNewObjectGenericButtonVisibility() {
return true;
return playPauseIcon;
}

private IModel<String> getRefreshPausePlayButtonModel() {
Expand Down Expand Up @@ -338,22 +376,6 @@ protected List<CompiledObjectCollectionView> getNewObjectInfluencesList() {
return getAllApplicableArchetypeViews();
}

protected DisplayType getNewObjectButtonStandardDisplayType() {
if (isCollectionViewPanelForCompiledView()) {

CompiledObjectCollectionView view = getObjectCollectionView();
if (isArchetypedCollectionView(view)) {
return WebComponentUtil.getNewObjectDisplayTypeFromCollectionView(view, getPageBase());
}
}

String sb = createStringResource("MainObjectListPanel.newObject").getString()
+ " "
+ createStringResource("ObjectTypeLowercase." + getType().getSimpleName()).getString();
return WebComponentUtil.createDisplayType(GuiStyleConstants.CLASS_ADD_NEW_OBJECT, "green",
sb);
}

private boolean isArchetypedCollectionView(CompiledObjectCollectionView view) {
if (view == null) {
return false;
Expand All @@ -372,15 +394,6 @@ private boolean isArchetypedCollectionView(CompiledObjectCollectionView view) {
return QNameUtil.match(ArchetypeType.COMPLEX_TYPE, collectionRef.getType());
}

protected DisplayType getNewObjectButtonSpecialDisplayType() {
String iconCssStyle = WebComponentUtil.createDefaultBlackIcon(WebComponentUtil.classToQName(getPageBase().getPrismContext(), getType()));

String sb = createStringResource("MainObjectListPanel.newObject").getString()
+ " "
+ createStringResource("ObjectTypeLowercase." + getType().getSimpleName()).getString();
return WebComponentUtil.createDisplayType(iconCssStyle, "", sb);
}

protected CompositedIconBuilder getNewObjectButtonAdditionalIconBuilder(CompiledObjectCollectionView influencingObject, DisplayType additionalButtonDisplayType) {
return null;
}
Expand Down
Expand Up @@ -6,15 +6,17 @@
*/
package com.evolveum.midpoint.gui.api.component;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.*;
import java.util.function.Supplier;

import com.evolveum.midpoint.prism.query.ObjectOrdering;

import com.evolveum.midpoint.web.component.util.SerializableFunction;

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.model.IModel;
import org.apache.wicket.request.mapper.parameter.PageParameters;
import org.apache.wicket.util.string.StringValue;
Expand Down Expand Up @@ -94,7 +96,8 @@ protected LoadableModel<Search<O>> getSearchModel() {
return super.getSearchModel();
}

protected ISelectableDataProvider<O, SelectableBean<O>> createProvider() {
protected final SelectableBeanObjectDataProvider<O> createSelectableBeanObjectDataProvider(SerializableSupplier<ObjectQuery> querySuplier,
SerializableFunction<SortParam<String>, List<ObjectOrdering>> orderingSuplier) {
List<O> preSelectedObjectList = getPreselectedObjectList();
SelectableBeanObjectDataProvider<O> provider = new SelectableBeanObjectDataProvider<O>(
getPageBase(), getSearchModel(), preSelectedObjectList == null ? null : new HashSet<>(preSelectedObjectList)) {
Expand All @@ -107,25 +110,25 @@ protected PageStorage getPageStorage() {

@Override
protected ObjectQuery getCustomizeContentQuery() {
return ObjectListPanel.this.getCustomizeContentQuery();
if (querySuplier == null) {
return null;
}
return querySuplier.get();
}

@Override
protected List<ObjectOrdering> createObjectOrderings(SortParam<String> sortParam) {
if (orderingSuplier == null) {
return super.createObjectOrderings(sortParam);
}
return orderingSuplier.apply(sortParam);
}
};
provider.setCompiledObjectCollectionView(getObjectCollectionView());
provider.setOptions(createOptions());
setDefaultSorting(provider);

return provider;
}

protected ObjectQuery getCustomizeContentQuery() {
return null;
}

protected void setDefaultSorting(ISelectableDataProvider<O, SelectableBean<O>> provider){
//should be overrided if needed
}


protected List<CompiledObjectCollectionView> getAllApplicableArchetypeViews() {
return getPageBase().getCompiledGuiProfile().findAllApplicableArchetypeViews(WebComponentUtil.classToQName(getPageBase().getPrismContext(), getType()));
}
Expand Down
Expand Up @@ -10,6 +10,9 @@
import java.util.Collection;
import java.util.List;

import com.evolveum.midpoint.prism.query.ObjectQuery;
import com.evolveum.midpoint.web.component.data.ISelectableDataProvider;

import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.extensions.markup.html.repeater.data.table.DataTable;
import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
Expand Down Expand Up @@ -73,6 +76,13 @@ protected IModel<Boolean> getEnabled(IModel<SelectableBean<O>> rowModel) {
return null;
}

@Override
protected final ISelectableDataProvider<O, SelectableBean<O>> createProvider() {
return createSelectableBeanObjectDataProvider(() -> getCustomizeContentQuery(), null);
}

protected abstract ObjectQuery getCustomizeContentQuery();

@Override
protected void objectDetailsPerformed(AjaxRequestTarget target, O object) {
onSelectPerformed(target, object);
Expand Down
Expand Up @@ -5085,4 +5085,14 @@ public static String countLinkFroNonDeadShadows(Collection<ObjectReferenceType>
}
return Integer.toString(count);
}

public static Map<IconCssStyle, IconType> createMainButtonLayerIcon(DisplayType mainButtonDisplayType) {
if (mainButtonDisplayType.getIcon() != null && mainButtonDisplayType.getIcon().getCssClass() != null &&
mainButtonDisplayType.getIcon().getCssClass().contains(GuiStyleConstants.CLASS_ADD_NEW_OBJECT)) {
return null;
}
Map<IconCssStyle, IconType> layerIconMap = new HashMap<>();
layerIconMap.put(IconCssStyle.BOTTOM_RIGHT_STYLE, WebComponentUtil.createIconType(GuiStyleConstants.CLASS_PLUS_CIRCLE, "green"));
return layerIconMap;
}
}

0 comments on commit f1e9136

Please sign in to comment.