Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/master'
Browse files Browse the repository at this point in the history
  • Loading branch information
mederly committed May 23, 2022
2 parents 0010c33 + fd6cd35 commit 53f81e5
Showing 1 changed file with 67 additions and 27 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@
import java.util.*;
import javax.xml.namespace.QName;

import com.evolveum.midpoint.web.component.data.column.ColumnMenuAction;

import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.wicket.Component;
Expand Down Expand Up @@ -671,7 +673,7 @@ protected List<InlineMenuItem> createRowActions() {
createRecomputeMemberRowAction(menu);

if (isAuthorized(GuiAuthorizationConstants.MEMBER_OPERATION_CREATE)) {
menu.add(new InlineMenuItem(createStringResource("abstractRoleMemberPanel.menu.create")) {
InlineMenuItem menuItem = new InlineMenuItem(createStringResource("abstractRoleMemberPanel.menu.create")) {
private static final long serialVersionUID = 1L;

@Override
Expand All @@ -685,20 +687,22 @@ public void onClick(AjaxRequestTarget target) {
}
};
}
});
};
menuItem.setVisibilityChecker((rowModel, isHeader) -> isHeader);
menu.add(menuItem);
}
if (isAuthorized(GuiAuthorizationConstants.MEMBER_OPERATION_DELETE)) {
menu.add(new InlineMenuItem(createStringResource("abstractRoleMemberPanel.menu.delete")) {
private static final long serialVersionUID = 1L;

@Override
public InlineMenuItemAction initAction() {
return new HeaderMenuAction(AbstractRoleMemberPanel.this) {
return new ColumnMenuAction() {
private static final long serialVersionUID = 1L;

@Override
public void onClick(AjaxRequestTarget target) {
deleteMembersPerformed(target);
deleteMembersPerformed(getRowModel(), target);
}
};
}
Expand All @@ -710,12 +714,12 @@ public void onClick(AjaxRequestTarget target) {

protected void createAssignMemberRowAction(List<InlineMenuItem> menu) {
if (isAuthorized(GuiAuthorizationConstants.MEMBER_OPERATION_ASSIGN)) {
menu.add(new InlineMenuItem(createStringResource("abstractRoleMemberPanel.menu.assign")) {
InlineMenuItem menuItem = new InlineMenuItem(createStringResource("abstractRoleMemberPanel.menu.assign")) {
private static final long serialVersionUID = 1L;

@Override
public InlineMenuItemAction initAction() {
return new HeaderMenuAction(AbstractRoleMemberPanel.this) {
return new ColumnMenuAction() {
private static final long serialVersionUID = 1L;

@Override
Expand All @@ -725,23 +729,25 @@ public void onClick(AjaxRequestTarget target) {
}
};
}
});
};
menuItem.setVisibilityChecker((rowModel, isHeader) -> isHeader);
menu.add(menuItem);
}
}

protected void createUnassignMemberRowAction(List<InlineMenuItem> menu) {
if (isAuthorized(GuiAuthorizationConstants.MEMBER_OPERATION_UNASSIGN)) {
menu.add(new ButtonInlineMenuItem(createStringResource("abstractRoleMemberPanel.menu.unassign")) {
InlineMenuItem menuItem = new ButtonInlineMenuItem(createStringResource("abstractRoleMemberPanel.menu.unassign")) {
private static final long serialVersionUID = 1L;

@Override
public InlineMenuItemAction initAction() {
return new HeaderMenuAction(AbstractRoleMemberPanel.this) {
return new ColumnMenuAction() {
private static final long serialVersionUID = 1L;

@Override
public void onClick(AjaxRequestTarget target) {
unassignMembersPerformed(target);
unassignMembersPerformed(getRowModel(), target);
}
};

Expand All @@ -751,8 +757,34 @@ public void onClick(AjaxRequestTarget target) {
public CompositedIconBuilder getIconCompositedBuilder() {
return getDefaultCompositedIconBuilder(GuiStyleConstants.CLASS_UNASSIGN);
}
});
};
menuItem.setVisibilityChecker((rowModel, isHeader) -> isHeader ? true : containsDirectAssignment(rowModel, isHeader));
menu.add(menuItem);
}
}

private boolean containsDirectAssignment(IModel<?> rowModel, boolean isHeader) {
AssignmentHolderType assignmentHolder = getAssignmetHolderFromRow(rowModel);

if (assignmentHolder == null) {
return isHeader;
}
R role = getModelObject();
List<AssignmentType> assignments = assignmentHolder.getAssignment();
for (AssignmentType assignment : assignments) {
if (assignment != null && assignment.getTargetRef() != null && assignment.getTargetRef().getOid().equals(role.getOid())) {
return true;
}
}
return false;
}

private AssignmentHolderType getAssignmetHolderFromRow(IModel<?> rowModel) {
if (rowModel != null && (rowModel.getObject() instanceof SelectableBean)
&& ((SelectableBean)rowModel.getObject()).getValue() instanceof AssignmentHolderType) {
return (AssignmentHolderType) ((SelectableBean)rowModel.getObject()).getValue();
}
return null;
}

protected void createRecomputeMemberRowAction(List<InlineMenuItem> menu) {
Expand All @@ -762,12 +794,12 @@ protected void createRecomputeMemberRowAction(List<InlineMenuItem> menu) {

@Override
public InlineMenuItemAction initAction() {
return new HeaderMenuAction(AbstractRoleMemberPanel.this) {
return new ColumnMenuAction() {
private static final long serialVersionUID = 1L;

@Override
public void onClick(AjaxRequestTarget target) {
recomputeMembersPerformed(target);
recomputeMembersPerformed(getRowModel(), target);
}
};
}
Expand Down Expand Up @@ -847,7 +879,7 @@ protected void assignMembers(AjaxRequestTarget target, RelationSearchItemConfigu
objectTypes, archetypeRefList, isOrgTreePanelVisible);
}

private void unassignMembersPerformed(AjaxRequestTarget target) {
private void unassignMembersPerformed(IModel rowModel, AjaxRequestTarget target) {
QueryScope scope = getQueryScope();

ChooseFocusTypeAndRelationDialogPanel chooseTypePopupContent = new ChooseFocusTypeAndRelationDialogPanel(getPageBase().getMainPopupBodyId(),
Expand All @@ -871,11 +903,11 @@ protected List<QName> getDefaultRelations() {

@Override
protected boolean isFocusTypeSelectorVisible() {
return !QueryScope.SELECTED.equals(scope);
return getAssignmetHolderFromRow(rowModel) == null && !QueryScope.SELECTED.equals(scope);
}

protected void okPerformed(QName type, Collection<QName> relations, AjaxRequestTarget target) {
unassignMembersPerformed(type, getSearchBoxConfiguration().isSearchScope(SearchBoxScopeType.SUBTREE)
unassignMembersPerformed(rowModel, type, getSearchBoxConfiguration().isSearchScope(SearchBoxScopeType.SUBTREE)
&& QueryScope.ALL.equals(scope) ? QueryScope.ALL_DIRECT : scope, relations, target);
}

Expand All @@ -888,7 +920,7 @@ protected PrismObject<TaskType> getTask(QName type, Collection<QName> relations,
AbstractRoleMemberPanel.this.getModelObject(),
scope,
type,
getActionQuery(scope, relations),
getActionQuery(rowModel, scope, relations),
relations,
target, getPageBase());

Expand Down Expand Up @@ -943,7 +975,7 @@ private List<QName> getDefaultRelationsForActions() {
return defaultRelations;
}

private void deleteMembersPerformed(AjaxRequestTarget target) {
private void deleteMembersPerformed(IModel rowModel, AjaxRequestTarget target) {
QueryScope scope = getQueryScope();
StringResourceModel confirmModel;
if (getSearchBoxConfiguration().isSearchScope(SearchBoxScopeType.SUBTREE)) {
Expand Down Expand Up @@ -973,12 +1005,12 @@ protected List<QName> getDefaultRelations() {
}

protected void okPerformed(QName type, Collection<QName> relations, AjaxRequestTarget target) {
deleteMembersPerformed(scope, relations, target);
deleteMembersPerformed(rowModel, scope, relations, target);
}

@Override
protected boolean isFocusTypeSelectorVisible() {
return !QueryScope.SELECTED.equals(scope);
return getAssignmetHolderFromRow(rowModel) == null && !QueryScope.SELECTED.equals(scope);
}

@Override
Expand Down Expand Up @@ -1075,14 +1107,14 @@ protected boolean isFocusTypeSelectorVisible() {
}
}

protected void deleteMembersPerformed(QueryScope scope, Collection<QName> relations, AjaxRequestTarget target) {
protected void deleteMembersPerformed(IModel rowModel, QueryScope scope, Collection<QName> relations, AjaxRequestTarget target) {
if (checkRelationNotSelected(relations, "No relation was selected. Cannot perform delete members", target)) {
return;
}
MemberOperationsHelper.createAndSubmitDeleteMembersTask(
getModelObject(),
scope,
getActionQuery(scope, relations),
getActionQuery(rowModel, scope, relations),
target, getPageBase());
}

Expand All @@ -1096,20 +1128,28 @@ private boolean checkRelationNotSelected(Collection<QName> relations, String mes
return true;
}

protected void unassignMembersPerformed(QName type, QueryScope scope, Collection<QName> relations, AjaxRequestTarget target) {
protected void unassignMembersPerformed(IModel rowModel, QName type, QueryScope scope, Collection<QName> relations, AjaxRequestTarget target) {
if (checkRelationNotSelected(relations, "No relation was selected. Cannot perform unassign members", target)) {
return;
}
MemberOperationsHelper.createAndSubmitUnassignMembersTask(
getModelObject(),
scope,
type,
getActionQuery(scope, relations),
getActionQuery(rowModel, scope, relations),
relations,
target, getPageBase());
target.add(this);
}

protected ObjectQuery getActionQuery(IModel rowModel, QueryScope scope, @NotNull Collection<QName> relations) {
AssignmentHolderType assignmentHolder = getAssignmetHolderFromRow(rowModel);
if (assignmentHolder == null) {
return getActionQuery(scope, relations);
}
return MemberOperationsHelper.createSelectedObjectsQuery(Collections.singletonList(assignmentHolder));
}

protected ObjectQuery getActionQuery(QueryScope scope, @NotNull Collection<QName> relations) {
switch (scope) {
case ALL:
Expand Down Expand Up @@ -1167,7 +1207,7 @@ private boolean isIndirect() {
return getSearchBoxConfiguration().isIndirect();
}

protected void recomputeMembersPerformed(AjaxRequestTarget target) {
protected void recomputeMembersPerformed(IModel rowModel, AjaxRequestTarget target) {

StringResourceModel confirmModel;
if (getSearchBoxConfiguration().isSearchScope(SearchBoxScopeType.SUBTREE)) {
Expand All @@ -1187,7 +1227,7 @@ protected PrismObject<TaskType> getTask(AjaxRequestTarget target) {
Task task = MemberOperationsHelper.createRecomputeMembersTask(
getModelObject(),
getQueryScope(),
getActionQuery(getQueryScope(), getRelationsForRecomputeTask()),
getActionQuery(rowModel, getQueryScope(), getRelationsForRecomputeTask()),
target, getPageBase());
if (task == null) {
return null;
Expand All @@ -1208,7 +1248,7 @@ public void yesPerformed(AjaxRequestTarget target) {
MemberOperationsHelper.createAndSubmitRecomputeMembersTask(
getModelObject(),
getQueryScope(),
getActionQuery(getQueryScope(), getRelationsForRecomputeTask()),
getActionQuery(rowModel, getQueryScope(), getRelationsForRecomputeTask()),
target, getPageBase());
}
};
Expand Down

0 comments on commit 53f81e5

Please sign in to comment.