package qubexplorer.ui;
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();
if(node instanceof Summary){
if(i == 0){
return "Issues";
}else{
return summary.getCount();
}
}else if (node instanceof Severity) {
if (i == 0) {
return ((Severity) node).name();
} else {
return summary.getCount((Severity) node);
}
} else if (node instanceof Rule) {
if(i == 0) {
return ((Rule)node).getDescription();
}else{
return summary.getCount((Rule) node);
}
} else {
return null;
}
}
@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;
}
}
}