private static final long serialVersionUID = -4804368561204623354L;
@Override
protected void onSubmit(final AjaxRequestTarget target, final Form<?> form) {
entityTO.addVirtualAttribute(new AttributeTO());
target.add(attributesContainer);
}
@Override
protected void onError(final AjaxRequestTarget target, final Form<?> form) {
target.add(attributesContainer);
}
};
add(addAttributeBtn.setDefaultFormProcessing(Boolean.FALSE));
ListView<AttributeTO> attributes = new ListView<AttributeTO>("attributes",
new PropertyModel<List<? extends AttributeTO>>(entityTO, "virtualAttributes")) {
private static final long serialVersionUID = 9101744072914090143L;
@Override
protected void populateItem(final ListItem<AttributeTO> item) {
final AttributeTO attributeTO = item.getModelObject();
item.add(new AjaxDecoratedCheckbox("toRemove", new Model<Boolean>(Boolean.FALSE)) {
private static final long serialVersionUID = 7170946748485726506L;
@Override
protected void onUpdate(final AjaxRequestTarget target) {
entityTO.removeVirtualAttribute(attributeTO);
target.add(attributesContainer);
}
@Override
protected void updateAjaxAttributes(AjaxRequestAttributes attributes) {
super.updateAjaxAttributes(attributes);
final AjaxCallListener ajaxCallListener = new AjaxCallListener() {
private static final long serialVersionUID = 7160235486520935153L;
@Override
public CharSequence getPrecondition(final Component component) {
return "if (!confirm('" + getString("confirmDelete") + "')) return false;";
}
};
attributes.getAjaxCallListeners().add(ajaxCallListener);
}
});
if (attributeTO.getValues().isEmpty()) {
attributeTO.addValue("");
}
if (attributeTO.getSchema() != null) {
VirtualSchemaTO attributeSchema = schemas.getObject().get(attributeTO.getSchema());
if (attributeSchema != null) {
attributeTO.setReadonly(attributeSchema.isReadonly());
}
}
final AjaxTextFieldPanel panel;
final MultiValueSelectorPanel multiPanel;
if (templateMode) {
panel = new AjaxTextFieldPanel("values", "values", new Model<String>());
panel.setReadOnly(attributeTO.isReadonly());
multiPanel = null;
} else {
panel = new AjaxTextFieldPanel("panel", "values", new Model<String>(null));
panel.setReadOnly(attributeTO.isReadonly());
multiPanel = new MultiValueSelectorPanel("values", new PropertyModel<List<String>>(attributeTO,
"values"), panel);
}
final DropDownChoice<String> schemaChoice = new DropDownChoice<String>("schema",
new PropertyModel<String>(attributeTO, "schema"), virtualSchemaNames,
new ChoiceRenderer<String>() {
private static final long serialVersionUID = 3109256773218160485L;
@Override
public Object getDisplayValue(final String object) {
final StringBuilder text = new StringBuilder(object);
if (templateMode) {
text.append(" (JEXL)");
}
return text.toString();
}
});
schemaChoice.add(new AjaxFormComponentUpdatingBehavior("onblur") {
private static final long serialVersionUID = -1107858522700306810L;
@Override
protected void onUpdate(final AjaxRequestTarget target) {
attributeTO.setSchema(schemaChoice.getModelObject());
VirtualSchemaTO attributeSchema =
schemas.getObject().get(attributeTO.getSchema());
if (attributeSchema != null) {
attributeTO.setReadonly(attributeSchema.isReadonly());
panel.setReadOnly(attributeTO.isReadonly());
}
if (multiPanel != null) {
multiPanel.getView().setEnabled(false);
}