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 Jul 12, 2022
2 parents 6ff9723 + bcfcec1 commit 0e8296c
Show file tree
Hide file tree
Showing 29 changed files with 478 additions and 180 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -231,7 +231,7 @@ public final class WebComponentUtil {
*/
private static RelationRegistry staticallyProvidedRelationRegistry;

private static final Map<Class<? extends ObjectType>, Class<? extends PageBase>> CREATE_NEW_OBJECT_PAGE_MAP;
// private static final Map<Class<? extends ObjectType>, Class<? extends PageBase>> CREATE_NEW_OBJECT_PAGE_MAP;

private static final Map<Class<? extends ObjectType>, Class<? extends PageBase>> OBJECT_DETAILS_PAGE_MAP;

Expand All @@ -253,10 +253,10 @@ public final class WebComponentUtil {
OBJECT_DETAILS_PAGE_MAP.put(MessageTemplateType.class, PageMessageTemplate.class);
}

static {
CREATE_NEW_OBJECT_PAGE_MAP = new HashMap<>();
CREATE_NEW_OBJECT_PAGE_MAP.put(ResourceType.class, PageResourceWizard.class);
}
// static {
// CREATE_NEW_OBJECT_PAGE_MAP = new HashMap<>();
// CREATE_NEW_OBJECT_PAGE_MAP.put(ResourceType.class, PageResourceWizard.class);
// }

// only pages that support 'advanced search' are currently listed here (TODO: generalize)
private static final Map<Class<?>, Class<? extends PageBase>> OBJECT_LIST_PAGE_MAP;
Expand Down Expand Up @@ -2652,11 +2652,11 @@ public static Class<? extends PageBase> getObjectDetailsPage(Class<? extends Obj
}

public static Class<? extends PageBase> getNewlyCreatedObjectPage(Class<? extends ObjectType> type) {
if (ResourceType.class.equals(type)) {
return CREATE_NEW_OBJECT_PAGE_MAP.get(type);
} else {
// if (ResourceType.class.equals(type)) {
// return CREATE_NEW_OBJECT_PAGE_MAP.get(type);
// } else {
return OBJECT_DETAILS_PAGE_MAP.get(type);
}
// }
}

public static Class<? extends PageBase> getObjectListPage(Class<? extends ObjectType> type) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import com.evolveum.midpoint.common.LocalizationService;
import com.evolveum.midpoint.gui.api.page.PageAdminLTE;
import com.evolveum.midpoint.gui.api.page.PageBase;
import com.evolveum.midpoint.gui.impl.page.admin.resource.PageResource;
import com.evolveum.midpoint.gui.impl.page.login.PageLogin;
import com.evolveum.midpoint.model.api.ModelExecuteOptions;
import com.evolveum.midpoint.model.api.ModelInteractionService;
Expand Down Expand Up @@ -37,6 +38,7 @@
import com.evolveum.midpoint.web.security.MidPointApplication;
import com.evolveum.midpoint.xml.ns._public.common.audit_3.AuditEventRecordType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;
import com.evolveum.midpoint.xml.ns._public.resource.capabilities_3.CapabilityCollectionType;
import com.evolveum.prism.xml.ns._public.types_3.EvaluationTimeType;

import org.apache.commons.lang3.BooleanUtils;
Expand Down Expand Up @@ -741,4 +743,8 @@ public static PrismObject<SystemConfigurationType> loadSystemConfigurationAsPris
return systemConfig;
}

