org.ebayopensource.turmeric.eclipse.ui.components.DependenciesViewer.java Source code

Java tutorial

Introduction

Here is the source code for org.ebayopensource.turmeric.eclipse.ui.components.DependenciesViewer.java

Source

/*******************************************************************************
 * Copyright (c) 2006-2010 eBay Inc. All Rights Reserved.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *    http://www.apache.org/licenses/LICENSE-2.0
 *******************************************************************************/
package org.ebayopensource.turmeric.eclipse.ui.components;

import java.util.Map;
import java.util.Set;
import java.util.TreeMap;

import org.ebayopensource.turmeric.eclipse.resources.model.AssetInfo;
import org.ebayopensource.turmeric.eclipse.utils.collections.SetUtil;
import org.eclipse.jface.viewers.CellEditor;
import org.eclipse.jface.viewers.CheckboxCellEditor;
import org.eclipse.jface.viewers.CheckboxTableViewer;
import org.eclipse.jface.viewers.TextCellEditor;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.TableItem;

/**
 * The Class DependenciesViewer.
 *
 * @author smathew
 */
public class DependenciesViewer extends CheckboxTableViewer {
    private String serviceName = "";
    private final Map<AssetInfo, Boolean> selected = new TreeMap<AssetInfo, Boolean>();

    /**
     * Instantiates a new dependencies viewer.
     *
     * @param parent the parent
     */
    public DependenciesViewer(final Composite parent) {
        this(parent, true);
    }

    /**
     * Instantiates a new dependencies viewer.
     *
     * @param parent the parent
     * @param multiSelect the multi select
     */
    public DependenciesViewer(final Composite parent, final boolean multiSelect) {
        this(new Table(parent, (multiSelect ? SWT.MULTI : SWT.SINGLE) | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER
                | SWT.CHECK | SWT.FULL_SELECTION));
    }

    /**
     * create a table viewer with MultiSelect support.
     *
     * @param table the table
     */
    public DependenciesViewer(Table table) {
        super(table);
        getTable().setLinesVisible(true);
        getTable().setHeaderVisible(true);
        final TableColumn checkBoxColumn = new TableColumn(getTable(), SWT.CENTER, 0);
        checkBoxColumn.setText("!");
        checkBoxColumn.setWidth(20);
        final TableColumn serviceColumn = new TableColumn(getTable(), SWT.LEFT, 1);
        serviceColumn.setText("Service");
        serviceColumn.setWidth(270);
        final TableColumn versionColumn = new TableColumn(getTable(), SWT.LEFT, 2);
        versionColumn.setText("Version");
        versionColumn.setWidth(60);
        final TableColumn layerColumn = new TableColumn(getTable(), SWT.LEFT, 3);
        layerColumn.setText("Service Layer");
        layerColumn.setWidth(120);
        final CellEditor[] editors = new CellEditor[] { new CheckboxCellEditor(getTable()),
                new TextCellEditor(getTable(), SWT.READ_ONLY), new TextCellEditor(getTable(), SWT.READ_ONLY),
                new TextCellEditor(getTable(), SWT.READ_ONLY) };
        setCellEditors(editors);
        setColumnProperties(new String[] { "selected", "serviceName", "serviceVersion", "serviceLayer" });
    }

    /**
     * Gets the service name.
     *
     * @return the service name
     */
    public String getServiceName() {
        return serviceName;
    }

    /**
     * Sets the service name.
     *
     * @param serviceName the service name
     * @return the dependencies viewer
     */
    public DependenciesViewer setServiceName(final String serviceName) {
        this.serviceName = serviceName;
        return this;
    }

    /* (non-Javadoc)
     * @see org.eclipse.jface.viewers.CheckboxTableViewer#handleSelect(org.eclipse.swt.events.SelectionEvent)
     */
    @Override
    public void handleSelect(SelectionEvent event) {
        super.handleSelect(event);
        if (event.detail == SWT.CHECK) {
            final TableItem tableItem = (TableItem) event.item;
            final AssetInfo info = (AssetInfo) tableItem.getData();
            boolean isChecked = tableItem.getChecked();
            if (isMultiSelect() == false) {
                selected.clear();
                if (isChecked == true) {
                    this.setCheckedElements(new Object[] { info });
                }
            }
            selected.put(info, isChecked);
        }
    }

    /**
     * Gets the selected.
     *
     * @return the selected
     */
    public Set<AssetInfo> getSelected() {
        final Set<AssetInfo> selection = SetUtil.linkedSet();
        for (final AssetInfo service : selected.keySet()) {
            if (selected.get(service) == true)
                selection.add(service);
        }
        return selection;
    }

    /**
     * Checks if is selected.
     *
     * @param serviceInfo the service info
     * @return true, if is selected
     */
    public boolean isSelected(final AssetInfo serviceInfo) {
        if (!selected.containsKey(serviceInfo))
            return false;
        return selected.get(serviceInfo);
    }

    private boolean isMultiSelect() {
        return (getControl().getStyle() & SWT.MULTI) != 0;
    }
}