From e1cc13f4b241983416631736e6b06ce04c4ac486 Mon Sep 17 00:00:00 2001 From: Pavol Mederly Date: Tue, 26 Mar 2019 11:22:51 +0100 Subject: [PATCH 01/16] Add updateSchema connector operation It is necessary to provide updated resource schema to connector instances in multi-connector resources (e.g. REST+AMQP). --- .../provisioning/impl/ResourceManager.java | 22 +++++++- .../ucf/api/ConnectorInstance.java | 5 ++ .../AbstractManagedConnectorInstance.java | 7 ++- .../connid/ConnectorInstanceConnIdImpl.java | 50 ++++--------------- 4 files changed, 42 insertions(+), 42 deletions(-) diff --git a/provisioning/provisioning-impl/src/main/java/com/evolveum/midpoint/provisioning/impl/ResourceManager.java b/provisioning/provisioning-impl/src/main/java/com/evolveum/midpoint/provisioning/impl/ResourceManager.java index 1cc1b082668..6d4ad6d80de 100644 --- a/provisioning/provisioning-impl/src/main/java/com/evolveum/midpoint/provisioning/impl/ResourceManager.java +++ b/provisioning/provisioning-impl/src/main/java/com/evolveum/midpoint/provisioning/impl/ResourceManager.java @@ -819,11 +819,31 @@ public void testConnection(PrismObject resource, Task task, Operat schemaResult.recordSuccess(); + try { + updateResourceSchema(allConnectorSpecs, parentResult, resource); + } catch (SchemaException | ObjectNotFoundException | CommunicationException | ConfigurationException | RuntimeException e) { + modifyResourceAvailabilityStatus(resource, AvailabilityStatusType.BROKEN, parentResult); + parentResult.recordFatalError("Couldn't update resource schema: " + e.getMessage(), e); + return; + } + // TODO: connector sanity (e.g. refined schema, at least one account type, identifiers // in schema, etc.) } - + + private void updateResourceSchema(List allConnectorSpecs, OperationResult parentResult, + PrismObject resource) + throws SchemaException, ObjectNotFoundException, CommunicationException, ConfigurationException { + ResourceSchema resourceSchema = RefinedResourceSchemaImpl.getResourceSchema(resource, prismContext); + if (resourceSchema != null) { + for (ConnectorSpec connectorSpec : allConnectorSpecs) { + ConnectorInstance instance = connectorManager.getConfiguredConnectorInstance(connectorSpec, false, parentResult); + instance.updateSchema(resourceSchema); + } + } + } + public void testConnectionConnector(ConnectorSpec connectorSpec, Map> capabilityMap, Task task, OperationResult parentResult) { // === test INITIALIZATION === diff --git a/provisioning/ucf-api/src/main/java/com/evolveum/midpoint/provisioning/ucf/api/ConnectorInstance.java b/provisioning/ucf-api/src/main/java/com/evolveum/midpoint/provisioning/ucf/api/ConnectorInstance.java index b1adc4cc199..babd5377de1 100644 --- a/provisioning/ucf-api/src/main/java/com/evolveum/midpoint/provisioning/ucf/api/ConnectorInstance.java +++ b/provisioning/ucf-api/src/main/java/com/evolveum/midpoint/provisioning/ucf/api/ConnectorInstance.java @@ -116,6 +116,11 @@ public interface ConnectorInstance { void initialize(ResourceSchema previousResourceSchema, Collection previousCapabilities, boolean caseIgnoreAttributeNames, OperationResult parentResult) throws CommunicationException, GenericFrameworkException, ConfigurationException; + /** + * Updates stored resource schema and capabilities. + */ + void updateSchema(ResourceSchema resourceSchema); + /** * Retrieves native connector capabilities. * diff --git a/provisioning/ucf-api/src/main/java/com/evolveum/midpoint/provisioning/ucf/api/connectors/AbstractManagedConnectorInstance.java b/provisioning/ucf-api/src/main/java/com/evolveum/midpoint/provisioning/ucf/api/connectors/AbstractManagedConnectorInstance.java index 352336c1e52..72dad706cdb 100644 --- a/provisioning/ucf-api/src/main/java/com/evolveum/midpoint/provisioning/ucf/api/connectors/AbstractManagedConnectorInstance.java +++ b/provisioning/ucf-api/src/main/java/com/evolveum/midpoint/provisioning/ucf/api/connectors/AbstractManagedConnectorInstance.java @@ -121,12 +121,17 @@ public void initialize(ResourceSchema resourceSchema, Collection capabil result.addContext("connector", getConnectorObject().toString()); result.addContext(OperationResult.CONTEXT_IMPLEMENTATION_CLASS, this.getClass()); - setResourceSchema(resourceSchema); + updateSchema(resourceSchema); setCapabilities(capabilities); result.recordSuccessIfUnknown(); } + @Override + public void updateSchema(ResourceSchema resourceSchema) { + setResourceSchema(resourceSchema); + } + @Override public void configure(PrismContainerValue configuration, OperationResult parentResult) throws CommunicationException, GenericFrameworkException, SchemaException, diff --git a/provisioning/ucf-impl-connid/src/main/java/com/evolveum/midpoint/provisioning/ucf/impl/connid/ConnectorInstanceConnIdImpl.java b/provisioning/ucf-impl-connid/src/main/java/com/evolveum/midpoint/provisioning/ucf/impl/connid/ConnectorInstanceConnIdImpl.java index 4cfb2538845..6ebe207ae01 100644 --- a/provisioning/ucf-impl-connid/src/main/java/com/evolveum/midpoint/provisioning/ucf/impl/connid/ConnectorInstanceConnIdImpl.java +++ b/provisioning/ucf-impl-connid/src/main/java/com/evolveum/midpoint/provisioning/ucf/impl/connid/ConnectorInstanceConnIdImpl.java @@ -39,36 +39,19 @@ import org.identityconnectors.framework.api.ConnectorFacade; import org.identityconnectors.framework.api.ConnectorFacadeFactory; import org.identityconnectors.framework.api.ConnectorInfo; -import org.identityconnectors.framework.api.operations.APIOperation; -import org.identityconnectors.framework.api.operations.CreateApiOp; -import org.identityconnectors.framework.api.operations.DeleteApiOp; -import org.identityconnectors.framework.api.operations.GetApiOp; -import org.identityconnectors.framework.api.operations.SchemaApiOp; -import org.identityconnectors.framework.api.operations.ScriptOnConnectorApiOp; -import org.identityconnectors.framework.api.operations.ScriptOnResourceApiOp; -import org.identityconnectors.framework.api.operations.SearchApiOp; -import org.identityconnectors.framework.api.operations.SyncApiOp; -import org.identityconnectors.framework.api.operations.TestApiOp; -import org.identityconnectors.framework.api.operations.UpdateApiOp; -import org.identityconnectors.framework.api.operations.UpdateDeltaApiOp; import org.identityconnectors.framework.common.exceptions.AlreadyExistsException; import org.identityconnectors.framework.common.objects.Attribute; import org.identityconnectors.framework.common.objects.AttributeBuilder; import org.identityconnectors.framework.common.objects.AttributeDelta; -import org.identityconnectors.framework.common.objects.AttributeInfo; -import org.identityconnectors.framework.common.objects.AttributeInfo.Flags; import org.identityconnectors.framework.common.objects.ConnectorObject; import org.identityconnectors.framework.common.objects.Name; import org.identityconnectors.framework.common.objects.ObjectClass; -import org.identityconnectors.framework.common.objects.ObjectClassInfo; -import org.identityconnectors.framework.common.objects.OperationOptionInfo; import org.identityconnectors.framework.common.objects.OperationOptions; import org.identityconnectors.framework.common.objects.OperationOptionsBuilder; import org.identityconnectors.framework.common.objects.OperationalAttributes; import org.identityconnectors.framework.common.objects.PredefinedAttributes; import org.identityconnectors.framework.common.objects.QualifiedUid; import org.identityconnectors.framework.common.objects.ResultsHandler; -import org.identityconnectors.framework.common.objects.Schema; import org.identityconnectors.framework.common.objects.ScriptContext; import org.identityconnectors.framework.common.objects.SearchResult; import org.identityconnectors.framework.common.objects.SortKey; @@ -124,7 +107,6 @@ import com.evolveum.midpoint.schema.util.SchemaDebugUtil; import com.evolveum.midpoint.schema.util.ShadowUtil; import com.evolveum.midpoint.task.api.StateReporter; -import com.evolveum.midpoint.util.DOMUtil; import com.evolveum.midpoint.util.DebugUtil; import com.evolveum.midpoint.util.Holder; import com.evolveum.midpoint.util.PrettyPrinter; @@ -142,29 +124,13 @@ import com.evolveum.midpoint.xml.ns._public.common.common_3.ConnectorType; import com.evolveum.midpoint.xml.ns._public.common.common_3.CriticalityType; import com.evolveum.midpoint.xml.ns._public.common.common_3.PasswordType; -import com.evolveum.midpoint.xml.ns._public.common.common_3.ProvisioningScriptHostType; import com.evolveum.midpoint.xml.ns._public.common.common_3.ResourceType; -import com.evolveum.midpoint.xml.ns._public.common.common_3.ShadowKindType; import com.evolveum.midpoint.xml.ns._public.common.common_3.ShadowType; import com.evolveum.midpoint.xml.ns._public.resource.capabilities_3.ActivationCapabilityType; -import com.evolveum.midpoint.xml.ns._public.resource.capabilities_3.ActivationLockoutStatusCapabilityType; -import com.evolveum.midpoint.xml.ns._public.resource.capabilities_3.ActivationStatusCapabilityType; -import com.evolveum.midpoint.xml.ns._public.resource.capabilities_3.ActivationValidityCapabilityType; -import com.evolveum.midpoint.xml.ns._public.resource.capabilities_3.AddRemoveAttributeValuesCapabilityType; -import com.evolveum.midpoint.xml.ns._public.resource.capabilities_3.AuxiliaryObjectClassesCapabilityType; import com.evolveum.midpoint.xml.ns._public.resource.capabilities_3.CapabilityType; -import com.evolveum.midpoint.xml.ns._public.resource.capabilities_3.CreateCapabilityType; import com.evolveum.midpoint.xml.ns._public.resource.capabilities_3.CredentialsCapabilityType; -import com.evolveum.midpoint.xml.ns._public.resource.capabilities_3.DeleteCapabilityType; -import com.evolveum.midpoint.xml.ns._public.resource.capabilities_3.LiveSyncCapabilityType; import com.evolveum.midpoint.xml.ns._public.resource.capabilities_3.PagedSearchCapabilityType; -import com.evolveum.midpoint.xml.ns._public.resource.capabilities_3.PasswordCapabilityType; import com.evolveum.midpoint.xml.ns._public.resource.capabilities_3.ReadCapabilityType; -import com.evolveum.midpoint.xml.ns._public.resource.capabilities_3.RunAsCapabilityType; -import com.evolveum.midpoint.xml.ns._public.resource.capabilities_3.SchemaCapabilityType; -import com.evolveum.midpoint.xml.ns._public.resource.capabilities_3.ScriptCapabilityType; -import com.evolveum.midpoint.xml.ns._public.resource.capabilities_3.ScriptCapabilityType.Host; -import com.evolveum.midpoint.xml.ns._public.resource.capabilities_3.TestConnectionCapabilityType; import com.evolveum.midpoint.xml.ns._public.resource.capabilities_3.UpdateCapabilityType; import com.evolveum.prism.xml.ns._public.query_3.OrderDirectionType; import com.evolveum.prism.xml.ns._public.types_3.ProtectedStringType; @@ -426,14 +392,10 @@ public void initialize(ResourceSchema resourceSchema, Collection capabil validateConnectorFacade(parentResult); - setResourceSchema(resourceSchema); + updateSchema(resourceSchema); this.capabilities = capabilities; this.caseIgnoreAttributeNames = caseIgnoreAttributeNames; - if (resourceSchema != null && legacySchema == null) { - legacySchema = detectLegacySchema(resourceSchema); - } - if (resourceSchema == null || capabilities == null) { try { @@ -459,7 +421,15 @@ public void initialize(ResourceSchema resourceSchema, Collection capabil result.recordSuccess(); } - + + public void updateSchema(ResourceSchema resourceSchema) { + setResourceSchema(resourceSchema); + + if (resourceSchema != null && legacySchema == null) { + legacySchema = detectLegacySchema(resourceSchema); + } + } + private boolean detectLegacySchema(ResourceSchema resourceSchema) { ComplexTypeDefinition accountObjectClass = resourceSchema.findComplexTypeDefinition( new QName(resourceSchemaNamespace, SchemaConstants.ACCOUNT_OBJECT_CLASS_LOCAL_NAME)); From 9918c4fedcb81144de88d3bd86018cc32a70a084 Mon Sep 17 00:00:00 2001 From: kate Date: Tue, 26 Mar 2019 11:50:04 +0100 Subject: [PATCH 02/16] translations fix --- .../ConstructionDetailsPanelChainedModel.html | 53 ---- .../ConstructionDetailsPanelChainedModel.java | 245 ------------------ .../localization/Midpoint.properties | 4 +- .../localization/Midpoint_en.properties | 4 +- .../resources/localization/schema.properties | 2 +- .../localization/schema_en.properties | 2 +- 6 files changed, 6 insertions(+), 304 deletions(-) delete mode 100644 gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/ConstructionDetailsPanelChainedModel.html delete mode 100644 gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/ConstructionDetailsPanelChainedModel.java diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/ConstructionDetailsPanelChainedModel.html b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/ConstructionDetailsPanelChainedModel.html deleted file mode 100644 index c479b405a5f..00000000000 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/ConstructionDetailsPanelChainedModel.html +++ /dev/null @@ -1,53 +0,0 @@ - - - - - -
-
- -
-
-
- -
-
-
- -
-
- -
-
-
-
-
-
-
-
-
- diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/ConstructionDetailsPanelChainedModel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/ConstructionDetailsPanelChainedModel.java deleted file mode 100644 index f11ab8b38cd..00000000000 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/ConstructionDetailsPanelChainedModel.java +++ /dev/null @@ -1,245 +0,0 @@ -/** - * Copyright (c) 2015-2018 Evolveum - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.evolveum.midpoint.web.component.assignment; - -import com.evolveum.midpoint.common.refinery.RefinedObjectClassDefinition; -import com.evolveum.midpoint.common.refinery.RefinedResourceSchema; -import com.evolveum.midpoint.gui.api.component.BasePanel; -import com.evolveum.midpoint.gui.api.model.LoadableModel; -import com.evolveum.midpoint.gui.api.util.WebComponentUtil; -import com.evolveum.midpoint.gui.api.util.WebModelServiceUtils; -import com.evolveum.midpoint.prism.PrismObject; -import com.evolveum.midpoint.schema.result.OperationResult; -import com.evolveum.midpoint.task.api.Task; -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.web.component.input.DropDownChoicePanel; -import com.evolveum.midpoint.web.page.admin.configuration.component.EmptyOnBlurAjaxFormUpdatingBehaviour; -import com.evolveum.midpoint.xml.ns._public.common.common_3.ConstructionType; -import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectReferenceType; -import com.evolveum.midpoint.xml.ns._public.common.common_3.ResourceType; -import com.evolveum.midpoint.xml.ns._public.common.common_3.ShadowKindType; -import org.apache.wicket.ajax.AjaxEventBehavior; -import org.apache.wicket.ajax.AjaxRequestTarget; -import org.apache.wicket.markup.html.form.ChoiceRenderer; -import org.apache.wicket.markup.html.form.DropDownChoice; -import org.apache.wicket.markup.html.form.Form; -import org.apache.wicket.markup.html.form.TextField; -import org.apache.wicket.model.*; -import sun.security.provider.SHA; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -/** - * Created by honchar. - */ -public class ConstructionDetailsPanelChainedModel extends BasePanel { - private static final long serialVersionUID = 1L; - - private static final Trace LOGGER = TraceManager.getTrace(ConstructionDetailsPanelChainedModel.class); - private static final String DOT_CLASS = ConstructionDetailsPanelChainedModel.class.getName() + "."; - private static final String OPERATION_LOAD_RESOURCE = DOT_CLASS + "loadResource"; - - private static final String ID_FORM = "constructionForm"; - private static final String ID_KIND_FIELD = "kindField"; - private static final String ID_INTENT_FIELD = "intentField"; - - private IModel intentChoicesModel; - private LoadableDetachableModel> resourceModel; - private IModel kindModel; - - public ConstructionDetailsPanelChainedModel(String id, IModel constructionModel) { - super(id, constructionModel); - } - - @Override - protected void onInitialize() { - super.onInitialize(); - initModels(); - initLayout(); - } - - private void initModels() { - resourceModel = new LoadableDetachableModel>() { - @Override - protected PrismObject load() { - ObjectReferenceType resourceRef = getModelObject().getResourceRef(); - Task loadResourceTask = getPageBase().createSimpleTask(OPERATION_LOAD_RESOURCE); - OperationResult result = new OperationResult(OPERATION_LOAD_RESOURCE); - PrismObject resource = WebModelServiceUtils.loadObject(resourceRef, getPageBase(), loadResourceTask, result); - result.computeStatusIfUnknown(); - if (!result.isAcceptable()) { - LOGGER.error("Cannot find resource referenced from construction. {}", result.getMessage()); - result.recordPartialError("Could not find resource referenced from construction."); - return null; - } - return resource; - } - }; - kindModel = new IModel() { - @Override - public ShadowKindType getObject() { - return getModelObject().getKind(); - } - - @Override - public void setObject(ShadowKindType shadowKindType) { - getModelObject().setKind(shadowKindType); - } - - @Override - public void detach() { - - } - }; - intentChoicesModel = new ChainingModel(kindModel) { - private static final long serialVersionUID = 1L; - - @Override - public String getObject() { - - List availableIntentValues = new ArrayList<>(); - try { - if (resourceModel.getObject() == null) { - return availableIntentValues.toString(); - } - RefinedResourceSchema refinedSchema = RefinedResourceSchema.getRefinedSchema(resourceModel.getObject()); - if (refinedSchema != null) { - ShadowKindType kind = ((IModel) super.getChainedModel()).getObject(); - List definitions = refinedSchema.getRefinedDefinitions(kind); - for (RefinedObjectClassDefinition def : definitions) { - if (def.getIntent() != null) { - availableIntentValues.add(def.getIntent()); - } - } - } - } catch (SchemaException ex) { - LOGGER.error("Cannot get refined resource schema for resource {}. {}", resourceModel.getObject().getName().getOrig(), ex.getLocalizedMessage()); - } - - return availableIntentValues.toString(); - } - - @Override - public void setObject(String o){ - super.setObject(o); - } - }; - } - - private void initLayout() { - CompoundPropertyModel constrModel = new CompoundPropertyModel(getModel()){ - @Override - public Object getObject(){ - Object o = super.getObject(); - return o; - } - - @Override - public void setObject(Object o){ - super.setObject(o); - } - }; - Form form = new Form(ID_FORM, constrModel); - form.setOutputMarkupId(true); - - DropDownChoice kindChoice = new DropDownChoice<>("kind", Model.ofList(Arrays.asList(ShadowKindType.values()))); - kindChoice.setOutputMarkupId(true); - kindChoice.add(new EmptyOnBlurAjaxFormUpdatingBehaviour(){ - @Override - protected void onUpdate(AjaxRequestTarget ajaxRequestTarget) { -// ajaxRequestTarget.add(form); - } - }); -// kindChoice.add(new AjaxEventBehavior("blur") { -// @Override -// protected void onEvent(AjaxRequestTarget ajaxRequestTarget) { -// ajaxRequestTarget.add(form); -// } -// }); - form.add(kindChoice); - DropDownChoice intentDropdown = new DropDownChoice<>("intent", new IModel>() { - @Override - public List getObject() { - List availableIntentValues = new ArrayList<>(); - try { - if (resourceModel.getObject() == null) { - return availableIntentValues; - } - RefinedResourceSchema refinedSchema = RefinedResourceSchema.getRefinedSchema(resourceModel.getObject()); - if (refinedSchema != null) { - ConstructionType m = (ConstructionType) constrModel.getObject(); - ShadowKindType kind = m.getKind(); - List definitions = refinedSchema.getRefinedDefinitions(kind); - for (RefinedObjectClassDefinition def : definitions) { - if (def.getIntent() != null) { - availableIntentValues.add(def.getIntent()); - } - } - } - } catch (SchemaException ex) { - LOGGER.error("Cannot get refined resource schema for resource {}. {}", resourceModel.getObject().getName().getOrig(), ex.getLocalizedMessage()); - } - - return availableIntentValues; - } - @Override - public void setObject(List o) { - // - } - - @Override - public void detach(){ - - } - }); - - intentDropdown.setOutputMarkupId(true); - form.add(intentDropdown); - - add(form); - - -// DropDownChoice kindDropDown = new DropDownChoice(ID_KIND_FIELD, kindModel, Model.ofList(Arrays.asList(ShadowKindType.values()))){ -// @Override -// protected void onSelectionChanged(ShadowKindType newSelection) { -// if (newSelection == null){ -// ConstructionDetailsPanelChainedModel.this.getModelObject().setKind(null); -// return; -// } -// if (newSelection instanceof ShadowKindType){ -// ConstructionDetailsPanelChainedModel.this.getModelObject().setKind((ShadowKindType) newSelection); -// } -// } -// }; -// kindDropDown.add(new EmptyOnBlurAjaxFormUpdatingBehaviour()); -// -// kindDropDown.setOutputMarkupId(true); -// add(kindDropDown); -// -// TextField intentDropDown = new TextField(ID_INTENT_FIELD, intentChoicesModel); -// DropDownChoicePanel intentDropDown = new DropDownChoicePanel(ID_INTENT_FIELD, -// PropertyModel.of(getModel(), ConstructionType.F_INTENT.getLocalPart()), intentChoicesModel); -// intentDropDown.getBaseFormComponent().add(new EmptyOnBlurAjaxFormUpdatingBehaviour()); -// intentDropDown.setOutputMarkupId(true); -// add(intentDropDown); - - } - -} diff --git a/gui/admin-gui/src/main/resources/localization/Midpoint.properties b/gui/admin-gui/src/main/resources/localization/Midpoint.properties index b0a92d34ad8..c507a771df5 100755 --- a/gui/admin-gui/src/main/resources/localization/Midpoint.properties +++ b/gui/admin-gui/src/main/resources/localization/Midpoint.properties @@ -2106,7 +2106,7 @@ pageSystemConfiguration.adminGui.title=Admin GUI pageSystemConfiguration.system.title=System pageSystemConfiguration.objectPolicy.title=Object policy pageSystemConfiguration.globalPolicyRule.title=Global policy rule -pageSystemConfiguration.globalAccountSynchronization.title=Global account synchronization +pageSystemConfiguration.globalAccountSynchronization.title=Global projection policy pageSystemConfiguration.cleanupPolicy.title=Cleanup policy pageSystemConfiguration.roleManagement.title=Role management pageSystemConfiguration.internals.title=Internals configuration @@ -3189,7 +3189,7 @@ SystemConfigPanel.mail.username=Username SystemConfigPanel.misc.enableExperimentalCode=Enable MODEL experimental code SystemConfigPanel.notification.redirectToFile.placeholder=Filename SystemConfigPanel.notification.redirectToFile=Redirect to file -SystemConfigPanel.title.accountSynchronization=Global account synchronization settings +SystemConfigPanel.title.accountSynchronization=Global projection policy SystemConfigPanel.title.basic=Basic SystemConfigPanel.title.connectorFramework=Connector frameworks configuration SystemConfigPanel.title.misc=Miscellaneous diff --git a/gui/admin-gui/src/main/resources/localization/Midpoint_en.properties b/gui/admin-gui/src/main/resources/localization/Midpoint_en.properties index 1693f241017..eed4d792ca3 100644 --- a/gui/admin-gui/src/main/resources/localization/Midpoint_en.properties +++ b/gui/admin-gui/src/main/resources/localization/Midpoint_en.properties @@ -2098,7 +2098,7 @@ pageSystemConfiguration.adminGui.title=Admin GUI pageSystemConfiguration.system.title=System pageSystemConfiguration.objectPolicy.title=Object policy pageSystemConfiguration.globalPolicyRule.title=Global policy rule -pageSystemConfiguration.globalAccountSynchronization.title=Global account synchronization +pageSystemConfiguration.globalAccountSynchronization.title=Global projection policy pageSystemConfiguration.cleanupPolicy.title=Cleanup policy pageSystemConfiguration.roleManagement.title=Role management pageSystemConfiguration.internals.title=Internals configuration @@ -3175,7 +3175,7 @@ SystemConfigPanel.mail.username=Username SystemConfigPanel.misc.enableExperimentalCode=Enable MODEL experimental code SystemConfigPanel.notification.redirectToFile.placeholder=Filename SystemConfigPanel.notification.redirectToFile=Redirect to file -SystemConfigPanel.title.accountSynchronization=Global account synchronization settings +SystemConfigPanel.title.accountSynchronization=Global projection policy SystemConfigPanel.title.basic=Basic SystemConfigPanel.title.connectorFramework=Connector frameworks configuration SystemConfigPanel.title.misc=Miscellaneous diff --git a/infra/schema/src/main/resources/localization/schema.properties b/infra/schema/src/main/resources/localization/schema.properties index aedaf3abc3c..ab88909a6f7 100755 --- a/infra/schema/src/main/resources/localization/schema.properties +++ b/infra/schema/src/main/resources/localization/schema.properties @@ -812,7 +812,7 @@ ServiceType.type=Type ServiceType.displayOrder=Display Order ServiceType.URL=URL SystemConfigurationType.globalSecurityPolicyRef=Global security policy -SystemConfigurationType.globalAccountSynchronizationSettings=Global account synchronization settings +SystemConfigurationType.globalAccountSynchronizationSettings=Global projection policy configuration SystemConfigurationType.logging=Logging SystemConfigurationType.notificationConfiguration=Notification configuration SystemConfigurationType.workflowConfiguration=Workflow configuration diff --git a/infra/schema/src/main/resources/localization/schema_en.properties b/infra/schema/src/main/resources/localization/schema_en.properties index 7744d241078..8d41d561b1b 100644 --- a/infra/schema/src/main/resources/localization/schema_en.properties +++ b/infra/schema/src/main/resources/localization/schema_en.properties @@ -812,7 +812,7 @@ ServiceType.type=Type ServiceType.displayOrder=Display Order ServiceType.URL=URL SystemConfigurationType.globalSecurityPolicyRef=Global security policy -SystemConfigurationType.globalAccountSynchronizationSettings=Global account synchronization settings +SystemConfigurationType.globalAccountSynchronizationSettings=Global projection policy configuration SystemConfigurationType.logging=Logging SystemConfigurationType.notificationConfiguration=Notification configuration SystemConfigurationType.workflowConfiguration=Workflow configuration From 67ceb9cdab9280d3ba64fa2a4cc2e7246197e33a Mon Sep 17 00:00:00 2001 From: kate Date: Tue, 26 Mar 2019 13:41:45 +0100 Subject: [PATCH 03/16] fix MID-5204 sequentialSearch capability paging --- .../midpoint/web/component/data/BoxedTablePanel.java | 6 +++--- .../midpoint/web/component/wf/WorkItemsPanel.java | 8 ++++---- .../web/page/admin/workflow/ProcessInstancesPanel.java | 8 ++++---- .../midpoint/web/page/self/PageSelfDashboard.java | 8 ++++---- .../evolveum/midpoint/provisioning/impl/ShadowCache.java | 6 +++++- 5 files changed, 20 insertions(+), 16 deletions(-) diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/data/BoxedTablePanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/data/BoxedTablePanel.java index 2618e2683ff..9f10495b752 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/data/BoxedTablePanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/data/BoxedTablePanel.java @@ -119,7 +119,7 @@ protected Item newRowItem(String id, int index, IModel rowModel) { box.add(createHeader(ID_HEADER)); WebMarkupContainer footer = createFooter(ID_FOOTER); - footer.add(new VisibleBehaviour(() -> isFooterVisible(provider.size(), pageSize))); + footer.add(new VisibleBehaviour(() -> !hideFooterIfSinglePage() || provider.size() > pageSize)); box.add(footer); } @@ -136,8 +136,8 @@ protected Item customizeNewRowItem(Item item, IModel model) { return item; } - protected boolean isFooterVisible(long providerSize, int pageSize){ - return true; + protected boolean hideFooterIfSinglePage(){ + return false; } @Override diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/wf/WorkItemsPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/wf/WorkItemsPanel.java index 381ed4a039e..eacd825d9b1 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/wf/WorkItemsPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/wf/WorkItemsPanel.java @@ -167,8 +167,8 @@ public Date getObject() { private static final long serialVersionUID = 1L; @Override - protected boolean isFooterVisible(long providerSize, int pageSize){ - return WorkItemsPanel.this.isFooterVisible(providerSize, pageSize); + protected boolean hideFooterIfSinglePage(){ + return WorkItemsPanel.this.hideFooterIfSinglePage(); } }; workItemsTable.setAdditionalBoxCssClasses("without-box-header-top-border"); @@ -350,7 +350,7 @@ public void populateItem(Item> item, String componen }; } - protected boolean isFooterVisible(long providerSize, int pageSize){ - return true; + protected boolean hideFooterIfSinglePage(){ + return false; } } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/workflow/ProcessInstancesPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/workflow/ProcessInstancesPanel.java index ca364ea5f37..6d3f46b6ad2 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/workflow/ProcessInstancesPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/workflow/ProcessInstancesPanel.java @@ -94,8 +94,8 @@ public String getObject() { } @Override - protected boolean isFooterVisible(long providerSize, int pageSize){ - return ProcessInstancesPanel.this.isFooterVisible(providerSize, pageSize); + protected boolean hideFooterIfSinglePage(){ + return ProcessInstancesPanel.this.hideFooterIfSinglePage(); } }; table.setOutputMarkupId(true); @@ -231,8 +231,8 @@ private String choose(IModel rowModel, String noReply, Strin }; } - protected boolean isFooterVisible(long providerSize, int pageSize){ - return true; + protected boolean hideFooterIfSinglePage(){ + return false; } private void itemDetailsPerformed(AjaxRequestTarget target, String pid) { diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/self/PageSelfDashboard.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/self/PageSelfDashboard.java index bccc87d7d8a..875cba665e4 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/self/PageSelfDashboard.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/self/PageSelfDashboard.java @@ -202,8 +202,8 @@ protected Component getMainComponent(String markupId) { private static final long serialVersionUID = 1L; @Override - protected boolean isFooterVisible(long providerSize, int pageSize){ - return providerSize > pageSize; + protected boolean hideFooterIfSinglePage(){ + return true; } }; } @@ -250,8 +250,8 @@ protected Component getMainComponent(String markupId) { private static final long serialVersionUID = 1L; @Override - protected boolean isFooterVisible(long providerSize, int pageSize){ - return providerSize > pageSize; + protected boolean hideFooterIfSinglePage(){ + return true; } }; } diff --git a/provisioning/provisioning-impl/src/main/java/com/evolveum/midpoint/provisioning/impl/ShadowCache.java b/provisioning/provisioning-impl/src/main/java/com/evolveum/midpoint/provisioning/impl/ShadowCache.java index fd7c4e9fc9c..26d82a8252f 100644 --- a/provisioning/provisioning-impl/src/main/java/com/evolveum/midpoint/provisioning/impl/ShadowCache.java +++ b/provisioning/provisioning-impl/src/main/java/com/evolveum/midpoint/provisioning/impl/ShadowCache.java @@ -2291,7 +2291,11 @@ public String toString() { return resultMetadata.getApproxNumberOfAllResults(); } else if (simulate == CountObjectsSimulateType.SEQUENTIAL_SEARCH) { - + //fix for MID-5204. as sequentialSearch option causes to fetch all resource objects, + // query paging is senseless here + if (query != null){ + query.setPaging(null); + } LOGGER.trace("countObjects: simulating counting with sequential search (likely performance impact)"); // traditional way of counting objects (i.e. counting them one by one) final Holder countHolder = new Holder<>(0); From 7ac3895521fe7b0550c1785e393195e5ac7cd9ad Mon Sep 17 00:00:00 2001 From: Pavol Mederly Date: Tue, 26 Mar 2019 22:53:26 +0100 Subject: [PATCH 04/16] Update configuration to stem-less connector --- .../grouper/function-library-grouper.xml | 29 ++- .../grouper/resource-grouper-amqp091.xml | 231 ------------------ .../grouper/resource-grouper-rest.xml | 178 -------------- .../resources/grouper/resource-grouper.xml | 14 +- 4 files changed, 34 insertions(+), 418 deletions(-) delete mode 100644 samples/resources/grouper/resource-grouper-amqp091.xml delete mode 100644 samples/resources/grouper/resource-grouper-rest.xml diff --git a/samples/resources/grouper/function-library-grouper.xml b/samples/resources/grouper/function-library-grouper.xml index f3cfdc81cb9..8ac9b0e8f17 100644 --- a/samples/resources/grouper/function-library-grouper.xml +++ b/samples/resources/grouper/function-library-grouper.xml @@ -73,8 +73,12 @@ xsd:string - exportedGroupPrefix - xsd:string + groupIncludePattern + xsd:anyType + + + groupExcludePattern + xsd:anyType relevantSourceId @@ -97,7 +101,7 @@ log.warn('No group name in membership change message, ignoring it: {}', esbEvent) return null } - isExported = groupName.startsWith(exportedGroupPrefix) + isExported = matches(groupName, groupIncludePattern, groupExcludePattern) isSuper = groupName == superGroup if (!isExported && !isSuper) { log.info('Irrelevant group membership change, ignoring it: {}', groupName) @@ -129,7 +133,7 @@ } else if (eventType == 'GROUP_ADD' || eventType == 'GROUP_DELETE') { groupName = esbEvent['name'] groupId = esbEvent['id'] - isExported = groupName.startsWith(exportedGroupPrefix) + isExported = matches(groupName, groupIncludePattern, groupExcludePattern) if (!isExported) { log.info('Irrelevant group add/delete event, ignoring it: {}', groupName) return null @@ -149,6 +153,23 @@ log.warn('Unsupported event type: {} -> {}', eventType, esbEvent) return null } + + def matches(String name, Collection includes, Collection excludes) { + matches(name, includes) && !matches(name, excludes) + } + + def matches(String name, Collection patterns) { + if (name == null || patterns == null) { + false + } else { + for (pattern in patterns) { + if (name ==~ pattern) { + return true + } + } + false + } + } c:UcfChangeType diff --git a/samples/resources/grouper/resource-grouper-amqp091.xml b/samples/resources/grouper/resource-grouper-amqp091.xml deleted file mode 100644 index fae30e56425..00000000000 --- a/samples/resources/grouper/resource-grouper-amqp091.xml +++ /dev/null @@ -1,231 +0,0 @@ - - - - - - Grouper Resource (AMQP) - - - - connectorType - AsyncUpdateConnector - - - - - - - amqp://192.168.56.101:5672 - guest - guest - sampleQueue - - - - - - - - - - - - - - - - - icfs:uid - icfs:name - icfs:name - icfs:name - - - - - - - - - - - - - - - icfs:uid - icfs:name - icfs:name - icfs:name - - - - - - - - - - - - - - - - account - subject - ri:AccountObjectClass - true - - icfs:name - - - name - - - - - ri:group - - - organizationalUnit - - - - - - entitlement - group - ri:GroupObjectClass - true - - icfs:name - - - name - - - - - - - - true - account - subject - UserType - - - name - - - $account/attributes/name - - - - - - linked - true - - - deleted - - http://midpoint.evolveum.com/xml/ns/public/model/action-3#unlink - - - - unlinked - - http://midpoint.evolveum.com/xml/ns/public/model/action-3#link - - - - unmatched - - http://midpoint.evolveum.com/xml/ns/public/model/action-3#addFocus - - - - - true - entitlement - group - OrgType - - - name - - - $account/attributes/name - - - - - - linked - true - - - deleted - - http://midpoint.evolveum.com/xml/ns/public/model/action-3#deleteFocus - - - - unlinked - - http://midpoint.evolveum.com/xml/ns/public/model/action-3#link - - - - unmatched - - http://midpoint.evolveum.com/xml/ns/public/model/action-3#addFocus - - - - - - passive - - diff --git a/samples/resources/grouper/resource-grouper-rest.xml b/samples/resources/grouper/resource-grouper-rest.xml deleted file mode 100644 index bad8ff752a4..00000000000 --- a/samples/resources/grouper/resource-grouper-rest.xml +++ /dev/null @@ -1,178 +0,0 @@ - - - - - - Grouper Resource (REST) - - - - connectorType - com.evolveum.polygon.connector.grouper.rest.GrouperConnector - - - - - - 192.168.56.101:9443 - banderson - password - etc:midpointGroups - midpoint - ldap - true - - - - - account - subject - ri:AccountObjectClass - true - - icfs:name - - - name - - - - - ri:group - - - organizationalUnit - - - - - - entitlement - group - ri:GroupObjectClass - true - - icfs:name - - - name - - - - - - - - true - account - subject - ri:AccountObjectClass - UserType - - - name - - - $account/attributes/name - - - - - - linked - true - - - deleted - - http://midpoint.evolveum.com/xml/ns/public/model/action-3#unlink - - - - unlinked - - http://midpoint.evolveum.com/xml/ns/public/model/action-3#link - - - - unmatched - - http://midpoint.evolveum.com/xml/ns/public/model/action-3#addFocus - - - - - true - entitlement - group - ri:GroupObjectClass - OrgType - - - name - - - $account/attributes/name - - - - - - linked - true - - - deleted - - http://midpoint.evolveum.com/xml/ns/public/model/action-3#deleteFocus - - - - unlinked - - http://midpoint.evolveum.com/xml/ns/public/model/action-3#link - - - - unmatched - - http://midpoint.evolveum.com/xml/ns/public/model/action-3#addFocus - - - - - - - - - - - - - passive - - diff --git a/samples/resources/grouper/resource-grouper.xml b/samples/resources/grouper/resource-grouper.xml index 02bec919cce..1a5e13dc158 100644 --- a/samples/resources/grouper/resource-grouper.xml +++ b/samples/resources/grouper/resource-grouper.xml @@ -38,12 +38,15 @@ - 192.168.56.101:9443 + https://192.168.56.101:9443 banderson password etc:midpointGroups - midpoint + midpoint:.* + ref:.* + ref:.*_(includes|excludes|systemOfRecord|systemOfRecordAndIncludes) ldap + g:gsa true @@ -72,9 +75,10 @@ // ------------------ START OF CONFIGURATION ------------------ parameters = [ - superGroup: 'etc:midpointGroups', - exportedGroupPrefix: 'midpoint:', - relevantSourceId: 'ldap' + superGroup: 'etc:midpointGroups', + groupIncludePattern: [ 'midpoint:.*', 'ref:.*' ], + groupExcludePattern: [ 'ref:.*_(includes|excludes|systemOfRecord|systemOfRecordAndIncludes)' ], + relevantSourceId: 'ldap' ] // ------------------ END OF CONFIGURATION ------------------ From d05a28e8e3e0b469ab723ce2278372da67e42e32 Mon Sep 17 00:00:00 2001 From: Pavol Mederly Date: Wed, 27 Mar 2019 00:31:59 +0100 Subject: [PATCH 05/16] Add prefetch parameter for AMQP --- .../xml/ns/public/common/common-asynchronous-3.xsd | 7 +++++++ .../ucf/impl/builtin/async/Amqp091AsyncUpdateSource.java | 4 ++++ 2 files changed, 11 insertions(+) diff --git a/infra/schema/src/main/resources/xml/ns/public/common/common-asynchronous-3.xsd b/infra/schema/src/main/resources/xml/ns/public/common/common-asynchronous-3.xsd index 8754aafa259..dc36bbfd181 100644 --- a/infra/schema/src/main/resources/xml/ns/public/common/common-asynchronous-3.xsd +++ b/infra/schema/src/main/resources/xml/ns/public/common/common-asynchronous-3.xsd @@ -152,6 +152,13 @@ + + + + Number of messages to prefetch. The default is 5. + + + diff --git a/provisioning/ucf-impl-builtin/src/main/java/com/evolveum/midpoint/provisioning/ucf/impl/builtin/async/Amqp091AsyncUpdateSource.java b/provisioning/ucf-impl-builtin/src/main/java/com/evolveum/midpoint/provisioning/ucf/impl/builtin/async/Amqp091AsyncUpdateSource.java index ca1b2b9c28d..9a0a35c6154 100644 --- a/provisioning/ucf-impl-builtin/src/main/java/com/evolveum/midpoint/provisioning/ucf/impl/builtin/async/Amqp091AsyncUpdateSource.java +++ b/provisioning/ucf-impl-builtin/src/main/java/com/evolveum/midpoint/provisioning/ucf/impl/builtin/async/Amqp091AsyncUpdateSource.java @@ -40,6 +40,8 @@ import java.util.concurrent.TimeoutException; import java.util.concurrent.atomic.AtomicInteger; +import static org.apache.commons.lang3.ObjectUtils.defaultIfNull; + /** * Async Update source for AMQP 0.9.1 brokers. * @@ -48,6 +50,7 @@ public class Amqp091AsyncUpdateSource implements AsyncUpdateSource { private static final Trace LOGGER = TraceManager.getTrace(Amqp091AsyncUpdateSource.class); + private static final int DEFAULT_PREFETCH = 10; @NotNull private final Amqp091SourceType sourceConfiguration; @NotNull private final PrismContext prismContext; @@ -97,6 +100,7 @@ private ListeningActivityImpl(AsyncUpdateMessageListener listener) { state = State.PREPARING; activeConnection = connectionFactory.newConnection(); activeChannel = activeConnection.createChannel(); + activeChannel.basicQos(defaultIfNull(sourceConfiguration.getPrefetch(), DEFAULT_PREFETCH)); LOGGER.info("Opened AMQP connection = {}, channel = {}", activeConnection, activeChannel); // todo debug DeliverCallback deliverCallback = (consumerTag, message) -> { try { From e20a428c79367cfbb8f399b119cc9b1e3e51ed69 Mon Sep 17 00:00:00 2001 From: Pavol Mederly Date: Wed, 27 Mar 2019 00:38:28 +0100 Subject: [PATCH 06/16] Add missing dependency --- provisioning/ucf-impl-builtin/pom.xml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/provisioning/ucf-impl-builtin/pom.xml b/provisioning/ucf-impl-builtin/pom.xml index e79aa596b34..47c0afbb331 100644 --- a/provisioning/ucf-impl-builtin/pom.xml +++ b/provisioning/ucf-impl-builtin/pom.xml @@ -83,6 +83,10 @@ commons-lang commons-lang + + org.apache.commons + commons-lang3 + org.springframework spring-context From 867eb6f885e3b015d1b7f8dafb7ac507e818ea02 Mon Sep 17 00:00:00 2001 From: Pavol Mederly Date: Wed, 27 Mar 2019 09:41:02 +0100 Subject: [PATCH 07/16] Disable excessive logging --- provisioning/ucf-impl-builtin/pom.xml | 2 +- .../common/task/AbstractSearchIterativeResultHandler.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/provisioning/ucf-impl-builtin/pom.xml b/provisioning/ucf-impl-builtin/pom.xml index 47c0afbb331..dc602effe50 100644 --- a/provisioning/ucf-impl-builtin/pom.xml +++ b/provisioning/ucf-impl-builtin/pom.xml @@ -26,7 +26,7 @@ com.evolveum.midpoint 4.0-SNAPSHOT - Implementation for the built-in midpoint connectors, such as the built-in "manaual connector" capability. + Implementation for the built-in midpoint connectors, such as the built-in "manual connector" capability. https://github.com/Evolveum/midpoint.git git@github.com:Evolveum/midpoint.git diff --git a/repo/repo-common/src/main/java/com/evolveum/midpoint/repo/common/task/AbstractSearchIterativeResultHandler.java b/repo/repo-common/src/main/java/com/evolveum/midpoint/repo/common/task/AbstractSearchIterativeResultHandler.java index 5f7d6fe8473..2ee0f0c3273 100644 --- a/repo/repo-common/src/main/java/com/evolveum/midpoint/repo/common/task/AbstractSearchIterativeResultHandler.java +++ b/repo/repo-common/src/main/java/com/evolveum/midpoint/repo/common/task/AbstractSearchIterativeResultHandler.java @@ -350,8 +350,8 @@ private void processRequest(ProcessingRequest request, RunningTask workerTask, O // The meat cont = handleObject(object, workerTask, result); - LOGGER.info("###Recon result: {}", result.getStatus()); - LOGGER.info("###Recon result dump: {}", result.debugDump()); +// LOGGER.info("###Recon result: {}", result.getStatus()); +// LOGGER.info("###Recon result dump: {}", result.debugDump()); // We do not want to override the result set by handler. This is just a fallback case if (result.isUnknown() || result.isInProgress()) { From 6dc94620a2af4b938acae3e6daaa6b99254c7781 Mon Sep 17 00:00:00 2001 From: kate Date: Wed, 27 Mar 2019 09:48:03 +0100 Subject: [PATCH 08/16] relation column for org members panel fix --- .../web/page/admin/roles/AbstractRoleMemberPanel.java | 8 ++++++-- .../web/page/admin/users/component/OrgMemberPanel.java | 5 +++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/roles/AbstractRoleMemberPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/roles/AbstractRoleMemberPanel.java index 79cc4a31ebb..d60cfb3a8bb 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/roles/AbstractRoleMemberPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/roles/AbstractRoleMemberPanel.java @@ -978,7 +978,7 @@ private String getRelationValue(ObjectType focusObject){ // 1. Authorizations (MID-4893). User may be authorized just for roleMemberhsipRef and not for assignment // Authorization for roleMembershipRef is enough to display member panel. // 2. There may be assignments that are not valid. We do not want to display relation for those. - for (ObjectReferenceType roleMembershipRef : ((FocusType) focusObject).getRoleMembershipRef()) { + for (ObjectReferenceType roleMembershipRef : getMembershipReferenceList((FocusType) focusObject)) { relation = buildRelation(roleMembershipRef, relation); } @@ -986,7 +986,11 @@ private String getRelationValue(ObjectType focusObject){ return relation; } - + + protected List getMembershipReferenceList(FocusType focusObject){ + return focusObject.getRoleMembershipRef(); + } + private String buildRelation(ObjectReferenceType roleMembershipRef, String relation) { if (roleMembershipRef.getOid().equals(getModelObject().getOid())) { QName assignmentRelation = roleMembershipRef.getRelation(); diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/users/component/OrgMemberPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/users/component/OrgMemberPanel.java index d327eb89acc..ed2ab2998c5 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/users/component/OrgMemberPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/users/component/OrgMemberPanel.java @@ -118,6 +118,11 @@ protected List getSupportedObjectTypes(boolean includeAbstractTypes) { return objectTypes; } + @Override + protected List getMembershipReferenceList(FocusType focusObject){ + return focusObject.getParentOrgRef(); + } + @Override protected Class getDefaultObjectType() { return getMemberPanelStorage().getType() != null ? (Class) WebComponentUtil.qnameToClass(getPageBase().getPrismContext(), From 58514a8cf3d89aecbc3ee2b08fdba8de5f3a3c31 Mon Sep 17 00:00:00 2001 From: kate Date: Wed, 27 Mar 2019 16:06:04 +0100 Subject: [PATCH 09/16] drop down panel usage refactoring (connected with mid-5107) --- .../MultiTypesMemberPopupTabPanel.html | 2 +- .../MultiTypesMemberPopupTabPanel.java | 11 ++--- .../certification/PageCertCampaigns.html | 2 +- .../certification/PageCertCampaigns.java | 6 +-- .../configuration/PageRepositoryQuery.html | 4 +- .../configuration/PageRepositoryQuery.java | 41 ++++++++----------- .../handlers/ResourceRelatedHandlerPanel.html | 4 +- .../handlers/ResourceRelatedHandlerPanel.java | 12 +++--- 8 files changed, 39 insertions(+), 43 deletions(-) diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/MultiTypesMemberPopupTabPanel.html b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/MultiTypesMemberPopupTabPanel.html index 52d55c3e983..11b61d942b2 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/MultiTypesMemberPopupTabPanel.html +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/MultiTypesMemberPopupTabPanel.html @@ -22,7 +22,7 @@ - +
searchModel = (IModel) getDefaultModel(); - DropDownChoice listSelect = new DropDownChoice<>(ID_SEARCH_STATE, + DropDownChoicePanel listSelect = new DropDownChoicePanel<>(ID_SEARCH_STATE, new PropertyModel<>(searchModel, CertCampaignsSearchDto.F_STATE_FILTER), new ReadOnlyEnumValuesModel<>(CertCampaignStateFilter.class), new EnumChoiceRenderer<>(this)); - listSelect.add(createFilterAjaxBehaviour()); + listSelect.getBaseFormComponent().add(createFilterAjaxBehaviour()); listSelect.setOutputMarkupId(true); - listSelect.setNullValid(false); searchForm.add(listSelect); AjaxSubmitButton clearButton = new AjaxSubmitButton(ID_SEARCH_CLEAR) { diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/configuration/PageRepositoryQuery.html b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/configuration/PageRepositoryQuery.html index 7cd0ea52d8e..1d2004320bf 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/configuration/PageRepositoryQuery.html +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/configuration/PageRepositoryQuery.html @@ -26,14 +26,14 @@

- +

- +
- +
-