Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/master' into feature/mid-7053
Browse files Browse the repository at this point in the history
  • Loading branch information
mederly committed Sep 28, 2021
2 parents 89a1858 + 9a603b1 commit 9463696
Show file tree
Hide file tree
Showing 15 changed files with 313 additions and 46 deletions.
8 changes: 3 additions & 5 deletions dist/javadoc/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -22,12 +22,10 @@
<name>midPoint JavaDoc</name>

<properties>
<!-- see notes in main midPoint POM -->
<!-- MID-5666: For some reason deploying of javadoc was disabled -->
<!--
<!-- Don't set maven.deploy.skip to true, we want Jenkins to publish artifacts, see MID-5666. -->
<!-- See notes in main midPoint POM, install skip allows for -Dmaven.javadoc.skip, see MID-7242. -->
<maven.install.skip>true</maven.install.skip>
<maven.deploy.skip>true</maven.deploy.skip>
-->
<!-- This enables build without -DskipTests option (e.g. full build). -->
<maven.test.skip>true</maven.test.skip>
</properties>

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

import com.evolveum.midpoint.web.component.util.VisibleBehaviour;

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

import org.apache.commons.lang3.BooleanUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.wicket.Component;
Expand Down Expand Up @@ -331,14 +333,29 @@ private ContainerPanelConfigurationType findDefaultConfiguration() {
private ContainerPanelConfigurationType findDefaultConfiguration(List<ContainerPanelConfigurationType> configs) {
List<ContainerPanelConfigurationType> subConfigs = new ArrayList<>();
for (ContainerPanelConfigurationType config : configs) {
if (BooleanUtils.isTrue(config.isDefault())) {
if (BooleanUtils.isTrue(config.isDefault()) && isApplicableForOperation(config)) {
return config;
}
subConfigs.addAll(config.getPanel());
}
return findDefaultConfiguration(subConfigs);
}

private boolean isApplicableForOperation(ContainerPanelConfigurationType configurationType) {
if (configurationType.getApplicableForOperation() == null) { //applicable for all
return true;
}

if (configurationType.getApplicableForOperation() == OperationTypeType.ADD && !isEditObject()) {
return true;
}

if (configurationType.getApplicableForOperation() == OperationTypeType.MODIFY && isEditObject()) {
return true;
}
return false;
}

private void initMainPanel(ContainerPanelConfigurationType panelConfig, MidpointForm form) {
getSessionStorage().setObjectDetailsStorage("details" + getType().getSimpleName(), panelConfig);
String panelType = panelConfig.getPanelType();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -246,7 +246,7 @@ protected List<ObjectReferenceType> getNewObjectReferencesList(CompiledObjectCol
}
ObjectReferenceType membershipRef = new ObjectReferenceType();
membershipRef.setOid(AbstractRoleMemberPanel.this.getModelObject().getOid());
membershipRef.setType(R.COMPLEX_TYPE);
membershipRef.setType(AbstractRoleMemberPanel.this.getModelObject().asPrismObject().getComplexTypeDefinition().getTypeName());
membershipRef.setRelation(relation != null && CollectionUtils.isNotEmpty(relation.getRelations()) ?
relation.getRelations().get(0) : null);
refList.add(membershipRef);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,19 +14,24 @@
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.PanelInstances;
import com.evolveum.midpoint.web.application.PanelType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.AssignmentHolderType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ContainerPanelConfigurationType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ResourceType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.TaskType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;

@PanelType(name = "basic", defaultContainerPath = "empty")
@PanelInstance(identifier = "basic",
applicableForType = AssignmentHolderType.class,
excludeTypes = { TaskType.class, ResourceType.class },
defaultPanel = true,
display = @PanelDisplay(label = "pageAdminFocus.basic", icon = GuiStyleConstants.CLASS_CIRCLE_FULL, order = 10))

@PanelInstances(instances = {
@PanelInstance(identifier = "basic",
applicableForType = AssignmentHolderType.class,
excludeTypes = { TaskType.class, ResourceType.class },
defaultPanel = true,
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>> {

private static final String ID_MAIN_PANEL = "properties";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@

import com.evolveum.midpoint.web.component.AjaxIconButton;

import com.evolveum.midpoint.web.component.util.VisibleBehaviour;

import org.apache.commons.lang3.StringUtils;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.behavior.AttributeAppender;
Expand Down Expand Up @@ -67,6 +69,7 @@ public void onClick(AjaxRequestTarget target) {
}
};
test.showTitleAsLabel(true);
test.add(new VisibleBehaviour(() -> isEditingObject()));
test.add(AttributeAppender.append("class", "btn-default btn-sm"));
resourceButtons.add(test);

Expand All @@ -86,7 +89,7 @@ public void onClick(AjaxRequestTarget target) {

@Override
public boolean isVisible() {
return canEdit(getObjectType());
return isEditingObject() && canEdit(getObjectType());
}
});
setMaintenance.add(AttributeAppender.append("class", "btn-default btn-sm"));
Expand All @@ -113,26 +116,26 @@ public boolean isVisible() {
refreshSchema.add(AttributeAppender.append("class", "btn-default btn-sm"));
resourceButtons.add(refreshSchema);

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

@Override
public void onClick(AjaxRequestTarget target) {
startWizard(true, false);
}
};
configurationEdit.showTitleAsLabel(true);
configurationEdit.add(new VisibleEnableBehaviour() {
private static final long serialVersionUID = 1L;

@Override
public boolean isVisible() {
return canEdit(getObjectType());
}
});
configurationEdit.add(AttributeAppender.append("class", "btn-default btn-sm"));
resourceButtons.add(configurationEdit);
// AjaxIconButton configurationEdit = new AjaxIconButton(resourceButtons.newChildId(), Model.of(GuiStyleConstants.CLASS_EDIT_MENU_ITEM),
// createStringResource("pageResource.button.configurationEdit")) {
// private static final long serialVersionUID = 1L;
//
// @Override
// public void onClick(AjaxRequestTarget target) {
// startWizard(true, false);
// }
// };
// configurationEdit.showTitleAsLabel(true);
// configurationEdit.add(new VisibleEnableBehaviour() {
// private static final long serialVersionUID = 1L;
//
// @Override
// public boolean isVisible() {
// return canEdit(getObjectType());
// }
// });
// configurationEdit.add(AttributeAppender.append("class", "btn-default btn-sm"));
// resourceButtons.add(configurationEdit);
AjaxIconButton wizardShow = new AjaxIconButton(resourceButtons.newChildId(), Model.of(GuiStyleConstants.CLASS_ICON_WIZARD),
createStringResource("pageResource.button.wizardShow")) {
private static final long serialVersionUID = 1L;
Expand All @@ -148,7 +151,7 @@ public void onClick(AjaxRequestTarget target) {

@Override
public boolean isVisible() {
return canEdit(getObjectType());
return isEditingObject() && canEdit(getObjectType());
}
});
wizardShow.add(AttributeAppender.append("class", "btn-default btn-sm"));
Expand All @@ -168,7 +171,7 @@ public void onClick(AjaxRequestTarget target) {

@Override
public boolean isVisible() {
return canEdit(getObjectType());
return isEditingObject() && canEdit(getObjectType());
}
});
wizardEdit.add(AttributeAppender.append("class", "btn-default btn-sm"));
Expand Down Expand Up @@ -229,6 +232,9 @@ private void startWizard(boolean configOnly, boolean readOnly) {
}

private boolean isVisibleRefresSchemaButton(ResourceType resource) {
if (!isEditingObject()) {
return false;
}
if (!resource.getAdditionalConnector().isEmpty()) {
if (resource.getCapabilities() == null) {
return false;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,11 @@ protected void refreshStatus(AjaxRequestTarget target) {
PageResource.this.refresh(target);
// target.add(getDetailsPanel());
}

@Override
protected void savePerformed(AjaxRequestTarget target) {
PageResource.this.savePerformed(target);
}
};
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,18 +1,120 @@
package com.evolveum.midpoint.gui.impl.page.admin.resource;

import com.evolveum.midpoint.gui.api.factory.wrapper.WrapperContext;
import com.evolveum.midpoint.gui.api.model.LoadableModel;
import com.evolveum.midpoint.gui.api.page.PageBase;
import com.evolveum.midpoint.gui.api.prism.ItemStatus;
import com.evolveum.midpoint.gui.api.prism.wrapper.PrismContainerWrapper;
import com.evolveum.midpoint.gui.api.prism.wrapper.PrismObjectWrapper;
import com.evolveum.midpoint.gui.api.prism.wrapper.PrismReferenceWrapper;
import com.evolveum.midpoint.gui.api.util.ModelServiceLocator;
import com.evolveum.midpoint.gui.api.util.WebComponentUtil;
import com.evolveum.midpoint.gui.api.util.WebModelServiceUtils;
import com.evolveum.midpoint.gui.impl.page.admin.assignmentholder.AssignmentHolderDetailsModel;
import com.evolveum.midpoint.prism.PrismContainer;
import com.evolveum.midpoint.prism.PrismContainerDefinition;
import com.evolveum.midpoint.prism.PrismObject;
import com.evolveum.midpoint.prism.Referencable;
import com.evolveum.midpoint.prism.schema.PrismSchema;
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.schema.util.ConnectorTypeUtil;
import com.evolveum.midpoint.schema.util.ResourceTypeUtil;
import com.evolveum.midpoint.task.api.Task;
import com.evolveum.midpoint.util.exception.SchemaException;
import com.evolveum.midpoint.util.exception.SystemException;
import com.evolveum.midpoint.web.page.admin.resources.PageResourceWizard;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ConnectorConfigurationType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ConnectorType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ResourceType;

import org.apache.wicket.RestartResponseException;

public class ResourceDetailsModel extends AssignmentHolderDetailsModel<ResourceType> {

private static final String DOT_CLASS = ResourceDetailsModel.class.getName() + ".";
private static final String OPERATION_CREATE_CONFIGURATION_WRAPPERS = DOT_CLASS + "loadConnectorWrapper";

private final LoadableModel<PrismContainerWrapper<ConnectorConfigurationType>> configurationModel;

public ResourceDetailsModel(LoadableModel<PrismObject<ResourceType>> prismObjectModel, ModelServiceLocator serviceLocator) {
super(prismObjectModel, serviceLocator);

this.configurationModel = new LoadableModel<>(true) {
@Override
protected PrismContainerWrapper<ConnectorConfigurationType> load() {
OperationResult result = new OperationResult(OPERATION_CREATE_CONFIGURATION_WRAPPERS);
try {
return createConfigContainerWrappers(result);
} catch (Exception e) {
result.recordPartialError("Cannot load conector configuration, " + e.getMessage());
getPageBase().showResult(result);
return null;
}
}
};
}

private PageBase getPageBase() {
return (PageBase) getModelServiceLocator();
}

private PrismContainerWrapper<ConnectorConfigurationType> createConfigContainerWrappers(OperationResult result) throws SchemaException {

Task task = getModelServiceLocator().createSimpleTask(OPERATION_CREATE_CONFIGURATION_WRAPPERS);
PrismObjectWrapper<ResourceType> resourceWrapper = getObjectWrapper();

PrismContainerWrapper<ConnectorConfigurationType> configuration = resourceWrapper.findContainer(ResourceType.F_CONNECTOR_CONFIGURATION);
PrismContainer<ConnectorConfigurationType> connectorConfigurationType = null;

ItemStatus configurationStatus = ItemStatus.NOT_CHANGED;
if (configuration == null || configuration.isEmpty()) {
PrismReferenceWrapper<Referencable> connectorRef = resourceWrapper.findReference(ResourceType.F_CONNECTOR_REF);
if (connectorRef == null || connectorRef.getValue() == null || connectorRef.getValue().getRealValue() == null) {
return null;
}

PrismObject<ConnectorType> connector = WebModelServiceUtils.resolveReferenceNoFetch(connectorRef.getValue().getRealValue(), getPageBase(), task, result);
if (connector == null) {
return null;
}
ConnectorType connectorType = connector.asObjectable();
PrismSchema schema;
try {
schema = ConnectorTypeUtil.parseConnectorSchema(connectorType, getPrismContext());
} catch (SchemaException e) {
throw new SystemException("Couldn't parse connector schema: " + e.getMessage(), e);
}
PrismContainerDefinition<ConnectorConfigurationType> definition = ConnectorTypeUtil.findConfigurationContainerDefinition(connectorType, schema);
// Fixing (errorneously) set maxOccurs = unbounded. See MID-2317 and related issues.
PrismContainerDefinition<ConnectorConfigurationType> definitionFixed = definition.clone();
definitionFixed.toMutable().setMaxOccurs(1);
connectorConfigurationType = definitionFixed.instantiate();
configurationStatus = ItemStatus.ADDED;

WrapperContext ctx = new WrapperContext(task, result);
ctx.setShowEmpty(ItemStatus.ADDED == configurationStatus);
// PrismContainerWrapper<ConnectorConfigurationType> configurationNew = getModelServiceLocator().createItemWrapper(connectorConfigurationType, configurationStatus, ctx);

configuration.removeAll(getPageBase());
configuration.add(connectorConfigurationType.getValue(), getPageBase());
}

return configuration;




}

public LoadableModel<PrismContainerWrapper<ConnectorConfigurationType>> getConfigurationModel() {
return configurationModel;
}

public PrismContainerWrapper<ConnectorConfigurationType> getConfigurationModelObject() {
return configurationModel.getObject();
}

// @Override
// @Override
// protected GuiObjectDetailsPageType loadDetailsPageConfiguration(PrismObject<ResourceType> resource) {
// GuiObjectDetailsPageType defaultPageConfig = super.loadDetailsPageConfiguration(resource);
//
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
~ Copyright (c) 2021 Evolveum
~
~ This work is dual-licensed under the Apache License 2.0
~ and European Union Public License. See LICENSE file for details.
-->
<!DOCTYPE html>
<html xmlns:wicket="http://wicket.apache.org">
<wicket:panel>

<label wicket:id="noConnectorLabel"></label>
<div wicket:id="configuration"></div>
</wicket:panel>
</html>

0 comments on commit 9463696

Please sign in to comment.