Skip to content

Commit

Permalink
Merge branch 'master' of github.com:Evolveum/midpoint
Browse files Browse the repository at this point in the history
  • Loading branch information
1azyman committed Aug 30, 2023
2 parents 0446299 + 9cd9de2 commit 576b884
Show file tree
Hide file tree
Showing 13 changed files with 244 additions and 72 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -78,10 +78,6 @@ protected ObjectQuery getCustomizeContentQuery() {
.not()
.item(ConnectorType.F_CONNECTOR_TYPE)
.eq("AsyncProvisioningConnector")
.and()
.not()
.item(ConnectorType.F_CONNECTOR_TYPE)
.eq("ManualConnector")
.build();
}
return null;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,22 +53,22 @@ public int getOrder() {
return 10;
}

@Override
protected List<? extends ItemDefinition> getItemDefinitions(PrismContainerWrapper parent, PrismContainerValue value) {
List<PrismContainerDefinition> relevantDefinitions = new ArrayList<>();
List<? extends ItemDefinition> defs = parent.getDefinitions();
for (ItemDefinition<?> def : defs) {
if (def instanceof PrismContainerDefinition) {
relevantDefinitions.add((PrismContainerDefinition) def);
}
}
relevantDefinitions.sort((o1, o2) -> {
int ord1 = o1.getDisplayOrder() != null ? o1.getDisplayOrder() : Integer.MAX_VALUE;
int ord2 = o2.getDisplayOrder() != null ? o2.getDisplayOrder() : Integer.MAX_VALUE;
return Integer.compare(ord1, ord2);
});
return relevantDefinitions;
}
// @Override
// protected List<? extends ItemDefinition> getItemDefinitions(PrismContainerWrapper parent, PrismContainerValue value) {
// List<PrismContainerDefinition> relevantDefinitions = new ArrayList<>();
// List<? extends ItemDefinition> defs = parent.getDefinitions();
// for (ItemDefinition<?> def : defs) {
// if (def instanceof PrismContainerDefinition) {
// relevantDefinitions.add((PrismContainerDefinition) def);
// }
// }
// relevantDefinitions.sort((o1, o2) -> {
// int ord1 = o1.getDisplayOrder() != null ? o1.getDisplayOrder() : Integer.MAX_VALUE;
// int ord2 = o2.getDisplayOrder() != null ? o2.getDisplayOrder() : Integer.MAX_VALUE;
// return Integer.compare(ord1, ord2);
// });
// return relevantDefinitions;
// }

