Skip to content

Commit

Permalink
another fix for MID-4640
Browse files Browse the repository at this point in the history
  • Loading branch information
katkav committed May 22, 2018
1 parent 369072c commit 28574df
Show file tree
Hide file tree
Showing 5 changed files with 71 additions and 7 deletions.
Expand Up @@ -37,6 +37,7 @@
import com.evolveum.midpoint.gui.api.model.LoadableModel;
import com.evolveum.midpoint.gui.api.util.WebComponentUtil;
import com.evolveum.midpoint.prism.PrismContainerValue;
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.VisibleEnableBehaviour;
Expand All @@ -57,6 +58,7 @@ public class ObjectPolicyConfigurationEditor extends BasePanel<List<ObjectPolicy

private static final Trace LOGGER = TraceManager.getTrace(ObjectPolicyConfigurationEditor.class);

private static final String DOT_CLASS = ObjectPolicyConfigurationEditor.class.getName() + ".";

private static final String ID_LABEL = "label";
private static final String ID_REPEATER = "repeater";
Expand Down Expand Up @@ -324,10 +326,12 @@ private void editPerformed(AjaxRequestTarget target, ListItem<ObjectPolicyConfig
@Override
protected void savePerformed(AjaxRequestTarget target){
ObjectPolicyConfigurationType oldConfig = getModel().getObject().getConfig();
ObjectPolicyConfigurationType newConfig = getModel().getObject().preparePolicyConfig();
OperationResult result = new OperationResult(DOT_CLASS + "preparePropertyConstraint");
ObjectPolicyConfigurationType newConfig = getModel().getObject().preparePolicyConfig(result);
//
ObjectPolicyConfigurationEditor.this.replace(oldConfig, newConfig);
ObjectPolicyConfigurationEditor.this.getPageBase().hideMainPopup(target);
getPageBase().showResult(result, false);
target.add(ObjectPolicyConfigurationEditor.this);
}
};
Expand Down
Expand Up @@ -48,6 +48,7 @@

<wicket:container wicket:id="repeater">
<div class="col-md-6" wicket:id="textWrapper">
<span class="text-danger" wicket:id="feedback"/>
<div class="input-group">
<input type="text" class="form-control input-sm" wicket:id="property">
<span class="input-group-addon">
Expand Down
Expand Up @@ -20,27 +20,38 @@
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;

import javax.xml.namespace.QName;

import org.apache.commons.lang.Validate;
import org.apache.commons.lang3.BooleanUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.wicket.AttributeModifier;
import org.apache.wicket.Component;
import org.apache.wicket.RestartResponseException;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
import org.apache.wicket.ajax.markup.html.AjaxLink;
import org.apache.wicket.behavior.AttributeAppender;
import org.apache.wicket.feedback.ComponentFeedbackMessageFilter;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.form.CheckBox;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.PasswordTextField;
import org.apache.wicket.markup.html.form.TextField;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView;
import org.apache.wicket.markup.html.panel.FeedbackPanel;
import org.apache.wicket.model.AbstractReadOnlyModel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.model.PropertyModel;
import org.apache.wicket.model.StringResourceModel;
import org.apache.wicket.util.convert.IConverter;
import org.apache.wicket.validation.IValidatable;
import org.apache.wicket.validation.IValidator;
import org.apache.wicket.validation.ValidationError;

import com.evolveum.midpoint.gui.api.component.BasePanel;
import com.evolveum.midpoint.gui.api.component.path.ItemPathDto;
Expand All @@ -62,6 +73,7 @@
import com.evolveum.midpoint.web.component.input.ChoiceableChoiceRenderer;
import com.evolveum.midpoint.web.component.input.QNameObjectTypeChoiceRenderer;
import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour;
import com.evolveum.midpoint.web.page.admin.configuration.PageSystemConfiguration;
import com.evolveum.midpoint.web.page.admin.configuration.dto.ObjectPolicyDialogDto;
import com.evolveum.midpoint.web.page.admin.configuration.dto.ObjectTemplateConfigTypeReferenceDto;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectPolicyConfigurationType;
Expand Down Expand Up @@ -100,6 +112,7 @@ public class ObjectPolicyPanel extends BasePanel<ObjectPolicyDialogDto> implemen
private static final String ID_BUTTON_GROUP = "buttonGroup";
private static final String ID_BUTTON_REMOVE = "remove";
private static final String ID_BUTTON_ADD = "add";
private static final String ID_FEEDBACK = "feedback";
private static final String ID_CONFLICT_RESOLUTION_CONTAINER = "conflictResolutionContainer";

