~ubuntu-branches/ubuntu/oneiric/awstats/oneiric

« back to all changes in this revision

Viewing changes to wwwroot/classes/src/AWGraphApplet.java

  • Committer: Bazaar Package Importer
  • Author(s): Jonas Smedegaard, Sergey B Kirpichev, Jonas Smedegaard
  • Date: 2009-03-03 18:19:24 UTC
  • mfrom: (1.2.6 upstream)
  • Revision ID: james.westby@ubuntu.com-20090303181924-szfwaw0qmfdg7m6b
Tags: 6.9~dfsg-1
[ Sergey B Kirpichev ]
* New upstream release (Closes: #494676).
* Add myself to Uploaders field. 
* Drop patches 0001 and 1005 (applied upstream).
* Unfuzz patches 1002-1004.
* Add new patch 1007 updating Russian translation. Thanks to Sergey
  Kirpichev at upstream tracker #2540486.
* Add new patch 1008 enhancing the ExtraSection headings to include
  the words (Top XXX) for consistency with all other section headings.
* Add new patch 1009 fixing URL to Hurd (Closes: #408086).
* Add new patch 1010 fixing dirdata permissions (Closes: #299148).
* Add new patch 1011 fixing Geo::IPfree warnings (Closes: #512373).
* Add new patch 2001 hiding charts in days of month statistics.
* Use debian defaults for geoip data files.

[ Jonas Smedegaard ]
* Repackage upstream tarball.
* Packaging moved to Git (from Subversion). Update debian/control and
  git-buildpackage configfile, enabling pristine-tar support.
* Use new local CDBS snippet package-relations.mk to resolve, cleanup
  and apply CDBS-declared (build-)dependencies.
* Add DEB_MAINTAINER_MODE in debian/rules (thanks to Romain Beauxis).
* Update local CDBS snippets:
  + upstream-tarball.mk: internal restructuring
  + buildinfo.mk: fix copyright years
  + copyright-check.mk: major rewrite, now generating hint file more
    readily usable as template for new proposed copyright format
  + Update README.cdbs-tweaks to also cover newly added package-
    relations.mk.
* Rewrite debian/copyright using new proposed syntax (v440). Update
  copyright-hints.
* Unfuzz patch 1006.
* Depend on misc:depends (thanks to lintian) and cdbs:depends
  (currently unused, and drop superfluous dependencies (fulfilled by
  perl even in oldstable).

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/*
2
 
 * @(#)AWGraphApplet.java
3
 
 * $Revision: 1.6 $ - $Author: eldy $ - $Date: 2004/01/07 22:32:03 $
4
 
 *
5
 
 */
6
 
 
7
 
import java.applet.Applet;
8
 
import java.awt.*;
9
 
import java.util.Vector;
10
 
 
11
 
 
12
 
public class AWGraphApplet extends Applet
13
 
{
14
 
        
15
 
    public AWGraphApplet()
16
 
    {
17
 
        special = "Not yet defined";
18
 
        textVertSpacing = 0;
19
 
        b_fontsize = 11;
20
 
        blockSpacing = 5;
21
 
        valSpacing = 0;
22
 
        valWidth = 5;
23
 
        maxLabelWidth = 0;
24
 
        background_color = Color.white;
25
 
        border_color = Color.white;
26
 
        special_color = Color.gray;
27
 
        backgraph_colorl = Color.decode("#F6F6F6");
28
 
        backgraph_colorm = Color.decode("#EDEDED");
29
 
        backgraph_colorh = Color.decode("#E0E0E0");
30
 
    }
31
 
 
32
 
//    public synchronized void init() {
33
 
    public synchronized void start()
34
 
    {
35
 
        special = getParameter("special");
36
 
        if (special == null) { special = ""; }
37
 
 
38
 
        Log("Applet "+VERSION+" ($Revision: 1.6 $) init");
39
 
 
40
 
        String s = getParameter("b_fontsize");
41
 
        if (s != null) { b_fontsize = Integer.parseInt(s); }
42
 
 
43
 
        title = getParameter("title");
44
 
        if (title == null) { title = "Chart"; }
45
 
 
46
 
        s = getParameter("nbblocks");
47
 
        if (s != null) { nbblocks = Integer.parseInt(s); }
48
 
 
49
 
        s = getParameter("nbvalues");
50
 
        if (s != null) { nbvalues = Integer.parseInt(s); }
51
 
 
52
 
        s = getParameter("blockspacing");
53
 
        if (s != null) { blockSpacing = Integer.parseInt(s); }
54
 
        s = getParameter("valspacing");
55
 
        if (s != null) { valSpacing = Integer.parseInt(s); }
56
 
        s = getParameter("valwidth");
57
 
        if (s != null) { valWidth = Integer.parseInt(s); }
58
 
 
59
 
        s = getParameter("orientation");
60
 
        if (s == null) { orientation = VERTICAL; }
61
 
        else if (s.equalsIgnoreCase("horizontal")) { orientation = HORIZONTAL; }
62
 
        else { orientation = VERTICAL; }
63
 
        s = getParameter("barsize");
64
 
        if (s != null) { barsize = Integer.parseInt(s); }
65
 
 
66
 
                s = getParameter("background_color");
67
 
        if (s != null) { background_color = Color.decode("#"+s); }
68
 
                s = getParameter("border_color");
69
 
        if (s != null) { border_color = Color.decode("#"+s); }
70
 
                s = getParameter("special_color");
71
 
        if (s != null) { special_color = Color.decode("#"+s); }
72
 
 
73
 
        Log("bblocks "+nbblocks);
74
 
        Log("nbvalues "+nbvalues);
75
 
        Log("barsize "+barsize);
76
 
        
77
 
                font  = new Font("Verdana,Arial,Helvetica", 0, b_fontsize);
78
 
                fontb = new Font("Verdana,Arial,Helvetica", Font.BOLD, b_fontsize);
79
 
        fontmetrics = getFontMetrics(font);
80
 
        
81
 
        blabels = new String[nbblocks];
82
 
        vlabels = new String[nbvalues];
83
 
        styles = new int[nbvalues];
84
 
        max = new float[nbvalues];
85
 
        colors = new Color[nbvalues];
86
 
        values = new float[nbblocks][nbvalues];
87
 
 
88
 
        for (int i=0; i < nbvalues; i++) {
89
 
            parseLabel(i);
90
 
            parseStyle(i);
91
 
            parseColor(i);
92
 
            parseMax(i);
93
 
        }
94
 
        for (int j=0; j < nbblocks; j++) {
95
 
            parsebLabel(j);
96
 
            parseValue(j);
97
 
                }
98
 
        for (int i=0; i < nbvalues; i++) {
99
 
                        if (max[i]<=0.0F) { max[i]=1.0F; }
100
 
                        Log("max["+i+"]="+max[i]);
101
 
                }
102
 
    }
103
 
            
104
 
        private synchronized void Log(String s)
105
 
        {
106
 
                System.out.println(getClass().getName()+" ("+special+"): "+s);
107
 
        }
108
 
                
109
 
    private synchronized void parsebLabel(int i)
110
 
    {
111
 
        String s = getParameter("b" + (i+1) + "_label");
112
 
        if (s==null) {
113
 
            blabels[i] = "";
114
 
        } else {
115
 
            blabels[i] = s;
116
 
        }
117
 
        maxLabelWidth = Math.max(fontmetrics.stringWidth(blabels[i]), maxLabelWidth);
118
 
    }
119
 
 
120
 
    private synchronized void parseLabel(int i)
121
 
    {
122
 
        String s = getParameter("v" + (i+1) + "_label");
123
 
        if (s==null) {
124
 
            vlabels[i] = "";
125
 
        } else {
126
 
            vlabels[i] = s;
127
 
        }
128
 
    }
129
 
 
130
 
    private synchronized void parseStyle(int i)
131
 
    {
132
 
        String s = getParameter("v" + (i+1) + "_style");
133
 
        if (s == null || s.equalsIgnoreCase("solid")) {
134
 
            styles[i] = SOLID;
135
 
        } else if (s.equalsIgnoreCase("striped")) {
136
 
            styles[i] = STRIPED;
137
 
        } else {
138
 
            styles[i] = SOLID;
139
 
        }
140
 
    }
141
 
    
142
 
    private synchronized void parseColor(int i)
143
 
    {
144
 
        String s = getParameter("v" + (i+1) + "_color");
145
 
        if (s != null) {
146
 
            colors[i] = Color.decode("#"+s);
147
 
        } else {
148
 
            colors[i] = Color.gray;
149
 
        }
150
 
    }
151
 
 
152
 
    private synchronized void parseMax(int i)
153
 
    {
154
 
        String s = getParameter("v" + (i+1) + "_max");
155
 
        if (s != null) {
156
 
                        max[i] = Float.valueOf(s).floatValue();
157
 
        } else {
158
 
            max[i] = 1.0F;
159
 
        }
160
 
    }
161
 
 
162
 
    private synchronized void parseValue(int i)
163
 
    {
164
 
        String s = getParameter("b" + (i+1));
165
 
                if (s != null) {
166
 
                String[] as=split(s," ",0);
167
 
                for (int j=0; j<as.length; j++) {
168
 
//                              Log("as="+as[j]);
169
 
                    if (as[j].compareTo("?")==0) { values[i][j] = 0; }
170
 
                    else { values[i][j] = Float.parseFloat(as[j]); }
171
 
//                              Log("values["+i+"]["+j+"]="+values[i][j]);
172
 
                        }
173
 
            }
174
 
    }
175
 
 
176
 
        private String[] split(String s, String c, int iStart)
177
 
        {
178
 
                Vector v = new Vector();
179
 
                boolean bFin = false;
180
 
                String sub = "";
181
 
                int i=iStart-1;
182
 
                int iOld = i;
183
 
                //System.out.println("s = " + s);
184
 
                while (!bFin) {
185
 
                        iOld = i;
186
 
                        i = s.indexOf(c, iOld+1);
187
 
                        if (i!=-1) {
188
 
                                //System.out.println("i = " + i);
189
 
                                sub = s.substring(iOld+1, i);
190
 
                        } else {
191
 
                                sub = s.substring(iOld+1, s.length());
192
 
                                bFin=true;
193
 
                        }
194
 
                        //System.out.println("sub = " + sub);
195
 
                        v.addElement(sub);
196
 
                }
197
 
                String[] tabS = new String[v.size()];
198
 
                for (i=0 ; i<v.size() ; i++) {
199
 
                        tabS[i] = (String)v.elementAt(i);
200
 
                }
201
 
                return tabS;
202
 
        }
203
 
 
204
 
        private String remove(String s, String c)
205
 
        {
206
 
                Vector v = new Vector();
207
 
                boolean bFin = false;
208
 
                String sub = "";
209
 
                int i=-1;
210
 
                int iOld = i;
211
 
                //System.out.println("s = " + s);
212
 
                while (!bFin) {
213
 
                        iOld = i;
214
 
                        i = s.indexOf(c, iOld+1);
215
 
                        if (i!=-1) {
216
 
                                //System.out.println("i = " + i);
217
 
                                sub = s.substring(iOld+1, i);
218
 
                        } else {
219
 
                                sub = s.substring(iOld+1, s.length());
220
 
                                bFin=true;
221
 
                        }
222
 
                        //System.out.println("sub = " + sub);
223
 
                        v.addElement(sub);
224
 
                }
225
 
                sub = "";
226
 
                for (i=0 ; i<v.size() ; i++) {
227
 
                        sub += (String)v.elementAt(i);
228
 
                }
229
 
                return sub;
230
 
        }
231
 
 
232
 
        private Graphics bfr;
233
 
        private Image img;
234
 
 
235
 
        public void init()
236
 
        {
237
 
                img = createImage(this.getSize().width, this.getSize().height);
238
 
                bfr = img.getGraphics();
239
 
        }
240
 
 
241
 
    public synchronized void paint(Graphics g)
242
 
    {
243
 
                // background and border
244
 
        bfr.setColor(background_color);
245
 
        bfr.fillRect(0, 0, getSize().width, getSize().height);
246
 
        bfr.setColor(border_color);
247
 
        bfr.drawRect(0, 0, getSize().width, getSize().height);
248
 
 
249
 
                // draw the bars and their titles
250
 
                if(orientation == HORIZONTAL) { paintHorizontal(bfr); }
251
 
                else { paintVertical(bfr); }
252
 
 
253
 
                g.drawImage(this.img, 0, 0, this);
254
 
    }
255
 
        
256
 
        private synchronized void draw3DBar(Graphics g,int x, int y, float w, float h, int shift, Color color)
257
 
        {
258
 
                // Draw a 3D bar at pos (x,y)
259
 
                Polygon polygon = new Polygon();
260
 
                int width=new Float(w).intValue();
261
 
                int height=new Float(h).intValue();
262
 
//              Log("draw3DBar "+x+","+y+","+w+"=>"+width+","+h+"=>"+height);
263
 
 
264
 
                polygon.addPoint(x,y);
265
 
                polygon.addPoint(x+width,y);
266
 
                polygon.addPoint(x+width,y-height);
267
 
                polygon.addPoint(x,y-height);
268
 
                g.setColor(color);
269
 
                g.fillPolygon(polygon);
270
 
                g.setColor(color.darker());
271
 
                g.drawPolygon(polygon);
272
 
                Polygon polygon2 = new Polygon();
273
 
                polygon2.addPoint(x+width,y);
274
 
                polygon2.addPoint(x+width+shift,y-shift);
275
 
                polygon2.addPoint(x+width+shift,y-shift-height);
276
 
                polygon2.addPoint(x+width,y-height);
277
 
                g.setColor(color.darker());
278
 
                g.fillPolygon(polygon2);
279
 
                g.setColor(color.darker().darker());
280
 
                g.drawPolygon(polygon2);
281
 
                Polygon polygon3 = new Polygon();
282
 
                polygon3.addPoint(x,y-height);
283
 
                polygon3.addPoint(x+width,y-height);
284
 
                polygon3.addPoint(x+width+shift,y-height-shift);
285
 
                polygon3.addPoint(x+shift,y-height-shift);
286
 
                g.setColor(color);
287
 
                g.fillPolygon(polygon3);
288
 
                g.setColor(color.darker());
289
 
                g.drawPolygon(polygon3);
290
 
        }
291
 
 
292
 
    private synchronized void paintHorizontal(Graphics g)
293
 
    {
294
 
    }
295
 
 
296
 
    private synchronized void paintVertical(Graphics g)
297
 
    {
298
 
                g.setColor(Color.black);
299
 
                g.setFont(font);
300
 
 
301
 
                int shift=10;
302
 
                int allbarwidth=(((nbvalues*(valWidth+valSpacing))+blockSpacing)*nbblocks);
303
 
                int allbarheight=barsize;
304
 
                int axepointx=(getSize().width-allbarwidth)/2 - 2*shift;
305
 
        int axepointy = getSize().height - (2*fontmetrics.getHeight()) - 2 - textVertSpacing;
306
 
 
307
 
                int cx=axepointx;
308
 
                int cy=axepointy;
309
 
 
310
 
                // Draw axes
311
 
                Polygon polygon = new Polygon();
312
 
                polygon.addPoint(cx,cy);
313
 
                polygon.addPoint(cx+allbarwidth+3*shift,cy);
314
 
                polygon.addPoint(cx+allbarwidth+4*shift,cy-shift);
315
 
                polygon.addPoint(cx+shift,cy-shift);
316
 
                g.setColor(backgraph_colorl);
317
 
                g.fillPolygon(polygon);
318
 
                g.setColor(Color.lightGray);
319
 
                g.drawPolygon(polygon);
320
 
                Polygon polygon2 = new Polygon();
321
 
                polygon2.addPoint(cx,cy);
322
 
                polygon2.addPoint(cx+shift,cy-shift);
323
 
                polygon2.addPoint(cx+shift,cy-shift-barsize);
324
 
                polygon2.addPoint(cx,cy-barsize);
325
 
                g.setColor(backgraph_colorh);
326
 
                g.fillPolygon(polygon2);
327
 
                g.setColor(Color.lightGray);
328
 
                g.drawPolygon(polygon2);
329
 
                Polygon polygon3 = new Polygon();
330
 
                polygon3.addPoint(cx+shift,cy-shift);
331
 
                polygon3.addPoint(cx+allbarwidth+4*shift,cy-shift);
332
 
                polygon3.addPoint(cx+allbarwidth+4*shift,cy-shift-barsize);
333
 
                polygon3.addPoint(cx+shift,cy-shift-barsize);
334
 
                g.setColor(backgraph_colorm);
335
 
                g.fillPolygon(polygon3);
336
 
                g.setColor(Color.lightGray);
337
 
                g.drawPolygon(polygon3);
338
 
 
339
 
                cx+=2*shift;
340
 
                
341
 
                // Loop on each block
342
 
        for (int j = 0; j < nbblocks; j++) {
343
 
 
344
 
            // Draw the block label
345
 
//                      Log("Write block j="+j+" with cx="+cx);
346
 
            cy = getSize().height - fontmetrics.getHeight() - 3 - textVertSpacing;
347
 
            g.setColor(Color.black);
348
 
 
349
 
                        // Check if bold or highlight
350
 
                        int bold=0; int highlight=0; String label=blabels[j];
351
 
                        if (blabels[j].indexOf(":")>0) { bold=1; label=remove(blabels[j],":"); }
352
 
                        if (blabels[j].indexOf("!")>0) { highlight=1; label=remove(blabels[j],"!"); }
353
 
 
354
 
                        if (bold==1) { g.setFont(fontb); }
355
 
                        String as[] = split(label, "\247", 0);
356
 
                        // Write background for block legend
357
 
                        if (highlight==1) {
358
 
                                g.setColor(special_color);
359
 
                                g.fillRect(cx-Math.max(-1+blockSpacing>>1,0),cy-fontmetrics.getHeight()+2,(nbvalues*(valWidth+valSpacing))+Math.max(blockSpacing-2,0)+1,((fontmetrics.getHeight()+textVertSpacing)*as.length)+2);
360
 
                                g.setColor(Color.black);
361
 
                        }
362
 
                        // Write text for block legend
363
 
            for (int i=0; i<as.length; i++) {
364
 
                                int cxoffset=((nbvalues*(valWidth+valSpacing))-fontmetrics.stringWidth(as[i]))>>1;
365
 
                    if (cxoffset<0) { cxoffset=0; }
366
 
                                g.drawString(as[i], cx+cxoffset, cy);
367
 
                                cy+=fontmetrics.getHeight()+textVertSpacing-1;
368
 
                        }
369
 
                        if (bold==1) { g.setFont(font); }
370
 
 
371
 
                        // Loop on each value
372
 
                for (int i = 0; i < nbvalues; i++) {
373
 
        
374
 
                    cy = getSize().height - fontmetrics.getHeight() - 6 - textVertSpacing;
375
 
                    cy -= fontmetrics.getHeight() - 4;
376
 
        
377
 
                    // draw the shadow and bar
378
 
                                draw3DBar(g,cx,cy,valWidth,(values[j][i]*(float)barsize)/max[i],SHIFTBAR,colors[i]);
379
 
 
380
 
                        cy = (int)((float)cy - (values[j][i] + 5F));
381
 
                    cx += (valWidth + valSpacing);
382
 
                        }
383
 
 
384
 
            cx += blockSpacing;
385
 
        }
386
 
    }    
387
 
    
388
 
    public synchronized String getAppletInfo()
389
 
    {
390
 
        return "Title: " + title + "\n";
391
 
    }
392
 
    
393
 
    public synchronized String[][] getParameterInfo()
394
 
    {
395
 
        String[][] as = {
396
 
            {"version", "string", "AWGraphApplet "+VERSION},
397
 
            {"copyright", "string", "GPL"},
398
 
            {"title", "string", title}
399
 
        };
400
 
        return as;
401
 
    }
402
 
 
403
 
    private static final int VERTICAL = 0;
404
 
    private static final int HORIZONTAL = 1;
405
 
    private static final int SOLID = 0;
406
 
    private static final int STRIPED = 1;
407
 
        private static final int DEBUG = 3;
408
 
        private static final int SHIFTBAR = 3;
409
 
        private static final String VERSION = "1.1";
410
 
 
411
 
    private String title;
412
 
    private String special;
413
 
    private Font font;
414
 
    private Font fontb;
415
 
    private FontMetrics fontmetrics;
416
 
    private int orientation;
417
 
    private int barsize;
418
 
 
419
 
    private int nbblocks;
420
 
    private String blabels[];
421
 
        private int b_fontsize;
422
 
    private int blockSpacing;
423
 
    private int textVertSpacing;
424
 
        
425
 
    private int nbvalues;
426
 
    private Color colors[];
427
 
    private String vlabels[];
428
 
    private int styles[];
429
 
    private float max[];
430
 
    private int valSpacing;
431
 
    private int valWidth;
432
 
 
433
 
    private float values[][];
434
 
 
435
 
    private int maxLabelWidth;
436
 
        private Color background_color;
437
 
        private Color border_color;
438
 
        private Color special_color;
439
 
        private Color backgraph_colorl;
440
 
        private Color backgraph_colorm;
441
 
        private Color backgraph_colorh;
442
 
}
443
 
 
444
 
 
445
 
 
446
 
// # Applet Applet.getAppletContext().getApplet( "receiver" )
447
 
// that accesses another Applet uniquely identified via a name you assign in the HTML <applet name= tag.
448
 
// # Applet Enumeration Applet.getAppletContext().getApplets()
449
 
// that gets you a list of all the Applets, of any class, not just yours, running on the page (including yourself).
450
 
 
 
1
/*
 
2
 * @(#)AWGraphApplet.java
 
3
 * $Revision: 1.6 $ - $Author: eldy $ - $Date: 2004/01/07 22:32:03 $
 
4
 *
 
5
 */
 
6
 
 
7
import java.applet.Applet;
 
8
import java.awt.*;
 
9
import java.util.Vector;
 
10
 
 
11
 
 
12
public class AWGraphApplet extends Applet
 
13
{
 
14
        
 
15
    public AWGraphApplet()
 
16
    {
 
17
        special = "Not yet defined";
 
18
        textVertSpacing = 0;
 
19
        b_fontsize = 11;
 
20
        blockSpacing = 5;
 
21
        valSpacing = 0;
 
22
        valWidth = 5;
 
23
        maxLabelWidth = 0;
 
24
        background_color = Color.white;
 
25
        border_color = Color.white;
 
26
        special_color = Color.gray;
 
27
        backgraph_colorl = Color.decode("#F6F6F6");
 
28
        backgraph_colorm = Color.decode("#EDEDED");
 
29
        backgraph_colorh = Color.decode("#E0E0E0");
 
30
    }
 
31
 
 
32
//    public synchronized void init() {
 
33
    public synchronized void start()
 
34
    {
 
35
        special = getParameter("special");
 
36
        if (special == null) { special = ""; }
 
37
 
 
38
        Log("Applet "+VERSION+" ($Revision: 1.6 $) init");
 
39
 
 
40
        String s = getParameter("b_fontsize");
 
41
        if (s != null) { b_fontsize = Integer.parseInt(s); }
 
42
 
 
43
        title = getParameter("title");
 
44
        if (title == null) { title = "Chart"; }
 
45
 
 
46
        s = getParameter("nbblocks");
 
47
        if (s != null) { nbblocks = Integer.parseInt(s); }
 
48
 
 
49
        s = getParameter("nbvalues");
 
50
        if (s != null) { nbvalues = Integer.parseInt(s); }
 
51
 
 
52
        s = getParameter("blockspacing");
 
53
        if (s != null) { blockSpacing = Integer.parseInt(s); }
 
54
        s = getParameter("valspacing");
 
55
        if (s != null) { valSpacing = Integer.parseInt(s); }
 
56
        s = getParameter("valwidth");
 
57
        if (s != null) { valWidth = Integer.parseInt(s); }
 
58
 
 
59
        s = getParameter("orientation");
 
60
        if (s == null) { orientation = VERTICAL; }
 
61
        else if (s.equalsIgnoreCase("horizontal")) { orientation = HORIZONTAL; }
 
62
        else { orientation = VERTICAL; }
 
63
        s = getParameter("barsize");
 
64
        if (s != null) { barsize = Integer.parseInt(s); }
 
65
 
 
66
                s = getParameter("background_color");
 
67
        if (s != null) { background_color = Color.decode("#"+s); }
 
68
                s = getParameter("border_color");
 
69
        if (s != null) { border_color = Color.decode("#"+s); }
 
70
                s = getParameter("special_color");
 
71
        if (s != null) { special_color = Color.decode("#"+s); }
 
72
 
 
73
        Log("bblocks "+nbblocks);
 
74
        Log("nbvalues "+nbvalues);
 
75
        Log("barsize "+barsize);
 
76
        
 
77
                font  = new Font("Verdana,Arial,Helvetica", 0, b_fontsize);
 
78
                fontb = new Font("Verdana,Arial,Helvetica", Font.BOLD, b_fontsize);
 
79
        fontmetrics = getFontMetrics(font);
 
80
        
 
81
        blabels = new String[nbblocks];
 
82
        vlabels = new String[nbvalues];
 
83
        styles = new int[nbvalues];
 
84
        max = new float[nbvalues];
 
85
        colors = new Color[nbvalues];
 
86
        values = new float[nbblocks][nbvalues];
 
87
 
 
88
        for (int i=0; i < nbvalues; i++) {
 
89
            parseLabel(i);
 
90
            parseStyle(i);
 
91
            parseColor(i);
 
92
            parseMax(i);
 
93
        }
 
94
        for (int j=0; j < nbblocks; j++) {
 
95
            parsebLabel(j);
 
96
            parseValue(j);
 
97
                }
 
98
        for (int i=0; i < nbvalues; i++) {
 
99
                        if (max[i]<=0.0F) { max[i]=1.0F; }
 
100
                        Log("max["+i+"]="+max[i]);
 
101
                }
 
102
    }
 
103
            
 
104
        private synchronized void Log(String s)
 
105
        {
 
106
                System.out.println(getClass().getName()+" ("+special+"): "+s);
 
107
        }
 
108
                
 
109
    private synchronized void parsebLabel(int i)
 
110
    {
 
111
        String s = getParameter("b" + (i+1) + "_label");
 
112
        if (s==null) {
 
113
            blabels[i] = "";
 
114
        } else {
 
115
            blabels[i] = s;
 
116
        }
 
117
        maxLabelWidth = Math.max(fontmetrics.stringWidth(blabels[i]), maxLabelWidth);
 
118
    }
 
119
 
 
120
    private synchronized void parseLabel(int i)
 
121
    {
 
122
        String s = getParameter("v" + (i+1) + "_label");
 
123
        if (s==null) {
 
124
            vlabels[i] = "";
 
125
        } else {
 
126
            vlabels[i] = s;
 
127
        }
 
128
    }
 
129
 
 
130
    private synchronized void parseStyle(int i)
 
131
    {
 
132
        String s = getParameter("v" + (i+1) + "_style");
 
133
        if (s == null || s.equalsIgnoreCase("solid")) {
 
134
            styles[i] = SOLID;
 
135
        } else if (s.equalsIgnoreCase("striped")) {
 
136
            styles[i] = STRIPED;
 
137
        } else {
 
138
            styles[i] = SOLID;
 
139
        }
 
140
    }
 
141
    
 
142
    private synchronized void parseColor(int i)
 
143
    {
 
144
        String s = getParameter("v" + (i+1) + "_color");
 
145
        if (s != null) {
 
146
            colors[i] = Color.decode("#"+s);
 
147
        } else {
 
148
            colors[i] = Color.gray;
 
149
        }
 
150
    }
 
151
 
 
152
    private synchronized void parseMax(int i)
 
153
    {
 
154
        String s = getParameter("v" + (i+1) + "_max");
 
155
        if (s != null) {
 
156
                        max[i] = Float.valueOf(s).floatValue();
 
157
        } else {
 
158
            max[i] = 1.0F;
 
159
        }
 
160
    }
 
161
 
 
162
    private synchronized void parseValue(int i)
 
163
    {
 
164
        String s = getParameter("b" + (i+1));
 
165
                if (s != null) {
 
166
                String[] as=split(s," ",0);
 
167
                for (int j=0; j<as.length; j++) {
 
168
//                              Log("as="+as[j]);
 
169
                    if (as[j].compareTo("?")==0) { values[i][j] = 0; }
 
170
                    else { values[i][j] = Float.parseFloat(as[j]); }
 
171
//                              Log("values["+i+"]["+j+"]="+values[i][j]);
 
172
                        }
 
173
            }
 
174
    }
 
175
 
 
176
        private String[] split(String s, String c, int iStart)
 
177
        {
 
178
                Vector v = new Vector();
 
179
                boolean bFin = false;
 
180
                String sub = "";
 
181
                int i=iStart-1;
 
182
                int iOld = i;
 
183
                //System.out.println("s = " + s);
 
184
                while (!bFin) {
 
185
                        iOld = i;
 
186
                        i = s.indexOf(c, iOld+1);
 
187
                        if (i!=-1) {
 
188
                                //System.out.println("i = " + i);
 
189
                                sub = s.substring(iOld+1, i);
 
190
                        } else {
 
191
                                sub = s.substring(iOld+1, s.length());
 
192
                                bFin=true;
 
193
                        }
 
194
                        //System.out.println("sub = " + sub);
 
195
                        v.addElement(sub);
 
196
                }
 
197
                String[] tabS = new String[v.size()];
 
198
                for (i=0 ; i<v.size() ; i++) {
 
199
                        tabS[i] = (String)v.elementAt(i);
 
200
                }
 
201
                return tabS;
 
202
        }
 
203
 
 
204
        private String remove(String s, String c)
 
205
        {
 
206
                Vector v = new Vector();
 
207
                boolean bFin = false;
 
208
                String sub = "";
 
209
                int i=-1;
 
210
                int iOld = i;
 
211
                //System.out.println("s = " + s);
 
212
                while (!bFin) {
 
213
                        iOld = i;
 
214
                        i = s.indexOf(c, iOld+1);
 
215
                        if (i!=-1) {
 
216
                                //System.out.println("i = " + i);
 
217
                                sub = s.substring(iOld+1, i);
 
218
                        } else {
 
219
                                sub = s.substring(iOld+1, s.length());
 
220
                                bFin=true;
 
221
                        }
 
222
                        //System.out.println("sub = " + sub);
 
223
                        v.addElement(sub);
 
224
                }
 
225
                sub = "";
 
226
                for (i=0 ; i<v.size() ; i++) {
 
227
                        sub += (String)v.elementAt(i);
 
228
                }
 
229
                return sub;
 
230
        }
 
231
 
 
232
        private Graphics bfr;
 
233
        private Image img;
 
234
 
 
235
        public void init()
 
236
        {
 
237
                img = createImage(this.getSize().width, this.getSize().height);
 
238
                bfr = img.getGraphics();
 
239
        }
 
240
 
 
241
    public synchronized void paint(Graphics g)
 
242
    {
 
243
                // background and border
 
244
        bfr.setColor(background_color);
 
245
        bfr.fillRect(0, 0, getSize().width, getSize().height);
 
246
        bfr.setColor(border_color);
 
247
        bfr.drawRect(0, 0, getSize().width, getSize().height);
 
248
 
 
249
                // draw the bars and their titles
 
250
                if(orientation == HORIZONTAL) { paintHorizontal(bfr); }
 
251
                else { paintVertical(bfr); }
 
252
 
 
253
                g.drawImage(this.img, 0, 0, this);
 
254
    }
 
255
        
 
256
        private synchronized void draw3DBar(Graphics g,int x, int y, float w, float h, int shift, Color color)
 
257
        {
 
258
                // Draw a 3D bar at pos (x,y)
 
259
                Polygon polygon = new Polygon();
 
260
                int width=new Float(w).intValue();
 
261
                int height=new Float(h).intValue();
 
262
//              Log("draw3DBar "+x+","+y+","+w+"=>"+width+","+h+"=>"+height);
 
263
 
 
264
                polygon.addPoint(x,y);
 
265
                polygon.addPoint(x+width,y);
 
266
                polygon.addPoint(x+width,y-height);
 
267
                polygon.addPoint(x,y-height);
 
268
                g.setColor(color);
 
269
                g.fillPolygon(polygon);
 
270
                g.setColor(color.darker());
 
271
                g.drawPolygon(polygon);
 
272
                Polygon polygon2 = new Polygon();
 
273
                polygon2.addPoint(x+width,y);
 
274
                polygon2.addPoint(x+width+shift,y-shift);
 
275
                polygon2.addPoint(x+width+shift,y-shift-height);
 
276
                polygon2.addPoint(x+width,y-height);
 
277
                g.setColor(color.darker());
 
278
                g.fillPolygon(polygon2);
 
279
                g.setColor(color.darker().darker());
 
280
                g.drawPolygon(polygon2);
 
281
                Polygon polygon3 = new Polygon();
 
282
                polygon3.addPoint(x,y-height);
 
283
                polygon3.addPoint(x+width,y-height);
 
284
                polygon3.addPoint(x+width+shift,y-height-shift);
 
285
                polygon3.addPoint(x+shift,y-height-shift);
 
286
                g.setColor(color);
 
287
                g.fillPolygon(polygon3);
 
288
                g.setColor(color.darker());
 
289
                g.drawPolygon(polygon3);
 
290
        }
 
291
 
 
292
    private synchronized void paintHorizontal(Graphics g)
 
293
    {
 
294
    }
 
295
 
 
296
    private synchronized void paintVertical(Graphics g)
 
297
    {
 
298
                g.setColor(Color.black);
 
299
                g.setFont(font);
 
300
 
 
301
                int shift=10;
 
302
                int allbarwidth=(((nbvalues*(valWidth+valSpacing))+blockSpacing)*nbblocks);
 
303
                int allbarheight=barsize;
 
304
                int axepointx=(getSize().width-allbarwidth)/2 - 2*shift;
 
305
        int axepointy = getSize().height - (2*fontmetrics.getHeight()) - 2 - textVertSpacing;
 
306
 
 
307
                int cx=axepointx;
 
308
                int cy=axepointy;
 
309
 
 
310
                // Draw axes
 
311
                Polygon polygon = new Polygon();
 
312
                polygon.addPoint(cx,cy);
 
313
                polygon.addPoint(cx+allbarwidth+3*shift,cy);
 
314
                polygon.addPoint(cx+allbarwidth+4*shift,cy-shift);
 
315
                polygon.addPoint(cx+shift,cy-shift);
 
316
                g.setColor(backgraph_colorl);
 
317
                g.fillPolygon(polygon);
 
318
                g.setColor(Color.lightGray);
 
319
                g.drawPolygon(polygon);
 
320
                Polygon polygon2 = new Polygon();
 
321
                polygon2.addPoint(cx,cy);
 
322
                polygon2.addPoint(cx+shift,cy-shift);
 
323
                polygon2.addPoint(cx+shift,cy-shift-barsize);
 
324
                polygon2.addPoint(cx,cy-barsize);
 
325
                g.setColor(backgraph_colorh);
 
326
                g.fillPolygon(polygon2);
 
327
                g.setColor(Color.lightGray);
 
328
                g.drawPolygon(polygon2);
 
329
                Polygon polygon3 = new Polygon();
 
330
                polygon3.addPoint(cx+shift,cy-shift);
 
331
                polygon3.addPoint(cx+allbarwidth+4*shift,cy-shift);
 
332
                polygon3.addPoint(cx+allbarwidth+4*shift,cy-shift-barsize);
 
333
                polygon3.addPoint(cx+shift,cy-shift-barsize);
 
334
                g.setColor(backgraph_colorm);
 
335
                g.fillPolygon(polygon3);
 
336
                g.setColor(Color.lightGray);
 
337
                g.drawPolygon(polygon3);
 
338
 
 
339
                cx+=2*shift;
 
340
                
 
341
                // Loop on each block
 
342
        for (int j = 0; j < nbblocks; j++) {
 
343
 
 
344
            // Draw the block label
 
345
//                      Log("Write block j="+j+" with cx="+cx);
 
346
            cy = getSize().height - fontmetrics.getHeight() - 3 - textVertSpacing;
 
347
            g.setColor(Color.black);
 
348
 
 
349
                        // Check if bold or highlight
 
350
                        int bold=0; int highlight=0; String label=blabels[j];
 
351
                        if (blabels[j].indexOf(":")>0) { bold=1; label=remove(blabels[j],":"); }
 
352
                        if (blabels[j].indexOf("!")>0) { highlight=1; label=remove(blabels[j],"!"); }
 
353
 
 
354
                        if (bold==1) { g.setFont(fontb); }
 
355
                        String as[] = split(label, "\247", 0);
 
356
                        // Write background for block legend
 
357
                        if (highlight==1) {
 
358
                                g.setColor(special_color);
 
359
                                g.fillRect(cx-Math.max(-1+blockSpacing>>1,0),cy-fontmetrics.getHeight()+2,(nbvalues*(valWidth+valSpacing))+Math.max(blockSpacing-2,0)+1,((fontmetrics.getHeight()+textVertSpacing)*as.length)+2);
 
360
                                g.setColor(Color.black);
 
361
                        }
 
362
                        // Write text for block legend
 
363
            for (int i=0; i<as.length; i++) {
 
364
                                int cxoffset=((nbvalues*(valWidth+valSpacing))-fontmetrics.stringWidth(as[i]))>>1;
 
365
                    if (cxoffset<0) { cxoffset=0; }
 
366
                                g.drawString(as[i], cx+cxoffset, cy);
 
367
                                cy+=fontmetrics.getHeight()+textVertSpacing-1;
 
368
                        }
 
369
                        if (bold==1) { g.setFont(font); }
 
370
 
 
371
                        // Loop on each value
 
372
                for (int i = 0; i < nbvalues; i++) {
 
373
        
 
374
                    cy = getSize().height - fontmetrics.getHeight() - 6 - textVertSpacing;
 
375
                    cy -= fontmetrics.getHeight() - 4;
 
376
        
 
377
                    // draw the shadow and bar
 
378
                                draw3DBar(g,cx,cy,valWidth,(values[j][i]*(float)barsize)/max[i],SHIFTBAR,colors[i]);
 
379
 
 
380
                        cy = (int)((float)cy - (values[j][i] + 5F));
 
381
                    cx += (valWidth + valSpacing);
 
382
                        }
 
383
 
 
384
            cx += blockSpacing;
 
385
        }
 
386
    }    
 
387
    
 
388
    public synchronized String getAppletInfo()
 
389
    {
 
390
        return "Title: " + title + "\n";
 
391
    }
 
392
    
 
393
    public synchronized String[][] getParameterInfo()
 
394
    {
 
395
        String[][] as = {
 
396
            {"version", "string", "AWGraphApplet "+VERSION},
 
397
            {"copyright", "string", "GPL"},
 
398
            {"title", "string", title}
 
399
        };
 
400
        return as;
 
401
    }
 
402
 
 
403
    private static final int VERTICAL = 0;
 
404
    private static final int HORIZONTAL = 1;
 
405
    private static final int SOLID = 0;
 
406
    private static final int STRIPED = 1;
 
407
        private static final int DEBUG = 3;
 
408
        private static final int SHIFTBAR = 3;
 
409
        private static final String VERSION = "1.1";
 
410
 
 
411
    private String title;
 
412
    private String special;
 
413
    private Font font;
 
414
    private Font fontb;
 
415
    private FontMetrics fontmetrics;
 
416
    private int orientation;
 
417
    private int barsize;
 
418
 
 
419
    private int nbblocks;
 
420
    private String blabels[];
 
421
        private int b_fontsize;
 
422
    private int blockSpacing;
 
423
    private int textVertSpacing;
 
424
        
 
425
    private int nbvalues;
 
426
    private Color colors[];
 
427
    private String vlabels[];
 
428
    private int styles[];
 
429
    private float max[];
 
430
    private int valSpacing;
 
431
    private int valWidth;
 
432
 
 
433
    private float values[][];
 
434
 
 
435
    private int maxLabelWidth;
 
436
        private Color background_color;
 
437
        private Color border_color;
 
438
        private Color special_color;
 
439
        private Color backgraph_colorl;
 
440
        private Color backgraph_colorm;
 
441
        private Color backgraph_colorh;
 
442
}
 
443
 
 
444
 
 
445
 
 
446
// # Applet Applet.getAppletContext().getApplet( "receiver" )
 
447
// that accesses another Applet uniquely identified via a name you assign in the HTML <applet name= tag.
 
448
// # Applet Enumeration Applet.getAppletContext().getApplets()
 
449
// that gets you a list of all the Applets, of any class, not just yours, running on the page (including yourself).
 
450