KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > tctest > performance > results > PerformanceMeasurementMarshaller


1 /*
2  * All content copyright (c) 2003-2006 Terracotta, Inc., except as may otherwise be noted in a separate copyright notice. All rights reserved.
3  */

4 package com.tctest.performance.results;
5
6 import com.tctest.performance.generate.load.Measurement;
7
8 import java.io.BufferedReader JavaDoc;
9 import java.io.File JavaDoc;
10 import java.io.FileNotFoundException JavaDoc;
11 import java.io.FileReader JavaDoc;
12 import java.io.IOException JavaDoc;
13 import java.io.PrintWriter JavaDoc;
14 import java.io.UnsupportedEncodingException JavaDoc;
15 import java.util.ArrayList JavaDoc;
16 import java.util.Date JavaDoc;
17 import java.util.List JavaDoc;
18
19 public final class PerformanceMeasurementMarshaller {
20
21   private static final String JavaDoc HEADER_TAG = "**%% HEADER %%**";
22   private static final String JavaDoc DATA_TAG = "**%% DATA %%**";
23
24   public static void marshall(List JavaDoc measurementList, Header rawHeader, File JavaDoc file, String JavaDoc[] lineDescriptions)
25       throws IOException JavaDoc {
26
27     if (rawHeader == null) throw new NullPointerException JavaDoc();
28     if (lineDescriptions == null) throw new NullPointerException JavaDoc();
29     if (measurementList == null) throw new NullPointerException JavaDoc();
30     if (!(measurementList.get(0) instanceof Measurement[])) throw new IllegalArgumentException JavaDoc();
31     if (!(measurementList.size() == lineDescriptions.length)) throw new IllegalArgumentException JavaDoc();
32     Header header = rawHeader.copy();
33
34     PrintWriter JavaDoc out = new PrintWriter JavaDoc(file);
35     out.println(new Date JavaDoc(System.currentTimeMillis()));
36     out.println(PerformanceMeasurementMarshaller.class.getName());
37     out.println(HEADER_TAG);
38     out.println("title=" + header.title);
39     out.println("duration=" + header.duration);
40     out.println("xLabel=" + header.xLabel);
41     out.println("yLabel=" + header.yLabel);
42
43     for (int i = 0; i < measurementList.size(); i++) {
44       out.println(DATA_TAG);
45       out.println(lineDescriptions[i]);
46       out.println("\"x\", \"y\"");
47       Measurement[] measurements = (Measurement[]) measurementList.get(i);
48       int size = measurements.length;
49       for (int j = 0; j < size; j++) {
50         // FIXME:
51
if (measurements[j] == null) continue;
52         out.println(measurements[j].x + ", " + measurements[j].y);
53       }
54     }
55     out.flush();
56     out.close();
57   }
58
59   public static Statistics deMarshall(File JavaDoc file) throws UnsupportedEncodingException JavaDoc, FileNotFoundException JavaDoc,
60       IOException JavaDoc {
61
62     Statistics stats = new PerformanceMeasurementMarshaller().new Statistics();
63     List JavaDoc lineDescriptions = new ArrayList JavaDoc();
64     BufferedReader JavaDoc reader = new BufferedReader JavaDoc(new FileReader JavaDoc(file));
65     reader.readLine(); // skip timestamp
66
if (!reader.readLine().equals(PerformanceMeasurementMarshaller.class.getName())) throw new UnsupportedEncodingException JavaDoc();
67
68     if (reader.readLine().equals(HEADER_TAG)) {
69       Header header = createHeader();
70       header.title = reader.readLine().trim().split("=")[1];
71       header.duration = Integer.valueOf(reader.readLine().trim().split("=")[1]).intValue();
72       header.xLabel = reader.readLine().trim().split("=")[1];
73       header.yLabel = reader.readLine().trim().split("=")[1];
74       stats.header = header;
75     }
76
77     if (reader.readLine().equals(DATA_TAG)) {
78       lineDescriptions.add(reader.readLine()); // save line description
79
reader.readLine(); // remove column header
80
List JavaDoc datasets = new ArrayList JavaDoc();
81       List JavaDoc lines = new ArrayList JavaDoc();
82       datasets.add(lines);
83       String JavaDoc line;
84       while ((line = reader.readLine()) != null) {
85         if (line.equals(DATA_TAG)) {
86           lines = new ArrayList JavaDoc();
87           datasets.add(lines);
88           lineDescriptions.add(reader.readLine()); // save line description
89
reader.readLine(); // remove column header
90
continue;
91         }
92         lines.add(line);
93       }
94
95       List JavaDoc measurementList = new ArrayList JavaDoc();
96       List JavaDoc data;
97       Measurement[] measurements;
98       for (int i = 0; i < datasets.size(); i++) {
99         data = (List JavaDoc) datasets.get(i);
100         int size = data.size();
101         measurements = new Measurement[size];
102         for (int j = 0; j < size; j++) {
103           String JavaDoc[] parts = ((String JavaDoc) data.get(j)).split(", ");
104           measurements[j] = new Measurement(Long.parseLong(parts[0]), Long.parseLong(parts[1]));
105         }
106         measurementList.add(measurements);
107       }
108       stats.measurements = measurementList;
109       stats.lineDescriptions = (String JavaDoc[]) lineDescriptions.toArray(new String JavaDoc[0]);
110     }
111     return stats;
112   }
113
114   public static PerformanceMeasurementMarshaller.Header createHeader() {
115     return new PerformanceMeasurementMarshaller().new Header();
116   }
117
118   public class Header {
119     public String JavaDoc title;
120     public String JavaDoc xLabel;
121     public String JavaDoc yLabel;
122     public int duration;
123
124     private Header copy() {
125       Header newHeader = new Header();
126       newHeader.title = title;
127       newHeader.xLabel = xLabel;
128       newHeader.yLabel = yLabel;
129       newHeader.duration = duration;
130       return newHeader;
131     }
132   }
133
134   public class Statistics {
135     public List JavaDoc measurements;
136     public String JavaDoc[] lineDescriptions;
137     public Header header;
138   }
139 }
140
Popular Tags