Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/master' into feature/mid-9278-an…
Browse files Browse the repository at this point in the history
…notations-review
  • Loading branch information
1azyman committed Nov 15, 2023
2 parents 93a500a + 733067b commit 3c483c2
Show file tree
Hide file tree
Showing 36 changed files with 1,505 additions and 855 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ private BoxedTablePanel<BusinessRoleDto> getTable() {
private BoxedTablePanel<BusinessRoleDto> generateTable(RoleMiningProvider<BusinessRoleDto> provider) {

BoxedTablePanel<BusinessRoleDto> table = new BoxedTablePanel<>(
ID_MODIFICATION_TARGET_PANEL, provider, initColumns(provider)) {
ID_MODIFICATION_TARGET_PANEL, provider, initColumns()) {
@Override
protected WebMarkupContainer createButtonToolbar(String id) {
//TODO add possibility to assign other candidate.
Expand Down Expand Up @@ -168,7 +168,7 @@ public Component getFooterButtonToolbar() {
return table;
}

private List<IColumn<BusinessRoleDto, String>> initColumns(RoleMiningProvider<BusinessRoleDto> provider) {
private List<IColumn<BusinessRoleDto, String>> initColumns() {

List<IColumn<BusinessRoleDto, String>> columns = new ArrayList<>();

Expand Down Expand Up @@ -223,7 +223,7 @@ public void onClick(AjaxRequestTarget target) {

});

columns.add(new AbstractColumn<>(createStringResource("Status")) {
columns.add(new AbstractColumn<>(createStringResource("RoleAnalysis.modificationTargetPanel.status")) {

@Override
public String getSortProperty() {
Expand All @@ -249,7 +249,8 @@ public void populateItem(Item<ICellPopulator<BusinessRoleDto>> item, String comp

});

columns.add(new AbstractColumn<>(createStringResource("Added Assignment")) {
columns.add(new AbstractColumn<>(createStringResource(
"RoleAnalysis.modificationTargetPanel.added.access")) {

@Override
public String getSortProperty() {
Expand All @@ -270,7 +271,8 @@ public void populateItem(Item<ICellPopulator<BusinessRoleDto>> item, String comp

});

columns.add(new AbstractColumn<>(createStringResource("Replaced Assignment")) {
columns.add(new AbstractColumn<>(createStringResource(
"RoleAnalysis.modificationTargetPanel.replaced.assignments")) {

@Override
public String getSortProperty() {
Expand All @@ -291,7 +293,8 @@ public void populateItem(Item<ICellPopulator<BusinessRoleDto>> item, String comp

});

columns.add(new AbstractColumn<>(createStringResource("Current Assignment count")) {
columns.add(new AbstractColumn<>(createStringResource(
"RoleAnalysis.modificationTargetPanel.count.assignments")) {

@Override
public String getSortProperty() {
Expand All @@ -312,7 +315,8 @@ public void populateItem(Item<ICellPopulator<BusinessRoleDto>> item, String comp

});

columns.add(new AbstractColumn<>(createStringResource("Final Assignment count")) {
columns.add(new AbstractColumn<>(createStringResource(
"RoleAnalysis.modificationTargetPanel.count.assignments.final")) {

@Override
public String getSortProperty() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import java.lang.reflect.InvocationTargetException;
import java.util.Collection;
import java.util.List;
import java.util.UUID;

import com.evolveum.midpoint.gui.api.page.PageBase;
import com.evolveum.midpoint.gui.impl.page.admin.abstractrole.AbstractRoleDetailsModel;
Expand All @@ -18,14 +19,12 @@

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.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.CommonException;
import com.evolveum.midpoint.util.exception.SchemaException;
import com.evolveum.midpoint.util.exception.*;
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;

import org.apache.wicket.ajax.AjaxRequestTarget;
Expand Down Expand Up @@ -142,13 +141,13 @@ protected boolean canShowWizard(SystemObjectsType archetype) {
@Override
protected void exitFromWizard() {
if (existPatternDeltas()) {
navigateToRoleAnalysis();
navigateToRoleAnalysisCluster();
return;
}
super.exitFromWizard();
}

private void navigateToRoleAnalysis() {
private void navigateToRoleAnalysisCluster() {
PageParameters parameters = new PageParameters();
String clusterOid = getObjectDetailsModels().getPatternDeltas().getCluster().getOid();
parameters.add(OnePageParameterEncoder.PARAMETER, clusterOid);
Expand Down Expand Up @@ -207,13 +206,27 @@ private void businessRoleMigrationPerform(

BusinessRoleApplicationDto patternDeltas = getObjectDetailsModels().getPatternDeltas();
RoleAnalysisService roleAnalysisService = getRoleAnalysisService();
roleAnalysisService.clusterObjectMigrationRecompute(
getRepositoryService(), patternDeltas.getCluster().getOid(), roleOid, task, result);

PrismObject<RoleType> roleObject = roleAnalysisService
.getRoleTypeObject( roleOid, task, result);
.getRoleTypeObject(roleOid, task, result);
if (roleObject != null) {
executeMigrationTask(result, task, patternDeltas.getBusinessRoleDtos(), roleObject);
roleAnalysisService.clusterObjectMigrationRecompute(
patternDeltas.getCluster().getOid(), roleOid, task, result);


String taskOid = UUID.randomUUID().toString();

ActivityDefinitionType activity = null;
try {
activity = createActivity(patternDeltas.getBusinessRoleDtos(), roleOid);
} catch (SchemaException e) {
LOGGER.error("Couldn't create activity for role migration: " + roleOid);
}
if (activity != null) {
roleAnalysisService.executeMigrationTask(
patternDeltas.getCluster(), activity, roleObject, taskOid, null, task, result);
}

}
}

Expand All @@ -222,24 +235,6 @@ private boolean existPatternDeltas() {
return patternDeltas != null && !patternDeltas.getBusinessRoleDtos().isEmpty();
}

private void executeMigrationTask(OperationResult result, Task task, List<BusinessRoleDto> patternDeltas, PrismObject<RoleType> roleObject) {
try {
ActivityDefinitionType activity = createActivity(patternDeltas, roleObject.getOid());

getModelInteractionService().submit(
activity,
ActivitySubmissionOptions.create()
.withTaskTemplate(new TaskType()
.name("Migration role (" + roleObject.getName().toString() + ")"))
.withArchetypes(
SystemObjectsType.ARCHETYPE_UTILITY_TASK.value()),
task, result);

} catch (CommonException e) {
LOGGER.error("Failed to execute role {} migration activity: ", roleObject.getOid(), e);
}
}

private ActivityDefinitionType createActivity(List<BusinessRoleDto> patternDeltas, String roleOid) throws SchemaException {

ObjectReferenceType objectReferenceType = new ObjectReferenceType();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@
import com.evolveum.midpoint.xml.ns._public.common.common_3.RoleAnalysisClusterType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.RoleType;

import org.jetbrains.annotations.NotNull;

/**
* The BusinessRoleApplicationDto class represents a Data Transfer Object (DTO) that holds
* information about a specific role, its associated cluster, and a list of BusinessRoleDtos that holds information
Expand All @@ -28,8 +30,10 @@ public class BusinessRoleApplicationDto implements Serializable {
PrismObject<RoleType> businessRole;
List<BusinessRoleDto> businessRoleDtos;

public BusinessRoleApplicationDto(PrismObject<RoleAnalysisClusterType> cluster, PrismObject<RoleType> businessRole,
List<BusinessRoleDto> businessRoleDtos) {
public BusinessRoleApplicationDto(
@NotNull PrismObject<RoleAnalysisClusterType> cluster,
@NotNull PrismObject<RoleType> businessRole,
@NotNull List<BusinessRoleDto> businessRoleDtos) {
this.cluster = cluster;
this.businessRole = businessRole;
this.businessRoleDtos = businessRoleDtos;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -98,10 +98,12 @@ private void prepareUserDeltas(@NotNull PrismObject<UserType> prismObjectUser,
List<String> userRolesAssignmentOids = getRolesOidAssignment(userObject);
List<String> roleRolesAssignmentOids = getRolesOidInducements(businessRole);

Set<String> appliedRoles = new HashSet<>();
int delete = 0;
Collection<PrismContainerValue<AssignmentType>> unassignRoleCollection = new ArrayList<>();
for (String assignmentOid : userRolesAssignmentOids) {
if (roleRolesAssignmentOids.contains(assignmentOid)) {
appliedRoles.add(assignmentOid);
AssignmentType assignmentTo = createAssignmentTo(assignmentOid, ObjectTypes.ROLE, pageBase.getPrismContext());
unassignRoleCollection.add(assignmentTo.asPrismContainerValue());
delete++;
Expand All @@ -114,7 +116,7 @@ private void prepareUserDeltas(@NotNull PrismObject<UserType> prismObjectUser,

int roleAssignmentCount = roleRolesAssignmentOids.size();

int extraAssignmentCount = Math.max(0, roleAssignmentCount - delete);
int extraAssignmentCount = roleAssignmentCount - appliedRoles.size();

this.include = delete > 0;
this.prismObjectUser = prismObjectUser;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,6 @@
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 @@ -46,14 +44,15 @@
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.model.api.mining.RoleAnalysisService;
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.AjaxLinkPanel;
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 All @@ -63,10 +62,7 @@
import com.evolveum.midpoint.web.model.PrismPropertyWrapperHeaderModel;
import com.evolveum.midpoint.web.page.admin.PageAdmin;
import com.evolveum.midpoint.web.session.UserProfileStorage.TableId;
import com.evolveum.midpoint.xml.ns._public.common.common_3.AbstractAnalysisSessionOptionType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.RangeType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.RoleAnalysisSessionStatisticType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.RoleAnalysisSessionType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;

@PageDescriptor(
urls = {
Expand All @@ -83,6 +79,7 @@ public class PageRoleAnalysis extends PageAdmin {

private static final String DOT_CLASS = PageRoleAnalysis.class.getName() + ".";
private static final String OP_DELETE_SESSION = DOT_CLASS + "deleteSession";
private static final String OP_UPDATE_STATUS = DOT_CLASS + "updateOperationStatus";
private static final String ID_MAIN_FORM = "mainForm";
private static final String ID_CHART_PANEL = "chartPanel";
private static final String ID_TABLE = "table";
Expand Down Expand Up @@ -111,7 +108,7 @@ public InlineMenuItemAction initAction() {
public void onClick(AjaxRequestTarget target) {

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

List<SelectableBean<RoleAnalysisSessionType>> selectedObjects = getTable().getSelectedObjects();
Expand Down Expand Up @@ -379,6 +376,46 @@ public IModel<String> getDataModel(IModel<SelectableBean<RoleAnalysisSessionType
};
columns.add(column);

column = new AbstractExportableColumn<>(createStringResource("Status")) {
@Override
public IModel<?> getDataModel(IModel<SelectableBean<RoleAnalysisSessionType>> iModel) {
return null;
}

@Override
public void populateItem(
Item<ICellPopulator<SelectableBean<RoleAnalysisSessionType>>> cellItem,
String componentId,
IModel<SelectableBean<RoleAnalysisSessionType>> rowModel) {

Task task = getPageBase().createSimpleTask(OP_UPDATE_STATUS);
RoleAnalysisSessionType session = rowModel.getObject().getValue();
OperationResult result = task.getResult();

RoleAnalysisService roleAnalysisService = getPageBase().getRoleAnalysisService();
String stateString = roleAnalysisService.recomputeAndResolveSessionOpStatus(
session.asPrismObject(),
result, task);

ObjectReferenceType taskRef = roleAnalysisService.extractTaskRef(session.getOperationExecution());

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(),
this, true);
}
}
};
ajaxLinkPanel.setEnabled(taskRef != null);
ajaxLinkPanel.setOutputMarkupId(true);
cellItem.add(ajaxLinkPanel);
}
};
columns.add(column);

return columns;
}

Expand Down

0 comments on commit 3c483c2

Please sign in to comment.