private static final long serialVersionUID = 9101744072914090143L;
@Override
@SuppressWarnings({ "unchecked", "rawtypes" })
protected void populateItem(final ListItem<ConnConfProperty> item) {
final ConnConfProperty property = item.getModelObject();
final Label label = new Label("connPropAttrSchema",
StringUtils.isBlank(property.getSchema().getDisplayName())
? property.getSchema().getName()
: property.getSchema().getDisplayName());
item.add(label);
FieldPanel<? extends Serializable> field;
boolean required = false;
boolean isArray = false;
if (Constants.GUARDED_STRING.equalsIgnoreCase(property.getSchema().getType())
|| Constants.GUARDED_BYTE_ARRAY.equalsIgnoreCase(property.getSchema().getType())) {
field = new AjaxPasswordFieldPanel("panel", label.getDefaultModelObjectAsString(),
new Model<String>());
((PasswordTextField) field.getField()).setResetPassword(false);
required = property.getSchema().isRequired();
} else {
Class<?> propertySchemaClass;
try {
propertySchemaClass = ClassUtils.forName(property.getSchema().getType(),
ClassUtils.getDefaultClassLoader());
} catch (Exception e) {
LOG.error("Error parsing attribute type", e);
propertySchemaClass = String.class;
}
if (ClassUtils.isAssignable(Number.class, propertySchemaClass)) {
Class<Number> numberClass = (Class<Number>) propertySchemaClass;
field = new SpinnerFieldPanel<Number>("panel", label.getDefaultModelObjectAsString(),
numberClass, new Model<Number>(), null, null);
required = property.getSchema().isRequired();
} else if (ClassUtils.isAssignable(Boolean.class, propertySchemaClass)) {
field = new AjaxCheckBoxPanel("panel", label.getDefaultModelObjectAsString(),
new Model<Boolean>());
} else {
field = new AjaxTextFieldPanel("panel", label.getDefaultModelObjectAsString(),
new Model<String>());
required = property.getSchema().isRequired();
}
if (String[].class.equals(propertySchemaClass)) {
isArray = true;
}
}
field.setTitle(property.getSchema().getHelpMessage());
if (isArray) {
field.removeRequiredLabel();
if (property.getValues().isEmpty()) {
property.getValues().add(null);
}
final MultiFieldPanel multiFields = new MultiFieldPanel("panel",
new PropertyModel<List<String>>(property, "values"), field, true);
item.add(multiFields);
} else {
if (required) {
field.addRequiredLabel();
}
field.getField().add(new AjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
private static final long serialVersionUID = -1107858522700306810L;
@Override
protected void onUpdate(final AjaxRequestTarget target) {
send(getPage(), Broadcast.BREADTH,
new ConnConfModEvent(target, connConfProperties));
}
});
field.setNewModel(toSerializableList(property.getValues()));
item.add(field);
}
resourceTO.getConnConfProperties().add(property);
}