Skip to content

Commit

Permalink
fixed NPE for Show all assignments functionality. Refactored using As…
Browse files Browse the repository at this point in the history
…signmentPreviewDialog with main popup form PageBase
  • Loading branch information
KaterynaHonchar committed Jun 3, 2016
1 parent 940fef7 commit c2dec91
Show file tree
Hide file tree
Showing 4 changed files with 72 additions and 54 deletions.
Expand Up @@ -29,6 +29,8 @@

import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.markup.html.WebMarkupContainer;

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

/**
Expand Down Expand Up @@ -63,9 +65,10 @@ private void initLayout() {

@Override
protected void showAllAssignments(AjaxRequestTarget target) {
AssignmentPreviewDialog dialog = (AssignmentPreviewDialog) getParent().getParent()
.get(createComponentPath(MODAL_ID_ASSIGNMENTS_PREVIEW));
((PageAdminFocus) getPageBase()).recomputeAssignmentsPerformed(dialog, target);
List<AssignmentsPreviewDto> assignmentsPreviewDtos = ((PageAdminFocus) getPageBase()).recomputeAssignmentsPerformed(target);
AssignmentPreviewDialog dialog = new AssignmentPreviewDialog(getPageBase().getMainPopupBodyId(),
assignmentsPreviewDtos, new ArrayList<String>(), getPageBase());
getPageBase().showMainPopup(dialog, target);
}

};
Expand Down
Expand Up @@ -755,7 +755,7 @@ private ReferenceDelta prepareUserOrgsDeltaForModify(PrismReferenceDefinition re
return refDelta;
}

public void recomputeAssignmentsPerformed(AssignmentPreviewDialog dialog, AjaxRequestTarget target) {
public List<AssignmentsPreviewDto> recomputeAssignmentsPerformed(AjaxRequestTarget target) {
LOGGER.debug("Recompute user assignments");
Task task = createSimpleTask(OPERATION_RECOMPUTE_ASSIGNMENTS);
OperationResult result = new OperationResult(OPERATION_RECOMPUTE_ASSIGNMENTS);
Expand Down Expand Up @@ -822,7 +822,7 @@ public void recomputeAssignmentsPerformed(AssignmentPreviewDialog dialog, AjaxRe
} catch (NoFocusNameSchemaException e) {
info(getString("pageAdminFocus.message.noUserName"));
target.add(getFeedbackPanel());
return;
return null;
}

DeltaSetTriple<? extends EvaluatedAssignment> evaluatedAssignmentTriple = modelContext
Expand All @@ -833,10 +833,9 @@ public void recomputeAssignmentsPerformed(AssignmentPreviewDialog dialog, AjaxRe
if (evaluatedAssignments.isEmpty()) {
info(getString("pageAdminFocus.message.noAssignmentsAvailable"));
target.add(getFeedbackPanel());
return;
return null;
}

List<String> directAssignmentsOids = new ArrayList<>();
for (EvaluatedAssignment<UserType> evaluatedAssignment : evaluatedAssignments) {
if (!evaluatedAssignment.isValid()) {
continue;
Expand All @@ -862,14 +861,14 @@ public void recomputeAssignmentsPerformed(AssignmentPreviewDialog dialog, AjaxRe
}
}

dialog.updateData(target, new ArrayList<>(assignmentDtoSet), directAssignmentsOids);
dialog.show(target);
return new ArrayList<>(assignmentDtoSet);

} catch (Exception e) {
LoggingUtils.logUnexpectedException(LOGGER, "Could not create assignments preview.", e);
error("Could not create assignments preview. Reason: " + e);
target.add(getFeedbackPanel());
}
return null;
}

private AssignmentsPreviewDto createAssignmentsPreviewDto(EvaluatedAbstractRole evaluatedAbstractRole,
Expand Down
Expand Up @@ -15,7 +15,7 @@
-->

<wicket:panel xmlns:wicket="http://wicket.apache.org">
<div wicket:id="content" style="padding: 10px;">
<div wicket:id="panel" style="padding: 10px;">

<div wicket:id="table" />

Expand Down
Expand Up @@ -17,20 +17,25 @@

import com.evolveum.midpoint.gui.api.model.LoadableModel;
import com.evolveum.midpoint.gui.api.page.PageBase;
import com.evolveum.midpoint.gui.api.util.WebComponentUtil;
import com.evolveum.midpoint.security.api.AuthorizationConstants;
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.dialog.Popupable;
import com.evolveum.midpoint.web.component.util.ListDataProvider;
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.server.dto.TaskDto;
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.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.Component;
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;
Expand All @@ -39,6 +44,7 @@
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.html.panel.Panel;
import org.apache.wicket.markup.repeater.Item;
import org.apache.wicket.model.AbstractReadOnlyModel;
import org.apache.wicket.model.IModel;
Expand All @@ -52,69 +58,43 @@
/**
* @author shood
* */
public class AssignmentPreviewDialog extends ModalWindow{
public class AssignmentPreviewDialog extends Panel implements Popupable {

private static final String ID_CONTENT = "panel";
private static final String ID_TABLE = "table";
private static final String ID_BUTTON_CANCEL = "cancelButton";

private boolean initialized;
private List<String> directAssignments;
private IModel<List<AssignmentsPreviewDto>> data;
private PageBase pageBase;

public AssignmentPreviewDialog(String id, final List<AssignmentsPreviewDto> data, List<String> directAssignments){
public AssignmentPreviewDialog(String id, final List<AssignmentsPreviewDto> data, List<String> directAssignments,
PageBase pageBase){
super(id);

this.directAssignments = directAssignments;
this.pageBase = pageBase;
this.data = new LoadableModel<List<AssignmentsPreviewDto>>(false) {

@Override
protected List<AssignmentsPreviewDto> load() {
return data == null ? new ArrayList<AssignmentsPreviewDto>() : data;
}
};

setTitle(createStringResource("AssignmentPreviewDialog.label"));
showUnloadConfirmation(false);
setCssClassName(ModalWindow.CSS_CLASS_GRAY);
setCookieName(AssignmentPreviewDialog.class.getSimpleName() + ((int) (Math.random() * 100)));
setInitialWidth(1100);
setInitialHeight(500);
setWidthUnit("px");

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

public void updateData(AjaxRequestTarget target, List<AssignmentsPreviewDto> newData, List<String> directAssignments){
this.directAssignments = directAssignments;
data.setObject(newData);
target.add(get(getContentId() + ":" + ID_TABLE));
initLayout();
}

public StringResourceModel createStringResource(String resourceKey, Object... objects) {
return PageBase.createStringResourceStatic(this, resourceKey, objects);
// return new StringResourceModel(resourceKey, this, null, resourceKey, objects);
}

private PageBase getPageBase() {
return (PageBase) getPage();
}

@Override
protected void onBeforeRender(){
super.onBeforeRender();

if(initialized){
return;
}

initLayout((WebMarkupContainer) get(getContentId()));
initialized = true;
}

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

WebMarkupContainer content = new WebMarkupContainer(ID_CONTENT);
content.setOutputMarkupId(true);
add(content);

TablePanel table = new TablePanel<>(ID_TABLE, provider, columns);
table.setOutputMarkupId(true);
Expand All @@ -125,7 +105,6 @@ public void initLayout(WebMarkupContainer content){

@Override
public void onClick(AjaxRequestTarget ajaxRequestTarget) {
cancelPerformed(ajaxRequestTarget);
}
};
content.add(cancelButton);
Expand All @@ -139,7 +118,27 @@ private List<IColumn<AssignmentsPreviewDto, String>> initColumns() {
@Override
public void onClick(AjaxRequestTarget target, IModel<AssignmentsPreviewDto> rowModel){
AssignmentsPreviewDto dto = rowModel.getObject();
chooseOperationPerformed(target, dto.getTargetOid(), dto.getTargetClass());
chooseOperationPerformed(dto.getTargetOid(), dto.getTargetClass());
}

@Override
public boolean isEnabled(IModel<AssignmentsPreviewDto> rowModel) {
Class targetClass = rowModel.getObject().getTargetClass();
String authorizationAction = "";
if (targetClass.getSimpleName().equals("OrgType")){
authorizationAction = AuthorizationConstants.AUTZ_UI_ORG_UNIT_URL;
} else if (targetClass.getSimpleName().equals("RoleType")){
authorizationAction = AuthorizationConstants.AUTZ_UI_ROLE_URL;
} else if (targetClass.getSimpleName().equals("ServiceType")){
authorizationAction = AuthorizationConstants.AUTZ_UI_SERVICE_URL;
} else if (targetClass.getSimpleName().equals("ResourceType")){
authorizationAction = AuthorizationConstants.AUTZ_UI_RESOURCE_URL;
}
if (WebComponentUtil.isAuthorized(authorizationAction)) {
return true;
}

return false;
}
});

Expand Down Expand Up @@ -187,7 +186,7 @@ public String getObject() {
return columns;
}

private void chooseOperationPerformed(AjaxRequestTarget target, String oid, Class clazz){
private void chooseOperationPerformed(String oid, Class clazz){
PageParameters parameters = new PageParameters();
parameters.add(OnePageParameterEncoder.PARAMETER, oid);

Expand All @@ -200,7 +199,24 @@ private void chooseOperationPerformed(AjaxRequestTarget target, String oid, Clas
}
}

private void cancelPerformed(AjaxRequestTarget target) {
close(target);
@Override
public int getWidth() {
return 1100;
}

@Override
public int getHeight() {
return 500;
}

@Override
public StringResourceModel getTitle() {
return new StringResourceModel("AssignmentPreviewDialog.label");
}

@Override
public Component getComponent() {
return this;
}

}

0 comments on commit c2dec91

Please sign in to comment.