Skip to content

Commit

Permalink
Role-mining feature cleanup and style improve
Browse files Browse the repository at this point in the history
  • Loading branch information
tchrapovic committed Sep 11, 2023
1 parent 33b8ede commit 136258e
Show file tree
Hide file tree
Showing 59 changed files with 1,569 additions and 1,723 deletions.
68 changes: 68 additions & 0 deletions gui/admin-gui/src/frontend/js/midpoint-theme.js
Original file line number Diff line number Diff line change
Expand Up @@ -565,4 +565,72 @@ export default class MidPointTheme {
panel.find("option.width-tmp-option").html(panel.find("select.resizing-select option:selected").text());
panel.find("select.resizing-select").width(panel.find("select.width-tmp-select").width());
}

initScaleResize(containerId) {
let div = document.querySelector(containerId);
let scale = 0.5;
let component = null;

if (!div) {
console.error('Container not found');
return;
}

if (containerId === '#tableScaleContainer') {
component = div.querySelector('table');
} else if (containerId === '#imageScaleContainer') {
component = div.querySelector('img');
}

if (component) {
div.addEventListener('wheel', handleZoom);
} else {
console.error('Component not found');
}

function handleZoom(e) {
e.preventDefault();
let rectBefore = component.getBoundingClientRect();
let x = (e.clientX - rectBefore.left) / rectBefore.width * 100;
let y = (e.clientY - rectBefore.top) / rectBefore.height * 100;

if (e.deltaY < 0) {
zoomIn(rectBefore, x, y);
} else if (e.deltaY > 0) {
zoomOut(rectBefore);
}
}

function zoomIn(rectBefore, x, y) {
console.log('Zooming in');
scale += 0.03;

let prevScale = scale - 0.1;
let scaleFactor = scale / prevScale;

let deltaX = (x / 100) * rectBefore.width * (scaleFactor - 1);
let deltaY = (y / 100) * rectBefore.height * (scaleFactor - 1);

setTransform(x, y, scale, rectBefore, deltaX, deltaY, scaleFactor);
}

function zoomOut(rectBefore) {
console.log('Zooming out');
scale -= 0.03;
scale = Math.max(0.1, scale);

setTransform(0, 0, scale, rectBefore, 0, 0, 1);
}

function setTransform(x, y, scale, rectBefore, deltaX, deltaY, scaleFactor) {
component.style.transformOrigin = `${x}% ${y}%`;
component.style.transition = 'transform 0.3s';
component.style.transform = `scale(${scale})`;

let rectAfter = component.getBoundingClientRect();
div.scrollLeft += (rectAfter.left - rectBefore.left) + deltaX - (e.clientX - rectBefore.left) * (scaleFactor - 1);
div.scrollTop += (rectAfter.top - rectBefore.top) + deltaY - (e.clientY - rectBefore.top) * (scaleFactor - 1);
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -201,6 +201,8 @@ public class GuiStyleConstants {
public static final String CLASS_BAN = "fa fa-ban";

public static final String CLASS_SYSTEM_CONFIGURATION_ICON = "fa fa-cog";

public static final String CLASS_OPTIONS = "fa fa-cogs";
public static final String CLASS_SYSTEM_CONFIGURATION_ICON_COLORED = CLASS_SYSTEM_CONFIGURATION_ICON + " object-shadow-color";

public static final String CLASS_ASSIGN = "fa fa-link";
Expand Down Expand Up @@ -239,6 +241,10 @@ public class GuiStyleConstants {
public static final String EVO_ARCHETYPE_TYPE_ICON = "fe fe-archetype_smooth";
public static final String EVO_MESSAGE_TEMPLATE_TYPE_ICON = "fa fa-book";

public static final String CLASS_ROLE_ANALYSIS_SESSION_ICON = "fa fa-bar-chart";
public static final String CLASS_ROLE_ANALYSIS_CLUSTER_ICON = "fa fa-cubes";


public static final String GREEN_COLOR = "color-green";
public static final String YELLOW_COLOR = "color-yellow";
public static final String RED_COLOR = "color-red";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -401,7 +401,7 @@ private MainMenuItem createRolesMenu() {
createBasicAssignmentHolderMenuItems(roleMenu, PageTypes.ROLE);

roleMenu.addMenuItemAtIndex(new MenuItem("PageRoleAnalysis.menu.title",
GuiStyleConstants.EVO_CASE_OBJECT_ICON,
GuiStyleConstants.CLASS_ROLE_ANALYSIS_SESSION_ICON,
PageRoleAnalysis.class), 1);
roleMenu.addMenuItem(new MenuItem("PageRoleAnalysisSession.menu.title",
GuiStyleConstants.CLASS_PLUS_CIRCLE,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -98,8 +98,8 @@ public CompositedIcon getIcon() {
protected void onSubmit(AjaxRequestTarget target) {
this.setEnabled(false);
enable = false;
target.add(this);
performAddOperation(target, iModel);
target.add(this);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,22 +10,6 @@
import java.util.ArrayList;
import java.util.List;

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.util.IconAndStylesUtil;
import com.evolveum.midpoint.model.api.visualizer.Visualization;
import com.evolveum.midpoint.prism.delta.ObjectDelta;

import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.task.api.Task;

import com.evolveum.midpoint.util.exception.ExpressionEvaluationException;

import com.evolveum.midpoint.web.component.model.delta.DeltaDto;
import com.evolveum.midpoint.web.component.prism.show.VisualizationDto;

import com.evolveum.midpoint.web.component.util.SelectableBean;

import org.apache.wicket.AttributeModifier;
import org.apache.wicket.Component;
import org.apache.wicket.ajax.AjaxRequestTarget;
Expand All @@ -40,25 +24,34 @@
import org.apache.wicket.model.Model;
import org.apache.wicket.model.util.ListModel;
import org.apache.wicket.request.mapper.parameter.PageParameters;
import org.jetbrains.annotations.NotNull;

import com.evolveum.midpoint.gui.api.model.LoadableModel;
import com.evolveum.midpoint.gui.api.page.PageBase;
import com.evolveum.midpoint.gui.api.util.GuiDisplayTypeUtil;
import com.evolveum.midpoint.gui.api.util.WebComponentUtil;
import com.evolveum.midpoint.gui.impl.page.admin.AbstractObjectMainPanel;
import com.evolveum.midpoint.gui.impl.page.admin.abstractrole.AbstractRoleDetailsModel;
import com.evolveum.midpoint.gui.impl.page.admin.role.PageRole;
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.IconAndStylesUtil;
import com.evolveum.midpoint.model.api.visualizer.Visualization;
import com.evolveum.midpoint.prism.delta.ObjectDelta;
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.task.api.Task;
import com.evolveum.midpoint.util.exception.ExpressionEvaluationException;
import com.evolveum.midpoint.util.exception.SchemaException;
import com.evolveum.midpoint.web.component.AjaxIconButton;
import com.evolveum.midpoint.web.component.data.BoxedTablePanel;
import com.evolveum.midpoint.web.component.data.column.AjaxLinkPanel;
import com.evolveum.midpoint.web.component.data.column.IconColumn;
import com.evolveum.midpoint.web.component.model.delta.DeltaDto;
import com.evolveum.midpoint.web.component.prism.show.VisualizationDto;
import com.evolveum.midpoint.web.component.util.RoleMiningProvider;
import com.evolveum.midpoint.web.component.util.SelectableBean;
import com.evolveum.midpoint.web.util.OnePageParameterEncoder;
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;

import org.jetbrains.annotations.NotNull;

/**
* Created by tchrapovic.
*/
Expand Down Expand Up @@ -138,8 +131,9 @@ public void performAddOperation(AjaxRequestTarget ajaxRequestTarget, IModel<Sele
UserType user = iModel.getObject().getValue();

BusinessRoleDto newValue = new BusinessRoleDto(
user.asPrismContainer(), patternDeltas.getBusinessRole(), getPageBase());
user.asPrismObject(), patternDeltas.getBusinessRole(), getPageBase());
getObjectDetailsModels().getPatternDeltas().getBusinessRoleDtos().add(newValue);
newValue.setInclude(true);

RoleMiningProvider<BusinessRoleDto> updatedProvider
= getAndUpdateProvider(getObjectDetailsModels().getPatternDeltas().getBusinessRoleDtos());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,8 @@
*/
public class BusinessRoleWizardPanel extends AbstractWizardPanel<RoleType, AbstractRoleDetailsModel<RoleType>> {

private static final String DOT_CLASS = BusinessRoleWizardPanel.class.getName() + ".";
private static final String OP_PERFORM_MIGRATION = DOT_CLASS + "performMigration";
public BusinessRoleWizardPanel(String id, WizardPanelHelper<RoleType, AbstractRoleDetailsModel<RoleType>> helper) {
super(id, helper);
}
Expand Down Expand Up @@ -122,8 +124,8 @@ protected void onSubmitPerformed(AjaxRequestTarget target) {
}

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

Collection<ObjectDelta<? extends ObjectType>> deltas;
try {
Expand All @@ -143,9 +145,9 @@ private void businessRoleMigrationPerform(AjaxRequestTarget target) {
.executeChanges(deltas, false, task, result, target);

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

PrismObject<RoleType> roleObject = getRoleTypeObject(modelService, roleOid, result, task);
PrismObject<RoleType> roleObject = getRoleTypeObject(modelService, 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 @@ -7,20 +7,18 @@

package com.evolveum.midpoint.gui.impl.page.admin.role.component.wizard;

import org.apache.wicket.model.IModel;

import com.evolveum.midpoint.gui.impl.component.wizard.AbstractWizardStepPanel;
import com.evolveum.midpoint.gui.impl.page.admin.abstractrole.AbstractRoleDetailsModel;
import com.evolveum.midpoint.gui.impl.page.admin.abstractrole.component.ModificationTargetPanel;
import com.evolveum.midpoint.util.logging.Trace;
import com.evolveum.midpoint.util.logging.TraceManager;
import com.evolveum.midpoint.web.application.PanelDisplay;
import com.evolveum.midpoint.web.application.PanelInstance;
import com.evolveum.midpoint.web.application.PanelType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.AbstractRoleType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.OperationTypeType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.RoleType;

import org.apache.wicket.model.IModel;

@PanelType(name = "brw-candidateMembers")
@PanelInstance(identifier = "brw-access",
applicableForType = RoleType.class,
Expand All @@ -30,10 +28,8 @@
public class CandidateMembersPanel<AR extends AbstractRoleType>
extends AbstractWizardStepPanel<AbstractRoleDetailsModel<AR>> {

private static final Trace LOGGER = TraceManager.getTrace(CandidateMembersPanel.class);

public static final String PANEL_TYPE = "brw-candidateMembers";
private static final String ID_CANDIDATE_MEMEBERS = "candidateMembers";
private static final String ID_CANDIDATE_MEMBERS = "candidateMembers";


public CandidateMembersPanel(AbstractRoleDetailsModel<AR> model) {
Expand All @@ -47,7 +43,7 @@ protected void onInitialize() {
}

private void initLayout() {
ModificationTargetPanel<AR> roleInducementsPanel = new ModificationTargetPanel<>(ID_CANDIDATE_MEMEBERS, getDetailsModel(), getContainerConfiguration(PANEL_TYPE));
ModificationTargetPanel<AR> roleInducementsPanel = new ModificationTargetPanel<>(ID_CANDIDATE_MEMBERS, getDetailsModel(), getContainerConfiguration(PANEL_TYPE));
add(roleInducementsPanel);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,19 +22,17 @@ public class RangeSliderPanel extends InputPanel {
private static final String ID_TEXT_FIELD = "slider_label";
private static final String ID_SLIDER = "slider";
Integer sliderSimilarityValue;

private final ItemRealValueModel<Double> model;

public RangeSliderPanel(String id, ItemRealValueModel<Double> realValueModel) {
super(id);

this.model = realValueModel;

if (model.getObject() == null) {
model.setObject(80.0);
sliderSimilarityValue = 80;
if (getModelSimilarity() == null) {
model.setObject((double) getDefaultValue());
sliderSimilarityValue = getDefaultValue();
} else {
// model.setObject(model.getObject() * 100.0);
sliderSimilarityValue = model.getObject().intValue();
}

Expand Down Expand Up @@ -78,11 +76,15 @@ protected void onUpdate(AjaxRequestTarget target) {
};
slider.add(new AttributeModifier("min", getMinValueD()));
slider.add(new AttributeModifier("max", getMaxValueD()));
slider.add(new AttributeModifier("value", getDefaultValue()));
slider.add(new AttributeModifier("value", getModelSimilarity()));
slider.add(new AttributeModifier("style", "width:" + getSliderWidth() + getSliderWidthUnit()));
add(slider);
}

public Double getModelSimilarity() {
return model.getObject();
}

@Override
public FormComponent<?> getBaseFormComponent() {
return (FormComponent<?>) get(ID_SLIDER);
Expand Down

0 comments on commit 136258e

Please sign in to comment.