1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.report.projectinfo;
20
21 import java.util.Locale;
22
23 import org.apache.maven.doxia.sink.Sink;
24 import org.apache.maven.model.IssueManagement;
25 import org.apache.maven.model.Model;
26 import org.apache.maven.plugins.annotations.Mojo;
27 import org.codehaus.plexus.i18n.I18N;
28
29
30
31
32
33
34
35 @Mojo(name = "issue-management")
36 public class IssueManagementReport extends AbstractProjectInfoReport {
37
38
39
40
41 @Override
42 public boolean canGenerateReport() {
43 boolean result = super.canGenerateReport();
44 if (result && skipEmptyReport) {
45 result = getProject().getModel().getIssueManagement() != null;
46 }
47
48 return result;
49 }
50
51 @Override
52 public void executeReport(Locale locale) {
53 IssueManagementRenderer r =
54 new IssueManagementRenderer(getSink(), getProject().getModel(), getI18N(locale), locale);
55
56 r.render();
57 }
58
59
60 public String getOutputName() {
61 return "issue-management";
62 }
63
64 @Override
65 protected String getI18Nsection() {
66 return "issue-management";
67 }
68
69
70
71
72
73
74
75
76 private static class IssueManagementRenderer extends AbstractProjectInfoRenderer {
77 private Model model;
78
79 IssueManagementRenderer(Sink sink, Model model, I18N i18n, Locale locale) {
80 super(sink, i18n, locale);
81
82 this.model = model;
83 }
84
85 @Override
86 protected String getI18Nsection() {
87 return "issue-management";
88 }
89
90 @Override
91 protected void renderBody() {
92 IssueManagement issueManagement = model.getIssueManagement();
93 if (issueManagement == null) {
94 startSection(getTitle());
95
96 paragraph(getI18nString("noissueManagement"));
97
98 endSection();
99
100 return;
101 }
102
103 String system = issueManagement.getSystem();
104 String url = issueManagement.getUrl();
105
106
107 startSection(getI18nString("overview.title"));
108
109 if (isIssueManagementSystem(system, "jira")) {
110 sink.paragraph();
111 linkPatternedText(getI18nString("jira.intro"));
112 sink.paragraph_();
113 } else if (isIssueManagementSystem(system, "bugzilla")) {
114 sink.paragraph();
115 linkPatternedText(getI18nString("bugzilla.intro"));
116 sink.paragraph_();
117 } else if (isIssueManagementSystem(system, "scarab")) {
118 sink.paragraph();
119 linkPatternedText(getI18nString("scarab.intro"));
120 sink.paragraph_();
121 } else if (system == null || "".equals(system.trim())) {
122 paragraph(getI18nString("general.intro"));
123 } else {
124 paragraph(getI18nString("custom.intro").replaceFirst("%issueManagementSystem%", system));
125 }
126
127 endSection();
128
129
130 startSection(getTitle());
131
132 paragraph(getI18nString("intro"));
133
134 verbatimLink(url, url);
135
136 endSection();
137 }
138
139
140
141
142
143
144
145
146 private boolean isIssueManagementSystem(String system, String actual) {
147 if (system == null || system.isEmpty()) {
148 return false;
149 }
150
151 if (actual == null || actual.isEmpty()) {
152 return false;
153 }
154
155 return system.toLowerCase(Locale.ENGLISH).startsWith(actual.toLowerCase(Locale.ENGLISH));
156 }
157 }
158 }