blob: de61f0f5f2dd6ec2f24e4a9fafad6ae0c2059a13 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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 org.apache.syncope.client.console.panels;
import java.util.List;
import javax.ws.rs.core.MediaType;
import org.apache.commons.lang3.BooleanUtils;
import org.apache.commons.lang3.time.FastDateFormat;
import org.apache.syncope.client.ui.commons.markup.html.form.AjaxDropDownChoicePanel;
import org.apache.syncope.client.ui.commons.markup.html.form.AjaxSpinnerFieldPanel;
import org.apache.syncope.client.ui.commons.markup.html.form.AjaxTextFieldPanel;
import org.apache.syncope.client.ui.commons.markup.html.form.AjaxDateTimeFieldPanel;
import org.apache.syncope.client.console.wicket.markup.html.form.BinaryFieldPanel;
import org.apache.syncope.client.console.wicket.markup.html.form.MultiFieldPanel;
import org.apache.syncope.client.ui.commons.markup.html.form.FieldPanel;
import org.apache.syncope.client.ui.commons.wizards.AjaxWizard;
import org.apache.syncope.common.lib.SyncopeConstants;
import org.apache.syncope.common.lib.to.PlainSchemaTO;
import org.apache.wicket.extensions.wizard.WizardStep;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.form.IChoiceRenderer;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.LoadableDetachableModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.model.PropertyModel;
public class ParametersWizardAttrStep extends WizardStep {
private static final long serialVersionUID = -7843275202297616553L;
private final AjaxTextFieldPanel schema;
public ParametersWizardAttrStep(
final AjaxWizard.Mode mode,
final ParametersWizardPanel.ParametersForm modelObject) {
this.setOutputMarkupId(true);
WebMarkupContainer content = new WebMarkupContainer("content");
content.setOutputMarkupId(true);
add(content);
schema = new AjaxTextFieldPanel(
"schema", getString("schema"), new PropertyModel<>(modelObject.getParam(), "schema"));
schema.setRequired(true);
schema.setReadOnly(mode != AjaxWizard.Mode.CREATE);
content.add(schema);
LoadableDetachableModel<List<PlainSchemaTO>> schemas = new LoadableDetachableModel<>() {
private static final long serialVersionUID = 7172461137064525667L;
@Override
protected List<PlainSchemaTO> load() {
return List.of(modelObject.getSchema());
}
};
ListView<PlainSchemaTO> attrs = new ListView<>("attrs", schemas) {
private static final long serialVersionUID = 9101744072914090143L;
@Override
protected void populateItem(final ListItem<PlainSchemaTO> item) {
item.add(getFieldPanel("panel", modelObject.getParam(), item.getModelObject()));
}
};
content.add(attrs);
}
@SuppressWarnings({ "rawtypes", "unchecked" })
private Panel getFieldPanel(final String id, final ConfParam param, final PlainSchemaTO plainSchemaTO) {
String valueHeaderName = getString("values");
final FieldPanel panel;
switch (plainSchemaTO.getType()) {
case Date:
panel = new AjaxDateTimeFieldPanel(
id, valueHeaderName, new Model<>(),
FastDateFormat.getInstance(SyncopeConstants.DEFAULT_DATE_PATTERN));
break;
case Boolean:
panel = new AjaxDropDownChoicePanel<Boolean>(id, valueHeaderName, new Model<>(), false);
((AjaxDropDownChoicePanel<Boolean>) panel).setChoices(List.of(true, false));
if (!param.getValues().isEmpty()) {
((AjaxDropDownChoicePanel) panel).setChoiceRenderer(new IChoiceRenderer<Boolean>() {
private static final long serialVersionUID = -8223314361351275865L;
@Override
public Object getDisplayValue(final Boolean object) {
return BooleanUtils.toStringTrueFalse(object);
}
@Override
public String getIdValue(final Boolean object, final int index) {
return BooleanUtils.toStringTrueFalse(object);
}
@Override
public Boolean getObject(
final String id, final IModel<? extends List<? extends Boolean>> choices) {
return BooleanUtils.toBoolean(id);
}
});
}
((AjaxDropDownChoicePanel<Boolean>) panel).setNullValid(false);
break;
case Long:
panel = new AjaxSpinnerFieldPanel.Builder<Long>().
build(id, valueHeaderName, Long.class, new Model<>());
break;
case Double:
panel = new AjaxSpinnerFieldPanel.Builder<Double>().
build(id, valueHeaderName, Double.class, new Model<>());
break;
case Binary:
panel = new BinaryFieldPanel(id, valueHeaderName, new Model<>(),
MediaType.APPLICATION_OCTET_STREAM, schema.getModelObject());
break;
default:
panel = new AjaxTextFieldPanel(id, valueHeaderName, new Model<>(), false);
}
if (plainSchemaTO.isMultivalue()) {
return new MultiFieldPanel.Builder<>(
new PropertyModel<>(param, "values")).build(id, valueHeaderName, panel);
} else {
panel.setNewModel(param.getValues());
}
panel.setRequired("true".equalsIgnoreCase(plainSchemaTO.getMandatoryCondition()));
return panel;
}
}