public static Element parseElementFromJsonObject(JSONObject obj) throws Exception {
PluginManager pluginManager = (PluginManager) appContext.getBean("pluginManager");
// instantiate element
String className = obj.getString(FormUtil.PROPERTY_CLASS_NAME);
Element element = (Element) pluginManager.getPlugin(className);
if (element != null) {
// check for mobile support
boolean isMobileView = MobileUtil.isMobileView();
if (isMobileView && (element instanceof MobileElement) && !((MobileElement)element).isMobileSupported()) {
// mobile not supported, ignore this element
return null;
}
// set element properties
Map<String, Object> properties = FormUtil.parsePropertyFromJsonObject(obj);
element.setProperties(properties);
element.setProperty(FormUtil.PROPERTY_ELEMENT_UNIQUE_KEY, FormUtil.getUniqueKey());
// recurse into child elements
Collection<Element> childElements = FormUtil.parseChildElementsFromJsonObject(obj);
if (childElements == null) {
childElements = new ArrayList<Element>();
}
element.setChildren(childElements);
// set binders and properties
FormLoadBinder loadBinder = (FormLoadBinder) FormUtil.parseBinderFromJsonObject(obj, FormBinder.FORM_LOAD_BINDER);
element.setLoadBinder(loadBinder);
FormLoadBinder optionsBinder = (FormLoadBinder) FormUtil.parseBinderFromJsonObject(obj, FormBinder.FORM_OPTIONS_BINDER);
element.setOptionsBinder(optionsBinder);
FormStoreBinder storeBinder = (FormStoreBinder) FormUtil.parseBinderFromJsonObject(obj, FormBinder.FORM_STORE_BINDER);
element.setStoreBinder(storeBinder);
// set validator
FormValidator validator = FormUtil.parseValidatorFromJsonObject(obj);
if (validator != null) {
validator.setElement(element);
element.setValidator(validator);
}
}
return element;
}