/* * Copyright 2005-2015 Sixth and Red River Software, Bas Leijdekkers * * 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.sixrr.metrics.export; import com.intellij.analysis.AnalysisScope; import com.intellij.openapi.util.text.StringUtil; import com.sixrr.metrics.Metric; import com.sixrr.metrics.MetricCategory; import com.sixrr.metrics.metricModel.MetricAbbreviationComparator; import com.sixrr.metrics.metricModel.MetricsResult; import com.sixrr.metrics.metricModel.MetricsRun; import org.jetbrains.annotations.NonNls; import java.io.FileOutputStream; import java.io.IOException; import java.io.PrintWriter; import java.util.Arrays; public class XMLExporter implements Exporter { private final MetricsRun run; public XMLExporter(MetricsRun run) { this.run = run; } @Override public void export(String fileName) throws IOException { @NonNls final PrintWriter writer = new PrintWriter(new FileOutputStream(fileName)); try { export(writer); } finally { writer.close(); } } @Override public void export(PrintWriter writer) throws IOException { writer.println("<METRICS profile=\"" + StringUtil.escapeXml(run.getProfileName()) + "\" timestamp=\"" + run.getTimestamp() + "\">"); writeContext(run.getContext()); for (MetricCategory category : MetricCategory.values()) { writeResultsForCategory(category, writer); } writer.println("</METRICS>"); } private void writeContext(AnalysisScope context) { } private void writeResultsForCategory(MetricCategory category, PrintWriter writer) { final MetricsResult results = run.getResultsForCategory(category); final Metric[] metrics = results.getMetrics(); Arrays.sort(metrics, new MetricAbbreviationComparator()); for (final Metric metric : metrics) { writeResultsForMetric(category, metric, results, writer); } } private static void writeResultsForMetric(MetricCategory category, Metric metric, MetricsResult results, @NonNls PrintWriter writer) { writer.println("\t<METRIC category=\"" + category.name() + "\" name=\"" + metric.getDisplayName() + "\" abbreviation=\"" + metric.getAbbreviation() + "\">"); for (final String measuredObject : results.getMeasuredObjects()) { writeValue(results, metric, measuredObject, writer); } writer.println("\t</METRIC>"); } private static void writeValue(MetricsResult results, Metric metric, String measuredObject, @NonNls PrintWriter writer) { final Double value = results.getValueForMetric(metric, measuredObject); if (value != null) { writer.println("\t\t<VALUE measured=\"" + StringUtil.escapeXml(measuredObject) + "\" value=\"" + value + "\"/>"); } } }