MainClass.java Source code

Java tutorial

Introduction

Here is the source code for MainClass.java

Source

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;

import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerSorter;
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.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;

public class MainClass extends ApplicationWindow {
    private StudentTableModel model = new StudentTableModel();

    private TableViewer tv;

    public MainClass() {
        super(null);
        setBlockOnOpen(true);
        open();
        Display.getCurrent().dispose();
    }

    protected void configureShell(Shell shell) {
        super.configureShell(shell);
        shell.setSize(400, 400);
    }

    protected Control createContents(Composite parent) {
        Composite composite = new Composite(parent, SWT.NONE);
        composite.setLayout(new GridLayout(1, false));

        Combo combo = new Combo(composite, SWT.READ_ONLY);
        combo.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));

        tv = new TableViewer(composite);

        tv.setContentProvider(new PlayerContentProvider());
        tv.setLabelProvider(new PlayerLabelProvider());
        tv.setSorter(new StudentViewerSorter());

        Table table = tv.getTable();
        table.setLayoutData(new GridData(GridData.FILL_BOTH));

        TableColumn tc = new TableColumn(table, SWT.LEFT);
        tc.setText("First Name");
        tc.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent event) {
                ((StudentViewerSorter) tv.getSorter()).doSort(Const.COLUMN_FIRST_NAME);
                tv.refresh();
            }
        });

        tc = new TableColumn(table, SWT.LEFT);
        tc.setText("Last Name");
        tc.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent event) {
                ((StudentViewerSorter) tv.getSorter()).doSort(Const.COLUMN_LAST_NAME);
                tv.refresh();
            }
        });

        tc = new TableColumn(table, SWT.RIGHT);
        tc.setText("Math");
        tc.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent event) {
                ((StudentViewerSorter) tv.getSorter()).doSort(Const.COLUMN_MATH);
                tv.refresh();
            }
        });

        tc = new TableColumn(table, SWT.RIGHT);
        tc.setText("CHEM");
        tc.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent event) {
                ((StudentViewerSorter) tv.getSorter()).doSort(Const.COLUMN_CHEM);
                tv.refresh();
            }
        });

        tc = new TableColumn(table, SWT.RIGHT);
        tc.setText("AVE");
        tc.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent event) {
                ((StudentViewerSorter) tv.getSorter()).doSort(Const.COLUMN_AVE);
                tv.refresh();
            }
        });

        for (int i = 0, n = model.teams.length; i < n; i++) {
            combo.add(model.teams[i].getName());
        }

        combo.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent event) {
                update(model.teams[((Combo) event.widget).getSelectionIndex()]);
            }
        });

        combo.select(0);
        update(model.teams[0]);

        for (int i = 0, n = table.getColumnCount(); i < n; i++) {
            table.getColumn(i).pack();
        }
        table.setHeaderVisible(true);
        table.setLinesVisible(true);
        return composite;
    }

    private void update(HighSchool team) {
        getShell().setText(team.getYear() + " " + team.getName());
        tv.setInput(team);
    }

    public static void main(String[] args) {
        new MainClass();
    }
}

class StudentTableModel {
    public HighSchool[] teams;

    public StudentTableModel() {
        teams = new HighSchool[3];

        teams[0] = new HighSchool("school 1", "1985-86");
        teams[0].add(new Student("A", "a", 25.8f, 9.8f, 6.8f));
        teams[0].add(new Student("B", "b", 21.3f, 8.1f, 2.7f));
        teams[0].add(new Student("C", "c", 16.1f, 9.5f, 1.8f));

        teams[1] = new HighSchool("school 2", "1995-96");
        teams[1].add(new Student("Michael", "Jordan", 30.4f, 6.6f, 4.3f));
        teams[1].add(new Student("Scottie", "Pippen", 19.4f, 6.4f, 5.9f));
        teams[1].add(new Student("Toni", "Kukoc", 13.1f, 4.0f, 3.5f));

        teams[2] = new HighSchool("scholl 3", "1987-1988");
        teams[2].add(new Student("Magic", "Johnson", 23.9f, 6.3f, 12.2f));
        teams[2].add(new Student("James", "Worthy", 19.4f, 5.7f, 2.8f));
    }
}

class PlayerLabelProvider implements ITableLabelProvider {
    private Image ball;

    public PlayerLabelProvider() {
        try {
            ball = new Image(null, new FileInputStream("images/ball.png"));
        } catch (FileNotFoundException e) {
        }
    }

    public Image getColumnImage(Object arg0, int arg1) {
        Student player = (Student) arg0;
        Image image = null;
        switch (arg1) {
        case Const.COLUMN_MATH:
        case Const.COLUMN_CHEM:
        case Const.COLUMN_AVE:
            if (player.ledTeam(arg1))
                image = ball;
            break;
        }
        return image;
    }

