Skip to content

Commit

Permalink
MID-7815 mail/sms transport missing fields panels, wip
Browse files Browse the repository at this point in the history
  • Loading branch information
1azyman committed Sep 16, 2022
1 parent ae13dc6 commit e7dc874
Show file tree
Hide file tree
Showing 6 changed files with 286 additions and 136 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
/*
* Copyright (c) 2022 Evolveum and contributors
*
* This work is dual-licensed under the Apache License 2.0
* and European Union Public License. See LICENSE file for details.
*/

package com.evolveum.midpoint.gui.impl.page.admin.systemconfiguration.component;

import java.io.Serializable;

import org.apache.wicket.model.IModel;

import com.evolveum.midpoint.web.component.util.SerializableBiConsumer;
import com.evolveum.midpoint.web.component.util.SerializableFunction;

import org.jetbrains.annotations.NotNull;

/**
* Created by Viliam Repan (lazyman).
*/
public class ComplexPropertyEmbeddedModel<O extends Serializable, T extends Serializable> implements IModel<T> {

private IModel<O> model;

private SerializableFunction<O, T> get;

private SerializableBiConsumer<O, T> set;

public ComplexPropertyEmbeddedModel(@NotNull IModel<O> model, @NotNull SerializableFunction<O, T> get, @NotNull SerializableBiConsumer<O, T> set) {
this.model = model;
this.get = get;
this.set = set;
}

@Override
public T getObject() {
O object = model.getObject();
if (object == null) {
return null;
}

return get.apply(object);
}

@Override
public void setObject(T object) {
O parent = model.getObject();

if (object == null && parent == null) {
return;
}

if (parent == null) {
parent = createEmptyParentObject();
model.setObject(parent);
}

if (parent == null) {
return;
}

set.accept(parent, object);

if (isParentModelObjectEmpty(parent)) {
model.setObject(null);
}
}

protected O createEmptyParentObject() {
return null;
}

protected boolean isParentModelObjectEmpty(O object) {
return false;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
/*
* Copyright (c) 2022 Evolveum and contributors
*
* This work is dual-licensed under the Apache License 2.0
* and European Union Public License. See LICENSE file for details.
*/

package com.evolveum.midpoint.gui.impl.page.admin.systemconfiguration.component;

import java.io.Serializable;

import org.apache.wicket.Component;
import org.apache.wicket.MarkupContainer;
import org.apache.wicket.markup.html.form.FormComponent;
import org.apache.wicket.model.IModel;

import com.evolveum.midpoint.web.component.prism.InputPanel;
import com.evolveum.midpoint.web.page.admin.configuration.component.EmptyOnBlurAjaxFormUpdatingBehaviour;

/**
* Created by Viliam Repan (lazyman).
*/
public abstract class ComplexPropertyInputPanel<T extends Serializable> extends InputPanel {

private static final long serialVersionUID = 1L;
private IModel<T> model;

public ComplexPropertyInputPanel(String id, IModel<T> model) {
super(id);

this.model = model;
}

public IModel<T> getModel() {
return model;
}

protected MarkupContainer add(Component child, boolean addUpdatingBehaviour) {
if (addUpdatingBehaviour) {
FormComponent fc = null;
if (child instanceof FormComponent) {
fc = (FormComponent) child;
} else if (child instanceof InputPanel) {
fc = ((InputPanel) child).getBaseFormComponent();
}

if (fc != null) {
fc.add(new EmptyOnBlurAjaxFormUpdatingBehaviour());
}
}

return super.add(child);
}

protected MarkupContainer add(Component child) {
return add(child, true);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,17 +18,15 @@
import com.evolveum.midpoint.gui.api.util.WebComponentUtil;
import com.evolveum.midpoint.web.component.input.DropDownChoicePanel;
import com.evolveum.midpoint.web.component.input.TextPanel;
import com.evolveum.midpoint.web.component.prism.InputPanel;
import com.evolveum.midpoint.web.component.util.SerializableBiConsumer;
import com.evolveum.midpoint.web.component.util.SerializableFunction;
import com.evolveum.midpoint.web.page.admin.configuration.component.EmptyOnChangeAjaxFormUpdatingBehavior;
import com.evolveum.midpoint.xml.ns._public.common.common_3.MailServerConfigurationType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.MailTransportSecurityType;

/**
* Created by Viliam Repan (lazyman).
*/
public class MailServerPanel extends InputPanel {
public class MailServerPanel extends ComplexPropertyInputPanel<MailServerConfigurationType> {

private static final long serialVersionUID = 1L;

Expand All @@ -38,81 +36,46 @@ public class MailServerPanel extends InputPanel {
private static final String ID_PASSWORD = "password";
private static final String ID_TRANSPORT_SECURITY = "transportSecurity";

private IModel<MailServerConfigurationType> model;

public MailServerPanel(String id, IModel<MailServerConfigurationType> model) {
super(id);

this.model = model;
super(id, model);

initLayout();
}

public IModel<MailServerConfigurationType> getModel() {
return model;
}

private void initLayout() {
add(new TextPanel<>(ID_HOST, createEmbeddedModel(c -> c.getHost(), (c, o) -> c.setHost(o))));
add(new TextPanel<>(ID_HOST, createEmbeddedModel(c -> c.getHost(), (c, o) -> c.setHost(o))), false);

TextPanel port = new TextPanel<>(ID_PORT, createEmbeddedModel(c -> c.getPort(), (c, o) -> c.setPort(o)));
FormComponent portFC = port.getBaseFormComponent();
portFC.setType(Integer.class);
portFC.add(new RangeValidator(0, 2 ^ 16 - 1)); // 65535

port.getBaseFormComponent().add(new EmptyOnChangeAjaxFormUpdatingBehavior());
add(port);

TextPanel username = new TextPanel<>(ID_USERNAME, createEmbeddedModel(c -> c.getUsername(), (c, o) -> c.setUsername(o)));
username.getBaseFormComponent().add(new EmptyOnChangeAjaxFormUpdatingBehavior());
add(username);

add(new PasswordPanel(ID_PASSWORD, createEmbeddedModel(c -> c.getPassword(), (c, o) -> c.setPassword(o))));
add(new PasswordPanel(ID_PASSWORD, createEmbeddedModel(c -> c.getPassword(), (c, o) -> c.setPassword(o))), false);

DropDownChoicePanel transportSecurity = WebComponentUtil.createEnumPanel(MailTransportSecurityType.class, ID_TRANSPORT_SECURITY,
createEmbeddedModel(c -> c.getTransportSecurity(), (c, o) -> c.setTransportSecurity(o)), this);
transportSecurity.getBaseFormComponent().add(new EmptyOnChangeAjaxFormUpdatingBehavior());
add(transportSecurity);
}

private <T extends Serializable> IModel<T> createEmbeddedModel(SerializableFunction<MailServerConfigurationType, T> get, SerializableBiConsumer<MailServerConfigurationType, T> set) {
return new IModel<T>() {
@Override
public T getObject() {
MailServerConfigurationType config = model.getObject();
if (config == null) {
return null;
}

return get.apply(config);
}
return new ComplexPropertyEmbeddedModel<>(getModel(), get, set) {

@Override
public void setObject(T object) {
MailServerConfigurationType config = model.getObject();

if (object == null && config == null) {
return;
}

if (config == null) {
config = new MailServerConfigurationType();
model.setObject(config);
}

set.accept(config, object);

if (isParentModelObjectEmpty(config)) {
model.setObject(null);
}
protected MailServerConfigurationType createEmptyParentObject() {
return new MailServerConfigurationType();
}

private boolean isParentModelObjectEmpty(MailServerConfigurationType config) {
@Override
protected boolean isParentModelObjectEmpty(MailServerConfigurationType object) {
Object[] values = new Object[] {
config.getHost(),
config.getPassword(),
config.getUsername(),
config.getPassword()
object.getHost(),
object.getPassword(),
object.getUsername(),
object.getPassword()
};

return Arrays.stream(values).allMatch(v -> v == null);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,50 +20,50 @@
<div class="col-xl-2 col-md-4 col-xs-12 prism-property-label"><wicket:message key="SmsGatewayPanel.urlExpression"/></div>
<div class="prism-property-value col-xl-10 col-md-8 col-xs-12" wicket:id="urlExpression"/>
</div>
<!-- <div class="row no-gutters mb-3">-->
<!-- <div class="col-xl-2 col-md-4 col-xs-12 prism-property-label"><wicket:message key="SmsGatewayPanel.headersExpression"/></div>-->
<!-- <div class="prism-property-value col-xl-10 col-md-8 col-xs-12" wicket:id="headersExpression"/>-->
<!-- </div>-->
<!-- <div class="row no-gutters mb-3">-->
<!-- <div class="col-xl-2 col-md-4 col-xs-12 prism-property-label"><wicket:message key="SmsGatewayPanel.bodyExpression"/></div>-->
<!-- <div class="prism-property-value col-xl-10 col-md-8 col-xs-12" wicket:id="bodyExpression"/>-->
<!-- </div>-->
<!-- <div class="row no-gutters mb-3">-->
<!-- <div class="col-xl-2 col-md-4 col-xs-12 prism-property-label"><wicket:message key="SmsGatewayPanel.bodyEncoding"/></div>-->
<!-- <div class="prism-property-value col-xl-10 col-md-8 col-xs-12" wicket:id="bodyEncoding"/>-->
<!-- </div>-->
<!-- <div class="row no-gutters mb-3">-->
<!-- <div class="col-xl-2 col-md-4 col-xs-12 prism-property-label"><wicket:message key="SmsGatewayPanel.username"/></div>-->
<!-- <div class="prism-property-value col-xl-10 col-md-8 col-xs-12" wicket:id="username"/>-->
<!-- </div>-->
<!-- <div class="row no-gutters mb-3">-->
<!-- <div class="col-xl-2 col-md-4 col-xs-12 prism-property-label"><wicket:message key="SmsGatewayPanel.password"/></div>-->
<!-- <div class="prism-property-value col-xl-10 col-md-8 col-xs-12" wicket:id="password"/>-->
<!-- </div>-->
<!-- <div class="row no-gutters mb-3">-->
<!-- <div class="col-xl-2 col-md-4 col-xs-12 prism-property-label"><wicket:message key="SmsGatewayPanel.proxyHost"/></div>-->
<!-- <div class="prism-property-value col-xl-10 col-md-8 col-xs-12" wicket:id="proxyHost"/>-->
<!-- </div>-->
<!-- <div class="row no-gutters mb-3">-->
<!-- <div class="col-xl-2 col-md-4 col-xs-12 prism-property-label"><wicket:message key="SmsGatewayPanel.proxyPort"/></div>-->
<!-- <div class="prism-property-value col-xl-10 col-md-8 col-xs-12" wicket:id="proxyPort"/>-->
<!-- </div>-->
<!-- <div class="row no-gutters mb-3">-->
<!-- <div class="col-xl-2 col-md-4 col-xs-12 prism-property-label"><wicket:message key="SmsGatewayPanel.proxyUsername"/></div>-->
<!-- <div class="prism-property-value col-xl-10 col-md-8 col-xs-12" wicket:id="proxyUsername"/>-->
<!-- </div>-->
<!-- <div class="row no-gutters mb-3">-->
<!-- <div class="col-xl-2 col-md-4 col-xs-12 prism-property-label"><wicket:message key="SmsGatewayPanel.proxyPassword"/></div>-->
<!-- <div class="prism-property-value col-xl-10 col-md-8 col-xs-12" wicket:id="proxyPassword"/>-->
<!-- </div>-->
<!-- <div class="row no-gutters mb-3">-->
<!-- <div class="col-xl-2 col-md-4 col-xs-12 prism-property-label"><wicket:message key="SmsGatewayPanel.redirectToFile"/></div>-->
<!-- <div class="prism-property-value col-xl-10 col-md-8 col-xs-12" wicket:id="redirectToFile"/>-->
<!-- </div>-->
<!-- <div class="row no-gutters mb-3">-->
<!-- <div class="col-xl-2 col-md-4 col-xs-12 prism-property-label"><wicket:message key="SmsGatewayPanel.logToFile"/></div>-->
<!-- <div class="prism-property-value col-xl-10 col-md-8 col-xs-12" wicket:id="logToFile"/>-->
<!-- </div>-->
<div class="row no-gutters mb-3">
<div class="col-xl-2 col-md-4 col-xs-12 prism-property-label"><wicket:message key="SmsGatewayPanel.headersExpression"/></div>
<div class="prism-property-value col-xl-10 col-md-8 col-xs-12" wicket:id="headersExpression"/>
</div>
<div class="row no-gutters mb-3">
<div class="col-xl-2 col-md-4 col-xs-12 prism-property-label"><wicket:message key="SmsGatewayPanel.bodyExpression"/></div>
<div class="prism-property-value col-xl-10 col-md-8 col-xs-12" wicket:id="bodyExpression"/>
</div>
<div class="row no-gutters mb-3">
<div class="col-xl-2 col-md-4 col-xs-12 prism-property-label"><wicket:message key="SmsGatewayPanel.bodyEncoding"/></div>
<div class="prism-property-value col-xl-10 col-md-8 col-xs-12" wicket:id="bodyEncoding"/>
</div>
<div class="row no-gutters mb-3">
<div class="col-xl-2 col-md-4 col-xs-12 prism-property-label"><wicket:message key="SmsGatewayPanel.username"/></div>
<div class="prism-property-value col-xl-10 col-md-8 col-xs-12" wicket:id="username"/>
</div>
<div class="row no-gutters mb-3">
<div class="col-xl-2 col-md-4 col-xs-12 prism-property-label"><wicket:message key="SmsGatewayPanel.password"/></div>
<div class="prism-property-value col-xl-10 col-md-8 col-xs-12" wicket:id="password"/>
</div>
<div class="row no-gutters mb-3">
<div class="col-xl-2 col-md-4 col-xs-12 prism-property-label"><wicket:message key="SmsGatewayPanel.proxyHost"/></div>
<div class="prism-property-value col-xl-10 col-md-8 col-xs-12" wicket:id="proxyHost"/>
</div>
<div class="row no-gutters mb-3">
<div class="col-xl-2 col-md-4 col-xs-12 prism-property-label"><wicket:message key="SmsGatewayPanel.proxyPort"/></div>
<div class="prism-property-value col-xl-10 col-md-8 col-xs-12" wicket:id="proxyPort"/>
</div>
<div class="row no-gutters mb-3">
<div class="col-xl-2 col-md-4 col-xs-12 prism-property-label"><wicket:message key="SmsGatewayPanel.proxyUsername"/></div>
<div class="prism-property-value col-xl-10 col-md-8 col-xs-12" wicket:id="proxyUsername"/>
</div>
<div class="row no-gutters mb-3">
<div class="col-xl-2 col-md-4 col-xs-12 prism-property-label"><wicket:message key="SmsGatewayPanel.proxyPassword"/></div>
<div class="prism-property-value col-xl-10 col-md-8 col-xs-12" wicket:id="proxyPassword"/>
</div>
<div class="row no-gutters mb-3">
<div class="col-xl-2 col-md-4 col-xs-12 prism-property-label"><wicket:message key="SmsGatewayPanel.redirectToFile"/></div>
<div class="prism-property-value col-xl-10 col-md-8 col-xs-12" wicket:id="redirectToFile"/>
</div>
<div class="row no-gutters mb-3">
<div class="col-xl-2 col-md-4 col-xs-12 prism-property-label"><wicket:message key="SmsGatewayPanel.logToFile"/></div>
<div class="prism-property-value col-xl-10 col-md-8 col-xs-12" wicket:id="logToFile"/>
</div>
</wicket:panel>
</body>
</html>

0 comments on commit e7dc874

Please sign in to comment.