Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,8 @@
import org.jenkins_ci.plugins.run_condition.RunCondition;
import org.jenkins_ci.plugins.run_condition.BuildStepRunner;
import org.jenkinsci.plugins.conditionalbuildstep.dependency.ConditionalDependencyGraphWrapper;
import org.jenkinsci.plugins.conditionalbuildstep.elsecondition.IfElseBlock;
import org.jenkinsci.plugins.conditionalbuildstep.elsecondition.IfElseBlock.IfElseBlockDescriptor;
import org.jenkinsci.plugins.conditionalbuildstep.singlestep.SingleConditionalBuilder;
import org.jenkinsci.plugins.conditionalbuildstep.singlestep.SingleConditionalBuilder.SingleConditionalBuilderDescriptor;
import org.kohsuke.stapler.DataBoundConstructor;
Expand All @@ -70,6 +72,9 @@ public class ConditionalBuilder extends Builder implements DependencyDeclarer {
private final BuildStepRunner runner;
private RunCondition runCondition;
private List<BuildStep> conditionalbuilders;
private List<IfElseBlock> conditionalBlocks;
private boolean useElse;
private List<BuildStep> elseBuildSteps;

/**
* @deprecated No longer needed as part of the Constructor
Expand All @@ -78,14 +83,17 @@ public class ConditionalBuilder extends Builder implements DependencyDeclarer {
@Deprecated
public ConditionalBuilder(RunCondition runCondition, final BuildStepRunner runner) {
//List<Builder> builders = new ArrayList<Builder>();
this(runCondition, runner, new ArrayList<BuildStep>());
this(runCondition, runner, new ArrayList<BuildStep>(),null,false,null);
}

@DataBoundConstructor
public ConditionalBuilder(RunCondition runCondition, final BuildStepRunner runner, List<BuildStep> conditionalbuilders) {
public ConditionalBuilder(RunCondition runCondition, final BuildStepRunner runner, List<BuildStep> conditionalbuilders,List<IfElseBlock> conditionalBlocks, boolean useElse, List<BuildStep> elseBuildSteps) {
this.runner = runner;
this.runCondition = runCondition;
this.conditionalbuilders = conditionalbuilders;
this.conditionalBlocks = conditionalBlocks;
this.useElse = useElse;
this.elseBuildSteps = elseBuildSteps;
}
public BuildStepRunner getRunner() {
return runner;
Expand All @@ -95,6 +103,20 @@ public RunCondition getRunCondition() {
return runCondition;
}

public List<IfElseBlock> getConditionalBlocks(){
if(conditionalBlocks == null) conditionalBlocks = new ArrayList<IfElseBlock>();
return conditionalBlocks;
}

public boolean getUseElse(){
return useElse;
}

public List<BuildStep> getElseBuildSteps(){
if(elseBuildSteps == null) elseBuildSteps = new ArrayList<BuildStep>();
return elseBuildSteps;
}

@Override
public Collection getProjectActions(AbstractProject<?, ?> project) {
final Collection projectActions = new ArrayList();
Expand Down Expand Up @@ -123,12 +145,56 @@ public void setConditionalbuilders(List<BuildStep> conditionalbuilders) {

@Override
public boolean prebuild(final AbstractBuild<?, ?> build, final BuildListener listener) {
return runner.prebuild(runCondition, new BuilderChain(getConditionalbuilders()), build, listener);
try{
if(runCondition.runPerform(build, listener)){
return new BuilderChain(getConditionalbuilders()).prebuild(build, listener);
}
if(conditionalBlocks!=null){
for(IfElseBlock block: conditionalBlocks){
RunCondition runCondition = block.getRunCondition();
if(runCondition!=null && runCondition.runPerform(build, listener)){
List<BuildStep> buildSteps = block.getBuildSteps();
if(buildSteps!=null){
return new BuilderChain(buildSteps).prebuild(build, listener);
}
}
}
}
if(useElse && elseBuildSteps!=null){
return new BuilderChain(getElseBuildSteps()).prebuild(build, listener);
}
}
catch(Exception e){
e.printStackTrace();
}
return false;
}

@Override
public boolean perform(final AbstractBuild<?, ?> build, final Launcher launcher, final BuildListener listener) throws InterruptedException, IOException {
return runner.perform(runCondition, new BuilderChain(getConditionalbuilders()), build, launcher, listener);
try{
if(runCondition.runPerform(build, listener)){
return new BuilderChain(getConditionalbuilders()).perform(build, launcher, listener);
}
if(conditionalBlocks!=null){
for(IfElseBlock block: conditionalBlocks){
RunCondition runCondition = block.getRunCondition();
if(runCondition!=null && runCondition.runPerform(build, listener)){
List<BuildStep> buildSteps = block.getBuildSteps();
if(buildSteps!=null){
return new BuilderChain(buildSteps).perform(build, launcher, listener);
}
}
}
}
if(useElse && elseBuildSteps!=null){
return new BuilderChain(getElseBuildSteps()).perform(build, launcher, listener);
}
}
catch(Exception e){
e.printStackTrace();
}
return false;
}

public Object readResolve() {
Expand Down Expand Up @@ -179,6 +245,10 @@ public DescriptorExtensionList<BuildStepRunner, BuildStepRunner.BuildStepRunnerD
public List<? extends Descriptor<? extends RunCondition>> getRunConditions() {
return RunCondition.all();
}

public IfElseBlockDescriptor getIfElseBlockDescriptor() {
return Hudson.getInstance().getDescriptorByType(IfElseBlockDescriptor.class);
}

}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package org.jenkinsci.plugins.conditionalbuildstep.elsecondition;

import hudson.DescriptorExtensionList;
import hudson.ExtensionPoint;
import hudson.model.Describable;
import hudson.model.Descriptor;
import hudson.model.Hudson;

public abstract class ConditionalBlock implements Describable<ConditionalBlock>,ExtensionPoint{
public static DescriptorExtensionList<ConditionalBlock, ConditionalBlockDescriptor> all() {
return Hudson.getInstance().<ConditionalBlock, ConditionalBlockDescriptor>getDescriptorList(ConditionalBlock.class);
}

public abstract Descriptor<ConditionalBlock> getDescriptor();

public static abstract class ConditionalBlockDescriptor extends Descriptor<ConditionalBlock>{

protected ConditionalBlockDescriptor() { }

protected ConditionalBlockDescriptor(Class<? extends ConditionalBlock> clazz) {
super(clazz);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
package org.jenkinsci.plugins.conditionalbuildstep.elsecondition;

import java.util.ArrayList;
import java.util.List;

import org.jenkins_ci.plugins.run_condition.RunCondition;
import org.jenkins_ci.plugins.run_condition.core.AlwaysRun;
import org.jenkinsci.plugins.conditionalbuildstep.Messages;
import org.jenkinsci.plugins.conditionalbuildstep.singlestep.SingleConditionalBuilder.SingleConditionalBuilderDescriptor;
import org.kohsuke.stapler.DataBoundConstructor;
import org.kohsuke.stapler.StaplerRequest;

import hudson.Extension;
import hudson.model.AbstractProject;
import hudson.model.Descriptor;
import hudson.model.Hudson;
import hudson.tasks.BuildStep;
import net.sf.json.JSONObject;

public class IfElseBlock extends ConditionalBlock {
private List<BuildStep> buildSteps;
private RunCondition runCondition;

@DataBoundConstructor
public IfElseBlock(List<BuildStep> buildSteps,RunCondition runCondition) {
this.buildSteps = buildSteps;
this.runCondition = runCondition;
}

public List<BuildStep> getBuildSteps() {
if(buildSteps == null) buildSteps = new ArrayList<BuildStep>();
return buildSteps;
}

public RunCondition getRunCondition() {
return runCondition;
}

@Override
public ConditionalBlockDescriptor getDescriptor() {
return (IfElseBlockDescriptor)Hudson.getInstance().getDescriptor(getClass());
}

@Extension
public static final class IfElseBlockDescriptor extends ConditionalBlockDescriptor{

@Override
public boolean configure(StaplerRequest req, JSONObject json) throws FormException {
req.bindJSON(this, json);
save();
return true;
}

public List<? extends Descriptor<? extends BuildStep>> getAllowedBuilders(AbstractProject<?, ?> project){
final SingleConditionalBuilderDescriptor singleConditionalStepDescriptor = Hudson.getInstance().getDescriptorByType(
SingleConditionalBuilderDescriptor.class);
return singleConditionalStepDescriptor.getAllowedBuilders(project);
}

@Override
public String getDisplayName() {
return Messages.conditionalblock_ifelseblock();
}

public List<? extends Descriptor<? extends RunCondition>> getRunConditions() {
return RunCondition.all();
}

public RunCondition.RunConditionDescriptor getDefaultRunCondition() {
return Hudson.getInstance().getDescriptorByType(AlwaysRun.AlwaysRunDescriptor.class);
}

}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
package org.jenkinsci.plugins.conditionalbuildstep.elsecondition;

import java.util.List;

import org.jenkins_ci.plugins.run_condition.RunCondition;
import org.jenkins_ci.plugins.run_condition.core.AlwaysRun;
import org.jenkinsci.plugins.conditionalbuildstep.Messages;
import org.jenkinsci.plugins.conditionalbuildstep.singlestep.SingleConditionalBuilder.SingleConditionalBuilderDescriptor;
import org.kohsuke.stapler.DataBoundConstructor;
import org.kohsuke.stapler.StaplerRequest;

import hudson.Extension;
import hudson.model.AbstractProject;
import hudson.model.Descriptor;
import hudson.model.Hudson;
import hudson.tasks.BuildStep;
import net.sf.json.JSONObject;

public class SingleIfElseBlock extends ConditionalBlock{
private BuildStep buildStep;
private RunCondition runCondition;

@DataBoundConstructor
public SingleIfElseBlock(BuildStep buildStep,RunCondition runCondition) {
this.buildStep = buildStep;
this.runCondition = runCondition;
}

public BuildStep getBuildStep() {
return buildStep;
}

public RunCondition getRunCondition() {
return runCondition;
}

@Override
public ConditionalBlockDescriptor getDescriptor() {
return (SingleIfElseBlockDescriptor)Hudson.getInstance().getDescriptor(getClass());
}

@Extension
public static final class SingleIfElseBlockDescriptor extends ConditionalBlockDescriptor{

@Override
public boolean configure(StaplerRequest req, JSONObject json) throws FormException {
req.bindJSON(this, json);
save();
return true;
}

public List<? extends Descriptor<? extends BuildStep>> getAllowedBuilders(AbstractProject<?, ?> project){
final SingleConditionalBuilderDescriptor singleConditionalStepDescriptor = Hudson.getInstance().getDescriptorByType(
SingleConditionalBuilderDescriptor.class);
return singleConditionalStepDescriptor.getAllowedBuilders(project);
}

@Override
public String getDisplayName() {
return Messages.conditionalblock_ifelseblock();
}

public List<? extends Descriptor<? extends RunCondition>> getRunConditions() {
return RunCondition.all();
}

public RunCondition.RunConditionDescriptor getDefaultRunCondition() {
return Hudson.getInstance().getDescriptorByType(AlwaysRun.AlwaysRunDescriptor.class);
}

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ public static boolean updateBuilders(final FreeStyleProject project) throws IOEx
final List<Builder> replace = new ArrayList<Builder>();
for (Builder builder : builders) {
if (allowed.contains(builder.getDescriptor()))
replace.add(new SingleConditionalBuilder((BuildStep) builder, new AlwaysRun(), new BuildStepRunner.Fail()));
replace.add(new SingleConditionalBuilder((BuildStep) builder, new AlwaysRun(), new BuildStepRunner.Fail(),null,false,null));
else
replace.add(builder);
}
Expand Down
Loading