Skip to content

Commit

Permalink
added new tab to role edit page for owner/approver/manager members. n…
Browse files Browse the repository at this point in the history
…ot finished yet
  • Loading branch information
KaterynaHonchar committed Apr 18, 2017
1 parent fd5bb56 commit 4bb5ba8
Show file tree
Hide file tree
Showing 5 changed files with 192 additions and 31 deletions.
Expand Up @@ -51,6 +51,9 @@ public class ComponentConstants {
public static final QName UI_FOCUS_TAB_INDUCEMENTS = new QName(NS_COMPONENTS_PREFIX, "focusTabInducements");
public static final String UI_FOCUS_TAB_INDUCEMENTS_URL = QNameUtil.qNameToUri(UI_FOCUS_TAB_INDUCEMENTS);

public static final QName UI_FOCUS_TAB_GOVERNANCE = new QName(NS_COMPONENTS_PREFIX, "focusTabGovernance");
public static final String UI_FOCUS_TAB_GOVERNANCE_URL = QNameUtil.qNameToUri(UI_FOCUS_TAB_GOVERNANCE);

public static final QName UI_FOCUS_TAB_DELEGATIONS = new QName(NS_COMPONENTS_PREFIX, "focusTabDelegations");
public static final String UI_FOCUS_TAB_DELEGATIONS_URL = QNameUtil.qNameToUri(UI_FOCUS_TAB_DELEGATIONS);

Expand Down
Expand Up @@ -15,10 +15,15 @@
*/
package com.evolveum.midpoint.web.component.objectdetails;

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

import com.evolveum.midpoint.gui.api.ComponentConstants;
import com.evolveum.midpoint.gui.api.util.FocusTabVisibleBehavior;
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 org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.extensions.markup.html.tabs.ITab;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.model.Model;
Expand Down Expand Up @@ -56,6 +61,24 @@ protected List<ITab> createTabs(final PageAdminObjectDetails<RoleType> parentPag
List<ITab> tabs = super.createTabs(parentPage);

FocusTabVisibleBehavior authorization = new FocusTabVisibleBehavior(unwrapModel(),
ComponentConstants.UI_FOCUS_TAB_GOVERNANCE_URL);

tabs.add(new PanelTab(parentPage.createStringResource("pageRole.governance"), authorization) {

private static final long serialVersionUID = 1L;

@Override
public WebMarkupContainer createPanel(String panelId) {
return createGovernancePanel(panelId);
}

@Override
public boolean isVisible() {
return getObjectWrapper().getStatus() != ContainerStatus.ADDING;
}
});

authorization = new FocusTabVisibleBehavior(unwrapModel(),
ComponentConstants.UI_FOCUS_TAB_POLICY_CONSTRAINTS_URL);

tabs.add(new PanelTab(parentPage.createStringResource("AbstractRoleType.policyConstraints"), authorization) {
Expand Down Expand Up @@ -94,6 +117,83 @@ public AbstractRoleMemberPanel<RoleType> createMemberPanel(String panelId) {
return new RoleMemberPanel(panelId, new Model<RoleType>(getObject().asObjectable()), getDetailsPage());
}

public AbstractRoleMemberPanel<RoleType> createGovernancePanel(String panelId) {
List<RelationTypes> relationsList = new ArrayList<>();
relationsList.add(RelationTypes.APPROVER);
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;

}
};
}



}
Expand Up @@ -30,6 +30,7 @@
import com.evolveum.midpoint.prism.query.TypeFilter;
import com.evolveum.midpoint.prism.query.builder.QueryBuilder;
import com.evolveum.midpoint.prism.query.builder.S_AtomicFilterExit;
import com.evolveum.midpoint.prism.query.builder.S_FilterEntryOrEmpty;
import com.evolveum.midpoint.schema.constants.ObjectTypes;
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.schema.util.ObjectTypeUtil;
Expand All @@ -39,9 +40,11 @@
import com.evolveum.midpoint.util.logging.LoggingUtils;
import com.evolveum.midpoint.util.logging.Trace;
import com.evolveum.midpoint.util.logging.TraceManager;
import com.evolveum.midpoint.web.component.assignment.RelationTypes;
import com.evolveum.midpoint.web.component.data.column.CheckBoxPanel;
import com.evolveum.midpoint.web.component.input.ObjectTypeChoiceRenderer;
import com.evolveum.midpoint.web.component.input.QNameChoiceRenderer;
import com.evolveum.midpoint.web.component.menu.cog.InlineMenuItem;
import com.evolveum.midpoint.web.component.util.VisibleBehaviour;
import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour;
import com.evolveum.midpoint.web.page.admin.users.component.AbstractRoleMemberPanel;
Expand Down Expand Up @@ -83,6 +86,10 @@ public RoleMemberPanel(String id, IModel<T> model, PageBase pageBase) {
super(id, TableId.ROLE_MEMEBER_PANEL, model, pageBase);
}

public RoleMemberPanel(String id, IModel<T> model, List<RelationTypes> relations, PageBase pageBase) {
super(id, TableId.ROLE_MEMEBER_PANEL, model, relations, pageBase);
}

protected boolean isRole() {
return true;
}
Expand Down Expand Up @@ -186,17 +193,27 @@ private ObjectQuery getActionQuery(QueryScope scope) {
}

private ObjectQuery createAllMemberQuery(boolean allRelations) {
return QueryBuilder.queryFor(FocusType.class, getPrismContext())
.item(FocusType.F_ROLE_MEMBERSHIP_REF).ref(createReferenceValue(allRelations))
.build();
return getRelationsFilter(allRelations).build();
}

private PrismReferenceValue createReferenceValue(boolean allRelations) {
PrismReferenceValue rv = new PrismReferenceValue(getModelObject().getOid());
if (allRelations) {
rv.setRelation(PrismConstants.Q_ANY);
private List<PrismReferenceValue> createReferenceValuesList(boolean allRelations) {
List<PrismReferenceValue> referenceValuesList = new ArrayList<>();
if (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);
}
return rv;

return referenceValuesList;

}

private ObjectQuery createRecomputeQuery() {
Expand Down Expand Up @@ -336,10 +353,7 @@ private ObjectQuery createDirectMemberQuery(boolean allRelations) {
ObjectQuery query;

String oid = getModelObject().getOid();

S_AtomicFilterExit q = QueryBuilder.queryFor(FocusType.class, getPrismContext())
.item(FocusType.F_ASSIGNMENT, AssignmentType.F_TARGET_REF)
.ref(createReference(allRelations ? PrismConstants.Q_ANY : null).asReferenceValue());
S_AtomicFilterExit q = getRelationsFilter(allRelations);
DropDownChoice<OrgType> tenantChoice = (DropDownChoice) get(createComponentPath(ID_TENANT));
OrgType tenant = tenantChoice.getModelObject();
if (tenant != null) {
Expand All @@ -365,4 +379,26 @@ private ObjectQuery createDirectMemberQuery(boolean allRelations) {
return ObjectQuery.createObjectQuery(TypeFilter.createType(objectType, query.getFilter()));
}
}

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();
}

}
Expand Up @@ -5,6 +5,7 @@

import javax.xml.namespace.QName;

import com.evolveum.midpoint.web.component.assignment.RelationTypes;
import org.apache.wicket.RestartResponseException;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulator;
Expand Down Expand Up @@ -78,12 +79,22 @@ protected enum MemberOperation {
protected static final String ID_MANAGER_TABLE = "managerTable";
protected static final String ID_MEMBER_TABLE = "memberTable";

protected List<RelationTypes> relations = new ArrayList<>();

public AbstractRoleMemberPanel(String id, TableId tableId, IModel<T> model, PageBase parentPage) {
super(id, model);
setParent(parentPage);
initLayout(tableId);
}

public AbstractRoleMemberPanel(String id, TableId tableId, IModel<T> model,
List<RelationTypes> relations, PageBase parentPage) {
super(id, model);
this.relations = relations;
setParent(parentPage);
initLayout(tableId);
}

private void initLayout(TableId tableId) {
Form form = new Form(ID_FORM);
form.setOutputMarkupId(true);
Expand Down Expand Up @@ -175,25 +186,7 @@ protected ObjectQuery createContentQuery() {

protected List<InlineMenuItem> createMembersHeaderInlineMenu() {
List<InlineMenuItem> headerMenuItems = new ArrayList<>();
headerMenuItems.add(new InlineMenuItem(createStringResource("TreeTablePanel.menu.createMember"),
false, new HeaderMenuAction(this) {
private static final long serialVersionUID = 1L;

@Override
public void onClick(AjaxRequestTarget target) {
createFocusMemberPerformed(null, target);
}
}));

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

@Override
public void onClick(AjaxRequestTarget target) {
addMembers(null, target);
}
}));
headerMenuItems.addAll(createNewMemberInlineMenuItems());

headerMenuItems.add(new InlineMenuItem());

Expand Down Expand Up @@ -254,6 +247,30 @@ public void onClick(AjaxRequestTarget target) {
return headerMenuItems;
}

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

@Override
public void onClick(AjaxRequestTarget target) {
createFocusMemberPerformed(null, target);
}
}));

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

