1     package sutut1;
2     
3     import javax.servlet.*;
4     import javax.servlet.http.*;
5     import java.io.*;
6     import java.util.*;
7     
8     import us.oh.state.common.utility.*;
9     
10    public class hello7 extends HttpServlet {
11    
12      public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
13        response.setContentType("application/pdf");
14        PdfChart page = new PdfChart(response.getOutputStream());
15        // Identify the chart
16        page.setTextColor(0x0);
17        page.setFont(page.BOLD, 24);
18        page.println("Tutorial - Hello 7c");
19        page.setFont(page.NORMAL, 12);
20        page.println(new Date().toString());
21    
22        // Get value sets and associate them to the chart
23        page.appendValues(sineWave(36));
24        double [] noise = generateNoise(72);
25        page.appendValues(digitalMean(noise, 6));
26        page.appendValues(noisyWave(noise));
27    
28        // Apply grid lines
29        page.appendGridX(0.5, 1, 0x000088);
30        page.appendGridX(1.0, 9, 0x0);
31        page.appendGridY(1.0, 2, 0x0);
32    
33        // Draw the main chart
34        page.drawMain(1.5, 7.0, 6.5, 3.0, 36, 4, 0xdddddd, 2.0, 0x0);
35    
36        // Decorate the chart
37        String [] xLabels = new String [13];
38        for (int i = 0; i < xLabels.length; ++i) {
39          xLabels[i] = Integer.toString(i * 30);
40        }
41        page.drawBottomLabels(0.05, 0.375, 90.0, xLabels, 0.05);
42        page.drawLeftLabels(0.375, -0.05, 0.0,
43          new String [] {"-1.0", "-0.5", "0.0", "0.5", "1.0"}, 0.05);
44        page.drawLegend(5.5, 5.25, 2.0, 1.0, 0.09, 0.09, 0xdddddd, 2.0, 0x0);
45    
46        // Output the chart to the PDF file
47        page.close();
48      }
49    
50    // Instance a simple sine wave value set
51    ValueSet sineWave(int resolution) {
52        double [] v = new double[resolution + 1];
53        for (int i = 0; i < v.length; ++i) {
54          v[i] = Math.sin((double)i * 2.0 * Math.PI / (double)(v.length - 1));
55        }
56        ValueSet vs = new AreaValueSet("Sine Wave", 1.0, 0x00ff00,
57          v, 0.0, 2.0 * Math.PI, 0xaaaaff, true);
58        vs.setRange(-1.0, 1.0, -1.0);
59        return vs;
60      }
61    
62    // Produce sine wave data which is modulated with random offsets
63    double [] generateNoise(int resolution) {
64        double [] v = new double[resolution + 1];
65        for (int i = 0; i < v.length; ++i) {
66          v[i] = Math.sin((double)i * 2.0 * Math.PI / (double)(v.length - 1))
67            / 2.0 + Math.random() - 0.5;
68        }
69        return v;
70      }
71    
72    // Instance a sine wave value set which is modulated with random offsets
73    ValueSet noisyWave(double [] values) {
74        BurstGlyphValueSet vs = new BurstGlyphValueSet("Noisy Wave", 1.0, 0xffff00,
75          values, 0.0, 2.0 * Math.PI, 0xff00ff, 8, new double [] {0.05, 0.02});
76        vs.setConnected(true);
77        vs.setRange(-1.0, 1.0, -1.0);
78        return vs;
79      }
80    
81    // Bars to represent a summarization of the noise
82    ValueSet digitalMean(double [] values, int interval) {
83        double [] v = new double [values.length / interval - 1];
84        int i = 0;
85        int n = 0;
86        v[n] = 0.0;
87        while (i++ < values.length) {
88          v[n] += values[i];
89          if ((i % interval) == 0) {
90            if (++n < v.length) v[n] = 0.0;
91            else break;
92          }
93        }
94        ValueSet vs = new BarValueSet("Digital Mean", 1.0, 0x00ffff, v, 0x000088, 0.125);
95        vs.setRange(-(double)interval, (double)interval, 0.0);
96        return vs;
97      }
98    
99    }