package hudson.plugins.accurev;
import hudson.plugins.accurev.delegates.*;
/**
* Determines the delegate used for building
*/
public enum AccurevMode {
WORKSPACE(true) {
@Override
protected AbstractModeDelegate createDelegate(AccurevSCM accurevSCM) {
return new WorkspaceDelegate(accurevSCM);
}
@Override
protected boolean isMode(AccurevSCM accurevSCM) {
return "wspace".equals(accurevSCM.getWspaceORreftree());
}
@Override
public boolean isWorkspace() {
return true;
}
},
REF_TREE(true) {
@Override
protected AbstractModeDelegate createDelegate(AccurevSCM accurevSCM) {
return new ReftreeDelegate(accurevSCM);
}
@Override
protected boolean isMode(AccurevSCM accurevSCM) {
return "reftree".equals(accurevSCM.getWspaceORreftree());
}
@Override
public boolean isReftree() {
return true;
}
},
SNAPSHOT(false) {
@Override
protected AbstractModeDelegate createDelegate(AccurevSCM accurevSCM) {
return new SnapshotDelegate(accurevSCM);
}
@Override
protected boolean isMode(AccurevSCM accurevSCM) {
return !WORKSPACE.isMode(accurevSCM)
&& !REF_TREE.isMode(accurevSCM)
&& accurevSCM.isUseSnapshot();
}
public boolean isNoWorkspaceOrRefTree() {
return true;
}
},
STREAM(false) {
@Override
protected AbstractModeDelegate createDelegate(AccurevSCM accurevSCM) {
return new StreamDelegate(accurevSCM);
}
@Override
protected boolean isMode(AccurevSCM accurevSCM) {
return !WORKSPACE.isMode(accurevSCM)
&& !REF_TREE.isMode(accurevSCM)
&& !accurevSCM.isUseSnapshot();
}
@Override
public boolean isNoWorkspaceOrRefTree() {
return true;
}
};
private final boolean requiresWorkspace;
AccurevMode(boolean requiresWorkspace) {
this.requiresWorkspace = requiresWorkspace;
}
public static AbstractModeDelegate findDelegate(AccurevSCM accurevSCM) {
AccurevMode accurevMode = findMode(accurevSCM);
return accurevMode.createDelegate(accurevSCM);
}
public static AccurevMode findMode(AccurevSCM accurevSCM) {
AccurevMode retVal = null;
for (AccurevMode accurevMode : values()) {
if (accurevMode.isMode(accurevSCM)) {
retVal = accurevMode;
break;
}
}
return retVal;
}
public boolean isRequiresWorkspace() {
return requiresWorkspace;
}
public boolean isWorkspace() {
return false;
}
public boolean isReftree() {
return false;
}
public boolean isNoWorkspaceOrRefTree() {
return false;
}
protected abstract boolean isMode(AccurevSCM accurevSCM);
protected abstract AbstractModeDelegate createDelegate(AccurevSCM accurevSCM);
}