BeanModelType implements ComplexModelType<T> { @Override public StateNode applicationToModel(Object applicationValue, PropertyFilter filter) { if (applicationValue == null) { return null; } StateNode node = new StateNode( Collections.singletonList(ElementPropertyMap.class)); importProperties(ElementPropertyMap.getModel(node), applicationValue, filter); return node; } protected  BeanModelType(Class<T> proxyType,
            Map<String, BeanModelTypeProperty> properties,
            boolean allowEmptyProperties); private  BeanModelType(Class<T> javaType, PropertyFilter propertyFilter,
            PathLookup<ModelEncoder<?, ?>> converterLookup,
            PathLookup<ClientUpdateMode> clientUpdateLookup); protected  BeanModelType(Class<T> javaType, PropertyFilter propertyFilter,
            boolean allowEmptyProperties); static boolean isBean(Type type); boolean hasProperty(String propertyName); ModelType getPropertyType(String propertyName); @Override T modelToApplication(Serializable modelValue); Class<T> getProxyType(); @Override StateNode applicationToModel(Object applicationValue,
            PropertyFilter filter); void importProperties(ElementPropertyMap model, Object bean,
            PropertyFilter propertyFilter); ModelType resolveType(String modelPath); @Override @SuppressWarnings("unchecked") BeanModelType<C> cast(Class<C> proxyType); Stream<String> getPropertyNames(); @Override boolean accepts(Type applicationType); @Override Type getJavaType(); @Override JsonValue toJson(); @Override void createInitialValue(StateNode node, String property); void createInitialValues(StateNode node); Map<String, Boolean> getClientUpdateAllowedProperties(
            Set<String> twoWayBindingPaths);  }
@Test public void applicationToModel() { BeanModelType<Bean> beanType = new BeanModelType<>(Bean.class, PropertyFilter.ACCEPT_ALL, false); Bean bean = new Bean(3); StateNode applicationToModel = beanType.applicationToModel(bean, PropertyFilter.ACCEPT_ALL); ElementPropertyMap model = ElementPropertyMap .getModel(applicationToModel); assertThreeBean(model); }