Skip to content

Commit

Permalink
Improve candidate roles functionalities in role-mining
Browse files Browse the repository at this point in the history
  • Loading branch information
tchrapovic committed Dec 1, 2023
1 parent e488755 commit 7532ba9
Show file tree
Hide file tree
Showing 20 changed files with 1,670 additions and 1,030 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,8 @@ ID_MODIFICATION_TARGET_PANEL, provider, initColumns()) {
@Override
protected WebMarkupContainer createButtonToolbar(String id) {
//TODO add possibility to assign other candidate.
AjaxIconButton ajaxButton = new AjaxIconButton(id, Model.of(" fe fe-assignment"), createStringResource("idk")) {
AjaxIconButton ajaxButton = new AjaxIconButton(id, Model.of(" fe fe-assignment"),
createStringResource("RoleAnalysis.modificationTargetPanel.assign")) {
@Override
public void onClick(AjaxRequestTarget ajaxRequestTarget) {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,21 +10,6 @@
import java.lang.reflect.InvocationTargetException;
import java.util.*;

import com.evolveum.midpoint.gui.api.page.PageBase;
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.gui.impl.util.DetailsPageUtil;
import com.evolveum.midpoint.model.api.mining.RoleAnalysisService;
import com.evolveum.midpoint.schema.ObjectDeltaOperation;
import com.evolveum.midpoint.schema.constants.SchemaConstants;
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.task.api.Task;
import com.evolveum.midpoint.util.exception.*;
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;

import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.IModel;
Expand All @@ -33,19 +18,31 @@
import com.evolveum.midpoint.authentication.api.authorization.AuthorizationAction;
import com.evolveum.midpoint.authentication.api.authorization.PageDescriptor;
import com.evolveum.midpoint.authentication.api.authorization.Url;
import com.evolveum.midpoint.gui.api.page.PageBase;
import com.evolveum.midpoint.gui.api.util.WebComponentUtil;
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.DetailsFragment;
import com.evolveum.midpoint.gui.impl.page.admin.abstractrole.AbstractRoleDetailsModel;
import com.evolveum.midpoint.gui.impl.page.admin.abstractrole.PageAbstractRole;
import com.evolveum.midpoint.gui.impl.page.admin.role.component.wizard.ApplicationRoleWizardPanel;
import com.evolveum.midpoint.gui.impl.page.admin.role.component.wizard.BusinessRoleWizardPanel;
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.gui.impl.util.DetailsPageUtil;
import com.evolveum.midpoint.model.api.mining.RoleAnalysisService;
import com.evolveum.midpoint.prism.PrismObject;
import com.evolveum.midpoint.schema.ObjectDeltaOperation;
import com.evolveum.midpoint.schema.constants.SchemaConstants;
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.security.api.AuthorizationConstants;
import com.evolveum.midpoint.task.api.Task;
import com.evolveum.midpoint.util.exception.SchemaException;
import com.evolveum.midpoint.util.logging.Trace;
import com.evolveum.midpoint.util.logging.TraceManager;
import com.evolveum.midpoint.web.page.admin.roles.component.RoleSummaryPanel;
import com.evolveum.midpoint.web.util.OnePageParameterEncoder;
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;

@PageDescriptor(
urls = {
Expand Down Expand Up @@ -181,14 +178,14 @@ protected void postProcessResultForWizard(
OperationResult result,
Collection<ObjectDeltaOperation<? extends ObjectType>> executedDeltas,
AjaxRequestTarget target) {
businessRoleMigrationPerform(result, executedDeltas);
businessRoleMigrationPerform(result, executedDeltas, target);

super.postProcessResult(result, executedDeltas, target);
}

private void businessRoleMigrationPerform(
OperationResult result,
Collection<ObjectDeltaOperation<? extends ObjectType>> executedDeltas) {
Collection<ObjectDeltaOperation<? extends ObjectType>> executedDeltas, AjaxRequestTarget target) {

if (result.isFatalError()) {
return;
Expand All @@ -208,8 +205,8 @@ private void businessRoleMigrationPerform(

PrismObject<RoleType> roleObject = roleAnalysisService
.getRoleTypeObject(roleOid, task, result);
if (roleObject != null) {

if (roleObject != null) {
if (!patternDeltas.isCandidate()) {

List<BusinessRoleDto> businessRoleDtos = patternDeltas.getBusinessRoleDtos();
Expand Down Expand Up @@ -251,6 +248,10 @@ private void businessRoleMigrationPerform(
if (activity != null) {
roleAnalysisService.executeMigrationTask(
patternDeltas.getCluster(), activity, roleObject, taskOid, null, task, result);
if (result.isWarning()) {
warn(result.getMessage());
target.add(((PageBase) getPage()).getFeedbackPanel());
}
}

}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ public class BusinessRoleApplicationDto implements Serializable {
PrismObject<RoleType> businessRole;
List<BusinessRoleDto> businessRoleDtos;
boolean isCandidate = false;
Long patternId;

public BusinessRoleApplicationDto(
@NotNull PrismObject<RoleAnalysisClusterType> cluster,
Expand Down Expand Up @@ -88,7 +89,6 @@ public void setPatternId(Long patternId) {
this.patternId = patternId;
}

Long patternId;
public boolean isCandidate() {
return isCandidate;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -397,14 +397,19 @@ public void populateItem(
session.asPrismObject(),
result, task);

ObjectReferenceType taskRef = roleAnalysisService.extractTaskRef(session.getOperationExecution());
ObjectReferenceType taskRef = null;
RoleAnalysisOperationStatus operationStatus = session.getOperationStatus();
if (operationStatus != null) {
taskRef = operationStatus.getTaskRef();
}

ObjectReferenceType finalTaskRef = taskRef;
AjaxLinkPanel ajaxLinkPanel = new AjaxLinkPanel(componentId, Model.of(stateString)) {
@Override
public void onClick(AjaxRequestTarget target) {
super.onClick(target);
if (taskRef != null) {
DetailsPageUtil.dispatchToObjectDetailsPage(TaskType.class, taskRef.getOid(),
if (finalTaskRef != null && finalTaskRef.getOid() != null) {
DetailsPageUtil.dispatchToObjectDetailsPage(TaskType.class, finalTaskRef.getOid(),
this, true);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,8 @@
import com.evolveum.midpoint.xml.ns._public.common.common_3.RoleAnalysisClusterType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.RoleAnalysisSessionType;

import org.jetbrains.annotations.NotNull;

//TODO correct authorizations
@PageDescriptor(
urls = {
Expand Down Expand Up @@ -120,9 +122,9 @@ public void detectionPerform(AjaxRequestTarget target) {
DetectionOption detectionOption = new DetectionOption(cluster);
RoleAnalysisService roleAnalysisService = pageBase.getRoleAnalysisService();

OperationResultStatusType status = roleAnalysisService.getOperationExecutionStatus(clusterPrismObject, task, result);
@NotNull String status = roleAnalysisService.recomputeAndResolveClusterOpStatus(clusterPrismObject, result, task);

if (status != null && status.equals(OperationResultStatusType.IN_PROGRESS)) {
if (status.equals("processing")) {
warn("Couldn't start detection. Some process is already in progress.");
target.add(getFeedbackPanel());
return;
Expand All @@ -134,13 +136,19 @@ public void detectionPerform(AjaxRequestTarget target) {
roleAnalysisService.executeDetectionTask(cluster.asPrismObject(), null,
null, task, result);

PageParameters params = new PageParameters();
params.add(OnePageParameterEncoder.PARAMETER, clusterOid);
Class<? extends PageBase> detailsPageClass = DetailsPageUtil.getObjectDetailsPage(RoleAnalysisClusterType.class);
((PageBase) getPage()).navigateToNext(detailsPageClass, params);
if (result.isWarning()) {
warn(result.getMessage());
target.add(pageBase.getFeedbackPanel());
} else {
PageParameters params = new PageParameters();
params.add(OnePageParameterEncoder.PARAMETER, clusterOid);
Class<? extends PageBase> detailsPageClass = DetailsPageUtil.getObjectDetailsPage(RoleAnalysisClusterType.class);
pageBase.navigateToNext(detailsPageClass, params);

pageBase.showResult(result);
target.add(getFeedbackPanel());
}

((PageBase) getPage()).showResult(result);
target.add(getFeedbackPanel());
}

public StringResourceModel setDetectionButtonTitle() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -143,10 +143,16 @@ public void clusteringPerform(@NotNull AjaxRequestTarget target) {
RoleAnalysisService roleAnalysisService = getPageBase().getRoleAnalysisService();
roleAnalysisService.executeClusteringTask(session.asPrismObject(), null, null, task, result);

result.recordSuccessIfUnknown();
setResponsePage(PageRoleAnalysis.class);
((PageBase) getPage()).showResult(result);
target.add(getFeedbackPanel());
if (result.isWarning()) {
warn(result.getMessage());
target.add(getPageBase().getFeedbackPanel());
} else {
result.recordSuccessIfUnknown();
setResponsePage(PageRoleAnalysis.class);
((PageBase) getPage()).showResult(result);
target.add(getFeedbackPanel());
}

}

public StringResourceModel setDetectionButtonTitle() {
Expand Down

0 comments on commit 7532ba9

Please sign in to comment.