private static final String ID_LABEL_SIZE = "col-md-4";
Expand Down Expand Up @@ -172,6 +185,7 @@ public void initLayout(ObjectPolicyConfigurationType config) {
@Override
protected void populateItem(final ListItem<PropertyConstraintType> item) {
WebMarkupContainer textWrapper = new WebMarkupContainer(ID_TEXT_WRAPPER);
textWrapper.setOutputMarkupId(true);
textWrapper.add(AttributeAppender.prepend("class", new AbstractReadOnlyModel<String>() {

private static final long serialVersionUID = 1L;
Expand Down Expand Up @@ -208,12 +222,19 @@ protected void onUpdate(AjaxRequestTarget target) {
property.add(AttributeAppender.replace("placeholder",
createStringResource("ObjectPolicyDialog.property.placeholder")));
textWrapper.add(property);



CheckBox oidBound = new CheckBox(ID_OID_BOUND,
new PropertyModel<>(item.getModel(), PropertyConstraintType.F_OID_BOUND.getLocalPart()));

oidBound.add(AttributeModifier.replace("title",
createStringResource("ObjectPolicyDialog.label.oidBound.help")));
textWrapper.add(oidBound);
textWrapper.add(oidBound);
oidBound.add(new PropertyConstraintValidator(item.getModelObject()));
oidBound.add(new EmptyOnChangeAjaxFormUpdatingBehavior());
FeedbackPanel feedback = new FeedbackPanel(ID_FEEDBACK, new ComponentFeedbackMessageFilter(oidBound));
textWrapper.add(feedback);

WebMarkupContainer buttonGroup = new WebMarkupContainer(ID_BUTTON_GROUP);
buttonGroup.add(AttributeAppender.append("class", new AbstractReadOnlyModel<String>() {
Expand Down Expand Up @@ -262,7 +283,7 @@ protected void onSubmit(AjaxRequestTarget target, Form<?> form) {

@Override
protected void onError(AjaxRequestTarget target, Form<?> form) {
//TODO: show error?
target.add(getPageBase().getFeedbackPanel());
target.add(form);
}
};
Expand Down Expand Up @@ -396,12 +417,41 @@ public List<QName> getObject() {
}
};
}

private static class PropertyConstraintValidator implements IValidator<Boolean> {

private static final long serialVersionUID = 1L;

private PropertyConstraintType propertyConstraintType;

private PropertyConstraintValidator(PropertyConstraintType propertyConstraint) {
this.propertyConstraintType = propertyConstraint;

}

@Override
public void validate(IValidatable<Boolean> validatable) {

if (propertyConstraintType == null) {
return;
}

if (BooleanUtils.isTrue(validatable.getValue()) && (propertyConstraintType == null || propertyConstraintType.getPath() == null)) {
ValidationError err = new ValidationError();
err.addKey("propertyConstraintValidator.error");
validatable.error(err);
}

}
}


private void cancelPerformed(AjaxRequestTarget target) {
getPageBase().hideMainPopup(target);
}

protected void savePerformed(AjaxRequestTarget target) {
target.add(getPageBase().getFeedbackPanel());
getPageBase().hideMainPopup(target);
}

Expand Down
Expand Up @@ -19,9 +19,13 @@
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;

import javax.xml.namespace.QName;

import org.apache.commons.lang3.BooleanUtils;
import org.apache.wicket.util.convert.IConverter;

import com.evolveum.midpoint.gui.api.page.PageBase;
import com.evolveum.midpoint.gui.api.util.WebComponentUtil;
import com.evolveum.midpoint.gui.api.util.WebModelServiceUtils;
Expand Down Expand Up @@ -79,11 +83,14 @@ public ObjectPolicyDialogDto(ObjectPolicyConfigurationType config, PageBase page
}
}

public ObjectPolicyConfigurationType preparePolicyConfig(){
public ObjectPolicyConfigurationType preparePolicyConfig(OperationResult result){
ObjectPolicyConfigurationType newConfig = new ObjectPolicyConfigurationType();

for (PropertyConstraintType constraintType : propertyConstraintsList) {
PrismContainerValue<PropertyConstraintType> constraint = constraintType.asPrismContainerValue();
if (BooleanUtils.isTrue(constraintType.isOidBound()) && constraintType.getPath() == null) {
result.recordWarning("Skipping setting property constraint, no path was defined.");
}
if (!constraint.isEmpty() && constraintType.getPath() != null) {
newConfig.getPropertyConstraint().add(constraint.clone().asContainerable());
}
Expand All @@ -99,7 +106,8 @@ public ObjectPolicyConfigurationType preparePolicyConfig(){
ref.setTargetName(new PolyStringType(templateRef.getName()));
newConfig.setObjectTemplateRef(ref);
}


result.recordSuccessIfUnknown();
return newConfig;
}

Expand Down Expand Up @@ -225,6 +233,6 @@ public String toString() {
return "ObjectPolicyDialogDto(propertyConstraintsList=" + propertyConstraintsList + ", config="
+ config + ", type=" + type + ", subtype=" + subtype + ", templateRef=" + templateRef + ")";
}


}
Expand Up @@ -4035,3 +4035,4 @@ PageInternals.title.cache=Caches
PageInternals.tab.cache=Cache management
InternalsCachePanel.button.clearCaches=Clear caches
PageAccountActivation.user.not.found=Unexpected problem occurs. Please contact system administrator.
propertyConstraintValidator.error=Cannot set property constraint without path defined.

0 comments on commit 28574df

Please sign in to comment.