protected final void readProperties(final Element element, final PropertiesProvider provider) {
    if (provider == null) {
      // do not read properties
      return;
    }

    Element propertiesElement = LwXmlReader.getChild(element, UIFormXmlConstants.ELEMENT_PROPERTIES);
    if(propertiesElement == null){
      propertiesElement = new Element(UIFormXmlConstants.ELEMENT_PROPERTIES, element.getNamespace());
    }

    final HashMap name2property = provider.getLwProperties(getComponentClassName());
    if (name2property == null) {
      myErrorComponentProperties = propertiesElement.clone();
      return;
    }

    final List<Element> propertyElements = propertiesElement.getChildren();
    for (Element t : propertyElements) {
      final String name = t.getName();
      final LwIntrospectedProperty property = (LwIntrospectedProperty)name2property.get(name);
      if (property == null){
        continue;
      }
      try {
        final Object value = property.read(t);
        setPropertyValue(property, value);
      }
      catch (final Exception exc) {
        // Skip non readable properties
      }
    }

    readClientProperties(element);
  }
protected final void readProperties(final Element element, final PropertiesProvider provider)