Skip to content

Instantly share code, notes, and snippets.

@jamieechlin
Created March 19, 2013 11:36
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jamieechlin/5195431 to your computer and use it in GitHub Desktop.
Save jamieechlin/5195431 to your computer and use it in GitHub Desktop.
package examples
import com.atlassian.core.ofbiz.CoreFactory
import com.atlassian.jira.util.ErrorCollection
import com.onresolve.jira.groovy.CannedScriptRunner
import com.onresolve.jira.groovy.GroovyRunner
import java.sql.Connection
import java.sql.PreparedStatement
import java.sql.ResultSet
import java.sql.ResultSetMetaData
import org.apache.log4j.Category
import org.apache.log4j.Level
import org.ofbiz.core.entity.ConnectionFactory
import org.ofbiz.core.entity.GenericDelegator
import com.onresolve.jira.groovy.canned.CannedScript
import com.onresolve.jira.groovy.ScriptManager
import com.atlassian.jira.ComponentManager
GenericDelegator delegator = CoreFactory.getGenericDelegator()
String helperName = delegator.getGroupHelperName("default");
Connection conn = ConnectionFactory.getConnection(helperName);
String sqlStmt = """
select username
from userbase
where lower(username) in (
select LOWER(username) from userbase
group by LOWER(username)
having count(LOWER(username)) > 1
)
order by lower(username)
"""
Category log = log
log.setLevel(Level.DEBUG)
GroovyRunner runner = new CannedScriptRunner()
PreparedStatement stmt = conn.prepareStatement(sqlStmt, ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
ResultSet rs = stmt.executeQuery();
log.debug rs
ResultSetMetaData rsMetaData = rs.getMetaData();
int numberOfColumns = rsMetaData.getColumnCount();
List renameUsers = []
while (rs.next()) {
for (int i = 1; i < numberOfColumns + 1; i++) {
renameUsers.add(rs.getObject(i))
}
}
log.debug renameUsers
log.debug renameUsers.size()
Map<String, List> renameUserMap = [:]
renameUsers.eachWithIndex {String s, int i ->
if (! renameUserMap.get(s.toLowerCase())) {
renameUserMap.put(s.toLowerCase(), [])
}
renameUserMap[s.toLowerCase()].add(s)
}
log.debug renameUserMap
renameUserMap.each {String k, List v ->
if (! v.contains(k)) {
log.warn "Problem with user $k"
}
v.each {String mergeFrom ->
if (mergeFrom != k) {
log.debug "Merge from $mergeFrom to $k"
ScriptManager scriptManager = (ScriptManager) ComponentManager.getComponentInstanceOfType(ScriptManager.class);
GroovyClassLoader gcl = scriptManager.getGcl();
CannedScript renameUser = (CannedScript) gcl.loadClass("com.onresolve.jira.groovy.canned.admin.RenameUser", true, false).newInstance();
Map<String, Object> inputs = [
(renameUser.FIELD_FROM_USER_ID) : mergeFrom,
(renameUser.FIELD_TO_USER_ID): k,
(renameUser.FIELD_MERGE): true,
] as Map<String, Object>
renameUser.log.setLevel(Level.DEBUG)
ErrorCollection errorCollection = renameUser.doValidate(inputs, true)
if (errorCollection.hasAnyErrors()) {
log.error errorCollection
}
else {
runner.run(renameUser.class.getName(), inputs)
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment