Skip to content

Commit

Permalink
Merge remote-tracking branch 'refs/remotes/origin/master'
Browse files Browse the repository at this point in the history
  • Loading branch information
skublik committed Aug 19, 2022
2 parents 05de620 + 649d0de commit 64e8a55
Show file tree
Hide file tree
Showing 4 changed files with 152 additions and 64 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
import java.util.stream.Collectors;
import javax.xml.namespace.QName;

import com.evolveum.midpoint.gui.api.page.PageBase;
import com.evolveum.midpoint.gui.api.util.WebModelServiceUtils;
import com.evolveum.midpoint.gui.impl.component.ContainerableListPanel;
import com.evolveum.midpoint.gui.impl.component.button.SelectableItemListPopoverPanel;
Expand All @@ -35,6 +36,7 @@
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.wicket.Component;
import org.apache.wicket.Page;
import org.apache.wicket.ajax.AjaxChannel;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.attributes.AjaxRequestAttributes;
Expand Down Expand Up @@ -344,14 +346,23 @@ private Component getSavedSearchMenuButton() {
}

private boolean isCollectionInstancePage() {
return getPageBase().getClass().getAnnotation(CollectionInstance.class) != null;
return getCollectionInstance() != null;
}

private String getCollectionInstanceDefaultIdentifier() {
CollectionInstance collectionInstance = getPageBase().getClass().getAnnotation(CollectionInstance.class);
CollectionInstance collectionInstance = getCollectionInstance();
return collectionInstance != null ? collectionInstance.identifier() : null;
}

private CollectionInstance getCollectionInstance() {
PageBase page = findParent(PageBase.class);
if (page == null) {
return null;
}

return page.getClass().getAnnotation(CollectionInstance.class);
}

