Skip to content

Commit

Permalink
Update role-mining feature
Browse files Browse the repository at this point in the history
  • Loading branch information
tchrapovic committed Aug 17, 2023
1 parent 0cb3b1e commit cccc3de
Show file tree
Hide file tree
Showing 78 changed files with 2,378 additions and 3,462 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5769,4 +5769,5 @@ protected PrismContainerDefinition<C> load() {
}
};
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,7 @@
import java.util.stream.Collectors;
import javax.xml.namespace.QName;

import com.evolveum.midpoint.gui.impl.page.admin.role.mining.page.MainPageMining;
import com.evolveum.midpoint.gui.impl.page.admin.role.PageRoleMiningRBAM;
import com.evolveum.midpoint.gui.impl.page.admin.role.PageRoleMiningSimple;
import com.evolveum.midpoint.gui.impl.page.admin.role.mining.page.PageRoleAnalysis;
import com.evolveum.midpoint.model.api.authentication.GuiProfiledPrincipal;

import com.evolveum.midpoint.web.page.admin.resources.PageResourceTemplates;
Expand Down Expand Up @@ -400,7 +398,7 @@ private MainMenuItem createRolesMenu() {
createBasicAssignmentHolderMenuItems(roleMenu, PageTypes.ROLE);
// roleMenu.addMenuItem(new MenuItem("PageAdmin.menu.top.roles.mining", PageRoleMiningSimple.class));
// roleMenu.addMenuItem(new MenuItem("RBAM", PageRoleMiningRBAM.class));
roleMenu.addMenuItem(new MenuItem("Mining", MainPageMining.class));
roleMenu.addMenuItem(new MenuItem("Mining", PageRoleAnalysis.class));

return roleMenu;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@

import com.evolveum.midpoint.gui.api.prism.wrapper.PrismValueWrapper;

import com.evolveum.midpoint.xml.ns._public.common.common_3.RoleAnalysisSessionOptionType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.RoleAnalysisSessionType;

import jakarta.annotation.PostConstruct;

import org.springframework.stereotype.Component;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,35 +1,27 @@
/*
* Copyright (C) 2010-2020 Evolveum and contributors
* Copyright (C) 2010-2023 Evolveum and contributors
*
* This work is dual-licensed under the Apache License 2.0
* and European Union Public License. See LICENSE file for details.
*/
package com.evolveum.midpoint.gui.impl.factory.panel;

import com.evolveum.midpoint.gui.api.prism.wrapper.ItemWrapper;
import com.evolveum.midpoint.gui.api.prism.wrapper.PrismPropertyWrapper;
import com.evolveum.midpoint.gui.api.prism.wrapper.PrismValueWrapper;
import com.evolveum.midpoint.gui.api.util.ObjectTypeListUtil;
import com.evolveum.midpoint.gui.impl.page.admin.role.mining.components.RangeSliderPanel;
import com.evolveum.midpoint.prism.path.ItemPath;
import com.evolveum.midpoint.util.DOMUtil;
import com.evolveum.midpoint.web.component.input.DropDownChoicePanel;
import com.evolveum.midpoint.web.component.input.QNameObjectTypeChoiceRenderer;
import com.evolveum.midpoint.web.component.prism.InputPanel;
import com.evolveum.midpoint.web.page.admin.configuration.component.EmptyOnChangeAjaxFormUpdatingBehavior;
import com.evolveum.midpoint.prism.path.ItemName;
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;

import com.evolveum.prism.xml.ns._public.types_3.ItemPathType;

import jakarta.annotation.PostConstruct;
import org.apache.wicket.model.Model;
import org.apache.wicket.model.PropertyModel;
import org.springframework.stereotype.Component;

import javax.xml.namespace.QName;
import java.util.List;
import com.evolveum.midpoint.gui.api.prism.wrapper.ItemWrapper;
import com.evolveum.midpoint.gui.api.prism.wrapper.PrismValueWrapper;
import com.evolveum.midpoint.gui.impl.page.admin.role.mining.components.RangeSimplePanel;
import com.evolveum.midpoint.web.component.prism.InputPanel;

import java.io.Serializable;

@Component
public class RangePanelFactory extends AbstractInputGuiComponentFactory<Double> {
public class RangePanelFactory extends AbstractInputGuiComponentFactory<RangeType> {

@PostConstruct
public void register() {
Expand All @@ -38,35 +30,23 @@ public void register() {

@Override
public <IW extends ItemWrapper<?, ?>, VW extends PrismValueWrapper<?>> boolean match(IW wrapper, VW valueWrapper) {
return RoleAnalysisSessionOptionType.F_SIMILARITY_THRESHOLD.equals(wrapper.getItemName());
return RoleAnalysisDetectionOptionType.F_FREQUENCY_RANGE.equals(wrapper.getItemName())
|| AbstractAnalysisSessionOptionType.F_PROPERTIES_RANGE.equals(wrapper.getItemName());
}

@Override
protected InputPanel getPanel(PrismPropertyPanelContext<Double> panelCtx) {
List<QName> typesList;
// if (AssignmentType.F_FOCUS_TYPE.equals(panelCtx.getDefinitionName())
// || ItemPath.create(
// ResourceType.F_SCHEMA_HANDLING,
// SchemaHandlingType.F_OBJECT_TYPE,
// ResourceObjectTypeDefinitionType.F_FOCUS,
// ResourceObjectFocusSpecificationType.F_TYPE)
// .equivalent(panelCtx.unwrapWrapperModel().getPath().namedSegmentsOnly())) {
// typesList = ObjectTypeListUtil.createFocusTypeList();
// } else if ((ObjectCollectionType.F_TYPE.equals(panelCtx.getDefinitionName()) || GuiObjectListViewType.F_TYPE.equals(panelCtx.getDefinitionName()))
// && panelCtx.unwrapWrapperModel().getParent().getDefinition() != null &&
// (ObjectCollectionType.class.equals(panelCtx.unwrapWrapperModel().getParent().getDefinition().getTypeClass())
// || GuiObjectListViewType.class.equals(panelCtx.unwrapWrapperModel().getParent().getDefinition().getTypeClass()))) {
// typesList = ObjectTypeListUtil.createContainerableTypesQnameList();
// } else {
// typesList = ObjectTypeListUtil.createObjectTypeList();
// }



RangeSliderPanel rangeSliderPanel = new RangeSliderPanel(panelCtx.getComponentId(),panelCtx.getRealValueModel());
// DropDownChoicePanel<QName> typePanel = new DropDownChoicePanel<QName>(panelCtx.getComponentId(), panelCtx.getRealValueModel(),
// Model.ofList(typesList), new QNameObjectTypeChoiceRenderer(), true);
rangeSliderPanel.getBaseFormComponent().add(new EmptyOnChangeAjaxFormUpdatingBehavior());
protected InputPanel getPanel(PrismPropertyPanelContext<RangeType> panelCtx) {
ItemName itemName = panelCtx.unwrapWrapperModel().getItemName();

double max;
if (RoleAnalysisDetectionOptionType.F_FREQUENCY_RANGE.equals(itemName)) {
max = 100.0;
} else {
max = 1000.0;
}

RangeSimplePanel rangeSliderPanel = new RangeSimplePanel(panelCtx.getComponentId(),
new PropertyModel<>(panelCtx.getItemWrapperModel(), "value"), max);
rangeSliderPanel.setOutputMarkupId(true);
return rangeSliderPanel;
}
Expand All @@ -76,5 +56,8 @@ public Integer getOrder() {
return 10000;
}


@Override
public void configure(PrismPropertyPanelContext<RangeType> panelCtx, org.apache.wicket.Component component) {
// super.configure(panelCtx, component);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
/*
* Copyright (C) 2010-2023 Evolveum and contributors
*
* This work is dual-licensed under the Apache License 2.0
* and European Union Public License. See LICENSE file for details.
*/
package com.evolveum.midpoint.gui.impl.factory.panel;

import com.evolveum.midpoint.gui.api.prism.wrapper.ItemWrapper;
import com.evolveum.midpoint.gui.api.prism.wrapper.PrismValueWrapper;
import com.evolveum.midpoint.gui.impl.page.admin.role.mining.components.RangeSliderPanel;
import com.evolveum.midpoint.web.component.prism.InputPanel;
import com.evolveum.midpoint.web.page.admin.configuration.component.EmptyOnChangeAjaxFormUpdatingBehavior;
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;

import jakarta.annotation.PostConstruct;
import org.springframework.stereotype.Component;

import javax.xml.namespace.QName;
import java.util.List;

@Component
public class ValueSelectorSliderPanelFactory extends AbstractInputGuiComponentFactory<Double> {

@PostConstruct
public void register() {
getRegistry().addToRegistry(this);
}

@Override
public <IW extends ItemWrapper<?, ?>, VW extends PrismValueWrapper<?>> boolean match(IW wrapper, VW valueWrapper) {
return RoleAnalysisSessionOptionType.F_SIMILARITY_THRESHOLD.equals(wrapper.getItemName());
}

@Override
protected InputPanel getPanel(PrismPropertyPanelContext<Double> panelCtx) {
List<QName> typesList;
// if (AssignmentType.F_FOCUS_TYPE.equals(panelCtx.getDefinitionName())
// || ItemPath.create(
// ResourceType.F_SCHEMA_HANDLING,
// SchemaHandlingType.F_OBJECT_TYPE,
// ResourceObjectTypeDefinitionType.F_FOCUS,
// ResourceObjectFocusSpecificationType.F_TYPE)
// .equivalent(panelCtx.unwrapWrapperModel().getPath().namedSegmentsOnly())) {
// typesList = ObjectTypeListUtil.createFocusTypeList();
// } else if ((ObjectCollectionType.F_TYPE.equals(panelCtx.getDefinitionName()) || GuiObjectListViewType.F_TYPE.equals(panelCtx.getDefinitionName()))
// && panelCtx.unwrapWrapperModel().getParent().getDefinition() != null &&
// (ObjectCollectionType.class.equals(panelCtx.unwrapWrapperModel().getParent().getDefinition().getTypeClass())
// || GuiObjectListViewType.class.equals(panelCtx.unwrapWrapperModel().getParent().getDefinition().getTypeClass()))) {
// typesList = ObjectTypeListUtil.createContainerableTypesQnameList();
// } else {
// typesList = ObjectTypeListUtil.createObjectTypeList();
// }



RangeSliderPanel rangeSliderPanel = new RangeSliderPanel(panelCtx.getComponentId(),panelCtx.getRealValueModel());
// DropDownChoicePanel<QName> typePanel = new DropDownChoicePanel<QName>(panelCtx.getComponentId(), panelCtx.getRealValueModel(),
// Model.ofList(typesList), new QNameObjectTypeChoiceRenderer(), true);
rangeSliderPanel.getBaseFormComponent().add(new EmptyOnChangeAjaxFormUpdatingBehavior());
rangeSliderPanel.setOutputMarkupId(true);
return rangeSliderPanel;
}

@Override
public Integer getOrder() {
return 10000;
}


}
Original file line number Diff line number Diff line change
Expand Up @@ -207,12 +207,25 @@
identifier = "clusterStatistic",
applicableForType = RoleAnalysisClusterType.class,
display = @PanelDisplay(
label = "RoleAnalysisClusterType.clusterStatistic",
label = "RoleAnalysisClusterStatistic.clusterStatistic",
icon = GuiStyleConstants.CLASS_CIRCLE_FULL,
order = 20
),
containerPath = "clusterStatistic",
type = "RoleAnalysisClusterStatisticType",
containerPath = "clusterUserBasedStatistic",
type = "UserAnalysisClusterStatistic",
expanded = true
)

@PanelInstance(
identifier = "clusterStatistic",
applicableForType = RoleAnalysisClusterType.class,
display = @PanelDisplay(
label = "RoleAnalysisClusterStatistic.clusterStatistic",
icon = GuiStyleConstants.CLASS_CIRCLE_FULL,
order = 20
),
containerPath = "clusterRoleBasedStatistic",
type = "RoleAnalysisClusterStatistic",
expanded = true
)
@PanelInstance(
Expand All @@ -239,6 +252,7 @@
type = "RoleAnalysisSessionStatisticType",
expanded = true
)

@PanelInstance(
identifier = "sessionOptions",
applicableForType = RoleAnalysisSessionType.class,
Expand All @@ -247,11 +261,24 @@
icon = GuiStyleConstants.CLASS_CIRCLE_FULL,
order = 30
),
containerPath = "clusterOptions",
containerPath = "roleModeOptions",
type = "RoleAnalysisSessionOptionType",
expanded = true
)

@PanelInstance(
identifier = "sessionOptions",
applicableForType = RoleAnalysisSessionType.class,
display = @PanelDisplay(
label = "RoleAnalysisSessionType.sessionOptions",
icon = GuiStyleConstants.CLASS_CIRCLE_FULL,
order = 30
),
containerPath = "userModeOptions",
type = "UserAnalysisSessionOptionType",
expanded = true
)

public class GenericSingleContainerPanel<C extends Containerable, O extends ObjectType> extends AbstractObjectMainPanel<O, ObjectDetailsModels<O>> {

private static final String ID_DETAILS = "details";
Expand Down

0 comments on commit cccc3de

Please sign in to comment.