Org Eclipse Jface Viewers Java by API

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.ListViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerFilter;
import org.eclipse.jface.window.ApplicationWindow;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
public class MainClass extends ApplicationWindow {
  private ItemFilter filter = new ItemFilter();
  public MainClass() {
    super(null);
    setBlockOnOpen(true);
    open();
    Display.getCurrent().dispose();
  }
  protected void configureShell(Shell shell) {
    super.configureShell(shell);
    shell.setText("Food List");
  }
  protected Control createContents(Composite parent) {
    Composite composite = new Composite(parent, SWT.NONE);
    composite.setLayout(new GridLayout(1, false));
    Button filterButton = new Button(composite, SWT.CHECK);
    filterButton.setText("&Show only healthy");
    final ListViewer lv = new ListViewer(composite);
    lv.setContentProvider(new ItemContentProvider());
    lv.setLabelProvider(new ItemLabelProvider());
    lv.setInput(new ItemList());
    filterButton.addSelectionListener(new SelectionAdapter() {
      public void widgetSelected(SelectionEvent event) {
        if (((Button) event.widget).getSelection())
          lv.addFilter(filter);
        else
          lv.removeFilter(filter);
      }
    });
    parent.pack();
    return composite;
  }
  public static void main(String[] args) {
    new MainClass();
  }
}
class MyItem {
  private String name;
  private boolean visible;
  public MyItem(String name, boolean healthy) {
    this.name = name;
    this.visible = healthy;
  }
  public boolean isVisible() {
    return visible;
  }
  public String getName() {
    return name;
  }
}
class ItemFilter extends ViewerFilter {
  public boolean select(Viewer arg0, Object arg1, Object arg2) {
    return ((MyItem) arg2).isVisible();
  }
}
class ItemList {
  private ArrayList foods;
  public ItemList() {
    foods = new ArrayList();
    foods.add(new MyItem("A", true));
    foods.add(new MyItem("B", false));
    foods.add(new MyItem("C", true));
    foods.add(new MyItem("D", false));
    foods.add(new MyItem("E", true));
    foods.add(new MyItem("F", false));
    foods.add(new MyItem("G", true));
    foods.add(new MyItem("H", false));
    foods.add(new MyItem("I", true));
    foods.add(new MyItem("K", false));
  }
  public List getFoods() {
    return Collections.unmodifiableList(foods);
  }
}
class ItemLabelProvider implements ILabelProvider {
  public Image getImage(Object arg0) {
    return null;
  }
  public String getText(Object arg0) {
    return ((MyItem) arg0).getName();
  }
  public void addListener(ILabelProviderListener arg0) {
  }
  public void dispose() {
  }
  public boolean isLabelProperty(Object arg0, String arg1) {
    return false;
  }
  public void removeListener(ILabelProviderListener arg0) {
  }
}
class ItemContentProvider implements IStructuredContentProvider {
  public Object[] getElements(Object arg0) {
    return ((ItemList) arg0).getFoods().toArray();
  }
  public void dispose() {
  }
  public void inputChanged(Viewer arg0, Object arg1, Object arg2) {
  }
}