Skip to content

Commit

Permalink
Merge branch 'master' of https://github.com/Evolveum/midpoint
Browse files Browse the repository at this point in the history
  • Loading branch information
mederly committed Apr 13, 2015
2 parents 5947587 + 6974804 commit 62957cb
Show file tree
Hide file tree
Showing 4 changed files with 90 additions and 29 deletions.
Expand Up @@ -16,11 +16,11 @@
package com.evolveum.midpoint.web.page.admin.roles;

import com.evolveum.midpoint.model.api.ModelExecuteOptions;
import com.evolveum.midpoint.prism.PrismContainerDefinition;
import com.evolveum.midpoint.prism.PrismObject;
import com.evolveum.midpoint.prism.*;
import com.evolveum.midpoint.prism.PrismObjectDefinition;
import com.evolveum.midpoint.prism.delta.ObjectDelta;
import com.evolveum.midpoint.prism.path.ItemPath;
import com.evolveum.midpoint.prism.query.ObjectQuery;
import com.evolveum.midpoint.prism.schema.SchemaRegistry;
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.security.api.AuthorizationConstants;
Expand All @@ -30,15 +30,18 @@
import com.evolveum.midpoint.web.application.AuthorizationAction;
import com.evolveum.midpoint.web.application.PageDescriptor;
import com.evolveum.midpoint.web.component.AjaxSubmitButton;
import com.evolveum.midpoint.web.component.assignment.*;
import com.evolveum.midpoint.web.component.assignment.AssignmentTableDto;
import com.evolveum.midpoint.web.component.assignment.AssignmentTablePanel;
import com.evolveum.midpoint.web.component.form.*;
import com.evolveum.midpoint.web.component.form.multivalue.GenericMultiValueLabelEditPanel;
import com.evolveum.midpoint.web.component.form.multivalue.MultiValueChoosePanel;
import com.evolveum.midpoint.web.component.prism.*;
import com.evolveum.midpoint.web.component.progress.ProgressReporter;
import com.evolveum.midpoint.web.component.progress.ProgressReportingAwarePage;
import com.evolveum.midpoint.web.component.util.*;
import com.evolveum.midpoint.web.page.PageBase;
import com.evolveum.midpoint.web.component.util.LoadableModel;
import com.evolveum.midpoint.web.component.util.ObjectWrapperUtil;
import com.evolveum.midpoint.web.component.util.PrismPropertyModel;
import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour;
import com.evolveum.midpoint.web.page.admin.configuration.component.ChooseTypeDialog;
import com.evolveum.midpoint.web.page.admin.roles.component.MultiplicityPolicyDialog;
import com.evolveum.midpoint.web.page.admin.roles.component.UserOrgReferenceChoosePanel;
Expand All @@ -48,7 +51,6 @@
import com.evolveum.midpoint.web.util.WebMiscUtil;
import com.evolveum.midpoint.web.util.WebModelUtils;
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;

import org.apache.commons.lang.StringUtils;
import org.apache.wicket.AttributeModifier;
import org.apache.wicket.RestartResponseException;
Expand Down
Expand Up @@ -1023,7 +1023,7 @@ protected void addPerformed(AjaxRequestTarget target, List<ObjectType> selected)
});
add(window);

ModalWindow assignmentPreviewPopup = new AssignmentPreviewDialog(MODAL_ID_ASSIGNMENTS_PREVIEW, null);
ModalWindow assignmentPreviewPopup = new AssignmentPreviewDialog(MODAL_ID_ASSIGNMENTS_PREVIEW, null, null);
add(assignmentPreviewPopup);
}