public static CapabilityCollectionType getNativeCapabilities(ResourceType resource, PageBase pageBase) {
OperationResult result = new OperationResult("load native capabilities");
return pageBase.getModelService().getNativeCapabilities(resource.getConnectorRef().getOid(), result);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -229,14 +229,14 @@ private boolean isMenuItemVisible(ContainerPanelConfigurationType config) {
private boolean isVisibleForAddApply(ContainerPanelConfigurationType config) {
ItemStatus status = objectDetailsModel.getObjectStatus();
if (status == ItemStatus.NOT_CHANGED) {
return true;
return isAllowedForStatus(config, OperationTypeType.MODIFY);
}
return ItemStatus.ADDED == status && isAllowedForAdd(config);
return ItemStatus.ADDED == status && isAllowedForStatus(config, OperationTypeType.ADD);
}

private boolean isAllowedForAdd(ContainerPanelConfigurationType config) {
private boolean isAllowedForStatus(ContainerPanelConfigurationType config, OperationTypeType status) {
OperationTypeType applicableForOperation = config.getApplicableForOperation();
return applicableForOperation == null || OperationTypeType.ADD == applicableForOperation;
return applicableForOperation == null || status == applicableForOperation;
}

protected void onClickPerformed(ContainerPanelConfigurationType config, AjaxRequestTarget target) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@
display = @PanelDisplay(label = "pageAdminFocus.basic", icon = GuiStyleConstants.CLASS_CIRCLE_FULL, order = 10))
@PanelInstance(identifier = "basic",
applicableForType = ResourceType.class,
applicableForOperation = OperationTypeType.ADD,
defaultPanel = true,
display = @PanelDisplay(label = "pageAdminFocus.basic", icon = GuiStyleConstants.CLASS_CIRCLE_FULL, order = 10))
public class AssignmentHolderBasicPanel<AH extends AssignmentHolderType> extends AbstractObjectMainPanel<AH, ObjectDetailsModels<AH>> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -99,30 +99,30 @@ public void onClick(AjaxRequestTarget target) {
refreshSchema.showTitleAsLabel(true);
resourceButtons.add(refreshSchema);

AjaxIconButton wizardShow = new AjaxIconButton(resourceButtons.newChildId(), Model.of(GuiStyleConstants.CLASS_ICON_WIZARD),
createStringResource("pageResource.button.wizardShow")) {
private static final long serialVersionUID = 1L;

@Override
public void onClick(AjaxRequestTarget target) {
startWizard(false, true);
}
};
wizardShow.showTitleAsLabel(true);
wizardShow.add(new VisibleBehaviour(() -> isEditingObject() && canEdit(getObjectType())));
resourceButtons.add(wizardShow);
AjaxIconButton wizardEdit = new AjaxIconButton(resourceButtons.newChildId(), Model.of(GuiStyleConstants.CLASS_ICON_WIZARD),
createStringResource("pageResource.button.wizardEdit")) {
private static final long serialVersionUID = 1L;

@Override
public void onClick(AjaxRequestTarget target) {
startWizard(false, false);
}
};
wizardEdit.showTitleAsLabel(true);
wizardEdit.add(new VisibleBehaviour(() -> isEditingObject() && canEdit(getObjectType())));
resourceButtons.add(wizardEdit);
// AjaxIconButton wizardShow = new AjaxIconButton(resourceButtons.newChildId(), Model.of(GuiStyleConstants.CLASS_ICON_WIZARD),
// createStringResource("pageResource.button.wizardShow")) {
// private static final long serialVersionUID = 1L;
//
// @Override
// public void onClick(AjaxRequestTarget target) {
// startWizard(false, true);
// }
// };
// wizardShow.showTitleAsLabel(true);
// wizardShow.add(new VisibleBehaviour(() -> isEditingObject() && canEdit(getObjectType())));
// resourceButtons.add(wizardShow);
// AjaxIconButton wizardEdit = new AjaxIconButton(resourceButtons.newChildId(), Model.of(GuiStyleConstants.CLASS_ICON_WIZARD),
// createStringResource("pageResource.button.wizardEdit")) {
// private static final long serialVersionUID = 1L;
//
// @Override
// public void onClick(AjaxRequestTarget target) {
// startWizard(false, false);
// }
// };
// wizardEdit.showTitleAsLabel(true);
// wizardEdit.add(new VisibleBehaviour(() -> isEditingObject() && canEdit(getObjectType())));
// resourceButtons.add(wizardEdit);
}

private void testConnectionPerformed(AjaxRequestTarget target) {
Expand Down Expand Up @@ -169,13 +169,13 @@ private boolean canEdit(ResourceType resource) {
return true;
}

private void startWizard(boolean configOnly, boolean readOnly) {
PageParameters parameters = new PageParameters();
parameters.add(OnePageParameterEncoder.PARAMETER, getPrismObject().getOid()); // compatibility with PageAdminResources
parameters.add(PageResourceWizard.PARAM_CONFIG_ONLY, configOnly);
parameters.add(PageResourceWizard.PARAM_READ_ONLY, readOnly);
getPageBase().navigateToNext(new PageResourceWizard(parameters));
}
// private void startWizard(boolean configOnly, boolean readOnly) {
// PageParameters parameters = new PageParameters();
// parameters.add(OnePageParameterEncoder.PARAMETER, getPrismObject().getOid()); // compatibility with PageAdminResources
// parameters.add(PageResourceWizard.PARAM_CONFIG_ONLY, configOnly);
// parameters.add(PageResourceWizard.PARAM_READ_ONLY, readOnly);
// getPageBase().navigateToNext(new PageResourceWizard(parameters));
// }

private boolean isVisibleRefresSchemaButton(ResourceType resource) {
if (!isEditingObject()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,25 +6,31 @@
*/
package com.evolveum.midpoint.gui.impl.page.admin.resource;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

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.prism.wrapper.PrismObjectWrapper;
import com.evolveum.midpoint.gui.api.util.WebModelServiceUtils;
import com.evolveum.midpoint.gui.impl.page.admin.DetailsFragment;
import com.evolveum.midpoint.gui.impl.page.admin.assignmentholder.PageAssignmentHolderDetails;
import com.evolveum.midpoint.gui.impl.page.admin.component.ResourceOperationalButtonsPanel;
import com.evolveum.midpoint.gui.impl.page.admin.resource.component.wizard.*;
import com.evolveum.midpoint.prism.PrismObject;
import com.evolveum.midpoint.schema.constants.SchemaConstants;
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.security.api.AuthorizationConstants;
import com.evolveum.midpoint.authentication.api.authorization.AuthorizationAction;
import com.evolveum.midpoint.authentication.api.authorization.PageDescriptor;
import com.evolveum.midpoint.authentication.api.authorization.Url;

import com.evolveum.midpoint.xml.ns._public.common.common_3.*;

import com.evolveum.midpoint.xml.ns._public.resource.capabilities_3.CapabilityCollectionType;

import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.form.Form;
Expand All @@ -38,6 +44,8 @@
import com.evolveum.midpoint.schema.SelectorOptions;
import com.evolveum.midpoint.web.page.admin.resources.ResourceSummaryPanel;

import org.jetbrains.annotations.Nullable;

@PageDescriptor(
urls = {
@Url(mountUrl = "/admin/resource")
Expand Down Expand Up @@ -102,34 +110,41 @@ protected void initFragmentLayout() {
}

private List<WizardStep> createSteps() {
BasicSettingStepPanel basicSettings = new BasicSettingStepPanel(getObjectDetailsModels()) {
List<WizardStep> steps = new ArrayList<>();
steps.add(new BasicSettingStepPanel(getObjectDetailsModels()) {

@Override
public boolean onBackPerformed(AjaxRequestTarget target) {
super.onBackPerformed(target);

// index is already lowered
int index = getWizard().getActiveStepIndex();
if (index == 0) {
return false;
}

Fragment fragment = createTemplateFragment();
fragment.setOutputMarkupId(true);
PageResource.this.replace(fragment);
target.add(fragment);

return false;
}
};
});

PartialConfigurationStepPanel configuration = new PartialConfigurationStepPanel(getObjectDetailsModels());

DiscoveryStepPanel discover = new DiscoveryStepPanel(getObjectDetailsModels());

SelectObjectClassesStepPanel selectObjectClasses = new SelectObjectClassesStepPanel(getObjectDetailsModels());
PrismObject<ConnectorType> connector = WebModelServiceUtils.loadObject(getModelObjectType().getConnectorRef(), PageResource.this);

if (connector != null && SchemaConstants.ICF_FRAMEWORK_URI.equals(connector.asObjectable().getFramework())) {
CapabilityCollectionType capabilities
= WebModelServiceUtils.getNativeCapabilities(getModelObjectType(), PageResource.this);

if (capabilities.getDiscoverConfiguration() != null) {
steps.add(new PartialConfigurationStepPanel(getObjectDetailsModels()));
steps.add(new DiscoveryStepPanel(getObjectDetailsModels()));
} else {
steps.add(new ConfigurationStepPanel(getObjectDetailsModels()));
}

if (capabilities.getSchema() != null) {
steps.add(new SelectObjectClassesStepPanel(getObjectDetailsModels()));
}
}

return List.of(basicSettings, configuration, discover, selectObjectClasses);
return steps;
}

@Override
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
/*
* Copyright (C) 2022 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.page.admin.resource.component.wizard;

import com.evolveum.midpoint.gui.api.page.PageBase;
import com.evolveum.midpoint.gui.api.util.WebModelServiceUtils;
import com.evolveum.midpoint.gui.impl.page.admin.resource.ResourceDetailsModel;
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.task.api.Task;
import com.evolveum.midpoint.util.logging.LoggingUtils;
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.OperationTypeType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ResourceType;

import com.evolveum.midpoint.xml.ns._public.resource.capabilities_3.CapabilityCollectionType;

import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.model.IModel;
import org.jetbrains.annotations.Nullable;

/**
* @author lskublik
*/
public abstract class AbstractConfigurationStepPanel extends AbstractResourceWizardStepPanel {

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

private static final String OPERATION_RESOURCE_TEST = AbstractConfigurationStepPanel.class.getName() + ".resourceTest";
public AbstractConfigurationStepPanel(ResourceDetailsModel model) {
super(model);
}

@Override
protected String getIcon() {
return "fa fa-cog";
}

@Override
public IModel<String> getTitle() {
return createStringResource("PageResource.wizard.step.configuration");
}

@Override
protected IModel<?> getTextModel() {
return createStringResource("PageResource.wizard.configuration.text");
}

@Override
protected IModel<?> getSubTextModel() {
return createStringResource("PageResource.wizard.configuration.subText");
}

@Override
public boolean onNextPerformed(AjaxRequestTarget target) {

CapabilityCollectionType capabilities
= WebModelServiceUtils.getNativeCapabilities(getResourceModel().getObjectType(), getPageBase());

if (capabilities.getSchema() != null || capabilities.getTestConnection() != null) {
PageBase pageBase = getPageBase();
Task task = pageBase.createSimpleTask(OPERATION_RESOURCE_TEST);
OperationResult result = task.getResult();

try {
pageBase.getModelService().testResource(getResourceModel().getObjectWrapper().getObjectApplyDelta(), task, result);
} catch (Exception e) {
LoggingUtils.logUnexpectedException(LOGGER, "Failed to test resource connection", e);
result.recordFatalError(getString("TestConnectionMessagesPanel.message.testConnection.fatalError"), e);
}
result.computeStatus();

if (result.isSuccess()) {
return super.onNextPerformed(target);
}
pageBase.showResult(result);
target.add(getFeedback());
} else {
super.onNextPerformed(target);
}

return false;
}
}

0 comments on commit 0e8296c

Please sign in to comment.