package jdepend.framework.ui.graph;
import java.awt.GridLayout;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.swing.JComponent;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import jdepend.framework.exception.JDependException;
import jdepend.framework.ui.graph.creater.BarCreater;
import jdepend.framework.ui.graph.creater.ChartCreater;
import jdepend.framework.ui.graph.creater.PieChartCreater;
import jdepend.framework.ui.graph.creater.SplineChartCreater;
import jdepend.framework.ui.graph.model.GraphData;
import jdepend.framework.ui.graph.model.GraphDataItem;
import org.jfree.chart.ChartPanel;
public final class GraphUtil {
private static final int DefaultColCount = 2;
public static JComponent createGraph(GraphData data) throws JDependException {
List<String> groups = data.getGroups();
if (groups.size() == 0 || groups.size() == 1) {
return createGroupComponent(data);
} else {
JTabbedPane tab = new JTabbedPane();
for (String group : groups) {
tab.addTab(group, createGroupComponent(data));
}
return tab;
}
}
private static JComponent createGroupComponent(GraphData data) throws JDependException {
int row;
int cols;
if (data.getColCount() > 0) {
cols = data.getColCount();
} else {
cols = DefaultColCount;
}
if (data.getItems().size() % cols == 0) {
row = data.getItems().size() / cols;
} else {
row = data.getItems().size() / cols + 1;
}
Map<String, ChartCreater> creaters = getCreaters();
JPanel content = new JPanel(new GridLayout(row, 2));
ChartCreater creater;
ChartPanel chartpanel;
for (GraphDataItem item : data.getItems()) {
creater = creaters.get(item.getType());
if (creater != null) {
chartpanel = new ChartPanel(creater.create(item));
if (item.getType().equals(GraphDataItem.SPLINE)) {
chartpanel.setMouseWheelEnabled(true);
}
content.add(chartpanel);
} else {
throw new JDependException("没有类型为[" + item.getType() + "]的图形创建器");
}
}
if (data.isAddJScrollPane()) {
JScrollPane pane = new JScrollPane(content);
return pane;
} else {
return content;
}
}
private static Map<String, ChartCreater> getCreaters() {
Map<String, ChartCreater> creaters = new HashMap<String, ChartCreater>();
PieChartCreater pieChartCreater = new PieChartCreater();
creaters.put(pieChartCreater.getType(), pieChartCreater);
SplineChartCreater splineChartCreater = new SplineChartCreater();
creaters.put(splineChartCreater.getType(), splineChartCreater);
BarCreater barCreater = new BarCreater();
creaters.put(barCreater.getType(), barCreater);
return creaters;
}
}