Skip to content

Commit

Permalink
displaying saved searches in the dropdown menu
Browse files Browse the repository at this point in the history
  • Loading branch information
Kateryna Honchar committed Apr 22, 2022
1 parent f458c9c commit fb0bc32
Show file tree
Hide file tree
Showing 8 changed files with 105 additions and 56 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5304,6 +5304,46 @@ public static StringValue getCollectionNameParameterValue(PageBase pageBase) {
return parameters == null ? null : parameters.get(PageBase.PARAMETER_OBJECT_COLLECTION_NAME);
}

public static <C extends Containerable> GuiObjectListViewType getPrincipalUserObjectListView(PageBase pageBase,
FocusType principalFocus, @NotNull Class<C> viewType, boolean createIfNotExist) {
if (!(principalFocus instanceof UserType)) {
return null;
}
StringValue collectionViewParameter = WebComponentUtil.getCollectionNameParameterValue(pageBase);
String viewName = collectionViewParameter != null ? collectionViewParameter.toString() : null;
AdminGuiConfigurationType adminGui = ((UserType) principalFocus).getAdminGuiConfiguration();
if (adminGui == null) {
if (!createIfNotExist) {
return null;
}
adminGui = new AdminGuiConfigurationType();
((UserType) principalFocus).setAdminGuiConfiguration(adminGui);
}
GuiObjectListViewsType views = adminGui.getObjectCollectionViews();
if (views == null) {
if (!createIfNotExist) {
return null;
}
views = new GuiObjectListViewsType();
adminGui.objectCollectionViews(views);
}

if (StringUtils.isNoneEmpty(viewName)) {
for (GuiObjectListViewType view : views.getObjectCollectionView()) {
if (view.getIdentifier().equals(viewName)) {
return view;
}
}
} else {
for (GuiObjectListViewType view : views.getObjectCollectionView()) {
if (view.getType().equals(WebComponentUtil.containerClassToQName(PrismContext.get(), viewType))) {
return view;
}
}
}
return null;
}

