diff --git a/pom.xml b/pom.xml
index 5141257..0819301 100644
--- a/pom.xml
+++ b/pom.xml
@@ -21,6 +21,12 @@
jira-rest-java-client
0.4
+
+ com.google.code.findbugs
+ jsr305
+ 2.0.1
+ jar
+
diff --git a/src/main/java/org/jenkinsci/jira_scraper/JiraScraper.java b/src/main/java/org/jenkinsci/jira_scraper/JiraScraper.java
index df8f939..8604a61 100644
--- a/src/main/java/org/jenkinsci/jira_scraper/JiraScraper.java
+++ b/src/main/java/org/jenkinsci/jira_scraper/JiraScraper.java
@@ -5,12 +5,15 @@
import com.atlassian.jira.rest.client.auth.BasicHttpAuthenticationHandler;
import com.atlassian.jira.rest.client.domain.AssigneeType;
import com.atlassian.jira.rest.client.domain.BasicComponent;
+import com.atlassian.jira.rest.client.domain.BasicUser;
import com.atlassian.jira.rest.client.domain.Component;
+import com.atlassian.jira.rest.client.domain.Component.AssigneeInfo;
import com.atlassian.jira.rest.client.domain.input.ComponentInput;
import com.atlassian.jira.rest.client.internal.jersey.JerseyJiraRestClientFactory;
import java.io.IOException;
import java.net.URI;
+import javax.annotation.Nonnull;
/**
* @author Kohsuke Kawaguchi
@@ -33,22 +36,77 @@ public void createComponent(String projectKey, String subcomponent, String owner
subcomponent, subcomponent + " plugin", owner, defaultAssignee), pm);
}
+ /**
+ * Deletes the specified component
+ * @param projectKey Project Id
+ * @param deletedComponentName Name of the component to be deleted
+ * @param backupComponentName Existing issues will be moved to this component
+ * @throws IOException Missing components
+ * @since TODO: define the version
+ */
+ public void deleteComponent(String projectKey, String deletedComponentName, String backupComponentName)
+ throws IOException {
+ BasicComponent deletedComponent = getBasicComponent(projectKey, deletedComponentName);
+ BasicComponent backupComponent = getBasicComponent(projectKey, backupComponentName);
+
+ restClient.getComponentClient().removeComponent(deletedComponent.getSelf(), backupComponent.getSelf(), pm);
+ }
+
+ /**
+ * Deletes the specified component
+ * @param projectKey Project Id
+ * @param oldName Name of the component to be renamed
+ * @param newName New name to be set
+ * @throws IOException Cannot find the initial component or the new name is exist
+ * @since TODO: define the version
+ */
+ public void renameComponent(String projectKey, String oldName, String newName)
+ throws IOException {
+ BasicComponent c = getBasicComponent(projectKey, oldName);
+ Component comp = getComponent(c);
+
+ AssigneeInfo info = comp.getAssigneeInfo();
+ AssigneeType assigneeType = info != null ? info.getAssigneeType() : null;
+ BasicUser leadUser = info != null ? info.getAssignee() : null;
+
+ restClient.getComponentClient().updateComponent(c.getSelf(),
+ new ComponentInput(newName, c.getDescription(),
+ leadUser != null ? leadUser.getName() : null, assigneeType), pm);
+ }
+
public void setDefaultAssignee(String projectId, String component, AssigneeType assignee) throws IOException {
setDefaultAssignee(projectId, component, assignee, null);
}
public void setDefaultAssignee(String projectId, String component, AssigneeType assignee, String name) throws IOException {
- for (BasicComponent c : restClient.getProjectClient().getProject(projectId,pm).getComponents()) {
+ BasicComponent c = getBasicComponent(projectId, component);
+ Component comp = getComponent(c);
+
+ String componentLead = name == null ? comp.getLead().getName() : name;
+ ComponentInput ci = new ComponentInput(component, c.getDescription(), componentLead, assignee);
+ restClient.getComponentClient().updateComponent(c.getSelf(), ci, pm);
+ }
+
+ /**
+ * Gets JIRA component by the specified name.
+ * @param projectId Project Id (e.g. JENKINS)
+ * @param component Component name
+ * @return The requested component
+ * @throws IOException Component cannot be found
+ */
+ private @Nonnull BasicComponent getBasicComponent (String projectId, String component)
+ throws IOException {
+ for (BasicComponent c : restClient.getProjectClient().getProject(projectId, pm).getComponents()) {
if (c.getName().equals(component)) {
- Component comp = restClient.getComponentClient().getComponent(c.getSelf(),pm);
- String componentLead = name == null ? comp.getLead().getName() : name;
- ComponentInput ci = new ComponentInput(component,c.getDescription(),componentLead,assignee);
- restClient.getComponentClient().updateComponent(c.getSelf(), ci, pm);
- return;
+ return c;
}
}
- throw new IOException("Unable to find component "+component+" in the issue tracker");
+ throw new IOException("Unable to find component "+component+" in the "+ projectId +" issue tracker");
+ }
+
+ private @Nonnull Component getComponent (@Nonnull BasicComponent c) {
+ return restClient.getComponentClient().getComponent(c.getSelf(),pm);
}
// test