Skip to content

Commit

Permalink
some changes to collection view merging; left menu collection view me…
Browse files Browse the repository at this point in the history
…nu items; search panel changes
  • Loading branch information
Kateryna Honchar committed May 23, 2022
1 parent 1eb0e67 commit 2e35ad8
Show file tree
Hide file tree
Showing 5 changed files with 41 additions and 50 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -179,6 +179,9 @@ private void mergeCollectionViewsWithDefault(CompiledGuiProfile compiledGuiProfi
compiledGuiProfile.getObjectCollectionViews().add(defaultCollectionView);
continue;
}
if (!compiledObjectCollectionView.isDefaultView()) {
compiledObjectCollectionView.setDefaultView(true);
}
mergeCollectionViews(compiledObjectCollectionView, defaultCollectionView);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5326,9 +5326,9 @@ public static <C extends Containerable> GuiObjectListViewType getPrincipalUserOb
adminGui.objectCollectionViews(views);
}
GuiObjectListViewType objectListView = null;
if (StringUtils.isNoneEmpty(viewName)) {
if (StringUtils.isNotEmpty(viewName)) {
for (GuiObjectListViewType view : views.getObjectCollectionView()) {
if (view.getIdentifier().equals(viewName)) {
if (viewName.equals(view.getIdentifier())) {
objectListView = view;
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -683,7 +683,7 @@ private void addCollectionsMenuItems(MainMenuItem mainMenuItem, QName type, Clas
List<CompiledObjectCollectionView> objectViews = getPageBase().getCompiledGuiProfile().findAllApplicableObjectCollectionViews(type);

objectViews.forEach(objectView -> {
if (!WebComponentUtil.getElementVisibility(objectView.getVisibility())) {
if (objectView.isDefaultView() || !WebComponentUtil.getElementVisibility(objectView.getVisibility())) {
return;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,8 @@

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

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

import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.wicket.AttributeModifier;
Expand Down Expand Up @@ -482,18 +484,19 @@ private SearchConfigurationWrapper getSearchConfigurationWrapper() {
private List<InlineMenuItem> getSavedSearchList() {
ContainerableListPanel listPanel = findParent(ContainerableListPanel.class);
List<InlineMenuItem> savedSearchItems = new ArrayList<>();
List<SearchItemType> searchItems = null;
List<AvailableFilterType> availableFilterList = null;
if (listPanel != null) {
CompiledObjectCollectionView view = listPanel.getObjectCollectionView();
searchItems = view != null ? getSearchItemList(view.getSearchBoxConfiguration()) : null;
availableFilterList = view != null ? getAvailableFilterList(view.getSearchBoxConfiguration()) : null;
} else {
FocusType principalFocus = getPageBase().getPrincipalFocus();
GuiObjectListViewType view = WebComponentUtil.getPrincipalUserObjectListView(getPageBase(), principalFocus, getModelObject().getTypeClass(), false);
searchItems = view != null ? getSearchItemList(view.getSearchBoxConfiguration()) : null;
availableFilterList = view != null ? getAvailableFilterList(view.getSearchBoxConfiguration()) : null;
}
if (searchItems != null) {
searchItems.forEach(item -> {
InlineMenuItem searchItem = new InlineMenuItem(Model.of(WebComponentUtil.getTranslatedPolyString(item.getDisplayName()))) {
if (availableFilterList != null) {
availableFilterList.forEach(filter -> {
PolyStringType filterLabel = filter.getDisplay() != null ? filter.getDisplay().getLabel() : null;
InlineMenuItem searchItem = new InlineMenuItem(Model.of(WebComponentUtil.getTranslatedPolyString(filterLabel))) {
private static final long serialVersionUID = 1L;

@Override
Expand All @@ -504,25 +507,13 @@ public InlineMenuItemAction initAction() {

@Override
public void onClick(AjaxRequestTarget target) {
SearchFilterType filter = item.getFilter();
if (filter == null) {
return;
}
try {
ObjectFilter savedFilter = getPageBase().getQueryConverter().parseFilter(filter, getModelObject().getTypeClass());
if (savedFilter instanceof AndFilter && ((AndFilter) savedFilter).getConditions() != null) {
getModelObject().getSearchConfigurationWrapper().setDefaultSearchBoxMode(SearchBoxModeType.BASIC);
applyFilterToBasicMode((AndFilter) savedFilter);
} else {
Optional<PrismQuerySerialization> serialization = getPageBase().getPrismContext().querySerializer()
.trySerialize(savedFilter, getPageBase().getPrismContext().getSchemaRegistry().staticNamespaceContext());
if (serialization.isPresent()) {
getModelObject().getSearchConfigurationWrapper().setDefaultSearchBoxMode(SearchBoxModeType.AXIOM_QUERY);
getModelObject().setDslQuery(serialization.get().filterText());
}
}
} catch (SchemaException e) {
LOG.error("Unable to create object query from search filter: {}, {}", filter, e.getLocalizedMessage());
if (SearchBoxModeType.BASIC.equals(filter.getSearchMode())) {
applyFilterToBasicMode(filter.getSearchItem());
} else if (SearchBoxModeType.AXIOM_QUERY.equals(filter.getSearchMode())) {
applyFilterToAxiomMode();
}
searchPerformed(target);
}
Expand All @@ -535,23 +526,21 @@ public void onClick(AjaxRequestTarget target) {
return savedSearchItems;
}

private void applyFilterToBasicMode(AndFilter filter) {
private void applyFilterToBasicMode(List<SearchItemType> items) {
getModelObject().getItems().forEach(item -> item.setVisible(false));
List<ObjectFilter> conditions = filter.getConditions();
conditions.forEach(condition -> {
if (condition instanceof AndFilter) {
applyFilterToBasicMode((AndFilter) condition);
} else if (condition instanceof PropertyValueFilter) {
ItemPath path = ((PropertyValueFilter) condition).getPath();
if (path == null) {
return;
}
List<? extends PrismValue> values = ((PropertyValueFilter) condition).getValues();
items.forEach(searchItem -> {
ItemPath path = searchItem.getPath().getItemPath();
if (searchItem.getFilter() instanceof PropertyValueFilter) {
List<? extends PrismValue> values = ((PropertyValueFilter) searchItem.getFilter()).getValues();
setSearchItemValue(path, values);
}
});
}
);
}

private void applyFilterToAxiomMode() {

}

private void setSearchItemValue(ItemPath path, List<? extends PrismValue> values) {
if (path == null) {
Expand Down Expand Up @@ -579,15 +568,11 @@ private void setSearchItemValue(ItemPath path, List<? extends PrismValue> values
}
}

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

class BasicSearchFragment extends Fragment {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
import com.evolveum.midpoint.schema.util.*;
import com.evolveum.prism.xml.ns._public.query_3.PagingType;

import org.apache.commons.collections4.CollectionUtils;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.springframework.beans.factory.annotation.Autowired;
Expand Down Expand Up @@ -633,6 +634,9 @@ private void compileSearchBox(CompiledObjectCollectionView existingView, GuiObje
if (newSearchBoxConfig.getSearchItems() == null) {
newSearchBoxConfig.setSearchItems(oldSearchBoxConfig.getSearchItems());
}
if (CollectionUtils.isEmpty(newSearchBoxConfig.getAvailableFilter())) {
newSearchBoxConfig.getAvailableFilter().addAll(oldSearchBoxConfig.getAvailableFilter());
}
if (newSearchBoxConfig.getDefaultMode() == null) {
newSearchBoxConfig.setDefaultMode(oldSearchBoxConfig.getDefaultMode());
}
Expand Down Expand Up @@ -697,18 +701,17 @@ private void compileViewIdentifier(CompiledObjectCollectionView existingView, Gu
}

public String determineViewIdentifier(GuiObjectListViewType objectListViewType) {
return determineViewIdentifier(objectListViewType, ""); //todo how to get default view identifier by type? or return null
}
public String determineViewIdentifier(GuiObjectListViewType objectListViewType, String defaultViewIdentifier) {
String viewIdentifier = objectListViewType.getIdentifier();
if (viewIdentifier != null) {
return viewIdentifier;
}
CollectionRefSpecificationType collection = objectListViewType.getCollection();
if (collection == null) {
return objectListViewType.getType() != null ? objectListViewType.getType().getLocalPart() : null;
}
ObjectReferenceType collectionRef = collection.getCollectionRef();
if (collectionRef == null) {
return objectListViewType.getType() != null ? objectListViewType.getType().getLocalPart() : null;
if (collection != null && collection.getCollectionRef() != null) {
return collection.getCollectionRef().getOid();
}
return collectionRef.getOid();
return defaultViewIdentifier;
}
}

0 comments on commit 2e35ad8

Please sign in to comment.