package jenkins.plugins.accurev;
import com.cloudbees.plugins.credentials.SystemCredentialsProvider;
import hudson.init.Initializer;
import hudson.model.Project;
import hudson.plugins.accurev.AccurevSCM;
import hudson.plugins.accurev.AccurevSCM.AccurevSCMDescriptor;
import hudson.plugins.accurev.AccurevSCM.AccurevServer;
import jenkins.model.Jenkins;
import jenkins.plugins.accurev.util.UUIDUtils;
import java.util.logging.Logger;
import static hudson.init.InitMilestone.*;
/**
* Initialized by josp on 21/09/16.
*/
@SuppressWarnings("unused") // Used for initialization/migration purpose
public class AccurevPlugin {
private static final Logger LOGGER = Logger.getLogger(AccurevPlugin.class.getName());
/**
* We need ensure that migrator will run after jobs are loaded
* Launches migration after plugin and jobs already initialized.
* Expected milestone: @Initializer(after = JOB_LOADED)
*
* @throws Exception Exceptions
*/
@Initializer(after = JOB_LOADED, before = COMPLETED)
public static void migrateJobsToServerUUID() throws Exception {
final Jenkins jenkins = Jenkins.getInstance();
boolean changed = false;
AccurevSCMDescriptor descriptor = jenkins.getDescriptorByType(AccurevSCMDescriptor.class);
for (Project<?, ?> p : jenkins.getAllItems(Project.class)) {
if (p.getScm() instanceof AccurevSCM) {
AccurevSCM scm = (AccurevSCM) p.getScm();
String serverUUID = scm.getServerUUID();
if (UUIDUtils.isNotValid(serverUUID) || descriptor.getServer(serverUUID) == null) {
AccurevServer server = descriptor.getServer(scm.getServerName());
if (server == null) {
LOGGER.warning("No server found with that name, Project: " + p.getName() + " Server Name: " + scm.getServerName());
} else {
changed = true;
String uuid = server.getUuid();
scm.setServerUUID(uuid);
p.save();
}
}
}
}
if (changed) descriptor.save();
}
/**
* We need ensure that migrator will after Extensions are augmented
* Launches migration if servers still uses username and password
* Expected milestone: @Initializer(after = EXTENSIONS_AUGMENTED)
*
* @throws Exception Exceptions
*/
@Initializer(after = EXTENSIONS_AUGMENTED)
public static void migrateServersToCredentials() throws Exception {
boolean changed = false;
AccurevSCMDescriptor descriptor = AccurevSCM.configuration();
boolean migratedCredentials = false;
for (AccurevServer server : descriptor.getServers()) {
if (server.migrateCredentials()) changed = true;
}
if (changed) {
descriptor.save();
SystemCredentialsProvider.getInstance().save();
}
}
}