Skip to content

Commit

Permalink
Fix business role wizard panel
Browse files Browse the repository at this point in the history
  • Loading branch information
tchrapovic committed Aug 31, 2023
1 parent 22d4ecd commit 2273bfc
Show file tree
Hide file tree
Showing 4 changed files with 119 additions and 74 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,22 +6,15 @@
*/
package com.evolveum.midpoint.gui.impl.page.admin.role.component.wizard;

import static com.evolveum.midpoint.gui.impl.page.admin.role.mining.utils.RoleAnalysisObjectUtils.clusterMigrationRecompute;
import static com.evolveum.midpoint.gui.impl.page.admin.role.mining.utils.RoleAnalysisObjectUtils.getRoleTypeObject;
import static com.evolveum.midpoint.repo.api.RepositoryService.LOGGER;

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

import com.evolveum.midpoint.gui.api.page.PageBase;
import com.evolveum.midpoint.gui.impl.page.admin.ObjectChangesExecutorImpl;
import com.evolveum.midpoint.gui.impl.page.admin.role.mining.model.BusinessRoleDto;
import com.evolveum.midpoint.model.api.ActivitySubmissionOptions;
import com.evolveum.midpoint.model.api.ModelService;
import com.evolveum.midpoint.prism.PrismObject;
import com.evolveum.midpoint.prism.delta.ObjectDelta;
import com.evolveum.midpoint.schema.ObjectDeltaOperation;
import com.evolveum.midpoint.task.api.Task;
import com.evolveum.midpoint.util.exception.CommonException;
import com.evolveum.midpoint.util.exception.SchemaException;
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;
import com.evolveum.midpoint.gui.impl.page.admin.role.mining.page.page.PageRoleAnalysis;

import org.apache.commons.collections4.CollectionUtils;
import org.apache.wicket.ajax.AjaxRequestTarget;
Expand All @@ -32,14 +25,21 @@
import com.evolveum.midpoint.gui.api.component.wizard.WizardStep;
import com.evolveum.midpoint.gui.impl.component.wizard.AbstractWizardPanel;
import com.evolveum.midpoint.gui.impl.component.wizard.WizardPanelHelper;
import com.evolveum.midpoint.gui.impl.page.admin.ObjectChangesExecutorImpl;
import com.evolveum.midpoint.gui.impl.page.admin.abstractrole.AbstractRoleDetailsModel;
import com.evolveum.midpoint.gui.impl.page.admin.role.mining.model.BusinessRoleApplicationDto;
import com.evolveum.midpoint.gui.impl.page.admin.role.mining.model.BusinessRoleDto;
import com.evolveum.midpoint.model.api.ActivitySubmissionOptions;
import com.evolveum.midpoint.model.api.ModelService;
import com.evolveum.midpoint.prism.PrismObject;
import com.evolveum.midpoint.prism.delta.ObjectDelta;
import com.evolveum.midpoint.schema.ObjectDeltaOperation;
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.task.api.Task;
import com.evolveum.midpoint.util.exception.CommonException;
import com.evolveum.midpoint.util.exception.SchemaException;
import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour;

import static com.evolveum.midpoint.gui.impl.page.admin.role.mining.utils.RoleAnalysisObjectUtils.clusterMigrationRecompute;
import static com.evolveum.midpoint.gui.impl.page.admin.role.mining.utils.RoleAnalysisObjectUtils.getRoleTypeObject;
import static com.evolveum.midpoint.repo.api.RepositoryService.LOGGER;
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;

