Skip to content

Commit

Permalink
code refactoring for Governance tab Role edit page
Browse files Browse the repository at this point in the history
  • Loading branch information
KaterynaHonchar committed Apr 21, 2017
1 parent 8f7d247 commit ffc083b
Show file tree
Hide file tree
Showing 18 changed files with 217 additions and 196 deletions.
Expand Up @@ -23,6 +23,7 @@
import com.evolveum.midpoint.web.component.assignment.RelationTypes;
import com.evolveum.midpoint.web.component.menu.cog.InlineMenuItem;
import com.evolveum.midpoint.web.page.admin.configuration.component.HeaderMenuAction;
import com.evolveum.midpoint.web.page.admin.roles.RoleGovernanceRelationsPanel;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.extensions.markup.html.tabs.ITab;
import org.apache.wicket.markup.html.WebMarkupContainer;
Expand Down Expand Up @@ -123,75 +124,8 @@ public AbstractRoleMemberPanel<RoleType> createGovernancePanel(String panelId) {
relationsList.add(RelationTypes.OWNER);
relationsList.add(RelationTypes.MANAGER);

return new RoleMemberPanel<RoleType>(panelId, new Model<RoleType>(getObject().asObjectable()),
relationsList, getDetailsPage()){
private static final long serialVersionUID = 1L;

@Override
protected List<InlineMenuItem> createNewMemberInlineMenuItems() {
List<InlineMenuItem> newMemberMenuItems = new ArrayList<>();
newMemberMenuItems.add(new InlineMenuItem(createStringResource("roleMemberPanel.menu.createApprover"),
false, new HeaderMenuAction(this) {
private static final long serialVersionUID = 1L;

@Override
public void onClick(AjaxRequestTarget target) {
createFocusMemberPerformed(RelationTypes.APPROVER.getRelation(), target);
}
}));

newMemberMenuItems.add(new InlineMenuItem(createStringResource("roleMemberPanel.menu.assignApprovers"), false,
new HeaderMenuAction(this) {
private static final long serialVersionUID = 1L;

@Override
public void onClick(AjaxRequestTarget target) {
addMembers(RelationTypes.APPROVER.getRelation(), target);
}
}));

newMemberMenuItems.add(new InlineMenuItem(createStringResource("roleMemberPanel.menu.createOwner"),
false, new HeaderMenuAction(this) {
private static final long serialVersionUID = 1L;

@Override
public void onClick(AjaxRequestTarget target) {
createFocusMemberPerformed(RelationTypes.OWNER.getRelation(), target);
}
}));

newMemberMenuItems.add(new InlineMenuItem(createStringResource("roleMemberPanel.menu.assignOwners"), false,
new HeaderMenuAction(this) {
private static final long serialVersionUID = 1L;

@Override
public void onClick(AjaxRequestTarget target) {
addMembers(RelationTypes.OWNER.getRelation(), target);
}
}));
newMemberMenuItems.add(new InlineMenuItem(createStringResource("TreeTablePanel.menu.createManager"),
false, new HeaderMenuAction(this) {
private static final long serialVersionUID = 1L;

@Override
public void onClick(AjaxRequestTarget target) {
createFocusMemberPerformed(RelationTypes.MANAGER.getRelation(), target);
}
}));

newMemberMenuItems.add(new InlineMenuItem(createStringResource("TreeTablePanel.menu.addManagers"), false,
new HeaderMenuAction(this) {
private static final long serialVersionUID = 1L;

@Override
public void onClick(AjaxRequestTarget target) {
addMembers(RelationTypes.MANAGER.getRelation(), target);
}
}));
return newMemberMenuItems;

}
};
return new RoleGovernanceRelationsPanel(panelId, new Model<RoleType>(getObject().asObjectable()),
relationsList, getDetailsPage());
}


Expand Down
@@ -0,0 +1,101 @@
package com.evolveum.midpoint.web.page.admin.roles;

import com.evolveum.midpoint.gui.api.page.PageBase;
import com.evolveum.midpoint.web.component.assignment.RelationTypes;
import com.evolveum.midpoint.web.component.menu.cog.InlineMenuItem;
import com.evolveum.midpoint.web.page.admin.configuration.component.HeaderMenuAction;
import com.evolveum.midpoint.web.session.UserProfileStorage;
import com.evolveum.midpoint.xml.ns._public.common.common_3.AbstractRoleType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.RoleType;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.model.IModel;

import java.util.ArrayList;
import java.util.List;

