Skip to content

Commit

Permalink
adding wizard for synchronization and credentials of resource object …
Browse files Browse the repository at this point in the history
…type
  • Loading branch information
skublik committed Aug 1, 2022
1 parent 1f670da commit f759145
Show file tree
Hide file tree
Showing 14 changed files with 531 additions and 153 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7,36 +7,24 @@
package com.evolveum.midpoint.gui.impl.page.admin.resource.component.wizard;

import com.evolveum.midpoint.gui.api.component.BasePanel;
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.PrismContainerValueWrapper;
import com.evolveum.midpoint.gui.api.prism.wrapper.PrismContainerWrapper;
import com.evolveum.midpoint.gui.api.util.WebPrismUtil;
import com.evolveum.midpoint.gui.impl.page.admin.resource.ResourceDetailsModel;
import com.evolveum.midpoint.gui.impl.page.admin.resource.component.wizard.objectType.attributeMapping.AttributeMappingsTableWizardPanel;
import com.evolveum.midpoint.gui.impl.page.admin.resource.component.wizard.objectType.attributeMapping.BasicSettingAttributeMappingStepPanel;
import com.evolveum.midpoint.prism.Containerable;
import com.evolveum.midpoint.prism.PrismContainerValue;
import com.evolveum.midpoint.prism.path.ItemPath;
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.util.exception.SchemaException;
import com.evolveum.midpoint.util.logging.Trace;
import com.evolveum.midpoint.util.logging.TraceManager;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ResourceAttributeDefinitionType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ResourceObjectTypeDefinitionType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ResourceType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.SchemaHandlingType;

import org.apache.wicket.Component;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.panel.Fragment;
import org.apache.wicket.model.IModel;

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