@Override
public PrismContainerWrapper<ConnectorConfigurationType> createWrapper(PrismContainerValueWrapper<?> parent, ItemDefinition<?> def, WrapperContext context) throws SchemaException {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -94,9 +94,10 @@ protected void onSubmitPerformed(AjaxRequestTarget target) {

PrismObject<ConnectorType> connector = WebModelServiceUtils.loadObject(getAssignmentHolderModel().getObjectType().getConnectorRef(), getPageBase());

CapabilityCollectionType capabilities
= ProvisioningObjectsUtil.getNativeCapabilities(getAssignmentHolderModel().getObjectType(), getPageBase());

if (connector != null && SchemaConstants.ICF_FRAMEWORK_URI.equals(connector.asObjectable().getFramework())) {
CapabilityCollectionType capabilities
= ProvisioningObjectsUtil.getNativeCapabilities(getAssignmentHolderModel().getObjectType(), getPageBase());

if (capabilities.getDiscoverConfiguration() != null) {
steps.add(new PartialConfigurationStepPanel(getAssignmentHolderModel()));
Expand All @@ -108,25 +109,33 @@ protected void onSubmitPerformed(AjaxRequestTarget target) {
}
});
} else {
steps.add(new ConfigurationStepPanel(getAssignmentHolderModel()) {
steps.add(new ConfigurationStepPanel(getAssignmentHolderModel(), true) {
@Override
protected void onSubmitPerformed(AjaxRequestTarget target) {
target.add(getFeedback());
BasicResourceWizardPanel.this.onFinishBasicWizardPerformed(target);
}
});
}
} else {
steps.add(new ConfigurationStepPanel(getAssignmentHolderModel(), false) {
@Override
protected void onSubmitPerformed(AjaxRequestTarget target) {
target.add(getFeedback());
BasicResourceWizardPanel.this.onFinishBasicWizardPerformed(target);
}
});
}

if (capabilities.getSchema() != null) {
steps.add(new SelectObjectClassesStepPanel(getAssignmentHolderModel()) {
@Override
protected void onSubmitPerformed(AjaxRequestTarget target) {
target.add(getFeedback());
super.onSubmitPerformed(target);
BasicResourceWizardPanel.this.onFinishBasicWizardPerformed(target);
}
});
}
if (capabilities.getSchema() != null) {
steps.add(new SelectObjectClassesStepPanel(getAssignmentHolderModel()) {
@Override
protected void onSubmitPerformed(AjaxRequestTarget target) {
target.add(getFeedback());
super.onSubmitPerformed(target);
BasicResourceWizardPanel.this.onFinishBasicWizardPerformed(target);
}
});
}

return steps;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,21 @@
*/
package com.evolveum.midpoint.gui.impl.page.admin.resource.component.wizard.basic;

import com.evolveum.midpoint.gui.api.prism.wrapper.PrismContainerWrapper;
import com.evolveum.midpoint.gui.impl.page.admin.resource.ResourceDetailsModel;
import com.evolveum.midpoint.prism.path.ItemPath;
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.web.model.PrismContainerWrapperModel;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ConnectorConfigurationType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.OperationTypeType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ResourceType;

import org.apache.wicket.model.IModel;

/**
* @author lskublik
*/
Expand All @@ -26,16 +31,18 @@
display = @PanelDisplay(
label = "PageResource.wizard.step.configuration",
icon = "fa fa-cog"),
containerPath = "connectorConfiguration/configurationProperties",
containerPath = "empty",
expanded = true)
public class ConfigurationStepPanel extends AbstractConfigurationStepPanel {

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

private static final String PANEL_TYPE = "rw-connectorConfiguration";
private final boolean isConnId;

public ConfigurationStepPanel(ResourceDetailsModel model) {
public ConfigurationStepPanel(ResourceDetailsModel model, boolean isConnId) {
super(model);
this.isConnId = isConnId;
}

protected String getPanelType() {
Expand All @@ -46,4 +53,14 @@ protected String getPanelType() {
public String getStepId() {
return PANEL_TYPE;
}

@Override
protected IModel<? extends PrismContainerWrapper> getContainerFormModel() {
ItemPath path = ItemPath.create("connectorConfiguration");
if (isConnId) {
path = path.append("configurationProperties");
}

return PrismContainerWrapperModel.fromContainerWrapper(getDetailsModel().getObjectWrapperModel(), path);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,20 +9,24 @@
<html xmlns:wicket="http://wicket.apache.org">
<wicket:panel>
<div wicket:id="headerPanel" class="d-flex flex-wrap gap-2 w-100">
<div class="image col-md-2 mt-2">
<div class="image col-md-2 mt-3">
<img wicket:id="photo" class="user-image img-circle elevation-2"/>
</div>
<div class="info col-md-8">
<div class="text-lg" wicket:id="displayName"/>
<div class="text-md" wicket:id="archetypeLabel"/>
</div>
<a class="pull-right col-md-1 mt-2" wicket:id="expandButton">
<a class="pull-right col-md-1 mt-3" wicket:id="expandButton">
<i wicket:id="arrowIcon"></i>
</a>
</div>
<div wicket:id="itemsPanel" class="d-flex flex-wrap gap-2 w-100">
<label class="col-md-5" wicket:id="itemName"></label>
<div wicket:id="itemValue"/>
</div>
<wicket:enclosure child="itemsPanel">
<div class="border-top w-100">
<div wicket:id="itemsPanel" class="d-flex flex-wrap gap-2 mt-2">
<label class="col-md-5" wicket:id="itemName"></label>
<div wicket:id="itemValue"/>
</div>
</div>
</wicket:enclosure>
</wicket:panel>
</html>
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
<div wicket:id="recoveredIdentities" class="user-panel info-box my-3 pb-2 ">
<div wicket:id="detailsPanel" class="d-flex flex-wrap gap-2 w-100" />
</div>
<div wicket:id="paging" class="d-flex gap-2 w-100 justify-content-center" />
<div class="d-flex justify-content-end mt-2">
<a wicket:id="registrationLink" class="text-center login-panel-control">
<wicket:message key="PageLogin.registerNewAccount"/>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
import com.evolveum.midpoint.util.Producer;
import com.evolveum.midpoint.util.logging.Trace;
import com.evolveum.midpoint.util.logging.TraceManager;
import com.evolveum.midpoint.web.component.data.paging.NavigatorPanel;
import com.evolveum.midpoint.web.component.util.VisibleBehaviour;

import com.evolveum.midpoint.web.security.util.SecurityUtils;
Expand All @@ -39,6 +40,7 @@
import org.apache.wicket.markup.html.image.NonCachingImage;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView;
import org.apache.wicket.markup.html.list.PageableListView;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.request.resource.AbstractResource;
Expand Down Expand Up @@ -81,10 +83,12 @@ public class PageIdentityRecovery extends AbstractPageLogin {
private static final String ID_RECOVERED_IDENTITIES = "recoveredIdentities";
private static final String ID_DETAILS_PANEL = "detailsPanel";
private static final String ID_REGISTRATION_LINK = "registrationLink";
private static final String ID_PAGING = "paging";

private LoadableModel<List<UserType>> recoveredIdentitiesModel;
private LoadableModel<SecurityPolicyType> securityPolicyModel;

private static final int IDENTITY_PER_PAGE = 3;

public PageIdentityRecovery() {
super();
Expand All @@ -98,7 +102,8 @@ protected boolean isBackButtonVisible() {

@Override
protected void initCustomLayout() {
ListView<UserType> recoveredIdentitiesPanel = new ListView<>(ID_RECOVERED_IDENTITIES, recoveredIdentitiesModel) {
PageableListView<UserType> recoveredIdentitiesPanel = new PageableListView<>(ID_RECOVERED_IDENTITIES,
recoveredIdentitiesModel, IDENTITY_PER_PAGE) {
@Override
protected void populateItem(ListItem<UserType> item) {
IdentityDetailsPanel<UserType> detailsPanel = new IdentityDetailsPanel<>(ID_DETAILS_PANEL, item.getModel(),
Expand All @@ -110,6 +115,17 @@ protected void populateItem(ListItem<UserType> item) {
recoveredIdentitiesPanel.setOutputMarkupId(true);
add(recoveredIdentitiesPanel);

NavigatorPanel paging = new NavigatorPanel(ID_PAGING, recoveredIdentitiesPanel, true) {

@Override
protected String getPaginationCssClass() {
return null;
}
};
paging.add(new VisibleBehaviour(() -> !singlePageResult()));
add(paging);


String urlRegistration = SecurityUtils.getRegistrationUrl(securityPolicyModel.getObject());
AjaxLink<String> registrationLink = new AjaxLink<String>(ID_REGISTRATION_LINK) {
@Override
Expand Down Expand Up @@ -211,4 +227,10 @@ private MidpointAuthentication getMidpointAuthentication() {
}
return (MidpointAuthentication) authentication;
}

private boolean singlePageResult() {
var userList = recoveredIdentitiesModel.getObject();
int userCount = userList != null ? userList.size() : 0;
return userCount <= IDENTITY_PER_PAGE;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -193,6 +193,11 @@ protected String getIcon() {
}
return "fa fa-circle";
}

@Override
protected boolean isVisibleSubContainer(PrismContainerWrapper c) {
return VerticalFormDefaultContainerablePanel.this.isVisibleSubContainer(c);
}
};
panel.setOutputMarkupId(true);
container.add(new VisibleEnableBehaviour() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,7 @@

import static com.evolveum.midpoint.util.ClassPathUtil.LOGGER;

import java.util.ArrayList;
import java.util.GregorianCalendar;
import java.util.List;
import java.util.Set;
import java.util.*;
import java.util.stream.Collectors;
import javax.xml.datatype.DatatypeConfigurationException;
import javax.xml.datatype.DatatypeFactory;
Expand Down Expand Up @@ -70,10 +67,15 @@ public static DetectionOption loadDetectionOption(@NotNull RoleAnalysisDetection
public static List<String> getRolesOidAssignment(AssignmentHolderType object) {
List<String> oidList;
List<AssignmentType> assignments = object.getAssignment();
oidList = assignments.stream().map(AssignmentType::getTargetRef).filter(
targetRef -> targetRef.getType().equals(RoleType.COMPLEX_TYPE))
.map(AbstractReferencable::getOid).sorted()

oidList = assignments.stream()
.map(AssignmentType::getTargetRef)
.filter(Objects::nonNull)
.filter(targetRef -> targetRef.getType().equals(RoleType.COMPLEX_TYPE))
.map(AbstractReferencable::getOid)
.sorted()
.collect(Collectors.toList());

return oidList;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,8 @@ public void execute(@NotNull ModelService modelService, String sessionOid,
PrismObject<RoleAnalysisSessionType> prismSession = getSessionTypeObject(modelService, result, sessionOid, task);
if (prismSession != null) {

deleteRoleAnalysisSessionClusters(modelService, result, prismSession.getOid(), task);

RoleAnalysisProcessModeType processMode = prismSession.asObjectable().getProcessMode();
if (processMode.equals(RoleAnalysisProcessModeType.USER)) {
this.clusterable = new UserBasedClustering();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@
import com.evolveum.midpoint.prism.PrismObject;
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.task.api.Task;
import com.evolveum.midpoint.task.api.TaskManager;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectReferenceType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.RoleAnalysisClusterType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.RoleAnalysisProcessModeType;
Expand Down Expand Up @@ -85,14 +84,14 @@ public void executeDetectionProcess() {
List<DetectedPattern> detectedPatterns = executeDetection(miningRoleTypeChunks, miningUserTypeChunks,
processMode, detectionOption);

if (detectedPatterns != null) {
if (detectedPatterns != null && !detectedPatterns.isEmpty()) {
detectedPatterns = loadTopPatterns(detectedPatterns);
replaceRoleAnalysisClusterDetectionPattern(clusterOid, modelService,
result,
detectedPatterns, task
);
}

replaceRoleAnalysisClusterDetectionPattern(clusterOid, modelService,
result,
detectedPatterns, task
);
}

private List<DetectedPattern> executeDetection(List<MiningRoleTypeChunk> miningRoleTypeChunks,
Expand Down

0 comments on commit 576b884

Please sign in to comment.