package to.rtc.rtc2jira.exporter.jira;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.logging.Level;
import java.util.logging.Logger;
import to.rtc.rtc2jira.ExportManager;
import to.rtc.rtc2jira.Settings;
import to.rtc.rtc2jira.exporter.jira.entities.JiraUser;
import com.sun.jersey.api.client.ClientResponse;
import com.sun.jersey.api.client.GenericType;
public class JiraUserManager {
private static final String ALREADY = "bereits";
public static final JiraUserManager INSTANCE = new JiraUserManager();
public static final String BASIC_JIRA_USER_GROUP_NAME = "jira-software-users";
static final Logger LOGGER = Logger.getLogger(JiraUserManager.class.getName());
static {
LOGGER.addHandler(ExportManager.DEFAULT_LOG_HANDLER);
}
private Set<String> createdUsers = new HashSet<String>(500);
private Set<String> existingUsers = new HashSet<String>(500);
private Set<String> deactivationExclusionList = new HashSet<String>(15);
public JiraUserManager() {
deactivationExclusionList.add("gustaf.hansen@bison-group.com");
deactivationExclusionList.add("manuel.wessner@bison-group.com");
deactivationExclusionList.add("martin.ziswiler@bison-group.com");
deactivationExclusionList.add("otmar.humbel@bison-group.com");
deactivationExclusionList.add("roman.schaller@gmail.com");
deactivationExclusionList.add("noreply@atlassian.com");
deactivationExclusionList.add("urs.haller@bison-group.com");
deactivationExclusionList.add("pedraita.dayana@bison-group.com");
deactivationExclusionList.add("leonard.chew@bison-group.com");
// meadows
deactivationExclusionList.add("christian.oetterli@bison-group.com");
deactivationExclusionList.add("diethard.straka@bison-group.com");
deactivationExclusionList.add("dorian.nyffeler@bison-group.com");
deactivationExclusionList.add("florian.waibel@bison-group.com");
deactivationExclusionList.add("franz.ehrler@bison-group.com");
deactivationExclusionList.add("friendly.user@bison-group.com");
deactivationExclusionList.add("hendrik.schaefer@bison-group.com");
deactivationExclusionList.add("joachim.huber@bison-group.com");
deactivationExclusionList.add("johannes.eickhold@bison-group.com");
deactivationExclusionList.add("kurt.muff@bison-group.com");
deactivationExclusionList.add("marco.poli@bison-group.com");
deactivationExclusionList.add("matthias.bohlen@bison-group.com");
deactivationExclusionList.add("maximilian.koegel@bison-group.com");
deactivationExclusionList.add("michael.bruelisauer@bison-group.com");
deactivationExclusionList.add("mustapha.bouaaoud@bison-group.com");
deactivationExclusionList.add("patrick.reinhart@bison-group.com");
deactivationExclusionList.add("roland.bucher@bison-group.com");
deactivationExclusionList.add("leonard.chew@bison-group.com");
}
public void deactivateUsers() {
ClientResponse response =
getRestAccess().get("/user/assignable/search?project=" + Settings.getInstance().getJiraProjectKey());
if (response.getStatus() == 200) {
List<JiraUser> allUsers = response.getEntity(new GenericType<List<JiraUser>>() {});
for (JiraUser jiraUser : allUsers) {
String emailAddress = jiraUser.getEmailAddress();
if (emailAddress != null && emailAddress.toLowerCase().contains("bison")) {
existingUsers.add(emailAddress.toLowerCase());
}
}
}
for (String email : existingUsers) {
if (!deactivationExclusionList.contains(email)) {
JiraUser jiraUser = new JiraUser();
jiraUser.setEmailAddress(email);
String name = email.split("@")[0];
jiraUser.setName(name);
jiraUser.setKey(name);
jiraUser.setActive(false);
deactivateUser(jiraUser);
}
}
}
public void deactivateUser(JiraUser jiraUser) {
jiraUser.setActive(false);
ClientResponse putResponse =
getRestAccess().delete(
"/group/user?groupname=" + BASIC_JIRA_USER_GROUP_NAME + "&username=" + jiraUser.getName());
if (putResponse.getStatus() != 200) {
LOGGER.log(Level.SEVERE, "Problems while removing user " + jiraUser.getEmailAddress()
+ " from jira-users group. " + putResponse.getEntity(String.class));
}
}
public void activateUser(JiraUser jiraUser) {
jiraUser.setActive(true);
// add user to jira-users group
ClientResponse putResponse = getRestAccess().post("/group/user?groupname=" + BASIC_JIRA_USER_GROUP_NAME, jiraUser);
if (putResponse.getStatus() != 201) {
boolean logError = true;
String errorEntityAsJson = putResponse.getEntity(String.class);
if (putResponse.getStatus() == 400) {
if (errorEntityAsJson.contains(ALREADY)) {
logError = false;
}
}
if (logError) {
LOGGER.log(Level.WARNING, "Problems while adding user " + jiraUser.getEmailAddress() + " to "
+ BASIC_JIRA_USER_GROUP_NAME + " group. " + errorEntityAsJson);
}
}
}
public JiraUser getUser(JiraUser jiraUser) {
if ("unassigned".equals(jiraUser.getName().toLowerCase()))
return null;
if (!existingUsers.contains(jiraUser.getEmailAddress())) {
ClientResponse clientResponse = getRestAccess().get(jiraUser.getSelfPath());
if (clientResponse.getStatus() == 200) {
activateUser(jiraUser);
existingUsers.add(jiraUser.getEmailAddress());
} else {
jiraUser = createUser(jiraUser);
}
}
return jiraUser;
}
public JiraUser createUser(JiraUser jiraUser) {
ClientResponse clientResponse = getRestAccess().post(jiraUser.getPath(), jiraUser);
if (clientResponse.getStatus() == 201) {
jiraUser = clientResponse.getEntity(JiraUser.class);
existingUsers.add(jiraUser.getEmailAddress());
createdUsers.add(jiraUser.getEmailAddress());
} else {
LOGGER.log(Level.SEVERE,
"Problems while creating user '" + jiraUser.getName() + "'" + clientResponse.getEntity(String.class));
}
return jiraUser;
}
private JiraRestAccess getRestAccess() {
return JiraExporter.INSTANCE.getRestAccess();
}
}