1 package com.stateofflow.eclipse.metrics.export.html;
2
3 import com.stateofflow.eclipse.metrics.collator.MetricsCollator;
4 import com.stateofflow.eclipse.metrics.configuration.MetricsConfiguration;
5 import com.stateofflow.eclipse.metrics.location.MetricLocation;
6 import com.stateofflow.eclipse.metrics.location.NamedLineNumber;
7 import com.stateofflow.eclipse.metrics.metric.MetricId;
8
9 final class MetricsTableRowWriter {
10 private final HtmlPageBuilder pageBuilder;
11 private MetricLocation location;
12 private final MetricsConfiguration configuration;
13 private final String javaExportDirectory;
14
15 public MetricsTableRowWriter(final HtmlPageBuilder builder, final MetricsConfiguration configuration, final String javaExportDirectory) {
16 this.pageBuilder = builder;
17 this.configuration = configuration;
18 this.javaExportDirectory = javaExportDirectory;
19 }
20
21 public void write(final MetricLocation location, final MetricId[] metricIds, final MetricsCollator collator) {
22 this.location = location;
23
24 pageBuilder.openElement("TR");
25 writeMetrics(metricIds, collator);
26 writeMethodInfo();
27 writeTypeInfo();
28 writePackageInfo();
29 pageBuilder.closeElementAndNewline("TR");
30 }
31
32 private void writePackageInfo() {
33 pageBuilder.createElement("TD", (location.getPackageName().length() > 0 ? location.getPackageName() : "(default)"));
34 }
35
36 private void writeTypeInfo() {
37 if (location.hasType()) {
38 if (!location.hasMethod()) {
39 pageBuilder.createElement("TD", getLineNumberJavaLink(location.getTypeInfo()));
40 }
41 pageBuilder.createElement("TD", getNameJavaLink(location.getTypeInfo()));
42 }
43 }
44
45 private void writeMethodInfo() {
46 if (location.hasMethod()) {
47 pageBuilder.createElement("TD", getLineNumberJavaLink(location.getMethodInfo())).createElement("TD", getNameJavaLink(location.getMethodInfo()));
48 }
49 }
50
51 private String getNameJavaLink(final NamedLineNumber namedLineNumber) {
52 return getJavaLink(namedLineNumber.getLineNumber(), namedLineNumber.getName());
53 }
54
55 private String getLineNumberJavaLink(final NamedLineNumber namedLineNumber) {
56 return getJavaLink(namedLineNumber.getLineNumber(), Integer.toString(namedLineNumber.getLineNumber()));
57 }
58
59 private String getJavaHtmlFile() {
60 return javaExportDirectory + "/" + location.getCompilationUnit().replace('.', '/') + ".java.html";
61 }
62
63 private String getJavaLink(final int lineNumber, final String text) {
64 return javaExportDirectory == null ? text : pageBuilder.getLink(getJavaHtmlFile() + "#" + Integer.toString(lineNumber), text);
65 }
66
67 private void writeMetrics(final MetricId[] metricIds, final MetricsCollator collator) {
68 for (final MetricId metricId : metricIds) {
69 writeMetricTableData(metricId, collator);
70 }
71 }
72
73 private void writeMetricTableData(final MetricId metricId, final MetricsCollator collator) {
74 pageBuilder.openElement("TD");
75 if (collator.hasMetric(location, metricId)) {
76 writeValidMetricTableData(metricId, collator);
77 } else {
78 pageBuilder.print('-');
79 }
80 pageBuilder.closeElement("TD");
81 }
82
83 private void writeValidMetricTableData(final MetricId metricId, final MetricsCollator collator) {
84 final int value = collator.getMetric(location, metricId).getValue();
85 final boolean violation = (value > configuration.getUpperBound(metricId));
86 if (violation) {
87 pageBuilder.print("<FONT color=\"red\">");
88 }
89 pageBuilder.print(Integer.toString(collator.getMetric(location, metricId).getValue()));
90 if (violation) {
91 pageBuilder.print("</FONT>");
92 }
93 }
94 }
95