@Override
  public Object doGetValue() {
    if (attribute.equals(Constants.ATTR_TEXT)) return item.getText();
    if (attribute.equals(Constants.ATTR_IMAGE)) return item.getImage();
    if (attribute.equals(Constants.ATTR_TOOLTIP)) {
      if (item instanceof TableColumn) return ((TableColumn) item).getToolTipText();
      if (item instanceof TreeColumn) return ((TreeColumn) item).getToolTipText();
      if (item instanceof ToolItem) return ((ToolItem) item).getToolTipText();
      if (item instanceof TabItem) return ((TabItem) item).getToolTipText();
    }
    if (attribute.equals(Constants.ATTR_ALIGNMENT)) {
      if (item instanceof TableColumn) return ((TableColumn) item).getAlignment();
      if (item instanceof TreeColumn) return ((TreeColumn) item).getAlignment();
    }
    if (attribute.equals(Constants.ATTR_WIDTH)) {
      if (item instanceof TableColumn) return ((TableColumn) item).getWidth();
      if (item instanceof TreeColumn) return ((TreeColumn) item).getWidth();
      if (item instanceof ToolItem) return ((ToolItem) item).getWidth();
    }
    if (attribute.equals(Constants.ATTR_ENABLED)) {
      if (item instanceof ToolItem) return ((ToolItem) item).getEnabled();
    }

    return null;
  }
  private void updateItem(Item item) {
    if (!item.isDisposed()) { // defensive code
      ILabelProvider lprovider = (ILabelProvider) fContentViewer.getLabelProvider();

      Object data = item.getData();

      String oldText = item.getText();
      String text = lprovider.getText(data);
      if (text != null && !text.equals(oldText)) {
        item.setText(text);
      }

      Image oldImage = item.getImage();
      Image image = lprovider.getImage(data);
      if (image != null && !image.equals(oldImage)) {
        item.setImage(image);
      }
    }
  }