/**
* Created by honchar.
*/
public class RoleGovernanceRelationsPanel extends RoleMemberPanel<RoleType> {

public RoleGovernanceRelationsPanel(String id, IModel<RoleType> model, List<RelationTypes> relations, PageBase pageBase) {
super(id, model, relations, pageBase);
}

@Override
protected List<InlineMenuItem> createNewMemberInlineMenuItems() {
List<InlineMenuItem> newMemberMenuItems = new ArrayList<>();
newMemberMenuItems.add(new InlineMenuItem(createStringResource("roleMemberPanel.menu.createApprover"),
false, new HeaderMenuAction(this) {
private static final long serialVersionUID = 1L;

@Override
public void onClick(AjaxRequestTarget target) {
createFocusMemberPerformed(RelationTypes.APPROVER.getRelation(), target);
}
}));

newMemberMenuItems.add(new InlineMenuItem(createStringResource("roleMemberPanel.menu.assignApprovers"), false,
new HeaderMenuAction(this) {
private static final long serialVersionUID = 1L;

@Override
public void onClick(AjaxRequestTarget target) {
addMembers(RelationTypes.APPROVER.getRelation(), target);
}
}));

newMemberMenuItems.add(new InlineMenuItem(createStringResource("roleMemberPanel.menu.createOwner"),
false, new HeaderMenuAction(this) {
private static final long serialVersionUID = 1L;

@Override
public void onClick(AjaxRequestTarget target) {
createFocusMemberPerformed(RelationTypes.OWNER.getRelation(), target);
}
}));

newMemberMenuItems.add(new InlineMenuItem(createStringResource("roleMemberPanel.menu.assignOwners"), false,
new HeaderMenuAction(this) {
private static final long serialVersionUID = 1L;

@Override
public void onClick(AjaxRequestTarget target) {
addMembers(RelationTypes.OWNER.getRelation(), target);
}
}));
newMemberMenuItems.add(new InlineMenuItem(createStringResource("TreeTablePanel.menu.createManager"),
false, new HeaderMenuAction(this) {
private static final long serialVersionUID = 1L;

@Override
public void onClick(AjaxRequestTarget target) {
createFocusMemberPerformed(RelationTypes.MANAGER.getRelation(), target);
}
}));

newMemberMenuItems.add(new InlineMenuItem(createStringResource("TreeTablePanel.menu.addManagers"), false,
new HeaderMenuAction(this) {
private static final long serialVersionUID = 1L;

@Override
public void onClick(AjaxRequestTarget target) {
addMembers(RelationTypes.MANAGER.getRelation(), target);
}
}));
return newMemberMenuItems;
}

@Override
protected List<InlineMenuItem> createRemoveMemberInlineMenuItems() {
return super.createRemoveMemberInlineMenuItems();
}

@Override
protected List<InlineMenuItem> createMemberRecomputeInlineMenuItems() {
return new ArrayList<>();
}



}
Expand Up @@ -37,10 +37,6 @@
<label><wicket:message key="roleMemberPanel.indirectMembers" /></label>
<span wicket:id="indirectMembers" />
</div>
<div class="form-group" wicket:id="allRelationsContainer">
<label><wicket:message key="roleMemberPanel.allRelations" /></label>
<span wicket:id="allRelations" />
</div>
</div>

<form class="clearfix form-horizontal" wicket:id="form">
Expand Down
Expand Up @@ -79,8 +79,6 @@ public class RoleMemberPanel<T extends AbstractRoleType> extends AbstractRoleMem
private static final String ID_TENANT = "tenant";
private static final String ID_PROJECT = "project";
private static final String ID_INDIRECT_MEMBERS = "indirectMembers";
private static final String ID_ALL_RELATIONS_CONTAINER = "allRelationsContainer";
private static final String ID_ALL_RELATIONS = "allRelations";

