results = confluence.getPageIDByTitle(parentPageTitle, spaceKey);
- if (results.size() == 0) {
- throw new RuntimeException("No page with title '" + parentPageTitle + "' found!");
- }
- if (results.size() > 1) {
- throw new RuntimeException("Multiple pages with title '" + parentPageTitle + "' found!");
- }
- parentPageID = results.get(0);
- }
-
-
- confluence.createPage(pageTitle, pageHTML, spaceKey, parentPageID);
-
-
- confluence.destroy();
- jira.destroy();
-
- return true;
- }
-
-
-
-
-
- /**
- * Descriptor class.
- * @author JKU
- *
- */
- @Extension
- public static class DescriptorImpl extends AbstractJIRAConfluenceAction.DescriptorImpl {
-
- /**
- * Constructor.
- */
- public DescriptorImpl() {
- super();
- load();
- }
-
- @Override
- public String getDisplayName() {
- return "Publish Release Notes on Confluence";
- }
-
- }
+
+ /**
+ * The space under which the page shal lbe published.
+ */
+ private String spaceKey;
+
+ /**
+ * The JQL filter of the tickets to list.
+ */
+ private String jqlFilter;
+
+ /**
+ * Title of the page to publish.
+ */
+ private String pageTitle;
+
+ /**
+ * Title of the parent page.
+ */
+ private String parentPageTitle;
+
+ /**
+ * Labels of the page
+ */
+ private String pageLabels;
+
+ /**
+ *
+ * Databound constructor, called by Jenkins.
+ *
+ * @param jiraCredentialsID the jira credentials
+ * @param confluenceCredentialsID the confluence credentials
+ * @param spaceKey the space key
+ * @param jqlFilter the jql filter
+ * @param pageTitle the title of the new page
+ * @param parentPageTitle the title of the parent page
+ */
+ @DataBoundConstructor
+ public ConfluenceReleaseNotesPublisher(String jiraCredentialsID, String confluenceCredentialsID, String spaceKey,
+ String jqlFilter, String pageTitle, String pageLabels, String parentPageTitle) {
+ super(jiraCredentialsID, confluenceCredentialsID);
+ this.spaceKey = spaceKey;
+ this.jqlFilter = jqlFilter;
+ this.pageTitle = pageTitle;
+ this.parentPageTitle = parentPageTitle;
+ this.pageLabels = pageLabels;
+ }
+
+ public String getSpaceKey() {
+ return spaceKey;
+ }
+
+ public String getJqlFilter() {
+ return jqlFilter;
+ }
+
+ public String getPageTitle() {
+ return pageTitle;
+ }
+
+ public String getParentPageTitle() {
+ return parentPageTitle;
+ }
+
+ @Override
+ public boolean perform(AbstractBuild< ?, ? > build, Launcher launcher, BuildListener listener)
+ throws InterruptedException, IOException {
+
+ StrSubstitutor varReplacer = getVariablesSubstitutor(build, listener);
+ PrintStream logger = listener.getLogger();
+
+ JIRAProjectCredentials jiraCred = getJiraCredentials();
+ ConfluenceCredentials confCred = getConfluenceCredentials();
+
+ JIRAAccessTool jira = new JIRAAccessTool(jiraCred.getUrl(), jiraCred.getUrlUsername(), jiraCred.getUrlPassword(), null,
+ jiraCred.getProjectKey(), getJiraCredentialsID());
+ ConfluenceAccessTool confluence = new ConfluenceAccessTool(confCred.getUrl(), confCred.getUrlUsername(),
+ confCred.getUrlPassword(), null);
+
+ String jqlFilter = varReplacer.replace(this.jqlFilter);
+ String spaceKey = varReplacer.replace(this.spaceKey);
+ String pageTitle = varReplacer.replace(this.pageTitle);
+ String parentPageTitle = varReplacer.replace(this.parentPageTitle);
+ String pageLabels = varReplacer.replace(this.pageLabels);
+ String[] labels = null;
+ if (pageLabels != null && !pageLabels.isEmpty()) {
+ labels = pageLabels.split(" ");
+ }
+
+ List< Issue > tickets = jira.getTicketsByJQL(jqlFilter);
+
+ logger.println(
+ "Publishing " + tickets.size() + " tickets on page '" + pageTitle + "' in space '" + spaceKey + "' on confluence.");
+
+ String pageHTML = new String(jira.buildReleaseNotesHTML(tickets).getBytes("UTF-8"), "ISO8859_1");
+
+ Long parentPageID = null;
+ if (!parentPageTitle.isEmpty()) {
+ List< Long > results = confluence.getPageIDByTitle(parentPageTitle, spaceKey);
+ if (results.size() == 0) {
+ throw new RuntimeException("No page with title '" + parentPageTitle + "' found!");
+ }
+ if (results.size() > 1) {
+ throw new RuntimeException("Multiple pages with title '" + parentPageTitle + "' found!");
+ }
+ parentPageID = results.get(0);
+ }
+
+ confluence.createPage(pageTitle, pageHTML, spaceKey, parentPageID, labels);
+
+ confluence.destroy();
+ jira.destroy();
+
+ return true;
+ }
+
+ /**
+ * Descriptor class.
+ *
+ * @author JKU
+ *
+ */
+ @Extension
+ public static class DescriptorImpl extends AbstractJIRAConfluenceAction.DescriptorImpl {
+
+ /**
+ * Constructor.
+ */
+ public DescriptorImpl() {
+ super();
+ load();
+ }
+
+ @Override
+ public String getDisplayName() {
+ return "Publish Release Notes on Confluence";
+ }
+
+ }
}
diff --git a/rocks.inspectit.releaseplugin/src/main/resources/rocks/inspectit/releaseplugin/releasenotes/ConfluenceReleaseNotesPublisher/config.jelly b/rocks.inspectit.releaseplugin/src/main/resources/rocks/inspectit/releaseplugin/releasenotes/ConfluenceReleaseNotesPublisher/config.jelly
index a2333ef..b4a4779 100644
--- a/rocks.inspectit.releaseplugin/src/main/resources/rocks/inspectit/releaseplugin/releasenotes/ConfluenceReleaseNotesPublisher/config.jelly
+++ b/rocks.inspectit.releaseplugin/src/main/resources/rocks/inspectit/releaseplugin/releasenotes/ConfluenceReleaseNotesPublisher/config.jelly
@@ -22,6 +22,10 @@
+
+
+
+
diff --git a/rocks.inspectit.releaseplugin/src/main/resources/rocks/inspectit/releaseplugin/releasenotes/ConfluenceReleaseNotesPublisher/help-pageLabels.html b/rocks.inspectit.releaseplugin/src/main/resources/rocks/inspectit/releaseplugin/releasenotes/ConfluenceReleaseNotesPublisher/help-pageLabels.html
new file mode 100644
index 0000000..f49c6e6
--- /dev/null
+++ b/rocks.inspectit.releaseplugin/src/main/resources/rocks/inspectit/releaseplugin/releasenotes/ConfluenceReleaseNotesPublisher/help-pageLabels.html
@@ -0,0 +1 @@
+Space separated list of labels for the page.
\ No newline at end of file