hxeclipse.haxelib.ui.widgets.LibraryDetails.java Source code

Java tutorial

Introduction

Here is the source code for hxeclipse.haxelib.ui.widgets.LibraryDetails.java

Source

package hxeclipse.haxelib.ui.widgets;

import hxeclipse.core.ui.IInputConsumer;
import hxeclipse.core.ui.viewers.ColumnSorterListener;
import hxeclipse.core.ui.viewers.TableComparator;
import hxeclipse.core.ui.widgets.LabelText;
import hxeclipse.haxelib.model.Library;
import hxeclipse.haxelib.model.LibraryRelease;
import hxeclipse.haxelib.ui.viewers.LibraryReleaseTableLabelProvider;

import java.net.URL;
import java.util.List;

import org.eclipse.jface.layout.TableColumnLayout;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.ColumnWeightData;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.ListViewer;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TableViewerColumn;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerFilter;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Link;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.model.WorkbenchViewerComparator;

public class LibraryDetails extends Composite implements IInputConsumer {

    private Library _library;
    private LabelText _nameDisplay;
    private LabelText _tagsDisplay;
    private Text _descriptionDisplay;
    private Link _websiteDisplay;
    private LabelText _licenseDisplay;
    private LabelText _ownerDisplay;
    private LabelText _versionDisplay;
    private ListViewer _installedVersionList;
    private TableViewer _releaseList;
    protected IStructuredSelection _inStalledVersionSelection;

    public LibraryDetails(Composite parent, int style) {
        super(parent, style);

        _initialize();
        createDetails();
        createReleasePart();
    }

    private void _initialize() {
        GridLayout layout = new GridLayout(1, false);
        setLayout(layout);
    }