public static <T extends Object> DropDownChoicePanel createDropDownChoices(String id, IModel<DisplayableValue<T>> model, IModel<List<DisplayableValue<T>>> choices,
boolean allowNull, PageBase pageBase) {
return new DropDownChoicePanel(id, model, choices, new IChoiceRenderer<DisplayableValue>() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -975,7 +975,7 @@ protected int getAutoRefreshInterval() {
return 0;
}

protected CompiledObjectCollectionView getObjectCollectionView() {
public CompiledObjectCollectionView getObjectCollectionView() {
CompiledObjectCollectionView containerPanelCollectionView = getCompiledCollectionViewFromPanelConfiguration();
if (containerPanelCollectionView != null) {
return containerPanelCollectionView;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
<head/>
<body>
<wicket:panel>
<div wicket:id="feedback"></div>
<div wicket:id="feedbackMessage"></div>
<div>
<div class="pull-left">
<label>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
package com.evolveum.midpoint.gui.impl.component.search;

import com.evolveum.midpoint.gui.api.component.BasePanel;
import com.evolveum.midpoint.gui.api.component.result.MessagePanel;
import com.evolveum.midpoint.gui.api.util.WebComponentUtil;
import com.evolveum.midpoint.model.api.authentication.GuiProfiledPrincipal;
import com.evolveum.midpoint.prism.Containerable;
Expand Down Expand Up @@ -57,7 +58,7 @@ public class SaveSearchPanel<C extends Containerable> extends BasePanel<ObjectQu
private static final long serialVersionUID = 1L;

private static final Trace LOGGER = TraceManager.getTrace(SaveSearchPanel.class);
private static final String ID_FEEDBACK = "feedback";
private static final String ID_FEEDBACK_MESSAGE = "feedbackMessage";
private static final String ID_SEARCH_NAME = "searchName";
private static final String ID_BUTTONS_PANEL = "buttonsPanel";
private static final String ID_SAVE_BUTTON = "saveButton";
Expand All @@ -80,9 +81,9 @@ protected void onInitialize() {
private void initLayout() {
setOutputMarkupId(true);

Label feedbackMessage = new Label(ID_FEEDBACK, feedbackMessageModel);
feedbackMessage.setOutputMarkupId(true);
MessagePanel feedbackMessage = new MessagePanel(ID_FEEDBACK_MESSAGE, MessagePanel.MessagePanelType.WARN, feedbackMessageModel);
feedbackMessage.add(new VisibleBehaviour(() -> feedbackMessageModel.getObject() != null && StringUtils.isNotEmpty(feedbackMessageModel.getObject())));
feedbackMessage.setOutputMarkupId(true);
add(feedbackMessage);

TextField<String> nameField = new TextField<>(ID_SEARCH_NAME, queryNameModel);
Expand All @@ -101,7 +102,7 @@ private void initLayout() {
public void onClick(AjaxRequestTarget ajaxRequestTarget) {
if (StringUtils.isEmpty(queryNameModel.getObject())) {
feedbackMessageModel = createStringResource("SaveSearchPanel.enterQueryNameWarning");
ajaxRequestTarget.add(SaveSearchPanel.this);
ajaxRequestTarget.add(feedbackMessage);
return;
}
saveCustomQuery();
Expand Down Expand Up @@ -135,32 +136,12 @@ private void saveCustomQuery() {
}

private void saveSearchItemToAdminConfig(SearchItemType searchItemType) {
StringValue collectionViewParameter = WebComponentUtil.getCollectionNameParameterValue(getPageBase());
String collectionViewName = collectionViewParameter != null ? collectionViewParameter.toString() : null;
FocusType principalFocus = getPageBase().getPrincipalFocus();
if (!(principalFocus instanceof UserType)) {
return;
}
AdminGuiConfigurationType adminGui = ((UserType) principalFocus).getAdminGuiConfiguration();
if (adminGui == null) {
adminGui = new AdminGuiConfigurationType();
((UserType) principalFocus).setAdminGuiConfiguration(adminGui);
}
GuiObjectListViewsType views = adminGui.getObjectCollectionViews();
if (views == null) {
views = new GuiObjectListViewsType();
adminGui.objectCollectionViews(views);
}
GuiObjectListViewType view = null;
if (StringUtils.isNotEmpty(collectionViewName)) {
view = findViewByName(views.getObjectCollectionView(), collectionViewName);
} else {
view = findViewByType(views.getObjectCollectionView());
}
GuiObjectListViewType view = WebComponentUtil.getPrincipalUserObjectListView(getPageBase(), principalFocus, type, true);
if (view == null) {
view = new GuiObjectListViewType();
view.setType(WebComponentUtil.containerClassToQName(PrismContext.get(), type));
views.objectCollectionView(view);
((UserType)principalFocus).getAdminGuiConfiguration().getObjectCollectionViews().objectCollectionView(view);
}
SearchBoxConfigurationType searchConfig = view.getSearchBoxConfiguration();
if (searchConfig == null) {
Expand Down Expand Up @@ -192,27 +173,7 @@ private void saveSearchItemToAdminConfig(SearchItemType searchItemType) {
}
}

private GuiObjectListViewType findViewByName(List<GuiObjectListViewType> views, String viewName) {
if (StringUtils.isEmpty(viewName)) {
return null;
}
for (GuiObjectListViewType view : views) {
if (view.getIdentifier().equals(viewName)) {
return view;
}
}
return null;
}

private GuiObjectListViewType findViewByType(List<GuiObjectListViewType> views) {
for (GuiObjectListViewType view : views) {
if (view.getType().equals(WebComponentUtil.containerClassToQName(PrismContext.get(), type))) {
return view;
}
}
return null;
}
@Override
@Override
public int getWidth() {
return 500;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,14 @@
import javax.xml.namespace.QName;

import com.evolveum.midpoint.gui.api.util.WebModelServiceUtils;
import com.evolveum.midpoint.gui.impl.component.ContainerableListPanel;
import com.evolveum.midpoint.model.api.authentication.CompiledObjectCollectionView;
import com.evolveum.midpoint.prism.Containerable;

import com.evolveum.midpoint.web.component.search.SearchValue;

import com.evolveum.midpoint.xml.ns._public.common.common_3.*;

import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.wicket.AttributeModifier;
Expand Down Expand Up @@ -70,8 +74,6 @@
import com.evolveum.midpoint.web.page.admin.configuration.PageRepositoryQuery;
import com.evolveum.midpoint.web.security.util.SecurityUtils;
import com.evolveum.midpoint.web.util.InfoTooltipBehavior;
import com.evolveum.midpoint.xml.ns._public.common.common_3.IconType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.SearchBoxModeType;

public abstract class SearchPanel<C extends Containerable> extends BasePanel<Search<C>> {

Expand Down Expand Up @@ -259,7 +261,7 @@ public boolean isVisible() {

@Override
public void onClick(AjaxRequestTarget target) {
SaveSearchPanel panel = new SaveSearchPanel(getPageBase().getMainPopupBodyId(),
SaveSearchPanel<C> panel = new SaveSearchPanel<>(getPageBase().getMainPopupBodyId(),
Model.of(SearchPanel.this.getModelObject().createObjectQuery(getPageBase())), SearchPanel.this.getModelObject().getTypeClass());
getPageBase().showMainPopup(panel, target);
}
Expand All @@ -270,7 +272,7 @@ public void onClick(AjaxRequestTarget target) {
WebMarkupContainer savedSearchMenu = new WebMarkupContainer(ID_SAVED_SEARCH_MENU);
saveSearchContainer.add(savedSearchMenu);

ListView<InlineMenuItem> savedSearchItems = new ListView<InlineMenuItem>(ID_SAVED_SEARCH_ITEMS, new ArrayList<>()) {
ListView<InlineMenuItem> savedSearchItems = new ListView<InlineMenuItem>(ID_SAVED_SEARCH_ITEMS, getSavedSearchList()) {

private static final long serialVersionUID = 1L;

Expand Down Expand Up @@ -456,6 +458,52 @@ private SearchConfigurationWrapper getSearchConfigurationWrapper() {
return getModelObject().getSearchConfigurationWrapper();
}

private List<InlineMenuItem> getSavedSearchList() {
ContainerableListPanel listPanel = findParent(ContainerableListPanel.class);
List<InlineMenuItem> savedSearchItems = new ArrayList<>();
List<SearchItemType> searchItems = null;
if (listPanel != null) {
CompiledObjectCollectionView view = listPanel.getObjectCollectionView();
searchItems = view != null ? getSearchItemList(view.getSearchBoxConfiguration()) : null;
} else {
FocusType principalFocus = getPageBase().getPrincipalFocus();
GuiObjectListViewType view = WebComponentUtil.getPrincipalUserObjectListView(getPageBase(), principalFocus, getModelObject().getTypeClass(), false);
searchItems = view != null ? getSearchItemList(view.getSearchBoxConfiguration()) : null;
}
if (searchItems != null) {
searchItems.forEach(item -> {
InlineMenuItem searchItem = new InlineMenuItem(Model.of(WebComponentUtil.getTranslatedPolyString(item.getDisplayName()))) {
private static final long serialVersionUID = 1L;

@Override
public InlineMenuItemAction initAction() {
return new InlineMenuItemAction() {

private static final long serialVersionUID = 1L;

@Override
public void onClick(AjaxRequestTarget target) {
}
};
}
};
savedSearchItems.add(searchItem);
});
}
return savedSearchItems;
}

private List<SearchItemType> getSearchItemList(SearchBoxConfigurationType config) {
if (config == null) {
return null;
}
SearchItemsType items = config.getSearchItems();
if (items == null) {
return null;
}
return items.getSearchItem();
}

class BasicSearchFragment extends Fragment {
private static final long serialVersionUID = 1L;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -253,7 +253,7 @@ protected boolean isCollectionViewPanel() {
}

@Override
protected CompiledObjectCollectionView getObjectCollectionView() {
public CompiledObjectCollectionView getObjectCollectionView() {
if (config == null) {
return super.getObjectCollectionView();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,7 @@ protected IColumn<SelectableBean<C>, String> createCheckboxColumn() {
}

@Override
protected CompiledObjectCollectionView getObjectCollectionView() {
public CompiledObjectCollectionView getObjectCollectionView() {
return view;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -286,7 +286,7 @@ protected Search createSearch(Class<ShadowType> type) {
}

@Override
protected CompiledObjectCollectionView getObjectCollectionView() {
public CompiledObjectCollectionView getObjectCollectionView() {
CompiledShadowCollectionView compiledView = findContainerPanelConfig();
if (compiledView != null) {
return compiledView;
Expand Down

0 comments on commit fb0bc32

Please sign in to comment.