    public String getColumnText(Object arg0, int arg1) {
        Student player = (Student) arg0;
        String text = "";
        switch (arg1) {
        case Const.COLUMN_FIRST_NAME:
            text = player.getFirstName();
            break;
        case Const.COLUMN_LAST_NAME:
            text = player.getLastName();
            break;
        case Const.COLUMN_MATH:
            text = String.valueOf(player.getMath());
            break;
        case Const.COLUMN_CHEM:
            text = String.valueOf(player.getChem());
            break;
        case Const.COLUMN_AVE:
            text = String.valueOf(player.getAve());
            break;
        }
        return text;
    }

    public void addListener(ILabelProviderListener arg0) {
    }

    public void dispose() {
        if (ball != null)
            ball.dispose();
    }

    public boolean isLabelProperty(Object arg0, String arg1) {
        return false;
    }

    public void removeListener(ILabelProviderListener arg0) {
    }
}

class PlayerContentProvider implements IStructuredContentProvider {
    public Object[] getElements(Object arg0) {
        return ((HighSchool) arg0).getPlayers().toArray();
    }

    public void dispose() {
    }

    public void inputChanged(Viewer arg0, Object arg1, Object arg2) {
    }
}

class Const {
    public static final int COLUMN_FIRST_NAME = 0;

    public static final int COLUMN_LAST_NAME = 1;

    public static final int COLUMN_MATH = 2;

    public static final int COLUMN_CHEM = 3;

    public static final int COLUMN_AVE = 4;
}

class HighSchool {
    private String name;

    private String year;

    private List players;

    public HighSchool(String name, String year) {
        this.name = name;
        this.year = year;
        players = new LinkedList();
    }

    public String getName() {
        return name;
    }

    public String getYear() {
        return year;
    }

    public boolean add(Student player) {
        boolean added = players.add(player);
        if (added)
            player.setSchool(this);
        return added;
    }

    public List getPlayers() {
        return Collections.unmodifiableList(players);
    }

    public boolean led(Student player, int column) {
        boolean led = true;

        for (int i = 0, n = players.size(); i < n && led; i++) {
            Student test = (Student) players.get(i);
            if (player == test)
                continue;
            switch (column) {
            case Const.COLUMN_MATH:
                if (player.getMath() < test.getMath())
                    led = false;
                break;
            case Const.COLUMN_CHEM:
                if (player.getChem() < test.getChem())
                    led = false;
                break;
            case Const.COLUMN_AVE:
                if (player.getAve() < test.getAve())
                    led = false;
                break;
            }
        }
        return led;
    }
}

class Student {
    private HighSchool team;

    private String lastName;

    private String firstName;

    private float math;

    private float chem;

    private float ave;

    public Student() {
        this(null, null, 0.0f, 0.0f, 0.0f);
    }

    public Student(String firstName, String lastName, float m, float c, float a) {
        setFirstName(firstName);
        setLastName(lastName);
        setMath(m);
        setChem(c);
        setAve(a);
    }

    public void setSchool(HighSchool team) {
        this.team = team;
    }

    public float getAve() {
        return ave;
    }

    public void setAve(float assists) {
        this.ave = assists;
    }

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public float getMath() {
        return math;
    }

    public void setMath(float points) {
        this.math = points;
    }

    public float getChem() {
        return chem;
    }

    public void setChem(float rebounds) {
        this.chem = rebounds;
    }

    public HighSchool getTeam() {
        return team;
    }

    public boolean ledTeam(int column) {
        return team.led(this, column);
    }
}

class StudentViewerSorter extends ViewerSorter {
    private static final int ASCENDING = 0;

    private static final int DESCENDING = 1;

    private int column;

    private int direction;

    public void doSort(int column) {
        if (column == this.column) {
            direction = 1 - direction;
        } else {
            this.column = column;
            direction = ASCENDING;
        }
    }

    public int compare(Viewer viewer, Object e1, Object e2) {
        int rc = 0;
        Student p1 = (Student) e1;
        Student p2 = (Student) e2;

        switch (column) {
        case Const.COLUMN_FIRST_NAME:
            rc = collator.compare(p1.getFirstName(), p2.getFirstName());
            break;
        case Const.COLUMN_LAST_NAME:
            rc = collator.compare(p1.getLastName(), p2.getLastName());
            break;
        case Const.COLUMN_MATH:
            rc = p1.getMath() > p2.getMath() ? 1 : -1;
            break;
        case Const.COLUMN_CHEM:
            rc = p1.getChem() > p2.getChem() ? 1 : -1;
            break;
        case Const.COLUMN_AVE:
            rc = p1.getAve() > p2.getAve() ? 1 : -1;
            break;
        }
        if (direction == DESCENDING)
            rc = -rc;
        return rc;
    }
}