(TableItem) cell.getItem()) + 1)); // +1 due to index
// starts with 0
}
});
new ColumnViewerSorter(tableViewer, nameColumn) {
protected int doCompare(Viewer viewer, Object e1, Object e2) {
return ((Element) e1).getName().compareTo(
((Element) e2).getName());
}
};
final HashMap<TableColumn, Element> elementColumnMap = new HashMap<TableColumn, Element>();
/////add an ExpandListener to all nodes
final IExpandListener expandListener = new IExpandListener() {
@Override
public void expanded() {
tableViewer.refresh();
}
@Override
public void collapsed() {
tableViewer.refresh();
}
};
for (Object node : builder.getZestGraph().getNodes()){
if (node instanceof GSSElementGraphNode){
((GSSElementGraphNode)node).getElementFigure().addExpandListener(expandListener);
}
}
/////remove the ExpandListener after dispose
tableViewer.getTable().addDisposeListener( new DisposeListener() {
@Override
public void widgetDisposed(DisposeEvent e) {
for (Object node : builder.getZestGraph().getNodes()){
if (node instanceof GSSElementGraphNode){
((GSSElementGraphNode)node).getElementFigure().removeExpandListener(expandListener);
}
}
}
});
//the content provider
///show elements of visible nodes only
tableViewer.setContentProvider( new ArrayContentProvider(){
@Override
public Object[] getElements(Object inputElement) {
List<Element> inputList = (List<Element>) inputElement;
List<Element> result = new ArrayList<Element>();
for (Element e : inputList){
if (builder.getNodeForElement(e).isVisbile())
result.add(e);
}
Element [] output = new Element[result.size()];
int i = 0;
for (Element e : result){
output[i] = e;
i++;
}
return output;
}
});
final List<Element> leafElements = new ArrayList<Element>();
final List<Element> markedLeafElements = new ArrayList<Element>();
boolean hasMarkedElements = !builder.getSelectedElements().isEmpty();
if (showRatingsToGoals) {
leafElements.addAll(builder.getCacheManager()
.getLeafApplicableElementElements(GSSLayer.layer1));
if (hasMarkedElements)
markedLeafElements.addAll(builder.getMarkedLeafGoals());
} else {
leafElements.addAll(builder.getCacheManager()
.getLeafApplicableElementElements(GSSLayer.layer3));
if (hasMarkedElements)
markedLeafElements.addAll(builder.getMarkedLeafPrinciples());
}
boolean weightsIncluded = false;
if (showRatingsToGoals)
weightsIncluded = !builder.getCacheManager().getSelectedGoals()
.isEmpty();
else
weightsIncluded = !builder.getCacheManager()
.getSelectedPrinciples().isEmpty();
for (final Object leafElement : leafElements) {
// if (leafElement instanceof GSS.Goal) {
if (weightsIncluded) {
final TableViewerColumn weightedImpactViewerColumn = new TableViewerColumn(
tableViewer, SWT.NONE);
elementColumnMap.put(weightedImpactViewerColumn.getColumn(),
(Element) leafElement);
Float priority = null;
if (leafElement instanceof Goal) {
priority = builder.getCacheManager()
.getSelectedGoalPriority((Goal) leafElement);
} else if (leafElement instanceof Principle) {
priority = builder.getCacheManager()
.getSelectedPrinciplePriority(
(Principle) leafElement);
}
if (priority == null)
priority = 0.0f;
weightedImpactViewerColumn.getColumn().setText(
String.format("%s (%.2f)",
((Element) leafElement).getName(), priority));
weightedImpactViewerColumn.getColumn().setToolTipText("the weighted rating to "+((Element) leafElement).getName());
weightedImpactViewerColumn.getColumn().setWidth(100);
weightedImpactViewerColumn.getColumn().setMoveable(true);
weightedImpactViewerColumn.getColumn().setResizable(true);
new ColumnViewerSorter(tableViewer, weightedImpactViewerColumn) {
protected int doCompare(Viewer viewer, Object e1, Object e2) {
Element element = elementColumnMap.get(tableViewer
.getTable().getSortColumn());
Float v1 = calcWeightedImpact(builder, element,
(Element) e1);
Float v2 = calcWeightedImpact(builder, element,
(Element) e2);
return v1.compareTo(v2);
}
};
weightedImpactViewerColumn
.setLabelProvider(new CellLabelProvider() {
public void update(ViewerCell cell) {
String weightString = calcWeightedImpactString(
builder,(Element) leafElement,
(Element) cell.getElement());
float impact = calcWeightedImpact(builder,
(Element)leafElement,
(Element) cell.getElement());
Color backgroundColor = null;
Color foregroundColor = null;
if (symbolsCheckbox.getSelection()) {
setSymbol(cell, impact);
} else if (grlSymbolsCheckbox.getSelection()) {
setGRLSymbol(cell, impact);
} else {
cell.setFont(Display.getDefault()
.getSystemFont());
cell.setText(weightString);
}
if (attributeExplorerCheckbox.getSelection()) {
if (impact >= thresholdSpinner
.getSelection()) {
backgroundColor = new Color(null, 255,
255, 0);
foregroundColor = new Color(null, 0, 0,
0);
} else {
backgroundColor = new Color(null, 255,
255, 255);
foregroundColor = new Color(null, 0, 0,
0);
}
} else if (heatmapCheckbox.getSelection()) {
backgroundColor = DefaultColors
.getBackgroundColor(impact);
foregroundColor = DefaultColors
.getForegroundColor(impact);
} else {
backgroundColor = new Color(null, 255, 255,
255);
foregroundColor = new Color(null, 0, 0, 0);
}
cell.setBackground(backgroundColor);
cell.setForeground(foregroundColor);
}
});
}
final TableViewerColumn unweightedImpactViewerColumn = new TableViewerColumn(
tableViewer, SWT.NONE);
elementColumnMap.put(unweightedImpactViewerColumn.getColumn(),
(Element) leafElement);
unweightedImpactViewerColumn.getColumn().setText(
String.format("%s", ((Element) leafElement).getName()));
unweightedImpactViewerColumn.getColumn().setToolTipText("the rating to "+((Element) leafElement).getName());
unweightedImpactViewerColumn.getColumn().setWidth(100);
unweightedImpactViewerColumn.getColumn().setMoveable(true);
unweightedImpactViewerColumn.getColumn().setResizable(true);
new ColumnViewerSorter(tableViewer, unweightedImpactViewerColumn) {
protected int doCompare(Viewer viewer, Object e1, Object e2) {
Element element = elementColumnMap.get(tableViewer
.getTable().getSortColumn());
Float v1 = getRating(builder, element, (Element) e1);