Skip to content

Commit

Permalink
Merge branch 'master' of github.com:Evolveum/midpoint
Browse files Browse the repository at this point in the history
  • Loading branch information
semancik committed Nov 24, 2016
2 parents 4815e25 + 909f5ed commit 012f4db
Show file tree
Hide file tree
Showing 11 changed files with 704 additions and 1,588 deletions.
Expand Up @@ -137,14 +137,16 @@ public class AssignmentEditorPanel extends BasePanel<AssignmentEditorDto> {
protected PageBase pageBase;
protected List<AssignmentsPreviewDto> privilegesList;
protected UserType delegationUser;
protected boolean delegatedToMe;

public AssignmentEditorPanel(String id, IModel<AssignmentEditorDto> model,
public AssignmentEditorPanel(String id, IModel<AssignmentEditorDto> model, boolean delegatedToMe,
List<AssignmentsPreviewDto> privilegesList,
UserType delegationUser, PageBase pageBase) {
super(id, model);
this.pageBase = pageBase;
this.delegationUser = delegationUser;
this.privilegesList = privilegesList;
this.delegatedToMe = delegatedToMe;

initLayout();
}
Expand Down
Expand Up @@ -68,17 +68,15 @@ public class DelegationEditorPanel extends AssignmentEditorPanel {
private static final String DOT_CLASS = DelegationEditorPanel.class.getName() + ".";
private static final String OPERATION_GET_TARGET_REF_NAME = DOT_CLASS + "getTargetRefName";

private boolean delegatedToMe;
private List<UserType> usersToUpdate;

public DelegationEditorPanel(String id, IModel<AssignmentEditorDto> delegationTargetObjectModel,
public DelegationEditorPanel(String id, IModel<AssignmentEditorDto> delegationTargetObjectModel, boolean delegatedToMe,
List<AssignmentsPreviewDto> privilegesList, UserType user, PageBase pageBase) {
super(id, delegationTargetObjectModel, privilegesList, user, pageBase);
super(id, delegationTargetObjectModel, delegatedToMe, privilegesList, user, pageBase);
}

@Override
protected void initHeaderRow(){
delegatedToMe = delegationUser == null;
if (delegatedToMe){
privilegesList = getModelObject().getPrivilegeLimitationList();
}
Expand Down Expand Up @@ -185,13 +183,11 @@ protected void initBodyLayout(WebMarkupContainer body) {
public void onClick(AjaxRequestTarget target) {
AssignmentPreviewDialog assignmentPreviewDialog =
new AssignmentPreviewDialog(pageBase.getMainPopupBodyId(),
DelegationEditorPanel.this.getModelObject().getPrivilegeLimitationList(),
privilegesList,
null, pageBase, true){
@Override
protected void addButtonClicked(AjaxRequestTarget target, List<AssignmentsPreviewDto> dtoList){
DelegationEditorPanel.this.getModelObject().setPrivilegeLimitationList(dtoList);
DelegationEditorPanel.this.privilegesList = dtoList;
privilegesNames = getPrivilegesNamesList();
pageBase.hideMainPopup(target);
reloadBodyComponent(target);
}
Expand Down Expand Up @@ -225,8 +221,9 @@ protected void populateItem(ListItem<String> item) {

private List<String> getPrivilegesNamesList(){
List<String> privilegesNamesList = new ArrayList<>();
if (privilegesList != null){
for (AssignmentsPreviewDto assignmentsPreviewDto : privilegesList){
List<AssignmentsPreviewDto> dtos = getModel().getObject().getPrivilegeLimitationList();
if (dtos != null){
for (AssignmentsPreviewDto assignmentsPreviewDto : dtos){
privilegesNamesList.add(assignmentsPreviewDto.getTargetName());
}
}
Expand All @@ -240,10 +237,12 @@ private void reloadBodyComponent(AjaxRequestTarget target){

private String getUserDisplayName(){
String displayName = "";
if (delegationUser.getFullName() != null && StringUtils.isNotEmpty(delegationUser.getFullName().getOrig())){
displayName = delegationUser.getFullName().getOrig() + "(" + delegationUser.getName().getOrig() + ")";
} else {
displayName = delegationUser.getName().getOrig();
if (delegationUser != null) {
if (delegationUser.getFullName() != null && StringUtils.isNotEmpty(delegationUser.getFullName().getOrig())) {
displayName = delegationUser.getFullName().getOrig() + "(" + delegationUser.getName().getOrig() + ")";
} else {
displayName = delegationUser.getName().getOrig();
}
}
return displayName;
}
Expand Down
Expand Up @@ -202,7 +202,7 @@ public WebMarkupContainer createPanel(String panelId) {
@Override
public void populateItem(ListItem<AssignmentEditorDto> item) {
privilegesList = getItemPrivilegesList(item.getModelObject());
DelegationEditorPanel editor = new DelegationEditorPanel(ID_ROW, item.getModel(),
DelegationEditorPanel editor = new DelegationEditorPanel(ID_ROW, item.getModel(), false,
privilegesList, assignmentUserMap.get(item.getModelObject()), PageUser.this);
item.add(editor);
}
Expand Down Expand Up @@ -322,7 +322,7 @@ public WebMarkupContainer createPanel(String panelId) {

@Override
public void populateItem(ListItem<AssignmentEditorDto> item) {
DelegationEditorPanel editor = new DelegationEditorPanel(ID_ROW, item.getModel(),
DelegationEditorPanel editor = new DelegationEditorPanel(ID_ROW, item.getModel(), true,
privilegesList, null, PageUser.this);
item.add(editor);
}
Expand Down
Expand Up @@ -11139,6 +11139,7 @@
<xsd:appinfo>
<a:since>3.5</a:since>
<a:experimental>true</a:experimental>
<a:container>true</a:container>
</xsd:appinfo>
</xsd:annotation>
<xsd:sequence>
Expand Down Expand Up @@ -11186,6 +11187,7 @@
</xsd:documentation>
<xsd:appinfo>
<a:since>3.5</a:since>
<a:container>true</a:container>
</xsd:appinfo>
</xsd:annotation>
<xsd:complexContent>
Expand Down
Expand Up @@ -96,6 +96,12 @@ public static QName unqualify(QName name) {
return new QName(name.getLocalPart());
}

public static QName qualifyIfNeeded(QName name, String defaultNamespace) {
return hasNamespace(name) ?
name
: new QName(defaultNamespace, name.getLocalPart());
}

public static class QNameInfo {
@NotNull public final QName name;
public final boolean explicitEmptyNamespace;
Expand Down
Expand Up @@ -28,13 +28,15 @@
import com.evolveum.midpoint.prism.path.ItemPath;
import com.evolveum.midpoint.prism.query.ObjectQuery;
import com.evolveum.midpoint.prism.query.builder.QueryBuilder;
import com.evolveum.midpoint.prism.query.builder.S_AtomicFilterExit;
import com.evolveum.midpoint.prism.util.CloneUtil;
import com.evolveum.midpoint.schema.ObjectTreeDeltas;
import com.evolveum.midpoint.schema.constants.SchemaConstants;
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.schema.util.ObjectTypeUtil;
import com.evolveum.midpoint.task.api.Task;
import com.evolveum.midpoint.util.DebugUtil;
import com.evolveum.midpoint.util.QNameUtil;
import com.evolveum.midpoint.util.exception.SchemaException;
import com.evolveum.midpoint.util.logging.Trace;
import com.evolveum.midpoint.util.logging.TraceManager;
Expand All @@ -49,6 +51,7 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import javax.xml.namespace.QName;
import java.util.*;
import java.util.stream.Collectors;

Expand Down Expand Up @@ -145,6 +148,7 @@ private void extractAssignmentBasedInstructions(@NotNull ModelContext<?> modelCo
ApprovalPolicyActionType defaultPolicyAction = new ApprovalPolicyActionType(prismContext);
defaultPolicyAction.getApproverRelation().add(SchemaConstants.ORG_APPROVER);
approvalActions.add(defaultPolicyAction);
LOGGER.trace("Added default approval action, as no explicit one was found");
}
boolean useLegacy = configuredUseLegacyApprovers == LegacyApproversSpecificationUsageType.ALWAYS
|| configuredUseLegacyApprovers == LegacyApproversSpecificationUsageType.IF_NO_EXPLICIT_APPROVAL_POLICY_ACTION
Expand Down Expand Up @@ -265,19 +269,24 @@ private ApprovalRequest<AssignmentType> createAssignmentApprovalRequest(Evaluate
}
}
for (ApprovalPolicyActionType action : approvalActions) {
approvalSchema = addApprovalActionIntoApprovalSchema(approvalSchema, action, findApproversByReference(target, result));
approvalSchema = addApprovalActionIntoApprovalSchema(approvalSchema, action, findApproversByReference(target, action, result));
}
assert approvalSchema != null;
return new ApprovalRequestImpl<>(newAssignment.getAssignmentType(), approvalSchema, prismContext);
}

private List<ObjectReferenceType> findApproversByReference(PrismObject<?> target, OperationResult result)
throws SchemaException {
PrismReferenceValue approverReference = new PrismReferenceValue(target.getOid());
approverReference.setRelation(SchemaConstants.ORG_APPROVER);
ObjectQuery query = QueryBuilder.queryFor(FocusType.class, prismContext)
.item(FocusType.F_ROLE_MEMBERSHIP_REF).ref(approverReference)
.build();
private List<ObjectReferenceType> findApproversByReference(PrismObject<?> target, ApprovalPolicyActionType action,
OperationResult result) throws SchemaException {
if (action.getApproverRelation().isEmpty()) {
return Collections.emptyList();
}
S_AtomicFilterExit q = QueryBuilder.queryFor(FocusType.class, prismContext).none();
for (QName approverRelation : action.getApproverRelation()) {
PrismReferenceValue approverReference = new PrismReferenceValue(target.getOid());
approverReference.setRelation(QNameUtil.qualifyIfNeeded(approverRelation, SchemaConstants.NS_ORG));
q = q.or().item(FocusType.F_ROLE_MEMBERSHIP_REF).ref(approverReference);
}
ObjectQuery query = q.build();
LOGGER.trace("Looking for approvers for {} using query:\n{}", target, DebugUtil.debugDumpLazily(query));
List<PrismObject<FocusType>> objects = repositoryService.searchObjects(FocusType.class, query, null, result);
Set<PrismObject<FocusType>> distinctObjects = new HashSet<>(objects);
Expand Down

0 comments on commit 012f4db

Please sign in to comment.