/******************************************************************************* * 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; } }