/**
* @author lskublik
*/
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
/*
* 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.objectType;

import com.evolveum.midpoint.prism.Containerable;

import com.evolveum.midpoint.prism.path.ItemPath;

import org.apache.wicket.model.IModel;

import com.evolveum.midpoint.gui.api.prism.wrapper.PrismContainerValueWrapper;
import com.evolveum.midpoint.gui.api.prism.wrapper.PrismContainerWrapper;
import com.evolveum.midpoint.gui.impl.page.admin.resource.ResourceDetailsModel;
import com.evolveum.midpoint.gui.impl.page.admin.resource.component.wizard.basic.AbstractFormResourceWizardStepPanel;
import com.evolveum.midpoint.web.model.PrismContainerWrapperModel;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ResourceAttributeDefinitionType;

/**
* @author lskublik
*/
public abstract class AbstractInboundStepPanel<C extends Containerable> extends AbstractFormResourceWizardStepPanel {


private final IModel<PrismContainerValueWrapper<C>> newValueModel;

public AbstractInboundStepPanel(ResourceDetailsModel model,
IModel<PrismContainerValueWrapper<C>> newValueModel) {
super(model);
this.newValueModel = newValueModel;
}

@Override
protected IModel<? extends PrismContainerWrapper> getContainerFormModel() {
PrismContainerWrapperModel<C, Containerable> model
= PrismContainerWrapperModel.fromContainerValueWrapper(newValueModel, getContainerPath());
model.getObject().setExpanded(true);
return model;
}

protected ItemPath getContainerPath() {
return ResourceAttributeDefinitionType.F_INBOUND;
}

@Override
protected boolean isExitButtonVisible() {
return true;
}

@Override
protected String getIcon() {
return "fa fa-circle";
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
/*
* 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.objectType;

import com.evolveum.midpoint.prism.path.ItemPath;

import org.apache.wicket.model.IModel;

import com.evolveum.midpoint.gui.api.prism.wrapper.PrismContainerValueWrapper;
import com.evolveum.midpoint.gui.api.prism.wrapper.PrismContainerWrapper;
import com.evolveum.midpoint.gui.impl.page.admin.resource.ResourceDetailsModel;
import com.evolveum.midpoint.gui.impl.page.admin.resource.component.wizard.basic.AbstractFormResourceWizardStepPanel;
import com.evolveum.midpoint.prism.Containerable;
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.OperationTypeType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ResourceAttributeDefinitionType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ResourceType;

/**
* @author lskublik
*/
public abstract class AbstractOutboundStepPanel<C extends Containerable> extends AbstractFormResourceWizardStepPanel {

private static final String PANEL_TYPE = "OutboundAttributeMappingWizard";

private final IModel<PrismContainerValueWrapper<C>> newValueModel;

public AbstractOutboundStepPanel(ResourceDetailsModel model,
IModel<PrismContainerValueWrapper<C>> newValueModel) {
super(model);
this.newValueModel = newValueModel;
}

@Override
protected IModel<? extends PrismContainerWrapper> getContainerFormModel() {
PrismContainerWrapperModel<C, Containerable> model
= PrismContainerWrapperModel.fromContainerValueWrapper(newValueModel, getContainerPath());
model.getObject().setExpanded(true);
return model;
}

protected ItemPath getContainerPath() {
return ResourceAttributeDefinitionType.F_OUTBOUND;
}

@Override
protected boolean isExitButtonVisible() {
return true;
}

@Override
protected String getIcon() {
return "fa fa-circle";
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,30 +6,24 @@
*/
package com.evolveum.midpoint.gui.impl.page.admin.resource.component.wizard.objectType;

import com.evolveum.midpoint.gui.api.component.BasePanel;
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.PrismContainerValueWrapper;
import com.evolveum.midpoint.gui.api.prism.wrapper.PrismContainerWrapper;
import com.evolveum.midpoint.gui.api.util.WebPrismUtil;
import com.evolveum.midpoint.gui.impl.page.admin.resource.ResourceDetailsModel;
import com.evolveum.midpoint.gui.impl.page.admin.resource.component.wizard.AbstractResourceWizardPanel;
import com.evolveum.midpoint.gui.impl.page.admin.resource.component.wizard.objectType.attributeMapping.AttributeMappingWizardPanel;
import com.evolveum.midpoint.prism.PrismContainerValue;
import com.evolveum.midpoint.gui.impl.page.admin.resource.component.wizard.objectType.attributeMapping.*;
import com.evolveum.midpoint.gui.impl.page.admin.resource.component.wizard.objectType.credentials.PasswordInboundStepPanel;
import com.evolveum.midpoint.gui.impl.page.admin.resource.component.wizard.objectType.credentials.PasswordOutboundStepPanel;
import com.evolveum.midpoint.gui.impl.page.admin.resource.component.wizard.objectType.synchronization.DefaultSettingStepPanel;
import com.evolveum.midpoint.gui.impl.page.admin.resource.component.wizard.objectType.synchronization.ReactionStepPanel;
import com.evolveum.midpoint.prism.path.ItemPath;
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.util.exception.SchemaException;
import com.evolveum.midpoint.util.logging.Trace;
import com.evolveum.midpoint.util.logging.TraceManager;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ResourceObjectTypeDefinitionType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ResourceType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.SchemaHandlingType;

import org.apache.wicket.Component;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.panel.Fragment;
import org.apache.wicket.model.IModel;

import java.util.ArrayList;
Expand Down Expand Up @@ -112,6 +106,12 @@ protected void onResourceTileClick(ResourceObjectTypePreviewTileType value, Ajax
case ATTRIBUTE_MAPPING:
showTableForAttributes(target, getValueModel());
break;
case SYNCHRONIZATION_CONFIG:
showSynchronizationConfigWizard(target, getValueModel());
break;
case CREDENTIALS:
showCredentialsWizard(target, getValueModel());
break;
}
}

Expand All @@ -122,6 +122,78 @@ protected void onExitPerformed(AjaxRequestTarget target) {
});
}

private void showSynchronizationConfigWizard(
AjaxRequestTarget target, IModel<PrismContainerValueWrapper<ResourceObjectTypeDefinitionType>> valueModel) {
showWizardFragment(
target,
new WizardPanel(getIdOfWizardPanel(), new WizardModel(createSynchronizationConfigSteps(valueModel))));
}

private List<WizardStep> createSynchronizationConfigSteps(IModel<PrismContainerValueWrapper<ResourceObjectTypeDefinitionType>> valueModel) {
List<WizardStep> steps = new ArrayList<>();
steps.add(new DefaultSettingStepPanel(getResourceModel(), valueModel) {
@Override
protected void onExitPerformed(AjaxRequestTarget target) {
showObjectTypePreviewFragment(valueModel, target);
}
});

steps.add(new ReactionStepPanel(getResourceModel(), valueModel) {
@Override
protected void onExitPerformed(AjaxRequestTarget target) {
showObjectTypePreviewFragment(valueModel, target);
}

@Override
protected void onFinishWizardPerformed(AjaxRequestTarget target) {
OperationResult result = onSaveResourcePerformed(target);
if (result != null && !result.isError()) {
onExitPerformed(target);
}
}
});



return steps;
}

private void showCredentialsWizard(
AjaxRequestTarget target, IModel<PrismContainerValueWrapper<ResourceObjectTypeDefinitionType>> valueModel) {
showWizardFragment(
target,
new WizardPanel(getIdOfWizardPanel(), new WizardModel(createCredentialsSteps(valueModel))));
}

private List<WizardStep> createCredentialsSteps(IModel<PrismContainerValueWrapper<ResourceObjectTypeDefinitionType>> valueModel) {
List<WizardStep> steps = new ArrayList<>();
steps.add(new PasswordInboundStepPanel(getResourceModel(), valueModel) {
@Override
protected void onExitPerformed(AjaxRequestTarget target) {
showObjectTypePreviewFragment(valueModel, target);
}
});

steps.add(new PasswordOutboundStepPanel(getResourceModel(), valueModel) {
@Override
protected void onExitPerformed(AjaxRequestTarget target) {
showObjectTypePreviewFragment(valueModel, target);
}

@Override
protected void onFinishWizardPerformed(AjaxRequestTarget target) {
OperationResult result = onSaveResourcePerformed(target);
if (result != null && !result.isError()) {
onExitPerformed(target);
}
}
});



return steps;
}

private void showTableForAttributes(AjaxRequestTarget target, IModel<PrismContainerValueWrapper<ResourceObjectTypeDefinitionType>> valueModel) {
showChoiceFragment(target, new AttributeMappingWizardPanel(
getIdOfChoicePanel(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,77 +8,42 @@

import com.evolveum.midpoint.gui.api.prism.wrapper.PrismContainerValueWrapper;
import com.evolveum.midpoint.gui.api.prism.wrapper.PrismContainerWrapper;
import com.evolveum.midpoint.gui.api.util.WebComponentUtil;
import com.evolveum.midpoint.gui.impl.page.admin.resource.ResourceDetailsModel;
import com.evolveum.midpoint.gui.impl.page.admin.resource.component.wizard.basic.AbstractFormResourceWizardStepPanel;
import com.evolveum.midpoint.prism.path.ItemPath;
import com.evolveum.midpoint.gui.impl.page.admin.resource.component.wizard.objectType.AbstractInboundStepPanel;
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.ContainerPanelConfigurationType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.OperationTypeType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ResourceAttributeDefinitionType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ResourceType;

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

import org.apache.wicket.model.IModel;

/**
* @author lskublik
*/
@PanelType(name = "InboundAttributeMappingWizard")
@PanelInstance(identifier = "InboundAttributeMappingWizard",
@PanelType(name = "attributeInboundWizard")
@PanelInstance(identifier = "attributeInboundWizard",
applicableForType = ResourceType.class,
applicableForOperation = OperationTypeType.ADD,
display = @PanelDisplay(label = "PageResource.wizard.attributes.step.inbound", icon = "fa fa-circle"),
containerPath = "schemaHandling/objectType/attribute/inbound",
expanded = true)
public class InboundAttributeMappingStepPanel extends AbstractFormResourceWizardStepPanel {

private static final String PANEL_TYPE = "InboundAttributeMappingWizard";
public class AttributeInboundStepPanel extends AbstractInboundStepPanel<ResourceAttributeDefinitionType> {

private final IModel<PrismContainerValueWrapper<ResourceAttributeDefinitionType>> newValueModel;
private static final String PANEL_TYPE = "attributeInboundWizard";

public InboundAttributeMappingStepPanel(ResourceDetailsModel model,
public AttributeInboundStepPanel(ResourceDetailsModel model,
IModel<PrismContainerValueWrapper<ResourceAttributeDefinitionType>> newValueModel) {
super(model);
this.newValueModel = newValueModel;
super(model, newValueModel);
}

protected String getPanelType() {
return PANEL_TYPE;
}

@Override
protected IModel<? extends PrismContainerWrapper> getContainerFormModel() {
return PrismContainerWrapperModel.fromContainerValueWrapper(newValueModel, ResourceAttributeDefinitionType.F_INBOUND);
}

// @Override
// protected ContainerPanelConfigurationType getContainerConfiguration() {
// ContainerPanelConfigurationType config = WebComponentUtil.getContainerConfiguration(
// getResourceModel().getObjectDetailsPageConfiguration().getObject(),
// getPanelType());
// if (config != null) {
// config.setPath(new ItemPathType(ItemPath.create(
// newValueModel.getObject().getPath(),
// ResourceAttributeDefinitionType.F_INBOUND)));
// }
// return config;
// }

@Override
protected boolean isExitButtonVisible() {
return true;
}

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

@Override
public IModel<String> getTitle() {
return createStringResource("PageResource.wizard.attributes.step.inbound");
Expand Down

0 comments on commit f759145

Please sign in to comment.