From 4939b354a4b7d78afe7836b3f918f0f0a682027a Mon Sep 17 00:00:00 2001 From: Erik Suta Date: Mon, 11 Aug 2014 15:45:57 +0200 Subject: [PATCH] MID-1939 - editor for object policies on system configuration pages finished --- .../web/component/MultiValueChoosePanel.java | 2 +- .../ObjectPolicyConfigurationEditor.java | 59 +++++++--- .../PageSystemConfiguration.java | 36 ++++++ .../component/ObjectPolicyDialog.java | 45 ++++---- .../component/ObjectPolicyDialog.properties | 3 +- .../component/SystemConfigPanel.java | 3 +- .../dto/ObjectPolicyConfigurationTypeDto.java | 106 ++++++++++++++++++ .../dto/ObjectPolicyDialogDto.java | 55 ++++++--- .../dto/PropertyConstraintTypeDto.java | 4 +- .../dto/SystemConfigurationDto.java | 20 ++-- 10 files changed, 256 insertions(+), 77 deletions(-) create mode 100644 gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/configuration/dto/ObjectPolicyConfigurationTypeDto.java diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/MultiValueChoosePanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/MultiValueChoosePanel.java index 69c65b821ee..f6259a4f619 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/MultiValueChoosePanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/MultiValueChoosePanel.java @@ -106,7 +106,7 @@ public String getObject() { })); listItem.add(textWrapper); - TextField text = new TextField(ID_TEXT, createTextModel(listItem.getModel())); + TextField text = new TextField<>(ID_TEXT, createTextModel(listItem.getModel())); text.add(new AjaxFormComponentUpdatingBehavior("onblur") { @Override protected void onUpdate(AjaxRequestTarget ajaxRequestTarget) {} diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/ObjectPolicyConfigurationEditor.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/ObjectPolicyConfigurationEditor.java index a08f5db6c23..4b545a34f59 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/ObjectPolicyConfigurationEditor.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/ObjectPolicyConfigurationEditor.java @@ -20,12 +20,13 @@ import com.evolveum.midpoint.schema.result.OperationResult; import com.evolveum.midpoint.util.logging.Trace; import com.evolveum.midpoint.util.logging.TraceManager; +import com.evolveum.midpoint.web.component.util.LoadableModel; import com.evolveum.midpoint.web.component.util.SimplePanel; import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour; import com.evolveum.midpoint.web.page.admin.configuration.component.ObjectPolicyDialog; +import com.evolveum.midpoint.web.page.admin.configuration.dto.ObjectPolicyConfigurationTypeDto; import com.evolveum.midpoint.web.util.WebMiscUtil; import com.evolveum.midpoint.web.util.WebModelUtils; -import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectPolicyConfigurationType; import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectReferenceType; import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectTemplateType; import org.apache.wicket.ajax.AjaxRequestTarget; @@ -50,7 +51,7 @@ * @author shood */ -public class ObjectPolicyConfigurationEditor extends SimplePanel> { +public class ObjectPolicyConfigurationEditor extends SimplePanel> { private static final Trace LOGGER = TraceManager.getTrace(ObjectPolicyConfigurationEditor.class); @@ -73,7 +74,7 @@ public class ObjectPolicyConfigurationEditor extends SimplePanel> model){ + public ObjectPolicyConfigurationEditor(String id, IModel> model){ super(id, model); setOutputMarkupId(true); @@ -85,7 +86,7 @@ protected void initLayout(){ final Label label = new Label(ID_LABEL, createStringResource("objectPolicyConfigurationEditor.label")); add(label); - ListView repeater = new ListView(ID_REPEATER, getModel()) { + ListView repeater = new ListView(ID_REPEATER, getModel()) { @Override protected void populateItem(final ListItem item) { @@ -104,6 +105,7 @@ public String getObject(){ item.add(textWrapper); TextField name = new TextField<>(ID_NAME, createNameModel(item.getModel())); + name.setOutputMarkupId(true); name.add(new AjaxFormComponentUpdatingBehavior("onblur") { @Override protected void onUpdate(AjaxRequestTarget target) {} @@ -142,6 +144,7 @@ public String getObject() { }; initDialog(); + repeater.setOutputMarkupId(true); add(repeater); } @@ -150,14 +153,36 @@ private void initDialog(){ @Override protected void savePerformed(AjaxRequestTarget target){ + ObjectPolicyConfigurationTypeDto oldConfig = getModel().getObject().getConfig(); + ObjectPolicyConfigurationTypeDto newConfig = getModel().getObject().preparePolicyConfig(); + ObjectPolicyConfigurationEditor.this.replace(oldConfig, newConfig); - + target.add(ObjectPolicyConfigurationEditor.this); + close(target); } }; add(editor); } + private void replace(ObjectPolicyConfigurationTypeDto old, ObjectPolicyConfigurationTypeDto newC){ + boolean added = false; + + List list = getModelObject(); + for(ObjectPolicyConfigurationTypeDto o: list){ + if(old.equals(o)){ + o.setConstraints(newC.getConstraints()); + o.setTemplateRef(newC.getTemplateRef()); + o.setType(newC.getType()); + added = true; + } + } + + if(!added){ + list.add(newC); + } + } + private void initButtons(WebMarkupContainer buttonGroup, final ListItem item){ AjaxLink add = new AjaxLink(ID_BUTTON_ADD) { @@ -213,17 +238,17 @@ protected boolean isRemoveButtonVisible() { return false; } - private IModel createNameModel(final IModel model){ - return new AbstractReadOnlyModel() { + private IModel createNameModel(final IModel model){ + return new LoadableModel() { @Override - public String getObject() { + public String load() { OperationResult result = new OperationResult(OPERATION_LOAD_OBJECT_TEMPLATE); StringBuilder sb = new StringBuilder(); - ObjectPolicyConfigurationType config = model.getObject(); + ObjectPolicyConfigurationTypeDto config = model.getObject(); if(config != null){ - ObjectReferenceType ref = config.getObjectTemplateRef(); + ObjectReferenceType ref = config.getTemplateRef(); if(ref != null){ String oid = ref.getOid(); @@ -247,18 +272,18 @@ public String getObject() { } private void addPerformed(AjaxRequestTarget target){ - List list = getModelObject(); - list.add(new ObjectPolicyConfigurationType()); + List list = getModelObject(); + list.add(new ObjectPolicyConfigurationTypeDto()); target.add(this); } private void removePerformed(AjaxRequestTarget target, ListItem item){ - List list = getModelObject(); - Iterator iterator = list.iterator(); + List list = getModelObject(); + Iterator iterator = list.iterator(); while (iterator.hasNext()){ - ObjectPolicyConfigurationType object = iterator.next(); + ObjectPolicyConfigurationTypeDto object = iterator.next(); if(object.equals(item.getModelObject())){ iterator.remove(); @@ -267,7 +292,7 @@ private void removePerformed(AjaxRequestTarget target, ListItem item){ } if(list.size() == 0){ - list.add(new ObjectPolicyConfigurationType()); + list.add(new ObjectPolicyConfigurationTypeDto()); } target.add(this); @@ -275,7 +300,7 @@ private void removePerformed(AjaxRequestTarget target, ListItem item){ private void editPerformed(AjaxRequestTarget target, ListItem item){ ObjectPolicyDialog window = (ObjectPolicyDialog) get(ID_MODAL_WINDOW); - window.updateModel(target, (ObjectPolicyConfigurationType)item.getModelObject()); + window.updateModel(target, (ObjectPolicyConfigurationTypeDto)item.getModelObject()); window.show(target); } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/configuration/PageSystemConfiguration.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/configuration/PageSystemConfiguration.java index 973101b07a2..6027ad54b46 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/configuration/PageSystemConfiguration.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/configuration/PageSystemConfiguration.java @@ -40,6 +40,7 @@ import com.evolveum.midpoint.web.util.WebMiscUtil; import com.evolveum.midpoint.xml.ns._public.common.common_3.*; +import com.evolveum.prism.xml.ns._public.types_3.ItemPathType; import com.evolveum.prism.xml.ns._public.types_3.ProtectedStringType; import org.apache.commons.lang.StringUtils; import org.apache.wicket.ajax.AjaxRequestTarget; @@ -315,6 +316,7 @@ private void savePerformed(AjaxRequestTarget target) { s = saveLogging(target, s); s = saveNotificationConfiguration(s); + saveObjectPolicies(s); if(LOGGER.isTraceEnabled()) LOGGER.trace("Saving logging configuration."); @@ -359,6 +361,40 @@ private void savePerformed(AjaxRequestTarget target) { resetPerformed(target); } + private void saveObjectPolicies(SystemConfigurationType systemConfig){ + List configList = systemConfigPanel.getModel().getObject().getObjectPolicyList(); + List confList = new ArrayList<>(); + + ObjectPolicyConfigurationType newObjectPolicyConfig; + for(ObjectPolicyConfigurationTypeDto o: configList){ + newObjectPolicyConfig = new ObjectPolicyConfigurationType(); + newObjectPolicyConfig.setType(o.getType()); + newObjectPolicyConfig.setObjectTemplateRef(o.getTemplateRef()); + + List constraintList = new ArrayList<>(); + PropertyConstraintType property; + + if(o.getConstraints() != null){ + for(PropertyConstraintTypeDto c: o.getConstraints()){ + if(StringUtils.isNotEmpty(c.getPropertyPath())){ + property = new PropertyConstraintType(); + property.setOidBound(c.isOidBound()); + property.setPath(new ItemPathType(c.getPropertyPath())); + + constraintList.add(property); + } + } + } + + newObjectPolicyConfig.getPropertyConstraint().addAll(constraintList); + + confList.add(newObjectPolicyConfig); + } + + systemConfig.getDefaultObjectPolicyConfiguration().clear(); + systemConfig.getDefaultObjectPolicyConfiguration().addAll(confList); + } + /* * TODO - currently, we are saving changes to MailServerConfigType on index 0 in ArrayList. This will * change when GUI is update to define multiple mailServer or even SMS notifications diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/configuration/component/ObjectPolicyDialog.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/configuration/component/ObjectPolicyDialog.java index 030c65deaad..fc498dbb5d8 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/configuration/component/ObjectPolicyDialog.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/configuration/component/ObjectPolicyDialog.java @@ -23,11 +23,12 @@ import com.evolveum.midpoint.util.logging.LoggingUtils; import com.evolveum.midpoint.util.logging.Trace; import com.evolveum.midpoint.util.logging.TraceManager; -import com.evolveum.midpoint.web.component.AjaxButton; +import com.evolveum.midpoint.web.component.AjaxSubmitButton; import com.evolveum.midpoint.web.component.form.DropDownFormGroup; import com.evolveum.midpoint.web.component.util.LoadableModel; import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour; import com.evolveum.midpoint.web.page.PageBase; +import com.evolveum.midpoint.web.page.admin.configuration.dto.ObjectPolicyConfigurationTypeDto; import com.evolveum.midpoint.web.page.admin.configuration.dto.ObjectPolicyDialogDto; import com.evolveum.midpoint.web.page.admin.configuration.dto.ObjectTemplateConfigTypeReferenceDto; import com.evolveum.midpoint.web.page.admin.configuration.dto.PropertyConstraintTypeDto; @@ -86,10 +87,9 @@ public class ObjectPolicyDialog extends ModalWindow{ private static final String OFFSET_CLASS = "col-md-offset-4"; private boolean initialized; - private boolean isEditing; private IModel model; - public ObjectPolicyDialog(String id, final ObjectPolicyConfigurationType config){ + public ObjectPolicyDialog(String id, final ObjectPolicyConfigurationTypeDto config){ super(id); model = new LoadableModel(false) { @@ -101,7 +101,7 @@ protected ObjectPolicyDialogDto load() { }; setOutputMarkupId(true); - createTitle(); + setTitle(createStringResource("ObjectPolicyDialog.label")); showUnloadConfirmation(false); setCssClassName(ModalWindow.CSS_CLASS_GRAY); setCookieName(ObjectPolicyDialog.class.getSimpleName() + ((int) (Math.random() * 100))); @@ -114,28 +114,18 @@ protected ObjectPolicyDialogDto load() { setContent(content); } - private ObjectPolicyDialogDto loadModel(ObjectPolicyConfigurationType config){ + private ObjectPolicyDialogDto loadModel(ObjectPolicyConfigurationTypeDto config){ ObjectPolicyDialogDto dto; if(config == null){ - dto = new ObjectPolicyDialogDto(new ObjectPolicyConfigurationType(), getPageBase()); - isEditing = false; + dto = new ObjectPolicyDialogDto(new ObjectPolicyConfigurationTypeDto(), getPageBase()); } else { dto = new ObjectPolicyDialogDto(config, getPageBase()); - isEditing = true; } return dto; } - private void createTitle(){ - if(isEditing){ - setTitle(createStringResource("ObjectPolicyDialog.label.edit")); - } else { - setTitle(createStringResource("ObjectPolicyDialog.label.new")); - } - } - public StringResourceModel createStringResource(String resourceKey, Object... objects) { return new StringResourceModel(resourceKey, this, null, resourceKey, objects); } @@ -152,19 +142,18 @@ protected void onBeforeRender(){ initialized = true; } - public void updateModel(AjaxRequestTarget target, ObjectPolicyConfigurationType config){ + public void updateModel(AjaxRequestTarget target, ObjectPolicyConfigurationTypeDto config){ model.setObject(new ObjectPolicyDialogDto(config, getPageBase())); target.add(getContent()); } public void initLayout(WebMarkupContainer content){ - Form form = new Form(ID_FORM); form.setOutputMarkupId(true); content.add(form); DropDownFormGroup type = new DropDownFormGroup(ID_TYPE, new PropertyModel(model, - "config.type"), createTypeChoiceList(), + ObjectPolicyDialogDto.F_TYPE), createTypeChoiceList(), new IChoiceRenderer() { @Override @@ -177,10 +166,9 @@ public String getIdValue(QName object, int index) { return Integer.toString(index); } }, createStringResource("ObjectPolicyDialog.type"), ID_LABEL_SIZE, ID_INPUT_SIZE, false); - type.getInput().setNullValid(true); form.add(type); - DropDownFormGroup template = new DropDownFormGroup(ID_OBJECT_TEMPLATE, new PropertyModel(model, ObjectPolicyDialogDto.F_TEMPLATE_REF), + DropDownFormGroup template = new DropDownFormGroup(ID_OBJECT_TEMPLATE, new PropertyModel(model, ObjectPolicyDialogDto.F_TEMPLATE_REF), createObjectTemplateList(), new IChoiceRenderer() { @Override public Object getDisplayValue(ObjectTemplateConfigTypeReferenceDto object) { @@ -192,7 +180,6 @@ public String getIdValue(ObjectTemplateConfigTypeReferenceDto object, int index) return Integer.toString(index); } }, createStringResource("ObjectPolicyDialog.template"), ID_LABEL_SIZE, ID_INPUT_SIZE, false); - template.getInput().setNullValid(true); form.add(template); ListView repeater = new ListView(ID_REPEATER, @@ -244,19 +231,21 @@ public String getObject() { }; form.add(repeater); - AjaxButton cancel = new AjaxButton(ID_BUTTON_CANCEL, + AjaxSubmitButton cancel = new AjaxSubmitButton(ID_BUTTON_CANCEL, createStringResource("ObjectPolicyDialog.button.cancel")) { + @Override - public void onClick(AjaxRequestTarget target) { + protected void onSubmit(AjaxRequestTarget target, Form form) { cancelPerformed(target); } }; form.add(cancel); - AjaxButton save = new AjaxButton(ID_BUTTON_SAVE, + AjaxSubmitButton save = new AjaxSubmitButton(ID_BUTTON_SAVE, createStringResource("ObjectPolicyDialog.button.save")) { + @Override - public void onClick(AjaxRequestTarget target) { + protected void onSubmit(AjaxRequestTarget target, Form form) { savePerformed(target); } }; @@ -401,4 +390,8 @@ protected void savePerformed(AjaxRequestTarget target){} private PageBase getPageBase() { return (PageBase) getPage(); } + + public IModel getModel(){ + return model; + } } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/configuration/component/ObjectPolicyDialog.properties b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/configuration/component/ObjectPolicyDialog.properties index 7deb0f57f1b..72dacc570bf 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/configuration/component/ObjectPolicyDialog.properties +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/configuration/component/ObjectPolicyDialog.properties @@ -14,8 +14,7 @@ # limitations under the License. # -ObjectPolicyDialog.label.new=Create new Object Policy -ObjectPolicyDialog.label.edit=Edit Object Policy +ObjectPolicyDialog.label=Create/Edit Object Policy ObjectPolicyDialog.type=Object type ObjectPolicyDialog.template=Object template ObjectPolicyDialog.propertyConstraint=Property constraint diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/configuration/component/SystemConfigPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/configuration/component/SystemConfigPanel.java index bd9233e4869..fe9bb733186 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/configuration/component/SystemConfigPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/configuration/component/SystemConfigPanel.java @@ -22,6 +22,7 @@ import com.evolveum.midpoint.web.component.form.DropDownFormGroup; import com.evolveum.midpoint.web.component.util.SimplePanel; import com.evolveum.midpoint.web.page.admin.configuration.dto.AEPlevel; +import com.evolveum.midpoint.web.page.admin.configuration.dto.ObjectPolicyConfigurationTypeDto; import com.evolveum.midpoint.web.page.admin.configuration.dto.SystemConfigurationDto; import com.evolveum.midpoint.web.page.admin.dto.ObjectViewDto; import com.evolveum.midpoint.web.util.InfoTooltipBehavior; @@ -83,7 +84,7 @@ protected void initLayout(){ add(userTemplateChoosePanel); ObjectPolicyConfigurationEditor objectPolicyEditor = new ObjectPolicyConfigurationEditor(ID_OBJECT_POLICY_EDITOR, - new PropertyModel>(getModel(), SystemConfigurationDto.F_OBJECT_POLICY_LIST)); + new PropertyModel>(getModel(), SystemConfigurationDto.F_OBJECT_POLICY_LIST)); add(objectPolicyEditor); DropDownChoice aepLevel = new DropDownChoice<>(ID_GLOBAL_AEP, diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/configuration/dto/ObjectPolicyConfigurationTypeDto.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/configuration/dto/ObjectPolicyConfigurationTypeDto.java new file mode 100644 index 00000000000..929b0de524a --- /dev/null +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/configuration/dto/ObjectPolicyConfigurationTypeDto.java @@ -0,0 +1,106 @@ +/* + * Copyright (c) 2010-2013 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.page.admin.configuration.dto; + +import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectPolicyConfigurationType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectReferenceType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.PropertyConstraintType; + +import javax.xml.namespace.QName; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; + +/** + * @author shpood + * */ +public class ObjectPolicyConfigurationTypeDto implements Serializable{ + + public static final String F_TEMPLATE_REF = "templateRef"; + public static final String F_TYPE = "type"; + public static final String F_CONSTRAINTS = "constraints"; + + private ObjectReferenceType templateRef; + private QName type; + private List constraints; + + public ObjectPolicyConfigurationTypeDto(){} + + public ObjectPolicyConfigurationTypeDto(ObjectPolicyConfigurationType policyConfig){ + templateRef = policyConfig.getObjectTemplateRef(); + type = policyConfig.getType(); + + constraints = new ArrayList<>(); + if(policyConfig.getPropertyConstraint() != null){ + if(policyConfig.getPropertyConstraint().isEmpty()){ + policyConfig.getPropertyConstraint().add(new PropertyConstraintType()); + } + + for(PropertyConstraintType property: policyConfig.getPropertyConstraint()){ + constraints.add(new PropertyConstraintTypeDto(property)); + } + } else { + constraints.add(new PropertyConstraintTypeDto(null)); + } + } + + public ObjectReferenceType getTemplateRef() { + return templateRef; + } + + public void setTemplateRef(ObjectReferenceType templateRef) { + this.templateRef = templateRef; + } + + public QName getType() { + return type; + } + + public void setType(QName type) { + this.type = type; + } + + public List getConstraints() { + return constraints; + } + + public void setConstraints(List constraints) { + this.constraints = constraints; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof ObjectPolicyConfigurationTypeDto)) return false; + + ObjectPolicyConfigurationTypeDto that = (ObjectPolicyConfigurationTypeDto) o; + + if (constraints != null ? !constraints.equals(that.constraints) : that.constraints != null) return false; + if (templateRef != null ? !templateRef.equals(that.templateRef) : that.templateRef != null) return false; + if (type != null ? !type.equals(that.type) : that.type != null) return false; + + return true; + } + + @Override + public int hashCode() { + int result = templateRef != null ? templateRef.hashCode() : 0; + result = 31 * result + (type != null ? type.hashCode() : 0); + result = 31 * result + (constraints != null ? constraints.hashCode() : 0); + return result; + } +} diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/configuration/dto/ObjectPolicyDialogDto.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/configuration/dto/ObjectPolicyDialogDto.java index 672107013e4..388905eb4fc 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/configuration/dto/ObjectPolicyDialogDto.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/configuration/dto/ObjectPolicyDialogDto.java @@ -21,11 +21,10 @@ import com.evolveum.midpoint.web.page.PageBase; import com.evolveum.midpoint.web.util.WebMiscUtil; import com.evolveum.midpoint.web.util.WebModelUtils; -import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectPolicyConfigurationType; import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectReferenceType; import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectTemplateType; -import com.evolveum.midpoint.xml.ns._public.common.common_3.PropertyConstraintType; +import javax.xml.namespace.QName; import java.io.Serializable; import java.util.ArrayList; import java.util.List; @@ -41,35 +40,49 @@ public class ObjectPolicyDialogDto implements Serializable{ public static final String F_CONFIG = "config"; public static final String F_TEMPLATE_REF = "templateRef"; + public static final String F_TYPE = "type"; public static final String F_PROPERTY_LIST = "propertyConstraintsList"; private List propertyConstraintsList; - private ObjectPolicyConfigurationType config; + private ObjectPolicyConfigurationTypeDto config; + private QName type; private ObjectTemplateConfigTypeReferenceDto templateRef; - public ObjectPolicyDialogDto(ObjectPolicyConfigurationType config, PageBase page){ + public ObjectPolicyDialogDto(ObjectPolicyConfigurationTypeDto config, PageBase page){ this.config = config; + type = config.getType(); propertyConstraintsList = new ArrayList<>(); - if(config.getPropertyConstraint() != null){ - if(config.getPropertyConstraint().isEmpty()){ - config.getPropertyConstraint().add(new PropertyConstraintType()); - } - - for(PropertyConstraintType property: config.getPropertyConstraint()){ - propertyConstraintsList.add(new PropertyConstraintTypeDto(property)); - } + if(config != null && config.getConstraints() != null){ + propertyConstraintsList.addAll(config.getConstraints()); } else { propertyConstraintsList.add(new PropertyConstraintTypeDto(null)); } - if(config.getObjectTemplateRef() != null){ - ObjectReferenceType ref = config.getObjectTemplateRef(); + if(config.getTemplateRef() != null){ + ObjectReferenceType ref = config.getTemplateRef(); templateRef = new ObjectTemplateConfigTypeReferenceDto(ref.getOid(), getObjectTemplateName(ref.getOid(), page)); } } + public ObjectPolicyConfigurationTypeDto preparePolicyConfig(){ + ObjectPolicyConfigurationTypeDto newConfig = new ObjectPolicyConfigurationTypeDto(); + + newConfig.setConstraints(propertyConstraintsList); + newConfig.setType(type); + + ObjectReferenceType ref = new ObjectReferenceType(); + if(templateRef != null){ + ref.setOid(templateRef.getOid()); + ref.setType(ObjectTemplateType.COMPLEX_TYPE); + } + + newConfig.setTemplateRef(ref); + + return newConfig; + } + public List getPropertyConstraintsList() { return propertyConstraintsList; } @@ -78,6 +91,14 @@ public void setPropertyConstraintsList(List propertyC this.propertyConstraintsList = propertyConstraintsList; } + public QName getType() { + return type; + } + + public void setType(QName type) { + this.type = type; + } + private String getObjectTemplateName(String oid, PageBase page){ OperationResult result = new OperationResult(OPERATION_LOAD_OBJECT_TEMPLATE); @@ -90,11 +111,11 @@ private String getObjectTemplateName(String oid, PageBase page){ return ""; } - public ObjectPolicyConfigurationType getConfig() { + public ObjectPolicyConfigurationTypeDto getConfig() { return config; } - public void setConfig(ObjectPolicyConfigurationType config) { + public void setConfig(ObjectPolicyConfigurationTypeDto config) { this.config = config; } @@ -117,6 +138,7 @@ public boolean equals(Object o) { if (propertyConstraintsList != null ? !propertyConstraintsList.equals(that.propertyConstraintsList) : that.propertyConstraintsList != null) return false; if (templateRef != null ? !templateRef.equals(that.templateRef) : that.templateRef != null) return false; + if (type != null ? !type.equals(that.type) : that.type != null) return false; return true; } @@ -125,6 +147,7 @@ public boolean equals(Object o) { public int hashCode() { int result = propertyConstraintsList != null ? propertyConstraintsList.hashCode() : 0; result = 31 * result + (config != null ? config.hashCode() : 0); + result = 31 * result + (type != null ? type.hashCode() : 0); result = 31 * result + (templateRef != null ? templateRef.hashCode() : 0); return result; } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/configuration/dto/PropertyConstraintTypeDto.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/configuration/dto/PropertyConstraintTypeDto.java index 9fcc4fb929f..5520d94d7fc 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/configuration/dto/PropertyConstraintTypeDto.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/configuration/dto/PropertyConstraintTypeDto.java @@ -32,8 +32,8 @@ public class PropertyConstraintTypeDto implements Serializable{ public PropertyConstraintTypeDto(PropertyConstraintType property){ if(property != null){ - if(property.getPath() != null){ - propertyPath = property.getPath().toString(); + if(property.getPath() != null && property.getPath().getItemPath() != null){ + propertyPath = property.getPath().getItemPath().toString(); } if(property.isOidBound() != null){ diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/configuration/dto/SystemConfigurationDto.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/configuration/dto/SystemConfigurationDto.java index 43f80caaf2e..c4422814024 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/configuration/dto/SystemConfigurationDto.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/configuration/dto/SystemConfigurationDto.java @@ -17,12 +17,9 @@ package com.evolveum.midpoint.web.page.admin.configuration.dto; import com.evolveum.midpoint.prism.PrismObject; -import com.evolveum.midpoint.prism.crypto.Protector; import com.evolveum.midpoint.web.page.admin.dto.ObjectViewDto; import com.evolveum.midpoint.xml.ns._public.common.common_3.*; -import org.apache.wicket.model.IModel; - import java.io.Serializable; import java.util.ArrayList; import java.util.List; @@ -47,7 +44,7 @@ public class SystemConfigurationDto implements Serializable { private ObjectViewDto passPolicyDto; private ObjectViewDto objectTemplateDto; - private List objectPolicyList; + private List objectPolicyList; private NotificationConfigurationDto notificationConfig; public SystemConfigurationDto(){ @@ -77,15 +74,14 @@ private void init(SystemConfigurationType config){ passPolicyDto = loadPasswordPolicy(config); objectTemplateDto = loadObjectTemplate(config); + objectPolicyList = new ArrayList<>(); List objectPolicies = config.getDefaultObjectPolicyConfiguration(); if(objectPolicies != null && !objectPolicies.isEmpty()){ -// TODO - uncomment and replace other 2 lines when problem with not Serializable Anon objects is fixed -// objectPolicyList = objectPolicies; - objectPolicyList = new ArrayList<>(); - objectPolicyList.add(new ObjectPolicyConfigurationType()); + for(ObjectPolicyConfigurationType policy: objectPolicies){ + objectPolicyList.add(new ObjectPolicyConfigurationTypeDto(policy)); + } } else { - objectPolicyList = new ArrayList<>(); - objectPolicyList.add(new ObjectPolicyConfigurationType()); + objectPolicyList.add(new ObjectPolicyConfigurationTypeDto()); } if(config.getNotificationConfiguration() != null){ @@ -169,11 +165,11 @@ public void setNotificationConfig(NotificationConfigurationDto notificationConfi this.notificationConfig = notificationConfig; } - public List getObjectPolicyList() { + public List getObjectPolicyList() { return objectPolicyList; } - public void setObjectPolicyList(List objectPolicyList) { + public void setObjectPolicyList(List objectPolicyList) { this.objectPolicyList = objectPolicyList; } }