package hudson.plugins.accurev.delegates;
import hudson.model.Job;
import hudson.model.Run;
import hudson.plugins.accurev.AccurevSCM;
import hudson.plugins.accurev.AccurevStream;
import hudson.plugins.accurev.CheckForChanges;
import hudson.plugins.accurev.cmd.ShowStreams;
import hudson.scm.PollingResult;
import java.io.File;
import java.io.IOException;
import java.util.Date;
import java.util.Map;
import java.util.logging.Logger;
/**
* @author raymond
*/
public class StreamDelegate extends AbstractModeDelegate {
private static final Logger logger = Logger.getLogger(StreamDelegate.class.getName());
public StreamDelegate(AccurevSCM scm) {
super(scm);
}
@Override
protected boolean checkout(Run<?, ?> build, File changeLogFile) throws IOException, InterruptedException {
return true;
}
@Override
protected String getPopulateFromMessage() {
return "from stream";
}
@Override
protected String getPopulateStream() {
return localStream;
}
@Override
protected boolean isSteamColorEnabled() {
return true;
}
@Override
protected String getStreamColorStream() {
return localStream;
}
@Override
protected String getStreamColor() {
return "#FFFFFF";
}
@Override
protected PollingResult checkForChanges(Job<?, ?> project) throws IOException, InterruptedException {
final Run<?, ?> lastBuild = project.getLastBuild();
if (lastBuild == null) {
listener.getLogger().println("Project has never been built");
return PollingResult.BUILD_NOW;
}
final Date buildDate = lastBuild.getTimestamp().getTime();
try {
localStream = scm.getPollingStream(project, listener);
} catch (IllegalArgumentException ex) {
listener.getLogger().println(ex.getMessage());
return PollingResult.NO_CHANGES;
}
final Map<String, AccurevStream> streams = ShowStreams.getStreams(scm, localStream, server,
accurevEnv, jenkinsWorkspace, listener, launcher);
if (streams == null) {
listener.getLogger().println("Could not retrieve any Streams from Accurev, please check credentials");
return PollingResult.NO_CHANGES;
}
AccurevStream stream = streams.get(localStream);
if (stream == null) {
listener.getLogger().println("Tried to find '" + localStream + "' Stream, could not found it.");
return PollingResult.NO_CHANGES;
}
// There may be changes in a parent stream that we need to factor in.
do {
if (CheckForChanges.checkStreamForChanges(server, accurevEnv, jenkinsWorkspace, listener, launcher, stream,
buildDate, logger, scm)) {
return PollingResult.BUILD_NOW;
}
stream = stream.getParent();
} while (stream != null && stream.isReceivingChangesFromParent() && !scm.isIgnoreStreamParent());
return PollingResult.NO_CHANGES;
}
}