@Override
public void onClick(AjaxRequestTarget target) {
addMembers(null, target);
}
}));
return newMemberMenuItems;
}

protected void createFocusMemberPerformed(final QName relation, AjaxRequestTarget target) {

ChooseFocusTypeDialogPanel chooseTypePopupContent = new ChooseFocusTypeDialogPanel(
Expand Down
Expand Up @@ -1835,6 +1835,7 @@ pageResource.version=Version
PageResourceWizard.title=New resource
PageResourceWizard.title.edit=Edit resource '{0}'
pageRole.members=Members
pageRole.governance=Governance
PageRoleEditor.extension=Extension
PageRoleEditor.label.approverRef=Approver
PageRoleEditor.label.approverRef.placeholder=Set approver
Expand Down Expand Up @@ -3075,6 +3076,10 @@ roleMemberPanel.tenant=Tenant:
roleMemberPanel.project=Org/Project:
roleMemberPanel.indirectMembers=Include indirect members
roleMemberPanel.allRelations=Show all relations
roleMemberPanel.menu.createOwner=Create owner
roleMemberPanel.menu.assignOwners=Assign owners
roleMemberPanel.menu.createApprover=Create approver
roleMemberPanel.menu.assignApprovers=Assign approvers
SearchPanel.more=More...
SearchPanel.add=Add
SearchPanel.close=Close
Expand Down

0 comments on commit 4bb5ba8

Please sign in to comment.