1 package org.wcb.gui.forms.report;
2
3 import org.wcb.model.bd.LogbookDelegate;
4 import org.wcb.model.bd.AircraftDelegate;
5 import org.wcb.model.util.SpringUtil;
6 import org.wcb.model.service.IServicesConstants;
7 import org.wcb.model.vo.hibernate.Logbook;
8 import org.wcb.model.vo.hibernate.AircraftTypeBO;
9 import org.wcb.model.vo.hibernate.AircraftBO;
10 import org.jfree.chart.ChartPanel;
11 import org.jfree.chart.JFreeChart;
12 import org.jfree.chart.ChartFactory;
13 import org.jfree.chart.renderer.category.BarRenderer;
14 import org.jfree.chart.axis.NumberAxis;
15 import org.jfree.chart.axis.CategoryLabelPositions;
16 import org.jfree.chart.axis.CategoryAxis;
17 import org.jfree.chart.plot.PlotOrientation;
18 import org.jfree.chart.plot.CategoryPlot;
19 import org.jfree.data.category.CategoryDataset;
20 import org.jfree.data.category.DefaultCategoryDataset;
21 import org.jfree.data.UnknownKeyException;
22
23 import javax.swing.*;
24 import java.awt.*;
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55 public class AircraftMakeModelReportForm extends JPanel implements ReportRefresh {
56
57 private LogbookDelegate delegate;
58 private AircraftDelegate aircrafts;
59 private ChartPanel chartPanel;
60
61 public AircraftMakeModelReportForm() {
62 delegate = (LogbookDelegate) SpringUtil.getApplicationContext().getBean(IServicesConstants.LOGBOOK_DELEGATE);
63 aircrafts = (AircraftDelegate) SpringUtil.getApplicationContext().getBean(IServicesConstants.AIRCRAFT_DELEGATE);
64 initComponents();
65 }
66
67 public void refresh() {
68 CategoryDataset dataset = createDataSet();
69
70
71 JFreeChart chart = ChartFactory.createBarChart(
72 "AircraftBO by Make/Model",
73 "Make/Model",
74 "Time",
75 dataset,
76 PlotOrientation.VERTICAL,
77 true,
78 true,
79 false
80 );
81
82 chart.setBackgroundPaint(Color.white);
83
84 CategoryPlot plot = chart.getCategoryPlot();
85 plot.setBackgroundPaint(Color.lightGray);
86 plot.setDomainGridlinePaint(Color.white);
87 plot.setDomainGridlinesVisible(true);
88 plot.setRangeGridlinePaint(Color.white);
89
90
91 final NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
92 rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
93
94
95 BarRenderer renderer = (BarRenderer) plot.getRenderer();
96 renderer.setDrawBarOutline(false);
97
98
99 GradientPaint gp0 = new GradientPaint(0.0f, 0.0f, Color.blue,
100 0.0f, 0.0f, new Color(0, 0, 64));
101 GradientPaint gp1 = new GradientPaint(0.0f, 0.0f, Color.green,
102 0.0f, 0.0f, new Color(0, 64, 0));
103 GradientPaint gp2 = new GradientPaint(0.0f, 0.0f, Color.red,
104 0.0f, 0.0f, new Color(64, 0, 0));
105 renderer.setSeriesPaint(0, gp0);
106 renderer.setSeriesPaint(1, gp1);
107 renderer.setSeriesPaint(2, gp2);
108
109 CategoryAxis domainAxis = plot.getDomainAxis();
110 domainAxis.setCategoryLabelPositions(
111 CategoryLabelPositions.createUpRotationLabelPositions(
112 Math.PI / 6.0));
113 chartPanel.setChart(chart);
114
115 }
116
117 private CategoryDataset createDataSet() {
118 DefaultCategoryDataset dataset = new DefaultCategoryDataset();
119
120 java.util.List<AircraftBO> aircraftsList = aircrafts.getAllAircraft();
121 for(AircraftBO item: aircraftsList) {
122 AircraftTypeBO type = aircrafts.getAircraftType(item.getTypeId());
123 this.getTotalForAircraft(dataset,type.getManufacturer() + "/" +type.getModel(), item.getRegistrationNumber());
124
125 }
126 return dataset;
127 }
128
129 private void getTotalForAircraft(DefaultCategoryDataset dataset, String makeModel, String registration) {
130 java.util.List<Logbook> rows = delegate.findByRegistration(registration);
131 Double pic = 0.0;
132 Double totalTime = 0.0;
133 for(Logbook item : rows) {
134 if(item.getFlightDuration() > 0) {
135 totalTime = totalTime + item.getFlightDuration();
136 pic = pic + item.getPic();
137 } else {
138
139 totalTime = totalTime + item.getConditionFlightSim();
140 pic = pic + item.getConditionFlightSim();
141 }
142 }
143 try {
144 Number numTotal = dataset.getValue("Total Time", makeModel);
145 Number numPIC = dataset.getValue("PIC Time", makeModel);
146 totalTime = numTotal.doubleValue() + totalTime;
147 pic = numPIC.doubleValue() + pic;
148 } catch (UnknownKeyException uke) {
149
150
151 dataset.addValue(totalTime, "Total Time", makeModel);
152 dataset.addValue(pic, "PIC Time", makeModel);
153 }
154 dataset.setValue(totalTime, "Total Time", makeModel);
155 dataset.setValue(pic, "PIC Time", makeModel);
156 }
157
158 private void initComponents() {
159 CategoryDataset dataset = createDataSet();
160
161
162 JFreeChart chart = ChartFactory.createBarChart(
163 "Bar Chart Demo 1",
164 "Category",
165 "Value",
166 dataset,
167 PlotOrientation.VERTICAL,
168 true,
169 true,
170 false
171 );
172
173 chart.setBackgroundPaint(Color.white);
174
175 CategoryPlot plot = chart.getCategoryPlot();
176 plot.setBackgroundPaint(Color.lightGray);
177 plot.setDomainGridlinePaint(Color.white);
178 plot.setDomainGridlinesVisible(true);
179 plot.setRangeGridlinePaint(Color.white);
180
181
182 final NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
183 rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
184
185 CategoryAxis domainAxis = plot.getDomainAxis();
186 domainAxis.setCategoryLabelPositions(
187 CategoryLabelPositions.createUpRotationLabelPositions(
188 Math.PI / 6.0));
189 chartPanel = new ChartPanel(chart);
190 add(chartPanel);
191 }
192 }