private static IObservableMap[] createAttributeMap(
      IObservableSet knownElements, AbstractColumnLabelProviderDelegate... baseProviders) {
    List<String> propertyNamesToObserve = new ArrayList<String>();
    for (AbstractColumnLabelProviderDelegate baseProvider : baseProviders) {
      propertyNamesToObserve.addAll(baseProvider.getPropertyNamesToObserve());
    }

    IValueProperty[] labelProperties = new IValueProperty[propertyNamesToObserve.size()];
    for (int i = 0; i < labelProperties.length; i++) {
      IBeanValueProperty property = BeanProperties.value(propertyNamesToObserve.get(i));
      labelProperties[i] = property;
    }

    return Properties.observeEach(knownElements, labelProperties);
  }