@Override public void clearValues() { editedEntity = null; for (Map<String, FormItem> groupItems : formItems.values()) { for (String key : groupItems.keySet()) { visitItem( key, new FormItemVisitor() { @Override public void visit(FormItem item) { item.clearValue(); } }); } } setOperational(false); if (toolsCallback != null) setEnabled(false); refreshPlainView(); }
@Override public void edit(ModelNode bean) { // Needs to be declared (i.e. when creating new instances) if (null == bean) throw new IllegalArgumentException("Invalid entity: null"); // the edit buttons becomes visible setOperational(true); this.editedEntity = bean; // prevent modification of the source // the DMR getter otherwise mutate the bean this.editedEntity.protect(); final Map<String, String> exprMap = getExpressions(editedEntity); // final List<ModelNode> filteredDMRNames = bean.hasDefined("_filtered-attributes") ? // bean.get("_filtered-attributes").asList() : Collections.EMPTY_LIST; // visit form ModelNodeInspector inspector = new ModelNodeInspector(bean); inspector.accept( new ModelNodeVisitor() { private boolean isComplex = false; @Override public boolean visitValueProperty( final String propertyName, final ModelNode value, final PropertyContext ctx) { if (isComplex) return true; // skip complex types visitItem( propertyName, new FormItemVisitor() { public void visit(FormItem item) { item.resetMetaData(); // expressions String exprValue = exprMap.get(propertyName); if (exprValue != null) { item.setUndefined(false); item.setExpressionValue(exprValue); } // values // values else if (value.isDefined()) { item.setUndefined(false); Object castedValue = downCast(value, (ModelNode) item.getMetadata()); item.setValue(castedValue); } else if (defaults.containsKey(propertyName)) { item.setUndefined(false); item.setValue( downCast(defaults.get(propertyName), (ModelNode) item.getMetadata())); } else { // when no value is given we still need to validate the input item.setUndefined(true); item.setModified(true); // don't escape validation } // RBAC: attribute level constraints /*for(ModelNode att : filteredDMRNames) { if(att.asString().equals(propertyName)) { item.setFiltered(true); break; } } */ } }); return true; } @Override public boolean visitReferenceProperty( String propertyName, ModelNode value, PropertyContext ctx) { isComplex = true; return true; } @Override public void endVisitReferenceProperty( String propertyName, ModelNode value, PropertyContext ctx) { isComplex = false; } @Override public boolean visitCollectionProperty( String propertyName, final ModelNode value, PropertyContext ctx) { visitItem( propertyName, new FormItemVisitor() { public void visit(FormItem item) { item.resetMetaData(); if (value != null) { item.setUndefined(false); // TODO: item.setValue(value.asList()); item.setValue(Collections.EMPTY_LIST); } else { item.setUndefined(true); item.setModified(true); // don't escape validation } } }); return true; } }); // plain views refreshPlainView(); }