public RoleMemberPanel(String id, IModel<T> model, PageBase pageBase) {
super(id, TableId.ROLE_MEMEBER_PANEL, model, pageBase);
Expand Down Expand Up @@ -178,37 +176,35 @@ private AssignmentType createAssignmentToModify() throws SchemaException {
return assignmentToModify;
}

// actions are executed on members only (not on owners, approvers, etc)
private ObjectQuery getActionQuery(QueryScope scope) {
switch (scope) {
case ALL:
return createAllMemberQuery(false);
return createAllMemberQuery();
case ALL_DIRECT:
return createDirectMemberQuery(false);
return createDirectMemberQuery( );
case SELECTED:
return createRecomputeQuery();
}

return null;
}

private ObjectQuery createAllMemberQuery(boolean allRelations) {
return getRelationsFilter(allRelations).build();
private ObjectQuery createAllMemberQuery() {
return QueryBuilder.queryFor(FocusType.class, getPrismContext())
.item(FocusType.F_ASSIGNMENT, AssignmentType.F_TARGET_REF)
.ref(createReferenceValuesList()).build();
}

private List<PrismReferenceValue> createReferenceValuesList(boolean allRelations) {
private List<PrismReferenceValue> createReferenceValuesList() {
List<PrismReferenceValue> referenceValuesList = new ArrayList<>();
if (relations.size() > 0){
if (relations != null && relations.size() > 0){
for (RelationTypes relation : relations) {
PrismReferenceValue rv = new PrismReferenceValue(getModelObject().getOid());
rv.setRelation(relation.getRelation());
referenceValuesList.add(rv);
}
} else {
PrismReferenceValue rv = new PrismReferenceValue(getModelObject().getOid());
if (allRelations) {
rv.setRelation(PrismConstants.Q_ANY);
}
referenceValuesList.add(rv);
}

Expand Down Expand Up @@ -277,17 +273,6 @@ public void onUpdate(AjaxRequestTarget target) {
add(includeIndirectMembers);
includeIndirectMembers.add(new VisibleBehaviour(this::isRole)); // TODO shouldn't we hide also the label?

WebMarkupContainer showAllRelationsContainer = new WebMarkupContainer(ID_ALL_RELATIONS_CONTAINER);
add(showAllRelationsContainer);
CheckBoxPanel showAllRelations = new CheckBoxPanel(ID_ALL_RELATIONS, new Model<>(false)) {
private static final long serialVersionUID = 1L;

public void onUpdate(AjaxRequestTarget target) {
refreshTable(target);
}
};
showAllRelationsContainer.add(showAllRelations);
showAllRelationsContainer.add(new VisibleBehaviour(() -> SystemConfigurationHolder.isExperimentalCodeEnabled() && isRole()));
}

@Override
Expand Down Expand Up @@ -343,17 +328,18 @@ protected void recomputeMembersPerformed(QueryScope scope, AjaxRequestTarget tar
@Override
protected ObjectQuery createContentQuery() {
boolean indirect = ((CheckBoxPanel) get(createComponentPath(ID_INDIRECT_MEMBERS))).getValue();
boolean allRelations = ((CheckBoxPanel) get(createComponentPath(ID_ALL_RELATIONS_CONTAINER, ID_ALL_RELATIONS))).getValue();

return indirect ? createAllMemberQuery(allRelations) : createDirectMemberQuery(allRelations);
return indirect ? createAllMemberQuery() : createDirectMemberQuery();

}

private ObjectQuery createDirectMemberQuery(boolean allRelations) {
private ObjectQuery createDirectMemberQuery() {
ObjectQuery query;

String oid = getModelObject().getOid();
S_AtomicFilterExit q = getRelationsFilter(allRelations);
S_AtomicFilterExit q = QueryBuilder.queryFor(FocusType.class, getPrismContext())
.item(FocusType.F_ASSIGNMENT, AssignmentType.F_TARGET_REF)
.ref(createReferenceValuesList());
DropDownChoice<OrgType> tenantChoice = (DropDownChoice) get(createComponentPath(ID_TENANT));
OrgType tenant = tenantChoice.getModelObject();
if (tenant != null) {
Expand All @@ -380,25 +366,18 @@ private ObjectQuery createDirectMemberQuery(boolean allRelations) {
}
}

private S_AtomicFilterExit getRelationsFilter(boolean allRelations){
List<PrismReferenceValue> referenceValues = createReferenceValuesList(allRelations);
S_AtomicFilterExit q = null;
S_FilterEntryOrEmpty filter = QueryBuilder.queryFor(FocusType.class, getPrismContext());
for (PrismReferenceValue value : referenceValues) {
if (q == null) {
q = filter.item(FocusType.F_ASSIGNMENT, AssignmentType.F_TARGET_REF)
.ref(value);
} else {
q = q.or().item(FocusType.F_ASSIGNMENT, AssignmentType.F_TARGET_REF)
.ref(value);
}
}
return q;
}

@Override
protected List<InlineMenuItem> createNewMemberInlineMenuItems() {
return super.createNewMemberInlineMenuItems();
}

@Override
protected List<InlineMenuItem> createRemoveMemberInlineMenuItems() {
return super.createRemoveMemberInlineMenuItems();
}

@Override
protected List<InlineMenuItem> createMemberRecomputeInlineMenuItems() {
return super.createMemberRecomputeInlineMenuItems();
}
}

0 comments on commit ffc083b

Please sign in to comment.