package qubexplorer.ui.summary;
import java.util.Arrays;
import java.util.Comparator;
import java.util.LinkedList;
import java.util.List;
import org.jdesktop.swingx.treetable.AbstractTreeTableModel;
import org.sonar.wsclient.services.Rule;
import qubexplorer.Severity;
import qubexplorer.Summary;
/**
*
* @author Victor
*/
public class SummaryModel extends AbstractTreeTableModel {
private boolean skipEmptySeverity = false;
private Severity[] severities;
public SummaryModel(Summary summary, boolean skip) {
super(summary);
skipEmptySeverity = skip;
setSeverities();
}
public boolean isSkipEmptySeverity() {
return skipEmptySeverity;
}
public void setSkipEmptySeverity(boolean skipEmptySeverity) {
this.skipEmptySeverity = skipEmptySeverity;
setSeverities();
}
private void setSeverities() {
if (skipEmptySeverity) {
List<Severity> tmp = new LinkedList<>();
for (Severity s : Severity.values()) {
if (getSummary().getCount(s) > 0) {
tmp.add(s);
}
}
severities = tmp.toArray(new Severity[tmp.size()]);
} else {
severities = Severity.values();
}
}
@Override
public int getColumnCount() {
return 2;
}
@Override
public Object getValueAt(Object node, int i) {
Summary summary = getSummary();
Object value = null;
if (node instanceof Summary) {
if (i == 0) {
value = "Issues";
} else {
value = summary.getCount();
}
} else if (node instanceof Severity) {
if (i == 0) {
value = ((Severity) node).name();
} else {
value = summary.getCount((Severity) node);
}
} else if (node instanceof Rule) {
if (i == 0) {
value = ((Rule) node).getDescription();
} else {
value = summary.getCount((Rule) node);
}
}
return value;
}
@Override
public String getColumnName(int column) {
if (column == 0) {
return "";
} else {
return "Count";
}
}
@Override
public Object getChild(Object parent, int i) {
if (parent instanceof Summary) {
return severities[i];
} else if (parent instanceof Severity) {
Rule[] rules = getSummary().getRules((Severity) parent).toArray(new Rule[0]);
Arrays.sort(rules, new Comparator<Rule>() {
@Override
public int compare(Rule t, Rule t1) {
int count1 = getSummary().getCount(t);
int count2 = getSummary().getCount(t1);
return count2 - count1;
}
});
return rules[i];
} else {
throw new AssertionError("Unknown parent object");
}
}
public Summary getSummary() {
return (Summary) getRoot();
}
@Override
public int getChildCount(Object parent) {
if (parent instanceof Summary) {
return severities.length;
} else if (parent instanceof Severity) {
return getSummary().getRules((Severity) parent).size();
} else {
return 0;
}
}
@Override
public int getIndexOfChild(Object parent, Object o1) {
if (parent instanceof Summary) {
return Arrays.asList(severities).indexOf(o1);
} else if (parent instanceof Severity) {
return -1;
} else {
return -1;
}
}
}