*
* @param serverName the name of the selected server.
* @return list of slaves.
*/
public ListBoxModel doFillGerritSlaveIdItems(@QueryParameter("serverName") final String serverName) {
ListBoxModel items = new ListBoxModel();
if (ANY_SERVER.equals(serverName)) {
items.add(Messages.SlaveSelectionNotAllowedAnyServer(Messages.AnyServer()), "");
return items;
}
GerritServer server = PluginImpl.getInstance().getServer(serverName);
if (server == null) {
logger.warn(Messages.CouldNotFindServer(serverName));
items.add(Messages.CouldNotFindServer(serverName), "");
return items;
}
ReplicationConfig replicationConfig = server.getConfig().getReplicationConfig();
if (replicationConfig == null) {
items.add(Messages.ReplicationNotConfigured(), "");
return items;
} else if (!replicationConfig.isEnableReplication()) {
items.add(Messages.ReplicationNotConfigured(), "");
return items;
} else if (!replicationConfig.isEnableSlaveSelectionInJobs()) {
items.add(Messages.SlaveSelectionInJobsDisabled(), "");
return items;
}
for (GerritSlave slave : replicationConfig.getGerritSlaves()) {
//if GerritTrigger.gerritSlaveId is configured, the selected value will be the good one because of
//the stapler/jelly magic. The problem is when job was not saved since replication was configured,
//we want the selected slave to be the default slave defined at admin level but I did not find a way
//to do this. Jelly support default value returned by a descriptor method but I did not find a way to
//pass the selected server to this method.
//To work around the issue, we always put the default slave first in the list.
if (slave.getId().equals(replicationConfig.getDefaultSlaveId())) {
items.add(0, new ListBoxModel.Option(slave.getName(), slave.getId()));
} else {
items.add(slave.getName(), slave.getId());
}
}
return items;
}