Skip to content

Commit

Permalink
Migrate to RoleAnalysisService
Browse files Browse the repository at this point in the history
Since this version, a service (RoleAnalysisServis) has been implemented above role analysis for the use of basic role-mining/role analysis operations. This removed duplicate classes used in model-impl and admin-gui.

There was also the removal of an issue that caused an unwanted change in the sorting state in the operation panel (role-mining user-permission table) when compress/expanded display mode was changed.
  • Loading branch information
tchrapovic committed Nov 7, 2023
1 parent 62ad18c commit 569ad4c
Show file tree
Hide file tree
Showing 43 changed files with 1,838 additions and 2,021 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
import javax.xml.namespace.QName;

import com.evolveum.midpoint.model.api.authentication.GuiProfiledPrincipal;
import com.evolveum.midpoint.model.api.mining.RoleAnalysisService;
import com.evolveum.midpoint.model.api.simulation.SimulationResultManager;

import com.evolveum.midpoint.repo.common.ObjectOperationPolicyHelper;
Expand Down Expand Up @@ -552,6 +553,10 @@ public SimulationResultManager getSimulationResultManager() {
return simulationResultManager;
}

public RoleAnalysisService getRoleAnalysisService() {
return getMidpointApplication().getRoleAnalysisService();
}

public CertGuiHandlerRegistry getCertGuiHandlerRegistry() {
return certGuiHandlerRegistry;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import com.evolveum.midpoint.gui.api.factory.wrapper.PrismObjectWrapperFactory;
import com.evolveum.midpoint.gui.api.factory.wrapper.WrapperContext;
import com.evolveum.midpoint.gui.api.prism.wrapper.PrismValueWrapper;
import com.evolveum.midpoint.model.api.mining.RoleAnalysisService;
import com.evolveum.midpoint.schema.merger.AdminGuiConfigurationMergeManager;
import com.evolveum.midpoint.model.api.ModelInteractionService;
import com.evolveum.midpoint.model.api.ModelService;
Expand Down Expand Up @@ -109,4 +110,7 @@ default ObjectResolver getModelObjectResolver() {
* Experimental, functionality will be probably later hidden behind {@link ModelInteractionService}
*/
SimulationResultManager getSimulationResultManager();

RoleAnalysisService getRoleAnalysisService();

}
Original file line number Diff line number Diff line change
Expand Up @@ -6,34 +6,31 @@
*/
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.util.DetailsPageUtil;
import com.evolveum.midpoint.web.util.OnePageParameterEncoder;
import com.evolveum.midpoint.model.api.mining.RoleAnalysisService;

import org.apache.commons.collections4.CollectionUtils;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.request.mapper.parameter.PageParameters;

import com.evolveum.midpoint.gui.api.component.wizard.TileEnum;
import com.evolveum.midpoint.gui.api.component.wizard.WizardModel;
import com.evolveum.midpoint.gui.api.component.wizard.WizardPanel;
import com.evolveum.midpoint.gui.api.component.wizard.WizardStep;
import com.evolveum.midpoint.gui.api.page.PageBase;
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.gui.impl.util.DetailsPageUtil;
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;
Expand All @@ -42,10 +39,9 @@
import com.evolveum.midpoint.util.exception.CommonException;
import com.evolveum.midpoint.util.exception.SchemaException;
import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour;
import com.evolveum.midpoint.web.util.OnePageParameterEncoder;
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;

import org.apache.wicket.request.mapper.parameter.PageParameters;

/**
* @author lskublik
*/
Expand Down Expand Up @@ -140,14 +136,16 @@ private void businessRoleMigrationPerform(AjaxRequestTarget target) {
BusinessRoleApplicationDto patternDeltas = getHelper().getDetailsModel().getPatternDeltas();

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

String roleOid = ObjectDeltaOperation.findAddDeltaOidRequired(executedDeltas, RoleType.class);
clusterMigrationRecompute(getPageBase(), patternDeltas.getCluster().getOid(), roleOid, task, result);
RoleAnalysisService roleAnalysisService = getPageBase().getRoleAnalysisService();
roleAnalysisService.clusterObjectMigrationRecompute(
getPageBase().getRepositoryService(), patternDeltas.getCluster().getOid(), roleOid, task, result);

PrismObject<RoleType> roleObject = getRoleTypeObject(modelService, roleOid, task, result);
PrismObject<RoleType> roleObject = roleAnalysisService
.getRoleTypeObject( roleOid, task, result);
if (roleObject != null) {
executeMigrationTask(result, task, patternDeltas.getBusinessRoleDtos(), roleObject);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,15 @@

import static com.evolveum.midpoint.common.mining.utils.RoleAnalysisUtils.getSessionOptionType;
import static com.evolveum.midpoint.gui.impl.page.admin.role.mining.page.page.PageRoleAnalysisSession.PARAM_IS_WIZARD;
import static com.evolveum.midpoint.gui.impl.page.admin.role.mining.utils.RoleAnalysisObjectUtils.deleteSingleRoleAnalysisSession;
import static com.evolveum.midpoint.gui.impl.page.admin.role.mining.utils.table.RoleAnalysisTableTools.densityBasedColor;

import java.io.Serial;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List;

import com.evolveum.midpoint.model.api.mining.RoleAnalysisService;

import org.apache.wicket.AttributeModifier;
import org.apache.wicket.Component;
import org.apache.wicket.ajax.AjaxRequestTarget;
Expand Down Expand Up @@ -45,12 +46,14 @@
import com.evolveum.midpoint.gui.impl.prism.panel.PrismPropertyHeaderPanel;
import com.evolveum.midpoint.gui.impl.util.DetailsPageUtil;
import com.evolveum.midpoint.model.api.AssignmentObjectRelation;
import com.evolveum.midpoint.model.api.ModelService;
import com.evolveum.midpoint.model.api.authentication.CompiledObjectCollectionView;
import com.evolveum.midpoint.prism.Containerable;
import com.evolveum.midpoint.prism.PrismContainerDefinition;
import com.evolveum.midpoint.prism.path.ItemPath;
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.web.component.data.column.ColumnMenuAction;
import com.evolveum.midpoint.web.component.form.MidpointForm;
import com.evolveum.midpoint.web.component.menu.cog.ButtonInlineMenuItem;
Expand Down Expand Up @@ -107,29 +110,39 @@ public InlineMenuItemAction initAction() {
@Override
public void onClick(AjaxRequestTarget target) {

PageBase page = (PageBase) getPage();
Task task = page.createSimpleTask("deleteSingleRoleAnalysisCluster");
RoleAnalysisService roleAnalysisService = page.getRoleAnalysisService();

List<SelectableBean<RoleAnalysisSessionType>> selectedObjects = getTable().getSelectedObjects();
OperationResult result = new OperationResult(OP_DELETE_SESSION);
if (selectedObjects.size() == 1 && getRowModel() == null) {
try {
SelectableBean<RoleAnalysisSessionType> selectableSession = selectedObjects.get(0);
deleteSingleRoleAnalysisSession((PageBase) getPage(), selectableSession.getValue().getOid(), result
);
roleAnalysisService
.deleteSession(selectableSession.getValue().getOid(),
task, result
);
} catch (Exception e) {
throw new RuntimeException(e);
}
} else if (getRowModel() != null) {
try {
IModel<SelectableBean<RoleAnalysisSessionType>> rowModel = getRowModel();
deleteSingleRoleAnalysisSession((PageBase) getPage(), rowModel.getObject().getValue().getOid(), result
);
String oid = rowModel.getObject().getValue().getOid();
roleAnalysisService
.deleteSession(oid, task, result
);
} catch (Exception e) {
throw new RuntimeException(e);
}
} else {
for (SelectableBean<RoleAnalysisSessionType> selectedObject : selectedObjects) {
try {
String parentOid = selectedObject.getValue().asPrismObject().getOid();
deleteSingleRoleAnalysisSession((PageBase) getPage(), parentOid, result);
roleAnalysisService
.deleteSession(parentOid,
task, result);

} catch (Exception e) {
throw new RuntimeException(e);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,10 @@
*/
package com.evolveum.midpoint.gui.impl.page.admin.role.mining.page.page;

import static com.evolveum.midpoint.gui.impl.page.admin.role.mining.utils.RoleAnalysisObjectUtils.recomputeRoleAnalysisClusterDetectionOptions;
import static com.evolveum.midpoint.model.common.expression.functions.BasicExpressionFunctions.LOGGER;

import java.io.Serial;

import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.behavior.AttributeAppender;
import org.apache.wicket.markup.html.form.Form;
Expand All @@ -32,10 +33,9 @@
import com.evolveum.midpoint.gui.impl.page.admin.assignmentholder.PageAssignmentHolderDetails;
import com.evolveum.midpoint.gui.impl.page.admin.component.AssignmentHolderOperationalButtonsPanel;
import com.evolveum.midpoint.gui.impl.page.admin.role.mining.page.panel.cluster.ClusterSummaryPanel;
import com.evolveum.midpoint.gui.impl.page.admin.role.mining.utils.RoleAnalysisObjectUtils;
import com.evolveum.midpoint.gui.impl.util.DetailsPageUtil;
import com.evolveum.midpoint.model.api.ActivitySubmissionOptions;
import com.evolveum.midpoint.model.api.ModelService;
import com.evolveum.midpoint.model.api.mining.RoleAnalysisService;
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.security.api.AuthorizationConstants;
import com.evolveum.midpoint.task.api.Task;
Expand All @@ -44,8 +44,6 @@
import com.evolveum.midpoint.web.util.OnePageParameterEncoder;
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;

import java.io.Serial;

//TODO correct authorizations
@PageDescriptor(
urls = {
Expand Down Expand Up @@ -119,11 +117,13 @@ public void detectionPerform(AjaxRequestTarget target) {

RoleAnalysisClusterType cluster = getObjectDetailsModels().getObjectWrapper().getObject().asObjectable();

Task task = ((PageBase) getPage()).createSimpleTask(OP_PATTERN_DETECTION);
ModelService modelService = ((PageBase) getPage()).getModelService();
PageBase pageBase = (PageBase) getPage();
Task task = pageBase.createSimpleTask(OP_PATTERN_DETECTION);
DetectionOption detectionOption = new DetectionOption(cluster);
RoleAnalysisService roleAnalysisService = pageBase.getRoleAnalysisService();

recomputeRoleAnalysisClusterDetectionOptions(modelService, clusterOid, detectionOption, task, result);
roleAnalysisService.recomputeClusterDetectionOptions(clusterOid, detectionOption,
task, result);

executeDetectionTask(result, task, clusterOid);

Expand Down Expand Up @@ -180,11 +180,12 @@ public void afterDeletePerformed(AjaxRequestTarget target) {
PageBase pageBase = (PageBase) getPage();
Task task = pageBase.createSimpleTask(OP_RECOMPUTE_SESSION_STAT);
OperationResult result = task.getResult();
RoleAnalysisService roleAnalysisService = pageBase.getRoleAnalysisService();

RoleAnalysisClusterType cluster = getModelWrapperObject().getObjectOld().asObjectable();
ObjectReferenceType roleAnalysisSessionRef = cluster.getRoleAnalysisSessionRef();
RoleAnalysisObjectUtils.recomputeSessionStatic(pageBase.getModelService(), roleAnalysisSessionRef.getOid(), cluster, task, result);

roleAnalysisService.recomputeSessionStatics(
roleAnalysisSessionRef.getOid(), cluster, task, result);
}

public PageRoleAnalysisCluster() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,13 @@
*/
package com.evolveum.midpoint.gui.impl.page.admin.role.mining.page.page;

import static com.evolveum.midpoint.gui.impl.page.admin.role.mining.utils.RoleAnalysisObjectUtils.searchAndDeleteCluster;

import java.io.Serial;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.util.List;

import com.evolveum.midpoint.model.api.mining.RoleAnalysisService;

import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.behavior.AttributeAppender;
import org.apache.wicket.markup.html.form.Form;
Expand Down Expand Up @@ -89,12 +89,15 @@ public PageRoleAnalysisSession() {
@Override
public void afterDeletePerformed(AjaxRequestTarget target) {
PageBase pageBase = (PageBase) getPage();
Task task = pageBase.createSimpleTask("deleteCleanup");
OperationResult result = new OperationResult(OP_DELETE_CLEANUP);
RoleAnalysisService roleAnalysisService = pageBase.getRoleAnalysisService();

RoleAnalysisSessionType session = getModelWrapperObject().getObjectOld().asObjectable();
String sessionOid = session.getOid();

searchAndDeleteCluster(pageBase, sessionOid, result);
roleAnalysisService
.deleteSessionClustersMembers(sessionOid, task, result);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,13 @@
package com.evolveum.midpoint.gui.impl.page.admin.role.mining.page.panel.cluster;

import static com.evolveum.midpoint.common.mining.utils.RoleAnalysisUtils.resolveDateAndTime;
import static com.evolveum.midpoint.gui.impl.page.admin.role.mining.utils.RoleAnalysisObjectUtils.countRoleMembers;
import static com.evolveum.midpoint.gui.impl.page.admin.role.mining.utils.RoleAnalysisObjectUtils.getRoleTypeObject;

import java.io.Serial;
import java.util.ArrayList;
import java.util.List;

import com.evolveum.midpoint.gui.impl.util.DetailsPageUtil;
import com.evolveum.midpoint.task.api.Task;
import com.evolveum.midpoint.web.component.AjaxIconButton;

import org.apache.wicket.ajax.AjaxRequestTarget;
Expand Down Expand Up @@ -76,14 +75,16 @@ public MigratedRolesPanel(String id, ObjectDetailsModels<RoleAnalysisClusterType

@Override
protected void initLayout() {

RoleAnalysisClusterType cluster = getObjectDetailsModels().getObjectType();
List<ObjectReferenceType> reductionObject = cluster.getResolvedPattern();
Task task = getPageBase().createSimpleTask("resolve role object");

List<RoleType> roles = new ArrayList<>();
for (ObjectReferenceType objectReferenceType : reductionObject) {
String oid = objectReferenceType.getOid();
if (oid != null) {
PrismObject<RoleType> roleTypeObject = getRoleTypeObject(getPageBase(), oid, result);
PrismObject<RoleType> roleTypeObject = getPageBase().getRoleAnalysisService()
.getRoleTypeObject(oid, task, result);
if (roleTypeObject != null) {
roles.add(roleTypeObject.asObjectable());
}
Expand Down Expand Up @@ -223,11 +224,11 @@ public boolean isSortable() {
@Override
public void populateItem(Item<ICellPopulator<RoleType>> item, String componentId,
IModel<RoleType> rowModel) {
Integer membersCount = countRoleMembers(getPageBase(), null, rowModel.getObject().getOid(), result);
Task task = getPageBase().createSimpleTask("countRoleMembers");

if (membersCount == null) {
membersCount = 0;
}
Integer membersCount = getPageBase().getRoleAnalysisService()
.countUserTypeMembers(null, rowModel.getObject().getOid(),
task, result);

item.add(new Label(componentId, membersCount));
}
Expand Down

0 comments on commit 569ad4c

Please sign in to comment.