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 Sep 15, 2022
2 parents 9e429cd + e352b09 commit c5481bd
Show file tree
Hide file tree
Showing 12 changed files with 157 additions and 80 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ public void onClick(AjaxRequestTarget target) {

@Override
public void onSubmit(AjaxRequestTarget target) {
onFinishPerformed(target);
onSubmitPerformed(target);
}

@Override
Expand Down Expand Up @@ -187,7 +187,7 @@ public boolean onNextPerformed(AjaxRequestTarget target) {
return false;
}

protected void onFinishPerformed(AjaxRequestTarget target) {
protected void onSubmitPerformed(AjaxRequestTarget target) {
onExitPerformed(target);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,18 +8,17 @@

import com.evolveum.midpoint.gui.api.component.autocomplete.AutoCompleteTextPanel;
import com.evolveum.midpoint.gui.api.page.PageBase;
import com.evolveum.midpoint.gui.api.prism.wrapper.ItemWrapper;
import com.evolveum.midpoint.gui.api.prism.wrapper.PrismContainerValueWrapper;
import com.evolveum.midpoint.gui.api.prism.wrapper.PrismObjectWrapper;
import com.evolveum.midpoint.gui.api.prism.wrapper.PrismValueWrapper;
import com.evolveum.midpoint.gui.api.prism.wrapper.*;
import com.evolveum.midpoint.gui.api.registry.GuiComponentRegistry;
import com.evolveum.midpoint.gui.impl.component.input.AutoCompleteDisplayableValueConverter;
import com.evolveum.midpoint.gui.impl.page.admin.resource.ResourceDetailsModel;
import com.evolveum.midpoint.prism.Containerable;
import com.evolveum.midpoint.prism.path.ItemName;
import com.evolveum.midpoint.prism.path.ItemPath;
import com.evolveum.midpoint.schema.processor.*;
import com.evolveum.midpoint.util.DisplayableValue;
import com.evolveum.midpoint.util.QNameUtil;
import com.evolveum.midpoint.web.component.search.DisplayableRenderer;
import com.evolveum.midpoint.util.exception.SchemaException;
import com.evolveum.midpoint.web.page.admin.configuration.component.EmptyOnBlurAjaxFormUpdatingBehaviour;
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;
import com.evolveum.prism.xml.ns._public.types_3.ItemPathType;
Expand All @@ -32,7 +31,6 @@
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.LoadableDetachableModel;
import org.apache.wicket.request.Response;
import org.apache.wicket.util.convert.ConversionException;
import org.apache.wicket.util.convert.IConverter;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
Expand Down Expand Up @@ -91,9 +89,9 @@ protected Panel getPanel(PrismPropertyPanelContext<ItemPathType> panelCtx) {
PrismObjectWrapper<ResourceType> objectWrapper = panelCtx.unwrapWrapperModel().findObjectWrapper();
if (objectWrapper != null) {

IModel<List<DisplayableValue<ItemPathType>>> values = getChoices(panelCtx.getValueWrapperModel(), panelCtx.getPageBase());
IModel<List<DisplayableValue<ItemPathType>>> values = getChoices(panelCtx.getValueWrapperModel(), panelCtx.getPageBase());

if(!values.getObject().isEmpty()) {
if (!values.getObject().isEmpty()) {

if (CollectionUtils.isNotEmpty(values.getObject())) {

Expand All @@ -112,19 +110,22 @@ protected String getTextValue(ItemPathType itemPathType) {
}
};

List<ItemPathType> choices = values.getObject().stream()
.map(disValue -> disValue.getValue())
.collect(Collectors.toList());

AutoCompleteTextPanel panel = new AutoCompleteTextPanel<>(
panelCtx.getComponentId(), panelCtx.getRealValueModel(), panelCtx.getTypeClass(), renderer) {
@Override
public Iterator<ItemPathType> getIterator(String input) {
if (StringUtils.isBlank(input)) {
return choices.iterator();
List<DisplayableValue<ItemPathType>> choices = new ArrayList<>(values.getObject());
if (StringUtils.isNotEmpty(input)) {
choices = choices.stream()
.filter(v -> v.getLabel().contains(input))
.collect(Collectors.toList());
}
return values.getObject().stream()
.filter(v -> v.getLabel().contains(input))
if (skipUsedAttributes(panelCtx)) {
choices = choices.stream()
.filter(v -> notEquivalentWithValues(panelCtx, v))
.collect(Collectors.toList());
}
return choices.stream()
.map(v -> v.getValue())
.collect(Collectors.toList())
.iterator();
Expand All @@ -145,6 +146,39 @@ protected <C> IConverter<C> getAutoCompleteConverter(Class<C> type, IConverter<C

}

private boolean notEquivalentWithValues(PrismPropertyPanelContext<ItemPathType> panelCtx, DisplayableValue<ItemPathType> v) {
PrismContainerWrapper<ResourceAttributeDefinitionType> mapping =
getAttributeMapping(panelCtx.getValueWrapperModel().getObject());

if (mapping != null) {
if (isVirtualPropertyOfMapping(panelCtx.unwrapWrapperModel())) {
PrismContainerWrapper parentContainer = panelCtx.unwrapWrapperModel().getParent().getParent();
@NotNull ItemName parentPath = parentContainer.getItemName();
for (PrismContainerValueWrapper<ResourceAttributeDefinitionType> value : mapping.getValues()) {
try {
PrismContainerWrapper<Containerable> valuesContainer = value.findContainer(parentPath);
for (PrismContainerValueWrapper<Containerable> valueContainer : valuesContainer.getValues()) {
PrismPropertyWrapper<ItemPathType> attributeRef = valueContainer.findProperty(ResourceAttributeDefinitionType.F_REF);
if (attributeRef != null && v.getValue().equivalent(attributeRef.getValue().getRealValue())) {
return false;
}
}
} catch (SchemaException e) {
// ignore it
}
}
}
}
return true;
}

private boolean skipUsedAttributes(PrismPropertyPanelContext<ItemPathType> panelCtx) {
if (isVirtualPropertyOfMapping(panelCtx.unwrapWrapperModel())) {
return panelCtx.unwrapWrapperModel().getParent().getParent().isSingleValue();
}
return true;
}

private IModel<List<DisplayableValue<ItemPathType>>> getChoices(
IModel<? extends PrismValueWrapper<ItemPathType>> propertyWrapper, PageBase pageBase) {
return new LoadableDetachableModel<>() {
Expand Down Expand Up @@ -233,21 +267,29 @@ private List<DisplayableValue<ItemPathType>> getAllAttributes(
}

private ResourceObjectTypeDefinitionType getResourceObjectType(PrismValueWrapper<ItemPathType> propertyWrapper) {
PrismContainerWrapper<ResourceAttributeDefinitionType> mapping = getAttributeMapping(propertyWrapper);
if (mapping != null
&& mapping.getParent() != null
&& mapping.getParent().getRealValue() instanceof ResourceObjectTypeDefinitionType) {
return (ResourceObjectTypeDefinitionType) mapping.getParent().getRealValue();
}
return null;
}

private PrismContainerWrapper<ResourceAttributeDefinitionType> getAttributeMapping(PrismValueWrapper<ItemPathType> propertyWrapper) {
PrismContainerValueWrapper containerValue = null;

if (propertyWrapper.getParent() != null
&& propertyWrapper.getParent().getParent() != null
&& propertyWrapper.getParent().getParent().getParent() != null) {
if (propertyWrapper.getParent() != null) {

if (!isVirtualPropertyOfMapping(propertyWrapper.getParent())) {
containerValue = propertyWrapper.getParent().getParent();
} else if (propertyWrapper.getParent().getParent() != null
&& propertyWrapper.getParent().getParent().getParent() != null) {
containerValue = propertyWrapper.getParent().getParent().getParent().getParent();
} else if (propertyWrapper.getParent().getParent().getParent().getParent() != null
&& propertyWrapper.getParent().getParent().getParent().getParent().getParent() != null) {
containerValue = propertyWrapper.getParent().getParent().getParent().getParent().getParent().getParent();
}
}
if (containerValue != null && containerValue.getRealValue() instanceof ResourceObjectTypeDefinitionType) {
return (ResourceObjectTypeDefinitionType) containerValue.getRealValue();
if (containerValue != null && containerValue.getRealValue() instanceof ResourceAttributeDefinitionType) {
return (PrismContainerWrapper<ResourceAttributeDefinitionType>) containerValue.getParent();
}
return null;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@

import com.evolveum.midpoint.task.api.Task;
import com.evolveum.midpoint.web.component.breadcrumbs.Breadcrumb;
import com.evolveum.midpoint.web.session.ObjectDetailsStorage;
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;

import org.apache.wicket.ajax.AjaxRequestTarget;
Expand Down Expand Up @@ -182,18 +183,37 @@ public void showSynchronizationWizard(AjaxRequestTarget target, IModel<PrismCont
SynchronizationConfigWizardPanel wizard = new SynchronizationConfigWizardPanel(
ID_WIZARD, getObjectDetailsModels(), valueModel) {

@Override
protected boolean isSavedAfterWizard() {
return false;
}

@Override
protected void onExitPerformed(AjaxRequestTarget target) {
DetailsFragment detailsFragment = createDetailsFragment();
PageResource.this.addOrReplace(detailsFragment);
target.add(detailsFragment);
backToDetailsFromWizard(target);
}
};
wizard.setOutputMarkupId(true);
fragment.add(wizard);
target.add(fragment);
}

private void backToDetailsFromWizard(AjaxRequestTarget target) {
//TODO change it and use parameter, when it will be implemented
ObjectDetailsStorage storage =
getSessionStorage().getObjectDetailsStorage("details" + ResourceType.class.getSimpleName());
ContainerPanelConfigurationType defaultConfig = null;
if (storage != null) {
defaultConfig = storage.getDefaultConfiguration();
}
DetailsFragment detailsFragment = createDetailsFragment();
PageResource.this.addOrReplace(detailsFragment);
if (defaultConfig != null) {
replacePanel(defaultConfig, target);
}
target.add(detailsFragment);
}

public void showObjectTypeWizard(AjaxRequestTarget target, IModel<PrismContainerValueWrapper<ResourceObjectTypeDefinitionType>> valueModel) {
Fragment fragment = new Fragment(ID_DETAILS_VIEW, ID_WIZARD_FRAGMENT, PageResource.this);
fragment.setOutputMarkupId(true);
Expand All @@ -207,9 +227,7 @@ protected boolean isSavedAfterDetailsWizard() {

@Override
protected void onExitPerformed(AjaxRequestTarget target) {
DetailsFragment detailsFragment = createDetailsFragment();
PageResource.this.addOrReplace(detailsFragment);
target.add(detailsFragment);
backToDetailsFromWizard(target);
}
};
wizard.setOutputMarkupId(true);
Expand All @@ -226,9 +244,12 @@ ID_WIZARD, getObjectDetailsModels(), valueModel) {

@Override
protected void onExitPerformed(AjaxRequestTarget target) {
DetailsFragment detailsFragment = createDetailsFragment();
PageResource.this.addOrReplace(detailsFragment);
target.add(detailsFragment);
backToDetailsFromWizard(target);
}

@Override
protected boolean isSavedAfterWizard() {
return false;
}
};
wizard.setOutputMarkupId(true);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ public ResourceDetailsModel getResourceModel() {
// return super.getNextLabelModel();
// }

protected void onFinishPerformed(AjaxRequestTarget target) {
protected void onSubmitPerformed(AjaxRequestTarget target) {
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ public boolean onBackPerformed(AjaxRequestTarget target) {
}

@Override
protected void onFinishPerformed(AjaxRequestTarget target) {
protected void onSubmitPerformed(AjaxRequestTarget target) {
BasicResourceWizardPanel.this.onFinishBasicWizardPerformed(target);
}
});
Expand All @@ -122,14 +122,14 @@ protected void onFinishPerformed(AjaxRequestTarget target) {
steps.add(new PartialConfigurationStepPanel(getResourceModel()));
steps.add(new DiscoveryStepPanel(getResourceModel()) {
@Override
protected void onFinishPerformed(AjaxRequestTarget target) {
protected void onSubmitPerformed(AjaxRequestTarget target) {
BasicResourceWizardPanel.this.onFinishBasicWizardPerformed(target);
}
});
} else {
steps.add(new ConfigurationStepPanel(getResourceModel()) {
@Override
protected void onFinishPerformed(AjaxRequestTarget target) {
protected void onSubmitPerformed(AjaxRequestTarget target) {
BasicResourceWizardPanel.this.onFinishBasicWizardPerformed(target);
}
});
Expand All @@ -138,7 +138,7 @@ protected void onFinishPerformed(AjaxRequestTarget target) {
if (capabilities.getSchema() != null) {
steps.add(new SelectObjectClassesStepPanel(getResourceModel()) {
@Override
protected void onFinishPerformed(AjaxRequestTarget target) {
protected void onSubmitPerformed(AjaxRequestTarget target) {
BasicResourceWizardPanel.this.onFinishBasicWizardPerformed(target);
}
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -90,8 +90,17 @@ protected void onExitPerformed(AjaxRequestTarget target) {
});

steps.add(new FocusResourceObjectTypeStepPanel(getResourceModel(), valueModel) {

@Override
protected IModel<?> getSubmitLabelModel() {
if (isSavedAfterDetailsWizard()) {
return super.getSubmitLabelModel();
}
return getPageBase().createStringResource("WizardPanel.confirm");
}

@Override
protected void onFinishPerformed(AjaxRequestTarget target) {
protected void onSubmitPerformed(AjaxRequestTarget target) {
if (isSavedAfterDetailsWizard()) {
OperationResult result = onSaveResourcePerformed(target);
if (result != null && !result.isError()) {
Expand Down Expand Up @@ -241,7 +250,7 @@ protected void onExitPerformed(AjaxRequestTarget target) {
}

@Override
protected void onFinishPerformed(AjaxRequestTarget target) {
protected void onSubmitPerformed(AjaxRequestTarget target) {
OperationResult result = onSaveResourcePerformed(target);
if (result != null && !result.isError()) {
onExitPerformed(target);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,30 +76,25 @@ protected void inEditInboundValue(IModel<PrismContainerValueWrapper<MappingType>
showInboundAttributeMappingWizardFragment(target, value);
}

// @Override
// protected void onEditValue(IModel<PrismContainerValueWrapper<ResourceAttributeDefinitionType>> valueModel, AjaxRequestTarget target) {
// showNewAttributeMappingWizardFragment(target, valueModel);
// }

@Override
protected void onExitPerformed(AjaxRequestTarget target) {
AttributeMappingWizardPanel.this.onExitPerformed(target);
}

@Override
protected IModel<String> getSubmitLabelModel() {
if (isSavedAfterWizard()) {
return super.getSubmitLabelModel();
}
return getPageBase().createStringResource("WizardPanel.confirm");
}
};
return table;
}

protected void onExitPerformed(AjaxRequestTarget target) {
}

private void showNewAttributeMappingWizardFragment(
AjaxRequestTarget target,
IModel<PrismContainerValueWrapper<ResourceAttributeDefinitionType>> valueModel) {
showWizardFragment(
target,
new WizardPanel(getIdOfWizardPanel(), new WizardModel(createNewAttributeMappingSteps(valueModel))));
}

private void showInboundAttributeMappingWizardFragment(
AjaxRequestTarget target,
IModel<PrismContainerValueWrapper<MappingType>> valueModel) {
Expand Down Expand Up @@ -157,20 +152,6 @@ protected void onExitPerformed(AjaxRequestTarget target) {
return steps;
}

private void createNewMapping(AjaxRequestTarget target, boolean showToast) {
// OperationResult result = onSaveResourcePerformed(target);
// if (showToast && result != null && !result.isError()) {
// new Toast()
// .success()
// .title(getString("AttributeMappingsTableWizardPanel.createObjectType"))
// .icon("fas fa-circle-check")
// .autohide(true)
// .delay(5_000)
// .body(getString("AttributeMappingsTableWizardPanel.createObjectType.text")).show(target);
onExitPerformed(target);
// }
}

@Override
protected PrismContainerWrapper<ResourceAttributeDefinitionType> findContainer(ItemPath path) throws SchemaException {
return valueModel.getObject().findContainer(path);
Expand All @@ -183,4 +164,8 @@ protected IModel<PrismContainerValueWrapper<ResourceObjectTypeDefinitionType>> g
private void showTableFragment(AjaxRequestTarget target) {
showChoiceFragment(target, createTablePanel());
}

protected boolean isSavedAfterWizard() {
return true;
}
}

0 comments on commit c5481bd

Please sign in to comment.