    protected Composite createDetails() {
        GridLayout gridLayout = new GridLayout(2, false);
        gridLayout.marginWidth = 0;
        gridLayout.marginHeight = 0;

        Composite details = new Composite(this, SWT.NONE);
        details.setLayout(gridLayout);
        details.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));

        createDetailsLeftPart(details);

        createDetailsRightPart(details);

        return details;
    }

    protected Composite createDetailsLeftPart(Composite details) {
        GridLayout layout = new GridLayout(2, false);
        layout.marginWidth = 0;
        layout.marginHeight = 0;

        Composite leftPart = new Composite(details, SWT.NONE);
        leftPart.setLayout(layout);
        leftPart.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));

        _nameDisplay = new LabelText(leftPart, "Name:");
        _tagsDisplay = new LabelText(leftPart, "Tags:");
        _licenseDisplay = new LabelText(leftPart, "License:");
        _ownerDisplay = new LabelText(leftPart, "Owner:");
        _versionDisplay = new LabelText(leftPart, "Latest version:");
        createInstalledVersionList(leftPart);

        return leftPart;
    }

    protected Composite createDetailsRightPart(Composite details) {
        Composite rightPart = new Composite(details, SWT.NONE);
        rightPart.setLayout(new GridLayout());
        rightPart.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));

        Link link = new Link(rightPart, SWT.SINGLE);
        link.setFont(getFont());
        link.setLayoutData(new GridData(SWT.FILL, SWT.NONE, true, false));
        link.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent event) {
                try {
                    PlatformUI.getWorkbench().getBrowserSupport().createBrowser(null).openURL(new URL(event.text));
                } catch (Exception e) {
                    //ignore any errors
                }
            }
        });
        _websiteDisplay = link;

        Text text = new Text(rightPart, SWT.MULTI | SWT.BORDER | SWT.WRAP | SWT.V_SCROLL);
        text.setFont(getFont());
        text.setEditable(false);
        GridData layoutData = new GridData(SWT.FILL, SWT.FILL, true, true);
        layoutData.heightHint = 60;
        layoutData.widthHint = 100;
        text.setLayoutData(layoutData);
        _descriptionDisplay = text;

        return rightPart;
    }

    protected ListViewer createInstalledVersionList(Composite parent) {
        Label label = new Label(parent, SWT.NONE);
        label.setLayoutData(new GridData(SWT.NONE, SWT.BEGINNING, false, false));
        label.setText("Installed versions:");

        GridData layoutData = new GridData(SWT.FILL, SWT.FILL, true, true);
        layoutData.heightHint = 100;

        _installedVersionList = new ListViewer(parent);
        _installedVersionList.getControl().setLayoutData(layoutData);
        _installedVersionList.setComparator(new WorkbenchViewerComparator());
        _installedVersionList.setContentProvider(ArrayContentProvider.getInstance());
        _installedVersionList.addFilter(new ViewerFilter() {
            @Override
            public boolean select(Viewer viewer, Object parentElement, Object element) {
                LibraryRelease libraryRelease = (LibraryRelease) element;
                return libraryRelease.isInstalled();
            }
        });
        _installedVersionList.setLabelProvider(new LabelProvider() {
            @Override
            public String getText(Object element) {
                LibraryRelease libraryRelease = (LibraryRelease) element;
                return super.getText(libraryRelease.getVersion() + (libraryRelease.isCurrent() ? " *" : ""));
            }

        });
        _installedVersionList.addSelectionChangedListener(new ISelectionChangedListener() {

            @Override
            public void selectionChanged(SelectionChangedEvent event) {
                _inStalledVersionSelection = (IStructuredSelection) _installedVersionList.getSelection();
            }
        });

        return _installedVersionList;
    }

    protected Composite createReleasePart() {
        Label label = new Label(this, SWT.NONE);
        label.setText("Releases:");

        TableColumnLayout tableLayout = new TableColumnLayout();

        //this composite allows us to manage the table columns through tableLayour
        Composite composite = new Composite(this, SWT.NONE);
        GridData layoutData = new GridData(SWT.FILL, SWT.FILL, true, true);
        layoutData.heightHint = 100;
        composite.setLayoutData(layoutData);
        composite.setLayout(tableLayout);

        createReleaseTable(composite, tableLayout);

        return composite;
    }

    protected TableViewer createReleaseTable(Composite parent, TableColumnLayout tableLayout) {
        GridData layoutData = new GridData(SWT.FILL, SWT.FILL, true, true);
        layoutData.heightHint = 100;

        _releaseList = new TableViewer(parent, SWT.BORDER | SWT.FULL_SELECTION);
        _releaseList.getControl().setLayoutData(layoutData);

        //columns
        String[] titles = { "Date", "Version", "Description" };
        int[] weights = { 1, 1, 4 };

        for (int i = 0; i < titles.length; i++) {
            TableViewerColumn tableViewerColumn = new TableViewerColumn(_releaseList, SWT.NONE);
            TableColumn column = tableViewerColumn.getColumn();
            column.setText(titles[i]);
            column.addSelectionListener(new ColumnSorterListener(_releaseList));

            //give the column it's layout properties
            tableLayout.setColumnData(column, new ColumnWeightData(weights[i], 100, true));
        }

        //table properties
        Table table = _releaseList.getTable();
        table.setHeaderVisible(true);
        table.setLinesVisible(true);
        TableColumn defaultSortColumn = table.getColumn(1);
        table.setSortColumn(defaultSortColumn);
        table.setSortDirection(SWT.DOWN);

        _releaseList.setComparator(new TableComparator());
        _releaseList.setContentProvider(ArrayContentProvider.getInstance());
        _releaseList.setLabelProvider(new LibraryReleaseTableLabelProvider());

        return _releaseList;
    }

    public void setLibrary(Library haxeLibrary) {
        _library = haxeLibrary;

        _nameDisplay.setText(_library.getName());
        _tagsDisplay.setText(_library.getTags());
        _descriptionDisplay.setText(_library.getDescription());
        _websiteDisplay.setText("<a>" + _library.getWebsite() + "</a>");
        _licenseDisplay.setText(_library.getLicense());
        _ownerDisplay.setText(_library.getOwner());
        _versionDisplay.setText(_library.getLatestVersion());

        List<LibraryRelease> releases = _library.getReleases();
        _installedVersionList.setInput(releases);
        _releaseList.setInput(haxeLibrary.getReleases());

        _releaseList.getControl().getParent().layout(true);

        layout();
    }

    public Library getHaxeLibrary() {
        return _library;
    }

    @Override
    public void setInput(Object input) {
        if (input instanceof Library) {
            setLibrary((Library) input);
        } else {
            _clear();
        }
    }

    private void _clear() {
        _library = null;

        _nameDisplay.setText("");
        _tagsDisplay.setText("");
        _descriptionDisplay.setText("");
        _websiteDisplay.setText("");
        _licenseDisplay.setText("");
        _ownerDisplay.setText("");
        _versionDisplay.setText("");

        _installedVersionList.setInput(null);
        _releaseList.setInput(null);

        _releaseList.getControl().getParent().layout(true);

        layout();
    }

    public LibraryRelease getSelectedInstalledRelease() {
        IStructuredSelection selection = _inStalledVersionSelection;

        LibraryRelease libraryRelease = null;
        if (selection != null && !selection.isEmpty() && selection.size() == 1) {
            libraryRelease = (LibraryRelease) selection.getFirstElement();
        }

        return libraryRelease;
    }
}