aboutsummaryrefslogtreecommitdiff
path: root/src/com/google/caliper/Xml.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/google/caliper/Xml.java')
-rw-r--r--src/com/google/caliper/Xml.java108
1 files changed, 108 insertions, 0 deletions
diff --git a/src/com/google/caliper/Xml.java b/src/com/google/caliper/Xml.java
new file mode 100644
index 0000000..f7cfafc
--- /dev/null
+++ b/src/com/google/caliper/Xml.java
@@ -0,0 +1,108 @@
+/**
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.caliper;
+
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Map;
+
+public final class Xml {
+ private static final String DATE_FORMAT_STRING = "yyyy-MM-dd'T'HH:mm:ssz";
+
+ /**
+ * Encodes this result as XML to the specified stream. This XML can be parsed
+ * with {@link #runFromXml(InputStream)}. Sample output:
+ * <pre>{@code
+ * <result benchmark="examples.FooBenchmark"
+ * executedBy="A0:1F:CAFE:BABE"
+ * executedTimestamp="2010-01-05T11:08:15PST">
+ * <scenario bar="15" foo="A" vm="dalvikvm">1200.1</scenario>
+ * <scenario bar="15" foo="B" vm="dalvikvm">1100.2</scenario>
+ * </result>
+ * }</pre>
+ */
+ public static void runToXml(Run run, OutputStream out) {
+ // BEGIN android-removed
+ // we don't have DOM level 3 on Android yet
+ // try {
+ // Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();
+ // Element result = doc.createElement("result");
+ // doc.appendChild(result);
+ //
+ // result.setAttribute("benchmark", run.getBenchmarkName());
+ // result.setAttribute("executedBy", run.getExecutedByUuid());
+ // String executedTimestampString = new SimpleDateFormat(DATE_FORMAT_STRING)
+ // .format(run.getExecutedTimestamp());
+ // result.setAttribute("executedTimestamp", executedTimestampString);
+ //
+ // for (Map.Entry<Scenario, Double> entry : run.getMeasurements().entrySet()) {
+ // Element runElement = doc.createElement("scenario");
+ // result.appendChild(runElement);
+ //
+ // Scenario scenario = entry.getKey();
+ // for (Map.Entry<String, String> parameter : scenario.getVariables().entrySet()) {
+ // runElement.setAttribute(parameter.getKey(), parameter.getValue());
+ // }
+ // runElement.setTextContent(String.valueOf(entry.getValue()));
+ // }
+ //
+ // TransformerFactory.newInstance().newTransformer()
+ // .transform(new DOMSource(doc), new StreamResult(out));
+ // } catch (Exception e) {
+ // throw new IllegalStateException("Malformed XML document", e);
+ // }
+ // END android-removed
+ }
+
+ /**
+ * Creates a result by decoding XML from the specified stream. The XML should
+ * be consistent with the format emitted by {@link #runToXml(Run, OutputStream)}.
+ */
+ public static Run runFromXml(InputStream in) {
+ // BEGIN android-removed
+ // we don't have DOM level 3 on Android yet
+ throw new UnsupportedOperationException();
+ // try {
+ // Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(in);
+ // Element result = document.getDocumentElement();
+ //
+ // String benchmarkName = result.getAttribute("benchmark");
+ // String executedByUuid = result.getAttribute("executedBy");
+ // String executedDateString = result.getAttribute("executedTimestamp");
+ // Date executedDate = new SimpleDateFormat(DATE_FORMAT_STRING).parse(executedDateString);
+ //
+ // ImmutableMap.Builder<Scenario, Double> measurementsBuilder = ImmutableMap.builder();
+ // for (Node node : childrenOf(result)) {
+ // Element scenarioElement = (Element) node;
+ // Scenario scenario = new Scenario(attributesOf(scenarioElement));
+ // double measurement = Double.parseDouble(scenarioElement.getTextContent());
+ // measurementsBuilder.put(scenario, measurement);
+ // }
+ //
+ // return new Run(measurementsBuilder.build(), benchmarkName, executedByUuid, executedDate);
+ // } catch (Exception e) {
+ // throw new IllegalStateException("Malformed XML document", e);
+ // }
+ // END android-removed
+ }
+
+ private Xml() {}
+}