/**
* @author lskublik
Expand All @@ -55,6 +55,8 @@ protected void initLayout() {
add(createWizardFragment(new WizardPanel(getIdOfWizardPanel(), new WizardModel(createBasicSteps()))));
}

private boolean isRoleMigration = false;

private List<WizardStep> createBasicSteps() {
List<WizardStep> steps = new ArrayList<>();

Expand All @@ -69,9 +71,10 @@ protected void onExitPerformed(AjaxRequestTarget target) {
BusinessRoleWizardPanel.this.onExitPerformed(target);
}
});

BusinessRoleApplicationDto patterns = getAssignmentHolderModel().getPatternDeltas();
if (patterns != null && CollectionUtils.isNotEmpty(patterns.getBusinessRoleDtos())) {
isRoleMigration = patterns != null && CollectionUtils.isNotEmpty(patterns.getBusinessRoleDtos());

if (isRoleMigration) {
steps.add(new ExsitingAccessApplicationRoleStepPanel<>(getAssignmentHolderModel()) {

@Override
Expand All @@ -98,69 +101,86 @@ public VisibleEnableBehaviour getBackBehaviour() {
}
});

steps.add(new AccessApplicationRoleStepPanel(getHelper().getDetailsModel()) {
@Override
protected void onSubmitPerformed(AjaxRequestTarget target) {
//TODO
}

steps.add(new AccessApplicationRoleStepPanel(getHelper().getDetailsModel()) {
@Override
protected void onSubmitPerformed(AjaxRequestTarget target) {
//TODO
if (isRoleMigration) {
businessRoleMigrationPerform(target);
} else {
super.onSubmitPerformed(target);
BusinessRoleWizardPanel.this.onFinishBasicWizardPerformed(target);
}
}

private void businessRoleMigrationPerform(AjaxRequestTarget target) {
OperationResult result = new OperationResult("Migration");
Task task = getPageBase().createSimpleTask("executeMigration");

Collection<ObjectDelta<? extends ObjectType>> deltas;
try {
deltas = getHelper().getDetailsModel().collectDeltas(result);
} catch (Throwable ex) {
result.recordFatalError(getString("pageAdminObjectDetails.message.cantCreateObject"), ex);
showResult(result);
target.add(getFeedbackPanel());
return;
}
private void businessRoleMigrationPerform(AjaxRequestTarget target) {
OperationResult result = new OperationResult("Migration");
Task task = getPageBase().createSimpleTask("executeMigration");

BusinessRoleApplicationDto patternDeltas = getHelper().getDetailsModel().getPatternDeltas();
Collection<ObjectDelta<? extends ObjectType>> deltas;
try {
deltas = getHelper().getDetailsModel().collectDeltas(result);
} catch (Throwable ex) {
result.recordFatalError(getString("pageAdminObjectDetails.message.cantCreateObject"), ex);
showResult(result);
target.add(getFeedbackPanel());
return;
}

if (patternDeltas != null && !patternDeltas.getBusinessRoleDtos().isEmpty()) {
ModelService modelService = getPageBase().getModelService();
Collection<ObjectDeltaOperation<? extends ObjectType>> executedDeltas = new ObjectChangesExecutorImpl()
.executeChanges(deltas, false, task, result, target);
BusinessRoleApplicationDto patternDeltas = getHelper().getDetailsModel().getPatternDeltas();

String roleOid = ObjectDeltaOperation.findAddDeltaOidRequired(executedDeltas, RoleType.class);
clusterMigrationRecompute(result, patternDeltas.getCluster().getOid(), roleOid, getPageBase(), task);
if (patternDeltas != null && !patternDeltas.getBusinessRoleDtos().isEmpty()) {
ModelService modelService = getPageBase().getModelService();
Collection<ObjectDeltaOperation<? extends ObjectType>> executedDeltas = new ObjectChangesExecutorImpl()
.executeChanges(deltas, false, task, result, target);

PrismObject<RoleType> roleObject = getRoleTypeObject(modelService, roleOid, result, task);
if (roleObject != null) {
executeMigrationTask(result, task, patternDeltas.getBusinessRoleDtos(), roleObject);
}
String roleOid = ObjectDeltaOperation.findAddDeltaOidRequired(executedDeltas, RoleType.class);
clusterMigrationRecompute(result, patternDeltas.getCluster().getOid(), roleOid, getPageBase(), task);

} else {
result.recordWarning(getString("BusinessRoleMigration.message.no.changes", patternDeltas));
PrismObject<RoleType> roleObject = getRoleTypeObject(modelService, roleOid, result, task);
if (roleObject != null) {
executeMigrationTask(result, task, patternDeltas.getBusinessRoleDtos(), roleObject);
}
showResult(result);
target.add(getFeedbackPanel());

if (!result.isError()) {
exitToPreview(target);
}
} else {
result.recordWarning(getString("BusinessRoleMigration.message.no.changes", patternDeltas));
}
showResult(result);
target.add(getFeedbackPanel());

@Override
protected boolean isSubmitEnable() {
return getHelper().getDetailsModel().getPatternDeltas() != null;
if (!result.isError()) {
exitToPreview(target);
}
}

@Override
protected void onExitPerformed(AjaxRequestTarget target) {
BusinessRoleWizardPanel.this.onExitPerformed(target);
@Override
protected boolean isSubmitEnable() {
if (isRoleMigration) {
return getHelper().getDetailsModel().getPatternDeltas() != null;
} else {
return super.isSubmitEnable();
}
});
}

}
@Override
protected void onExitPerformed(AjaxRequestTarget target) {
BusinessRoleWizardPanel.this.onExitPerformed(target);
}
});

return steps;
}

private void onFinishBasicWizardPerformed(AjaxRequestTarget target) {
OperationResult result = onSavePerformed(target);
if (!result.isError()) {
// WebComponentUtil.createToastForCreateObject(target, RoleType.COMPLEX_TYPE);
exitToPreview(target);
}
}

private void executeMigrationTask(OperationResult result, Task task, List<BusinessRoleDto> patternDeltas, PrismObject<RoleType> roleObject) {
try {
ActivityDefinitionType activity = createActivity(patternDeltas, roleObject.getOid());
Expand Down Expand Up @@ -207,19 +227,22 @@ private ActivityDefinitionType createActivity(List<BusinessRoleDto> patternDelta
.roleMembershipManagement(roleMembershipManagementWorkDefinitionType));
}


private void exitToPreview(AjaxRequestTarget target) {
showChoiceFragment(
target,
new RoleWizardPreviewPanel<>(getIdOfChoicePanel(), getHelper().getDetailsModel(), PreviewTileType.class) {
@Override
protected void onTileClickPerformed(PreviewTileType value, AjaxRequestTarget target) {
switch (value) {
case CONFIGURE_MEMBERS -> showMembersPanel(target);
case CONFIGURE_GOVERNANCE_MEMBERS -> showGovernanceMembersPanel(target);
if (isRoleMigration) {
setResponsePage(PageRoleAnalysis.class);
} else {
showChoiceFragment(
target,
new RoleWizardPreviewPanel<>(getIdOfChoicePanel(), getHelper().getDetailsModel(), PreviewTileType.class) {
@Override
protected void onTileClickPerformed(PreviewTileType value, AjaxRequestTarget target) {
switch (value) {
case CONFIGURE_MEMBERS -> showMembersPanel(target);
case CONFIGURE_GOVERNANCE_MEMBERS -> showGovernanceMembersPanel(target);
}
}
}
});
});
}
}

private void showGovernanceMembersPanel(AjaxRequestTarget target) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@

<wicket:panel>

<div id="myTable"
<div id="myTable" style="max-height:800px"
wicket:id="datatable_extra"></div>

</wicket:panel>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@

<wicket:panel>

<div id="myTable"
<div id="myTable" style="max-height:800px"
wicket:id="datatable_extra"></div>

</wicket:panel>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,10 @@ public static List<DetectedPattern> transformDefaultPattern(RoleAnalysisClusterT
List<RoleAnalysisDetectionPatternType> defaultDetection = clusterType.getDetectedPattern();
List<DetectedPattern> mergedIntersection = new ArrayList<>();

if (isEmptyDetectionPattern(defaultDetection)) {
return new ArrayList<>();
}

for (RoleAnalysisDetectionPatternType roleAnalysisClusterDetectionType : defaultDetection) {

List<ObjectReferenceType> rolesRef = roleAnalysisClusterDetectionType.getRolesOccupancy();
Expand All @@ -55,4 +59,22 @@ public static List<DetectedPattern> transformDefaultPattern(RoleAnalysisClusterT

return mergedIntersection;
}

private static boolean isEmptyDetectionPattern(List<RoleAnalysisDetectionPatternType> defaultDetection) {

if (defaultDetection == null) {
return true;
}

if (defaultDetection.size() == 1) {
RoleAnalysisDetectionPatternType detectionPatternType = defaultDetection.get(0);
if (detectionPatternType == null || detectionPatternType.getClusterMetric() == null) {
return true;
}
return true;
} else {
return false;
}
}

}

0 comments on commit 2273bfc

Please sign in to comment.