/*
* CommitmentTable.java
*
* This file is part of the STS-Tool project.
* Copyright (c) 2011-2012 "University of Trento - DISI" All rights reserved.
*
* Is strictly forbidden to remove this copyright notice from this source code.
*
* Disclaimer of Warranty:
* STS-Tool (this software) is provided "as-is" and without warranty of any kind,
* express, implied or otherwise, including without limitation, any warranty of
* merchantability or fitness for a particular purpose.
* In no event shall the copyright holder or contributors be liable for any direct,
* indirect, incidental, special, exemplary, or consequential damages
* including, but not limited to, procurement of substitute goods or services;
* loss of use, data, or profits; or business interruption) however caused and on
* any theory of liability, whether in contract, strict liability, or tort (including
* negligence or otherwise) arising in any way out of the use of this software, even
* if advised of the possibility of such damage.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License version 3
* as published by the Free Software Foundation with the addition of the
* following permission added to Section 15 as permitted in Section 7(a):
* FOR ANY PART OF THE COVERED WORK IN WHICH THE COPYRIGHT IS OWNED BY
* "University of Trento - DISI","University of Trento - DISI" DISCLAIMS THE
* WARRANTY OF NON INFRINGEMENT OF THIRD PARTY RIGHTS.
*
* See the GNU Affero General Public License for more details.
* You should have received a copy of the GNU Affero General Public License
* along with this program; if not, see http://www.gnu.org/licenses or write to
* the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA, 02110-1301 USA, or download the license from the following URL:
* http://www.sts-tool.eu/License.php
*
* For more information, please contact STS-Tool group at this
* address: ststool@disi.unitn.it
*
*/
package eu.aniketos.wp1.ststool.commitments.view.part;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.IColorProvider;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.RGB;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.Widget;
import eu.aniketos.wp1.ststool.commitments.filters.CommitmentActorsFilter;
import eu.aniketos.wp1.ststool.commitments.filters.CommitmentCreditorFilter;
import eu.aniketos.wp1.ststool.commitments.filters.CommitmentDebtorFilter;
import eu.aniketos.wp1.ststool.commitments.filters.CommitmentReqTypeFilter;
import eu.aniketos.wp1.ststool.commitments.interfaces.ICommitment;
import eu.aniketos.wp1.ststool.commitments.sorter.CommitmentSorter;
public class CommitmentTable extends TableViewer {
final static int FILTER_CREDITOR = 0;
final static int FILTER_DEBTOR = 1;
final static int FILTER_REQTYPE = 2;
final static int FILTER_ACTORS = 3;
private TableColumn fakeFisrstColumn;
private TableColumn debtorColumn;
private TableColumn creditorColumn;
private TableColumn antecedentColumn;
private TableColumn reqTypeColumn;
private TableColumn descriptionColumn;
private CommitmentSorter sorter;
private CommitmentDebtorFilter debtorFilter;
private CommitmentCreditorFilter creditorFilter;
private CommitmentReqTypeFilter reqTypeFilter;
private CommitmentActorsFilter actorsFilter;
public CommitmentTable(Composite parent, int style) {
super(parent, style);
init(parent);
}
public CommitmentTable(Composite parent) {
super(parent);
init(parent);
}
protected void init(Composite parent){
final Table table = getTable();
/** disable the row selection */
table.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e){
//table.setSelection(-1);
}
});
table.setHeaderVisible(true);
table.setLinesVisible(true);
initColum();
setContentProvider(new ArrayContentProvider());
setLabelProvider(new CommitmentLabelProvider());
createTableSorter();
buildFilter();
}
private void initColum(){
final Table table = getTable();
fakeFisrstColumn = new TableColumn(table, SWT.CENTER);
fakeFisrstColumn.setText("");
fakeFisrstColumn.setWidth(0);
fakeFisrstColumn.setMoveable(false);
fakeFisrstColumn.setResizable(false);
debtorColumn = new TableColumn(table, SWT.CENTER);
debtorColumn.setText("Responsible");
debtorColumn.setWidth(300);
debtorColumn.setMoveable(true);
reqTypeColumn = new TableColumn(table, SWT.LEFT);
reqTypeColumn.setText("Requirement");
reqTypeColumn.setWidth(600);
reqTypeColumn.setMoveable(true);
creditorColumn = new TableColumn(table, SWT.CENTER);
creditorColumn.setText("Requester");
creditorColumn.setWidth(300);
creditorColumn.setMoveable(true);
}
private void createTableSorter(){
Comparator<ICommitment> debtorComparator = new Comparator<ICommitment>() {
@Override
public int compare(ICommitment c1,ICommitment c2){
return c1.getResponsible().compareTo(c2.getResponsible());
}
};
Comparator<ICommitment> creditorComparator = new Comparator<ICommitment>() {
public int compare(ICommitment c1,ICommitment c2){
return c1.getRequester().compareTo(c2.getRequester());
}
};
Comparator<ICommitment> reqTypeComparator = new Comparator<ICommitment>() {
public int compare(ICommitment c1,ICommitment c2){
return c1.getReqisite().compareTo(c2.getReqisite());
}
};
sorter = new CommitmentSorter(this, new TableColumn[] { debtorColumn, creditorColumn, reqTypeColumn }, new Comparator[] {
debtorComparator, creditorComparator, reqTypeComparator }, debtorColumn);
this.setSorter(sorter);
}
private void buildFilter(){
debtorFilter = new CommitmentDebtorFilter(this);
creditorFilter = new CommitmentCreditorFilter(this);
reqTypeFilter = new CommitmentReqTypeFilter(this);
actorsFilter = new CommitmentActorsFilter(this);
}
public void setFilter(int filter,Object pattern){
switch (filter) {
case FILTER_CREDITOR:
creditorFilter.setPattern((String) pattern);
return;
case FILTER_DEBTOR:
debtorFilter.setPattern((String) pattern);
return;
case FILTER_REQTYPE:
reqTypeFilter.setPattern((String) pattern);
return;
case FILTER_ACTORS:
actorsFilter.setPattern((List<String>) pattern);
return;
}
}
public Object getFilterPattern(int filter){
switch (filter) {
case FILTER_CREDITOR:
return creditorFilter.getPattern();
case FILTER_DEBTOR:
return debtorFilter.getPattern();
case FILTER_REQTYPE:
return reqTypeFilter.getPattern();
case FILTER_ACTORS:
return actorsFilter.getPattern();
}
return null;
}
@Override
protected void doUpdateItem(Widget widget,Object element,boolean fullMap){
super.doUpdateItem(widget, element, fullMap);
}
class CommitmentLabelProvider extends LabelProvider implements ITableLabelProvider, IColorProvider {
@Override
public Image getColumnImage(Object element,int columnIndex){
return null;
}
@Override
public String getColumnText(Object element,int columnIndex){
if (!(element instanceof ICommitment)) return "Invalid Object " + element.getClass().getSimpleName();
ICommitment commit = (ICommitment) element;
TableColumn t = getTable().getColumn(columnIndex);
if (t == fakeFisrstColumn) {
return "";
} else if (t == debtorColumn) {
return commit.getResponsible();
} else if (t == creditorColumn) {
return commit.getRequester();
} else if (t == antecedentColumn) {
return ""/*commit.getAntecedent()*/;
} else if (t == reqTypeColumn) {
return commit.getReqisite();
} else if (t == descriptionColumn) {
return commit.getDescritption();
} else
return "unknown column" + columnIndex;
}
boolean color = true;
private int call = 0;
@Override
public Color getBackground(Object element){
if (call++ % getTable().getColumnCount() == 0) {
List list = Arrays.asList(getSortedChildren(getInput()));
int index = list.indexOf(element);
if (index == 0) {
color = true;
} else {
ICommitment pervRow = (ICommitment) list.get(index - 1);
TableColumn col = sorter.getSortingColumn();
if (col == debtorColumn) {
if (!pervRow.getResponsible().equals(((ICommitment) element).getResponsible())) color = !color;
} else if (col == creditorColumn) {
if (!pervRow.getRequester().equals(((ICommitment) element).getRequester())) color = !color;
} else if (col == reqTypeColumn) {
if (!pervRow.getClass().equals(element.getClass())) color = !color;
} else
return null;
}
}
if (color) {
return color1;
} else {
return null;
}
}
@Override
public Color getForeground(Object element){
return null;
}
Color color1 = new Color(Display.getDefault(), new RGB(215, 227, 253));
//Color color2=new Color(Display.getDefault(),new RGB(red, green, blue));
@Override
public void dispose(){
super.dispose();
color1.dispose();
}
}
}