Expand Down Expand Up @@ -1412,24 +1412,28 @@ private void recomputeAssignmentsPerformed(AjaxRequestTarget target){
ModelContext<UserType> modelContext = getModelInteractionService().previewChanges(WebMiscUtil.createDeltaCollection(delta), null, task, result);

DeltaSetTriple<? extends EvaluatedAssignment> evaluatedAssignmentTriple = modelContext.getEvaluatedAssignmentTriple();
Collection<? extends EvaluatedAssignment> evaluatedAssignments = evaluatedAssignmentTriple.getZeroSet();
Collection<? extends EvaluatedAssignment> evaluatedAssignments = evaluatedAssignmentTriple.getNonNegativeValues();

if(evaluatedAssignments.isEmpty()){
info(getString("pageUser.message.noAssignmentsAvailable"));
target.add(getFeedbackPanel());
return;
}

EvaluatedAssignment<UserType> evaluatedAssignment = evaluatedAssignments.iterator().next();
DeltaSetTriple<? extends EvaluatedAbstractRole> rolesTriple = evaluatedAssignment.getRoles();
Collection<? extends EvaluatedAbstractRole> evaluatedRoles = rolesTriple.getZeroSet();
List<String> directAssignmentsOids = new ArrayList<>();
for(EvaluatedAssignment<UserType> assignment: evaluatedAssignments){
directAssignmentsOids.add(assignment.getTarget().getOid());

for(EvaluatedAbstractRole role: evaluatedRoles){
assignments.add(role.getRole().asObjectable());
DeltaSetTriple<? extends EvaluatedAbstractRole> rolesTriple = assignment.getRoles();
Collection<? extends EvaluatedAbstractRole> evaluatedRoles = rolesTriple.getNonNegativeValues();

for(EvaluatedAbstractRole role: evaluatedRoles){
assignments.add(role.getRole().asObjectable());
}
}

AssignmentPreviewDialog dialog = (AssignmentPreviewDialog) get(MODAL_ID_ASSIGNMENTS_PREVIEW);
dialog.updateData(target, assignments);
dialog.updateData(target, assignments, directAssignmentsOids);
dialog.show(target);

} catch (Exception e) {
Expand Down
Expand Up @@ -18,19 +18,34 @@

import com.evolveum.midpoint.web.component.AjaxButton;
import com.evolveum.midpoint.web.component.data.TablePanel;
import com.evolveum.midpoint.web.component.data.column.IconColumn;
import com.evolveum.midpoint.web.component.data.column.LinkColumn;
import com.evolveum.midpoint.web.component.util.ListDataProvider;
import com.evolveum.midpoint.web.component.util.LoadableModel;
import com.evolveum.midpoint.web.page.PageBase;
import com.evolveum.midpoint.web.page.admin.resources.PageResourceWizard;
import com.evolveum.midpoint.web.page.admin.roles.PageRole;
import com.evolveum.midpoint.web.page.admin.users.PageOrgUnit;
import com.evolveum.midpoint.web.util.ObjectTypeGuiDescriptor;
import com.evolveum.midpoint.web.util.OnePageParameterEncoder;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.OrgType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ResourceType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.RoleType;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow;
import org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulator;
import org.apache.wicket.extensions.markup.html.repeater.data.table.AbstractColumn;
import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
import org.apache.wicket.extensions.markup.html.repeater.data.table.PropertyColumn;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.repeater.Item;
import org.apache.wicket.model.AbstractReadOnlyModel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.model.StringResourceModel;
import org.apache.wicket.request.mapper.parameter.PageParameters;

import java.util.ArrayList;
import java.util.List;
Expand All @@ -44,11 +59,13 @@ public class AssignmentPreviewDialog extends ModalWindow{
private static final String ID_BUTTON_CANCEL = "cancelButton";

private boolean initialized;
private List<String> directAssignments;
private IModel<List<? extends ObjectType>> data;

public AssignmentPreviewDialog(String id, final List<? extends ObjectType> data){
public AssignmentPreviewDialog(String id, final List<? extends ObjectType> data, List<String> directAssignments){
super(id);

this.directAssignments = directAssignments;
this.data = new LoadableModel<List<? extends ObjectType>>(false) {

@Override
Expand All @@ -61,15 +78,16 @@ protected List<? extends ObjectType> load() {
showUnloadConfirmation(false);
setCssClassName(ModalWindow.CSS_CLASS_GRAY);
setCookieName(AssignmentPreviewDialog.class.getSimpleName() + ((int) (Math.random() * 100)));
setInitialWidth(500);
setInitialWidth(650);
setInitialHeight(500);
setWidthUnit("px");

WebMarkupContainer content = new WebMarkupContainer(getContentId());
setContent(content);
}

public void updateData(AjaxRequestTarget target, List<? extends ObjectType> newData){
public void updateData(AjaxRequestTarget target, List<? extends ObjectType> newData, List<String> directAssignments){
this.directAssignments = directAssignments;
data.setObject(newData);
target.add(get(getContentId() + ":" + ID_TABLE));
}
Expand All @@ -95,7 +113,7 @@ protected void onBeforeRender(){
}

public void initLayout(WebMarkupContainer content){
List<IColumn<RoleType, String>> columns = initColumns();
List<IColumn<ObjectType, String>> columns = initColumns();
ListDataProvider provider = new ListDataProvider(getPageBase(), data);

TablePanel table = new TablePanel<>(ID_TABLE, provider, columns);
Expand All @@ -113,28 +131,63 @@ public void onClick(AjaxRequestTarget ajaxRequestTarget) {
content.add(cancelButton);
}

private List<IColumn<RoleType, String>> initColumns(){
List<IColumn<RoleType, String>> columns = new ArrayList<>();
private List<IColumn<ObjectType, String>> initColumns(){
List<IColumn<ObjectType, String>> columns = new ArrayList<>();

IColumn column = new LinkColumn<RoleType>(createStringResource("AssignmentPreviewDialog.column.name"), "name"){
columns.add(new LinkColumn<ObjectType>(createStringResource("AssignmentPreviewDialog.column.name"), "name"){

@Override
public void onClick(AjaxRequestTarget target, IModel<RoleType> rowModel){
RoleType role = rowModel.getObject();
public void onClick(AjaxRequestTarget target, IModel<ObjectType> rowModel){
ObjectType role = rowModel.getObject();
chooseOperationPerformed(target, role);
}
});

};
columns.add(column);
columns.add(new IconColumn<ObjectType>(createStringResource("")) {

@Override
protected IModel<String> createIconModel(IModel<ObjectType> rowModel) {
ObjectType object = rowModel.getObject();
ObjectTypeGuiDescriptor guiDescriptor = ObjectTypeGuiDescriptor.getDescriptor(object.getClass());

String icon = guiDescriptor != null ? guiDescriptor.getIcon() : ObjectTypeGuiDescriptor.ERROR_ICON;

return new Model<>(icon);
}
});

column = new PropertyColumn<RoleType, String>(createStringResource("AssignmentPreviewDialog.column.description"), "description");
columns.add(column);
columns.add(new AbstractColumn<ObjectType, String>(createStringResource("Type")) {

@Override
public void populateItem(Item<ICellPopulator<ObjectType>> cellItem, String componentId, final IModel<ObjectType> rowModel) {
cellItem.add(new Label(componentId, new AbstractReadOnlyModel<String>() {

@Override
public String getObject() {
return directAssignments.contains(rowModel.getObject().getOid()) ?
createStringResource("AssignmentPreviewDialog.type.direct").getString() :
createStringResource("AssignmentPreviewDialog.type.indirect").getObject();
}
}));
}
});

columns.add(new PropertyColumn<ObjectType, String>(createStringResource("AssignmentPreviewDialog.column.description"), "description"));

return columns;
}

private void chooseOperationPerformed(AjaxRequestTarget target, ObjectType object){
// TODO
PageParameters parameters = new PageParameters();
parameters.add(OnePageParameterEncoder.PARAMETER, object.getOid());

if(object.getClass().equals(RoleType.class)){
setResponsePage(PageRole.class, parameters);
} else if(object.getClass().equals(ResourceType.class)){
setResponsePage(PageResourceWizard.class, parameters);
} else if(object.getClass().equals(OrgType.class)){
setResponsePage(PageOrgUnit.class, parameters);
}
}

private void cancelPerformed(AjaxRequestTarget target) {
Expand Down
Expand Up @@ -17,4 +17,6 @@
AssignmentPreviewDialog.label=View direct & indirect assignments
AssignmentPreviewDialog.button.cancel=Cancel
AssignmentPreviewDialog.column.name=Name
AssignmentPreviewDialog.column.description=Description
AssignmentPreviewDialog.column.description=Description
AssignmentPreviewDialog.type.direct=Direct
AssignmentPreviewDialog.type.indirect=Indirect

0 comments on commit 62957cb

Please sign in to comment.