Search in sources :

Example 1 with ModelNodeItem

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;
                    }
                }
            }
        }
    }
}
Also used : FormItem(org.jboss.hal.ballroom.form.FormItem) ModelType(org.jboss.hal.dmr.ModelType) ModelNodeItem(org.jboss.hal.ballroom.form.ModelNodeItem) List(java.util.List) Collectors.toList(java.util.stream.Collectors.toList) ModelNode(org.jboss.hal.dmr.ModelNode) HashMap(java.util.HashMap) Map(java.util.Map)

Example 2 with ModelNodeItem

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);
        }
    }
}
Also used : FormItem(org.jboss.hal.ballroom.form.FormItem) ModelType(org.jboss.hal.dmr.ModelType) ModelNodeItem(org.jboss.hal.ballroom.form.ModelNodeItem) ModelNode(org.jboss.hal.dmr.ModelNode)

Aggregations

FormItem (org.jboss.hal.ballroom.form.FormItem)2 ModelNodeItem (org.jboss.hal.ballroom.form.ModelNodeItem)2 ModelNode (org.jboss.hal.dmr.ModelNode)2 ModelType (org.jboss.hal.dmr.ModelType)2 HashMap (java.util.HashMap)1 List (java.util.List)1 Map (java.util.Map)1 Collectors.toList (java.util.stream.Collectors.toList)1