Skip to content

Commit

Permalink
fix for MID-3943, part 1
Browse files Browse the repository at this point in the history
  • Loading branch information
KaterynaHonchar committed Jun 3, 2017
1 parent 11a57aa commit 51281f3
Show file tree
Hide file tree
Showing 6 changed files with 89 additions and 45 deletions.
Expand Up @@ -476,7 +476,7 @@ protected void updateAjaxAttributes(AjaxRequestAttributes attributes) {

@Override
public void onClick(AjaxRequestTarget ajaxRequestTarget) {
pageBase.navigateToNext(PageAssignmentsList.class);
pageBase.navigateToNext(new PageAssignmentsList(true));
}
};
cartButton.add(new VisibleEnableBehaviour(){
Expand Down
Expand Up @@ -32,6 +32,7 @@
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.model.StringResourceModel;

import javax.xml.namespace.QName;
Expand Down Expand Up @@ -80,7 +81,7 @@ public void onClick(AjaxRequestTarget target) {
targetUserButton.add(new AttributeAppender("title", getTargetUsersButtonTitle()));
add(targetUserButton);

Label label = new Label(ID_TARGET_USER_LABEL, createStringResource("AssignmentCatalogPanel.selectTargetUser"));
Label label = new Label(ID_TARGET_USER_LABEL, getTargetUserButtonLabel());
label.setRenderBodyOnly(true);
targetUserButton.add(label);

Expand All @@ -104,6 +105,38 @@ public boolean isVisible(){
targetUserButton.add(deleteButton);
}

private IModel<String> getTargetUserButtonLabel(){
return new IModel<String>() {
private static final long serialVersionUID = 1L;

@Override
public String getObject() {
if (getRoleCatalogStorage().isSelfRequest()){
return createStringResource("AssignmentCatalogPanel.requestForMe").getString();
} else if (getRoleCatalogStorage().isMultiUserRequest()){
return createStringResource("AssignmentCatalogPanel.selectTargetUser").getString() + " (" +
createStringResource("AssignmentCatalogPanel.requestForMultiple",
getRoleCatalogStorage().getTargetUserList().size()).getString()
+ ")";
} else {
String name = getRoleCatalogStorage().getTargetUserList().get(0).asObjectable().getName().getOrig();
return createStringResource("AssignmentCatalogPanel.requestFor").getString() + " " + name;
}
}

@Override
public void setObject(String s) {

}

@Override
public void detach() {

}
};

}

private void initUserSelectionPopup(StringResourceModel title, boolean multiselect, AjaxRequestTarget target) {

List<QName> supportedTypes = new ArrayList<>();
Expand Down Expand Up @@ -154,8 +187,7 @@ public String load() {
" " + targetUsersList.get(0).getName().getOrig();
}

StringBuilder sb = new StringBuilder( createStringResource("AssignmentCatalogPanel.requestForMultiple", targetUsersList.size()).getString());
sb.append(System.lineSeparator());
StringBuilder sb = new StringBuilder();
if (getRoleCatalogStorage().isMultiUserRequest()) {
List<PrismObject<UserType>> sortedList = getRoleCatalogStorage().getTargetUserList();
Collections.sort(sortedList, new Comparator<PrismObject<UserType>>() {
Expand Down
Expand Up @@ -44,4 +44,10 @@ public SelectableRowItem(String id, int index, IModel<T> model) {
super(id, index, model);
}
}

@Override
protected void onPageChanged() {
super.onPageChanged();
String s = "";
}
}
Expand Up @@ -5,7 +5,9 @@
import com.evolveum.midpoint.web.application.PageDescriptor;
import com.evolveum.midpoint.web.component.AjaxButton;
import com.evolveum.midpoint.web.component.AjaxSubmitButton;
import com.evolveum.midpoint.web.component.assignment.AssignmentEditorDto;
import com.evolveum.midpoint.web.component.form.Form;
import com.evolveum.midpoint.web.page.admin.users.dto.UserDtoStatus;
import com.evolveum.midpoint.web.page.self.component.AssignmentConflictPanel;
import com.evolveum.midpoint.web.page.self.dto.AssignmentConflictDto;
import com.evolveum.midpoint.web.util.OnePageParameterEncoder;
Expand All @@ -16,6 +18,7 @@
import org.apache.wicket.model.Model;

import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

Expand Down Expand Up @@ -69,11 +72,28 @@ public void onSubmit(AjaxRequestTarget target, org.apache.wicket.markup.html.for

@Override
public void onSubmit(AjaxRequestTarget target, org.apache.wicket.markup.html.form.Form<?> form) {
processConflictDecisions();
redirectBack();
}

};
mainForm.add(submit);

}

private void processConflictDecisions(){
List<AssignmentConflictDto> conflictsList = getSessionStorage().getRoleCatalog().getConflictsList();
List<AssignmentEditorDto> assignmentsList = getSessionStorage().getRoleCatalog().getAssignmentShoppingCart();
for (AssignmentConflictDto conflictDto : conflictsList){
if (conflictDto.isUnassignedNew()){
Iterator<AssignmentEditorDto> it = assignmentsList.iterator();
while (it.hasNext()){
AssignmentEditorDto assignment = it.next();
if (conflictDto.getAddedAssignmentTargetObj().getOid().equals(assignment.getTargetRef().getOid())){
it.remove();
}
}
}
}
}
}
Expand Up @@ -15,12 +15,15 @@
import com.evolveum.midpoint.prism.query.ObjectQuery;
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.schema.result.OperationResultStatus;
import com.evolveum.midpoint.security.api.AuthorizationConstants;
import com.evolveum.midpoint.task.api.Task;
import com.evolveum.midpoint.task.api.TaskCategory;
import com.evolveum.midpoint.util.exception.SchemaException;
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.application.AuthorizationAction;
import com.evolveum.midpoint.web.application.PageDescriptor;
import com.evolveum.midpoint.web.component.AjaxButton;
import com.evolveum.midpoint.web.component.AjaxSubmitButton;
import com.evolveum.midpoint.web.component.assignment.AssignmentEditorDto;
Expand All @@ -34,6 +37,7 @@
import com.evolveum.midpoint.web.page.admin.users.dto.UserDtoStatus;
import com.evolveum.midpoint.web.page.self.dto.AssignmentConflictDto;
import com.evolveum.midpoint.web.session.SessionStorage;
import com.evolveum.midpoint.web.util.OnePageParameterEncoder;
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;
import org.apache.commons.lang.StringUtils;
import org.apache.wicket.ajax.AjaxRequestTarget;
Expand All @@ -49,6 +53,13 @@
/**
* Created by honchar.
*/
@PageDescriptor(url = "/self/requestAssignments", encoder = OnePageParameterEncoder.class, action = {
@AuthorizationAction(actionUri = PageSelf.AUTH_SELF_ALL_URI,
label = PageSelf.AUTH_SELF_ALL_LABEL,
description = PageSelf.AUTH_SELF_ALL_DESCRIPTION),
@AuthorizationAction(actionUri = AuthorizationConstants.AUTZ_UI_SELF_REQUESTS_ASSIGNMENTS_URL,
label = "PageAssignmentShoppingKart.auth.requestAssignments.label",
description = "PageAssignmentShoppingKart.auth.requestAssignments.description")})
public class PageAssignmentsList<F extends FocusType> extends PageBase{
private static final String ID_ASSIGNMENT_TABLE_PANEL = "assignmentTablePanel";
private static final String ID_FORM = "mainForm";
Expand All @@ -69,8 +80,14 @@ public class PageAssignmentsList<F extends FocusType> extends PageBase{
IModel<String> descriptionModel;

public PageAssignmentsList(){
this(false);
}

public PageAssignmentsList(boolean loadConflicts){
initModels();
getSessionStorage().getRoleCatalog().setConflictsList(getAssignmentConflicts());
if (loadConflicts){
getSessionStorage().getRoleCatalog().setConflictsList(getAssignmentConflicts());
}
initLayout();
}

Expand Down Expand Up @@ -174,8 +191,7 @@ protected void onSubmit(AjaxRequestTarget target, org.apache.wicket.markup.html.
@Override
public boolean isVisible(){
return !getSessionStorage().getRoleCatalog().isMultiUserRequest()
&& getSessionStorage().getRoleCatalog().getConflictsList() != null
&& getSessionStorage().getRoleCatalog().getConflictsList().size() > 0;
&& !areConflictsResolved();
}
});
mainForm.add(resolveAssignments);
Expand All @@ -187,9 +203,7 @@ private void onSingleUserRequestPerformed(AjaxRequestTarget target) {
ObjectDelta<UserType> delta;
try {
PrismObject<UserType> user = getTargetUser();
delta = user.createModifyDelta();
PrismContainerDefinition def = user.getDefinition().findContainerDefinition(UserType.F_ASSIGNMENT);
handleAssignmentDeltas(delta, addAssignmentsToUser(user.asObjectable()), def);
delta = prepareDelta(user, result);

getModelService().executeChanges(Collections.singletonList(delta), createOptions(), createSimpleTask(OPERATION_REQUEST_ASSIGNMENTS), result);

Expand Down Expand Up @@ -243,7 +257,7 @@ private void onMultiUserRequestPerformed(AjaxRequestTarget target) {
TaskType task = WebComponentUtil.createSingleRecurrenceTask(
createStringResource(OPERATION_REQUEST_ASSIGNMENTS).getString(),
UserType.COMPLEX_TYPE,
getTaskQuery(), prepareDelta(result), createOptions(), TaskCategory.EXECUTE_CHANGES, PageAssignmentsList.this);
getTaskQuery(), prepareDelta(null, result), createOptions(), TaskCategory.EXECUTE_CHANGES, PageAssignmentsList.this);
WebModelServiceUtils.runTask(task, operationalTask, result, PageAssignmentsList.this);
} catch (SchemaException e) {
result.recordFatalError(result.getOperation(), e);
Expand Down Expand Up @@ -354,23 +368,6 @@ private void handleModifyAssignmentDelta(AssignmentEditorDto assDto,
}
}

private List<AssignmentEditorDto> addAssignmentsToUser(UserType user){
List<String> assignmentsToDeselect = getAssignmentsToDeselectList(user);
List<AssignmentEditorDto> assignmentsToRemove = getAssignmentsToRemoveList(user);
List<AssignmentEditorDto> assignmentsList = new ArrayList<>();
assignmentsList.addAll(assignmentsToRemove);

if (assignmentsModel != null && assignmentsModel.getObject() != null) {
for (AssignmentEditorDto assignmentsToAdd : assignmentsModel.getObject()) {
if (!assignmentsToDeselect.contains(assignmentsToAdd.getTargetRef().getOid())) {
assignmentsToAdd.setStatus(UserDtoStatus.ADD);
assignmentsList.add(assignmentsToAdd);
}
}
}
return assignmentsList;
}

private List<AssignmentConflictDto> getAssignmentConflicts(){
ModelContext<UserType> modelContext = null;

Expand All @@ -383,7 +380,7 @@ private List<AssignmentConflictDto> getAssignmentConflicts(){
delta = user.createModifyDelta();

PrismContainerDefinition def = user.getDefinition().findContainerDefinition(UserType.F_ASSIGNMENT);
handleAssignmentDeltas(delta, addAssignmentsToUser(user.asObjectable()), def);
handleAssignmentDeltas(delta, getSessionStorage().getRoleCatalog().getAssignmentShoppingCart(), def);

modelContext = getModelInteractionService()
.previewChanges(WebComponentUtil.createDeltaCollection(delta), null, task, result);
Expand Down Expand Up @@ -436,15 +433,12 @@ private boolean areConflictsResolved(){
return true;
}

private ObjectDelta prepareDelta(OperationResult result) {
private ObjectDelta prepareDelta(PrismObject<UserType> user, OperationResult result) {
ObjectDelta delta = null;
try{
delta = ObjectDelta.createModificationAddContainer(UserType.class, "fakeOid",
delta = ObjectDelta.createModificationAddContainer(UserType.class, user == null ? "fakeOid" : user.getOid(),
FocusType.F_ASSIGNMENT, getPrismContext(), getAddAssignmentContainerValues(assignmentsModel.getObject()));
if (!getSessionStorage().getRoleCatalog().isMultiUserRequest()) {
List<PrismObject<UserType>> usersList = getSessionStorage().getRoleCatalog().getTargetUserList();
PrismObject<UserType> user = getSessionStorage().getRoleCatalog().isSelfRequest() ?
loadUserSelf(PageAssignmentsList.this) : usersList.get(0);
delta.addModificationDeleteContainer(FocusType.F_ASSIGNMENT,
getDeleteAssignmentContainerValues(user.asObjectable()));
}
Expand Down Expand Up @@ -510,17 +504,6 @@ private List<AssignmentEditorDto> getAssignmentsToRemoveList(UserType user){
return assignmentsToDelete;
}

private List<String> getAssignmentsToDeselectList(UserType user){
List<AssignmentConflictDto> conflicts = getSessionStorage().getRoleCatalog().getConflictsList();
List<String> assignmentsToDeselectOids = new ArrayList<>();
for (AssignmentConflictDto dto : conflicts){
if (dto.isUnassignedNew()){
assignmentsToDeselectOids.add(dto.getExistingAssignmentTargetObj().getOid());
}
}
return assignmentsToDeselectOids;
}

private TextArea getDescriptionComponent(){
return (TextArea) get(ID_FORM).get(ID_DESCRIPTION);
}
Expand Down
Expand Up @@ -298,6 +298,9 @@ public class AuthorizationConstants {
public static final QName AUTZ_UI_SELF_ASSIGNMENTS_CONFLICTS_QNAME = new QName(NS_AUTHORIZATION_UI, "selfAssignmentsConflicts");
public static final String AUTZ_UI_SELF_ASSIGNMENTS_CONFLICTS_URL = NS_AUTHORIZATION_UI + "#selfAssignmentsConflicts";

public static final QName AUTZ_UI_SELF_REQUESTS_ASSIGNMENTS_QNAME = new QName(NS_AUTHORIZATION_UI, "selfRequestAssignments");
public static final String AUTZ_UI_SELF_REQUESTS_ASSIGNMENTS_URL = NS_AUTHORIZATION_UI + "#selfRequestAssignments";

public static final QName AUTZ_UI_SELF_CREDENTIALS_QNAME = new QName(NS_AUTHORIZATION_UI, "selfCredentials");
public static final String AUTZ_UI_SELF_CREDENTIALS_URL = NS_AUTHORIZATION_UI + "#selfCredentials";

Expand Down

0 comments on commit 51281f3

Please sign in to comment.