use of org.jboss.hal.ballroom.form.ModelNodeItem in project console by hal.
the class ModelNodeMapping method persistModel.
@Override
@SuppressWarnings("unchecked")
public void persistModel(String id, T model, Iterable<FormItem> formItems) {
for (FormItem formItem : formItems) {
String name = formItem.getName();
if (formItem.isModified()) {
ModelNode attributeDescription = findAttribute(name);
if (attributeDescription == null) {
logger.error("{}: Unable to persist attribute '{}': No attribute description found in\n{}", id, name, attributeDescriptions);
continue;
}
if (formItem instanceof ModelNodeItem) {
if (formItem.getValue() == null) {
failSafeRemove(model, name);
} else {
model.get(name).set(((ModelNodeItem) formItem).getValue());
}
} else {
if (formItem.isExpressionValue()) {
model.get(name).setExpression(formItem.getExpressionValue());
} else {
ModelType type = attributeDescription.get(TYPE).asType();
Object value = formItem.getValue();
switch(type) {
case BOOLEAN:
Boolean booleanValue = (Boolean) value;
if (booleanValue == null) {
failSafeRemove(model, name);
} else {
model.get(name).set(booleanValue);
}
break;
case BIG_INTEGER:
case INT:
case LONG:
Long longValue = (Long) value;
if (longValue == null) {
failSafeRemove(model, name);
} else {
if (type == BIG_INTEGER) {
model.get(name).set(BigInteger.valueOf(longValue));
} else if (type == INT) {
model.get(name).set(longValue.intValue());
} else {
model.get(name).set(longValue);
}
}
break;
case DOUBLE:
Double doubleValue = (Double) value;
if (doubleValue == null) {
failSafeRemove(model, name);
} else {
model.get(name).set(doubleValue);
}
break;
case LIST:
List<String> list = (List<String>) value;
if (list == null || list.isEmpty()) {
failSafeRemove(model, name);
} else {
ModelNode listNode = new ModelNode();
for (String s : list) {
listNode.add(s);
}
model.get(name).set(listNode);
}
break;
case OBJECT:
boolean stringValueType = attributeDescription.get(VALUE_TYPE).getType().equals(ModelType.TYPE) && attributeDescription.get(VALUE_TYPE).asType().equals(ModelType.STRING);
if (stringValueType) {
Map<String, String> map = (Map<String, String>) value;
if (map == null || map.isEmpty()) {
failSafeRemove(model, name);
} else {
ModelNode mapNode = new ModelNode();
for (Map.Entry<String, String> entry : map.entrySet()) {
mapNode.get(entry.getKey()).set(entry.getValue());
}
model.get(name).set(mapNode);
}
}
break;
case STRING:
String stringValue = value == null ? null : String.valueOf(value);
if (Strings.isNullOrEmpty(stringValue)) {
failSafeRemove(model, name);
} else {
model.get(name).set(stringValue);
}
break;
// unsupported types
case BIG_DECIMAL:
case BYTES:
case EXPRESSION:
case PROPERTY:
case TYPE:
case UNDEFINED:
logger.warn("{}: persisting form field '{}' to type '{}' not implemented", id, name, type);
break;
default:
break;
}
}
}
}
}
}
use of org.jboss.hal.ballroom.form.ModelNodeItem in project console by hal.
the class ModelNodeMapping method populateFormItems.
@Override
@SuppressWarnings("unchecked")
public void populateFormItems(T model, Form<T> form) {
String id = id(form);
for (FormItem formItem : form.getBoundFormItems()) {
formItem.clearError();
String name = formItem.getName();
if (model.hasDefined(name)) {
ModelNode attributeDescription = findAttribute(name);
if (attributeDescription == null) {
logger.error("{}: Unable to populate form item '{}': No attribute description found in\n{}", id, name, attributeDescriptions);
continue;
}
ModelNode value = model.get(name);
ModelType valueType = value.getType();
if (valueType == EXPRESSION) {
if (formItem.supportsExpressions()) {
formItem.setExpressionValue(value.asString());
formItem.setUndefined(false);
} else {
logger.error("{}: Unable to populate form item '{}': Value is an expression, but form item does not support expressions", id, name);
continue;
}
} else if (formItem instanceof ModelNodeItem) {
formItem.setValue(value);
} else {
populateFormItem(id, name, attributeDescription, value, formItem);
}
formItem.setUndefined(false);
} else {
formItem.clearValue();
formItem.setUndefined(true);
}
}
}
Aggregations