private boolean isPopupWindow() {
Component parent = SearchPanel.this.getParent();
while (parent != null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
import java.util.stream.Collectors;
import javax.xml.namespace.QName;

import org.apache.commons.lang3.BooleanUtils;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
import org.apache.wicket.ajax.markup.html.AjaxLink;
Expand Down Expand Up @@ -115,7 +116,7 @@ private enum SelectionState {

private LoadableModel<List<Tile<PersonOfInterest>>> tiles;

private IModel<SelectionState> selectionState = Model.of(SelectionState.TILES);
private IModel<SelectionState> selectionState;

private IModel<Map<ObjectReferenceType, List<ObjectReferenceType>>> selectedGroupOfUsers = Model.ofMap(new HashMap<>());

Expand Down Expand Up @@ -155,56 +156,58 @@ protected IModel<String> getSubTextModel() {
}

private void initModels() {

tiles = new LoadableModel<>(false) {

@Override
protected List<Tile<PersonOfInterest>> load() {
List<Tile<PersonOfInterest>> list = new ArrayList<>();

TargetSelectionType selection = getTargetSelectionConfiguration();
if (selection == null) {
for (TileType type : TileType.values()) {
Tile tile = createDefaultTile(type);
list.add(tile);
}

selectTileIfOnlyOne(list);

return list;
}
// todo check assignment authorizations

if (selection.isAllowRequestForMyself() == null || selection.isAllowRequestForMyself()) {
TargetSelectionType selection = getTargetSelectionConfiguration();
if (BooleanUtils.isNotFalse(selection.isAllowRequestForMyself())) {
list.add(createDefaultTile(TileType.MYSELF));
}

if (selection.isAllowRequestForOthers() != null && !selection.isAllowRequestForOthers()) {
selectTileIfOnlyOne(list);

return list;
}

List<GroupSelectionType> selections = selection.getGroup();
if (selections.isEmpty()) {
list.add(createDefaultTile(TileType.GROUP_OTHERS));
selectTileIfOnlyOne(list);
return list;
if (BooleanUtils.isNotFalse(selection.isAllowRequestForOthers())) {
List<GroupSelectionType> selections = selection.getGroup();
if (selections.isEmpty()) {
list.add(createDefaultTile(TileType.GROUP_OTHERS));
} else {
for (GroupSelectionType gs : selections) {
list.add(createTile(gs));
}
}
}

for (GroupSelectionType gs : selections) {
list.add(createTile(gs));
if (list.size() == 1) {
Tile<PersonOfInterest> tile = list.get(0);
switch (tile.getValue().type) {
case MYSELF:
tile.setSelected(true);
break;
case GROUP_OTHERS:
tile.setSelected(true);
}
}

selectTileIfOnlyOne(list);

return list;
}
};
}

private void selectTileIfOnlyOne(List<Tile<PersonOfInterest>> list) {
if (list != null && list.size() == 1) {
list.get(0).setSelected(true);
}
selectionState = new LoadableModel<>(false) {

@Override
protected SelectionState load() {
Tile<PersonOfInterest> selected = getSelectedTile();
if (selected != null && selected.getValue().type == TileType.GROUP_OTHERS) {
return SelectionState.USERS;
}

return SelectionState.TILES;
}
};
}

private Tile<PersonOfInterest> createTile(GroupSelectionType selection) {
Expand Down Expand Up @@ -417,6 +420,7 @@ private void myselfPerformed(AjaxRequestTarget target, Tile<PersonOfInterest> my
private void groupOthersPerformed(AjaxRequestTarget target, Tile<PersonOfInterest> groupOthers) {
Tile<PersonOfInterest> selected = getSelectedTile();
if (selected != null && selected.getValue().type == TileType.GROUP_OTHERS && selected != groupOthers) {
// we've selected different group of users as it was previously selected, so we clear our map of selected users
selectedGroupOfUsers.setObject(createPoiMembershipMap(null));
}

Expand Down Expand Up @@ -611,7 +615,7 @@ private boolean submitData() {

private TargetSelectionType getTargetSelectionConfiguration() {
AccessRequestType config = getAccessRequestConfiguration(page);
return config != null ? config.getTargetSelection() : null;
return config != null ? config.getTargetSelection() : new TargetSelectionType();
}

public static class ObjectReferenceProvider extends ChoiceProvider<ObjectReferenceType> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,9 @@
import java.util.List;
import javax.xml.namespace.QName;

import com.evolveum.midpoint.gui.impl.page.self.PageRequestAccess;

import org.apache.wicket.RestartResponseException;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.list.ListItem;
Expand All @@ -30,6 +33,8 @@
import com.evolveum.midpoint.web.security.MidPointApplication;
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;

import org.apache.wicket.request.mapper.parameter.PageParameters;

/**
* Created by Viliam Repan (lazyman).
*/
Expand Down Expand Up @@ -80,6 +85,18 @@ protected void onInitialize() {
relations.reset();
}

@Override
protected void onBeforeRender() {
if (getModelObject().getPersonOfInterest().size() == 0) {
PageParameters params = new PageParameters();
params.set(WizardModel.PARAM_STEP, PersonOfInterestPanel.STEP_ID);

throw new RestartResponseException(new PageRequestAccess(params));
}

super.onBeforeRender();
}

@Override
public void init(WizardModel wizard) {
super.init(wizard);
Expand All @@ -102,18 +119,12 @@ private void initModels() {
protected List<Tile<QName>> load() {
RequestAccess ra = getModelObject();

QName currentRelation = ra.getRelation();
if (currentRelation == null) {
currentRelation = ra.getDefaultRelation();
getModelObject().setRelation(currentRelation);
}

List<Tile<QName>> tiles = new ArrayList<>();

List<QName> availableRelations = ra.getAvailableRelations(page);
for (QName name : availableRelations) {
Tile<QName> tile = createTileForRelation(name);
tile.setSelected(name.equals(currentRelation));
tile.setSelected(name.equals(ra.getDefaultRelation()));
tile.setValue(name);

tiles.add(tile);
Expand Down

0 comments on commit 64e8a55

Please sign in to comment.