diff options
Diffstat (limited to 'src/com/google/caliper/Xml.java')
-rw-r--r-- | src/com/google/caliper/Xml.java | 108 |
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() {} +} |